Имена флагов-условий выполнения макросов

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Имена флагов-условий выполнения макросов

Post by John Doe »

Все флаги перечислены в Энциклопедии http://api.farmanager.com/ru/macro/techinfo.html
Тонкости их именования нас не слишком беспокоили, пока всё это было скрыто от пользователя внутри фара.
Но теперь макросы официально храняться в файлах, а значит эти флаги будут редактироваться человеком.

Глядя на этот список кажется, что флаги - это что-то сильно запутанное.

Code: Select all

DisableOutput
RunAfterFARStart
EmptyCommandLine
NotEmptyCommandLine
EVSelection
NoEVSelection
NoFilePanels
NoPluginPanels
NoFolders
NoFiles
Selection
NoSelection
NoFilePPanels
NoPluginPPanels
NoPFolders
NoPFiles
PSelection
NoPSelection
ReuseMacro
NoSendKeysToPlugins
Для человека это всё малопонятно, и я вижу причину именно в неудачных наименованиях.
Ведь в диалоге всё просто:

Code: Select all

[ ] Разрешить во время выполнения вывод на экран
[ ] Выполнять после запуска FAR
──────────────────────────────────────────────────────────
[ ] Активная панель             
  [?] На панели плагина         
  [?] Выполнять для папок       
  [?] Отмечены файлы            

[ ] Пассивная панель      
  [?] На панели плагина   
  [?] Выполнять для папок 
  [?] Отмечены файлы      
──────────────────────────────────────────────────────────
[?] Пустая командная строка
[?] Отмечен блок
Если сопоставить флаги опциям диалога, то получим вот что:

Code: Select all

[ ] DisableOutput
[ ] RunAfterFARStart
──────────────────────────────────────────────────────────
[ ] 
  [ ] NoFilePanels / NoPluginPanels
  [ ] NoFolders    / NoFiles
  [ ] Selection    / NoSelection

[ ] 
  [ ] NoFilePPanels/ NoPluginPPanels
  [ ] NoPFolders   / NoPFiles
  [ ] PSelection   / NoPSelection
──────────────────────────────────────────────────────────
[ ] EmptyCommandLine/ NotEmptyCommandLine
[ ] EVSelection     / NoEVSelection
И тут обращают на себя странные особенности.
Каждой опции на самом деле соответствуют 2 флага с разными именами.
Это само по себе не удобно.
В добавок, все имена с отрицаниями!!!

На панели плагина? NoFilePanels / NoPluginPanels
Выполнять для папок? NoFolders / NoFiles

Машине было всё равно, а человека путает.
И имена флагов, отосящиеся к пассивной панели, отличаются одной буковкой где-то в середине, что явно не добавляет наглядности.

Предлагаю пересмотреть имена всех флагов-условий, и дать им наконец удобные для человека имена, соответствующие опциям диалога.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Имена флагов-условия выполнения макросов

Post by DrKnS »

Сюда же:
Предлагаю выкинуть disableoutput, ибо он используется в 146% макросов.
Пусть по умолчанию не рисуется, а если таки надо - то "enableoutput".
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Имена флагов-условия выполнения макросов

Post by John Doe »

Вот например конкретное предложение по именам:

Code: Select all

[ ] 
  [ ] APanel.Plugin
  [ ] APanel.Folder
  [ ] APanel.Selected

[ ] 
  [ ] PPanel.Plugin
  [ ] PPanel.Folder     
  [ ] PPanel.Selected
──────────────────────────────────────────────────────────
[ ] CmdLine.Empty
[ ] Text.Selected
Вместо пары флагов - один. Отрицание придаётся тильдой, например ~PPanel.Plugin.
Имена в основном соответствуют наименованию свойств в макроязыке.
Изменения в языке я ещё не освоил, поэтому скорректируйте если что.

Как лучше назвать оставшиеся 3 флага, пока не думал.

Code: Select all

[ ] NoSendKeysToPlugins
[ ] DisableOutput
[ ] RunAfterFARStart
P.S.
В исходниках можно встретить ещё один флаг - ReuseMacro, вроде как сейчас уже неактуален.
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Имена флагов-условия выполнения макросов

