гуиды в макроязыке - неудобно же

Здесь обсуждается всё, что касается макросов.
User avatar
HaRT
Moderator
Posts: 10855
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Переименовать callplugin

Post by HaRT »

Latest post of the previous page:

Лично мне предлагаемые NightRomanом доводы за использование в макросах имён плагинов представляются исключительно правильными.
Но и подход с константами вроде бы хорош. А вот видеть в текстах выкладываемых на форуме макросов голые GUIDы — это отвратительно!
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Переименовать callplugin

Post by John Doe »

Max Rusov wrote:
John Doe wrote:Я за бескопромисные константы...
Константы у Вас никто не отбирает, пользуйтесь на здоровье.
Не будет тогда здоровья. Нафиг эти константы сдались, если я один ими буду пользоваться.
Max Rusov wrote:Я - не буду, потому что я пользуюсь MacrоLib, у него свои константы.
И вы полагаете это нормально?
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Переименовать callplugin

Post by John Doe »

HaRT wrote:А вот видеть в текстах выкладываемых на форуме макросов голые GUIDы — это отвратительно!
100%

Я не против имён, но против дополнительных прослоек типа GetPluginID().
Если константы будут даны пользователю сразу, без необходимости каких-либо дополнительных действий с его стороны, то
чем такие константы хуже имён?
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Re: Переименовать callplugin

Post by sToLp »

HaRT wrote:Лично мне предлагаемые NightRomanом доводы за использование в макросах имён плагинов представляются исключительно правильными.
И мне тоже.
HaRT wrote:Но и подход с константами вроде бы хорош.
Вроде, и тоже можно было бы, но если он не универсален (в смысле — выпадают анси-плагины), то уже и не хорош. И поэтому такое предложение:
Max Rusov wrote:Еще раз предложу компромиссный вариант: функцию получения GUID по имени. Для сложных макросов можно будет использовать вместо глобальных констант локальные переменные:

%EdtFind = GetPluginID("EdtFind");
Plugin.Call(%EdtFind);

Для Ansi плагинов в качестве имени использовать имя DLL. На конфликты - забить (возвращать первый попавшийся)
по-моему, выглядит куда более предпочтительным, чем дополнительное заморачивание с константами.
LAT
Posts: 343
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 22 times
Been thanked: 39 times

Re: Переименовать callplugin

Post by LAT »

NightRoman wrote:...если практика покажет, что подавляющее число циркулирующих на публике макросов будет выглядеть как

Code: Select all

Plugin.Call(GetPluginID("FooBar"), ...)
то есть завязка на имена произойдет фактически (хотя формально все на гуидах), то уж лучше сразу и было бы

Code: Select all

Plugin.Call("FooBar", ...)
А если просто добавить альтернативу?

Code: Select all

Plugin.CallByName("FooBar", ...)
Кто хочет понятности - будет использовать такой вариант, кому важна "правильность" - будет использовать guid'ы.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Переименовать callplugin

Post by Max Rusov »

John Doe wrote:Если константы будут даны пользователю сразу, без необходимости каких-либо дополнительных действий с его стороны, то чем такие константы хуже имён?
В принципе, может и не хуже, но есть ряд вопросов/проблем (частично уже озвученных):

- Нестабильность GUID-ов для Ansi плагинов, эту проблему можно решить, например - как сделано в о wrapper'е для плагинов от Far3. Но при этом все равно - эти GUID'ы будут у всех разные.
- Часть плагинов отдает имена из которых напрямую нельзя сформировать константы (содержат пробелы или другие недопустимые символы) - нужно придумывать правила маскировки
- Такие макросы нельзя будет использовать, если нет соответствующего плагина, так как FAR будет ругаться на константы. Это, кстати, не шутка - многие макросы проверяют наличие плагина, и если его нет просто работают иначе.

Ну и технически, мне кажется, сделать подобную автоматическую регистрацию значительно сложнее, чем в паре место вызвать функцию поиска по имени (которая уже есть).
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Переименовать callplugin

Post by Max Rusov »

LAT wrote:А если просто добавить альтернативу?
Plugin.CallByName("FooBar", ...)
Учитывая, что таких функций больше чем одна, тогда уж лучше, как я предлагал ранее:

Plugin.Call("{GUID}")
Plugin.Call("Name")
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Переименовать callplugin

Post by NightRoman »

+1
И волки, и овцы будут хеппи. Волки пользуют гуиды. Овцы пользуют имена.
LAT
Posts: 343
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 22 times
Been thanked: 39 times

Re: Переименовать callplugin

Post by LAT »

zg wrote:
Max Rusov wrote:Почему в качестве такого варианта не подходит имя плагина (не имя dll файла) ?
у нас миллион плагинов ... кто-то напишет хороший аналог скажем плохого плагина, лучше оригинала очень полезный и т.д. но вот вожжа ему под хвост попала и назвал он его как старый.
А если использовать явовский подход? Если одновременно есть 2 плагина ("новый" и "старый") с одинаковым именем - они же все равно будут находиться в разных папках (скажем, NewPlugin и OldPlugin). И при наличии 2-х плагинов с одинаковыми именами можно будет различать их по папкам: Plugin.Call(NewPlugin/name) и Plugin.Call(OldPlugin/name).
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Переименовать callplugin

Post by Max Rusov »

NightRoman wrote:И волки, и овцы будут хеппи. Волки пользуют гуиды. Овцы пользуют имена.
Вот только непонятно, что делать со вторым параметром (пунктом меню). Там то имени нет. Можно, конечно, индекс - но для FarNet это, наверное, плохо...
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Переименовать callplugin

Post by NightRoman »

LAT
Ты какую проблему сейчас решаешь примером про ява? Таких нет сейчас. А если будут, то макросы либо поломаются, либо надо один из плагинов переименовывать все-равно, чудес не бывает.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Переименовать callplugin

Post by NightRoman »

Max Rusov wrote:Вот только непонятно, что делать со вторым параметром (пунктом меню). Там то имени нет. Можно, конечно, индекс - но для FarNet это, наверное, плохо...
Оставлять гуид. Тут это нормально (до некоторой степени). Макрос уже не будет выглядеть темным лесом. Первый параметр указывает куда копать, чтобы понять второй.

(Но от строковых ID я бы тоже не отказался, чтобы и они по F3 показывались, и тогда и ко второму параметру можно тот же подход волки/овцы применять. Но это надо еще делать кому-то, проще оставить гуид, чем обсуждать)
Last edited by NightRoman on Fri 16 Mar, 2012 14:02, edited 2 times in total.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Re: Переименовать callplugin

Post by sToLp »

zg wrote:пользователи не пишут макросы
То, что 99,9% используемых эндюзерами макросов позаимствованы, вовсе не означает того, что язык макросов должен быть трудным для восприятия.

Напротив — читать, оценивать и применить макросы куда проще, если они написаны вменяемым языком. Гуиды же для повседневного восприятия по определению невменяемы.
LAT
Posts: 343
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 22 times
Been thanked: 39 times

Re: Переименовать callplugin

Post by LAT »

NightRoman wrote:Ты какую проблему сейчас решаешь примером про ява?
Насколько я понял, zg возражал против использования имени плагина в макросах, приводя в пример ситуацию, когда юзер использует 2 плагина с одинаковым именем. Или я понял не то (не так)?
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Переименовать callplugin

Post by John Doe »

Max Rusov wrote:В принципе, может и не хуже, но есть ряд вопросов/проблем (частично уже озвученных):
Да, есть проблемы, но уже предложены и варианты решений.
Max Rusov wrote:Но при этом все равно - эти GUID'ы будут у всех разные.
Не будут, если комплектовать фар соответствующим файликом.
Max Rusov wrote:Ну и технически, мне кажется, сделать подобную автоматическую регистрацию значительно сложнее, чем в паре место вызвать функцию поиска по имени (которая уже есть).
Да, сложнее. Но выбора нам не дают, так ведь?

Возможно следует поступить проще: комплектовать фар файлом со списком известных констант-гуидов. Надо только чтобы он автоматически подхватывался, не требуя вмешательства пользователя.

P.S.
Если бы Macrolib был в дистрибутиве фара то и решать бы ничего не понадобилось.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Переименовать callplugin

Post by Max Rusov »

John Doe wrote:Если бы Macrolib был в дистрибутиве фара то и решать бы ничего не понадобилось.
Объективно говоря, MacroLib пока не умеет регистрировать константы для Far. Константы MacroLib'а - это макроподстановки, которые надо префиксировать "#". Не всегда удобно...
Locked

Return to “Обсуждение макросов”