Post by Shmuel »

John Doe wrote:Все флаги перечислены в Энциклопедии http://api.farmanager.com/ru/macro/techinfo.html
Тонкости их именования нас не слишком беспокоили, пока всё это было скрыто от пользователя внутри фара.
Но теперь макросы официально храняться в файлах, а значит эти флаги будут редактироваться человеком.
Ничего не было скрыто. Каждый, кто писал нетривиальные макросы, прописывал флаги ручками (ну или делал копипаст).

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

Re: Имена флагов-условия выполнения макросов

Post by Max Rusov »

Со своей стороны предложу сделать как в MacroLib:
Условия срабатывания макроса. Строка условий имеет формат:

"Условие:0 Условие:1 ..."

Если заданы несколько условий, то макрос запустится только если выполняются все условия (т.е. условия объединяются по and). Возможные варианты условий:

CmdLine:0/1 - Командная строка пуста/не пуста
Selected:0/1 - не отмечен/отмечен блок в редакторе, программе просмотра, в строках ввода в диалогах.
PanelType:0/1 - Текущая панель: 0 - файловая, 1 - плагинная
PanelItem:0/1 - Текущий элемент панели: 0 - файл, 1 - папка
PanelSelected:0/1 - нет/есть выделение на текущей панели

PPanelType, PPanelItem, PPanelSelected - аналогично, для пассивной панели
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Имена флагов-условия выполнения макросов

Post by John Doe »

Можно и так.
В своём варианте я пытаюсь использовать синтаксис макроязыка, а не выдумывать новый.
Думаю преимущества такого подхода понятны.

Ещё хочется обратить внимание, что не все флаги однородны.
Большинство флагов - это условия запуска.
А DisableOutput и RunAfterFARStart - стоят особняком.
Возможно и не стоит их мешать в кучу.

P.S.
На мантис успеем.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Имена флагов-условий выполнения макросов

Post by Smitis »

Может и от RunAfterFARStart пора избавляться?
Автостартующие, уже не макросы, а скрипты, помещать в отдельную папку, типа macros\autorun
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Имена флагов-условий выполнения макросов

Post by John Doe »

Оформил на Мантис: http://bugs.farmanager.com/view.php?id=2268
Сторонников и противников прошу заявить о себе, тут или там.

Макросы в очередной раз придётся править, да.
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Имена флагов-условий выполнения макросов

Post by John Doe »

А вот такой вопрос: нужны ли вообще сейчас флаги-условия, при наличии condition?
Полагаю что вопрос состоит в производительности.

Можем ли мы полностью отказаться от флагов, или разница в производительности существенна?
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Имена флагов-условий выполнения макросов

Post by Shmuel »

John Doe wrote:А вот такой вопрос: нужны ли вообще сейчас флаги-условия, при наличии condition?
Полагаю что вопрос состоит в производительности.

Можем ли мы полностью отказаться от флагов, или разница в производительности существенна?
Разницу в производительности никто не почувствует. Вопрос состоит только в удобстве.
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Имена флагов-условий выполнения макросов

Post by John Doe »

Каково в таком случае ваше мнение об удобстве?

Если дать возможность задавать макро-условие inline, а не в блоке condition=function() ... end; то вообще не будет разницы.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Имена флагов-условий выполнения макросов

Post by Smitis »

Что значит "inline"?
Что нибудь типа condition=(APanel.Folder or APanel.File); ?
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Имена флагов-условий выполнения макросов

Post by John Doe »

Вероятно только в кавычках.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Имена флагов-условий выполнения макросов

Post by Smitis »

Жаль, что в Lua нет простого способа создавать анонимные функции из одного выражения, возвращающие результат этого выражения (какая-нибудь сокращенная форма для function() return выражение end ) :(
Разум когда-нибудь победит.
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Имена флагов-условий выполнения макросов

Post by Shmuel »

Smitis wrote:Жаль, что в Lua нет простого способа создавать анонимные функции из одного выражения, возвращающие результат этого выражения (какая-нибудь сокращенная форма для function() return выражение end ) :(
Ставьте metalua: там найдёте и это, и много чего другого.
Post Reply

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