Обработчики событий: запуск макросов по событиям

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

Обработчики событий: запуск макросов по событиям

Post by John Doe »

Реализован запуск макросов по событиям (build 3157+), документация тут:

Данная статья в MacroAPI manual весьма лаконична, т.к. ссылается на LuaFAR manual, который в свою очередь ссылается на Far PluginAPI.
Скакать между различными файлами документации по меньшей мере неудобно (edit: уже появились гиперссылки, стало намного лучше).
Чтобы облегчить усвоение и без того непростого и фрагментированного материала я скомпоновал для себя информацию в одном месте.
  • result = export.ProcessViewerEvent (ViewerID, Event)
  • result = export.ProcessEditorEvent (EditorID, Event, Param)

    result = editor.SubscribeChangeEvent (EditorId, Subscribe)
  • result = export.ProcessEditorInput (Rec)
    Rec: table InputRecord
  • ret = export.ProcessDialogEvent (Event, Param)
Важно: Ограничения в использовании некоторых функций

Примеры обработчиков событий в готовых макросах:

Основная тема: LuaMacro — Lua как язык макросов
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Latest post of the previous page:

Как именно вы себе представляете эту опцию?

Почему не просите чтобы и макросы работали во время записи макроса?
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: Запуск макросов по событиям (build 3157+)

Post by NightRoman »

John Doe wrote:Как именно вы себе представляете эту опцию?

Почему не просите чтобы и макросы работали во время записи макроса?
Как-то не думал об этом. Наверное, не надо было. А чтобы события работали - надо.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Вы не предложили своё видение опции.
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: Запуск макросов по событиям (build 3157+)

Post by NightRoman »

John Doe wrote:Вы не предложили своё видение опции.
Так мне она не нужна. Но если бы знал, что предложить, несмотря на это, то сделал бы. Но не знаю, не приходит в голову.

Встречный вопрос. Зачем отключать обработку событий во время записи макроса?
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Запуск макросов по событиям (build 3157+)

Post by Shmuel »

John Doe wrote:1. Может ли плагин самостоятельно обрабатывать эту ситуацию, т.е. при наличии в тексте макроса вызова перечисленных функций - оборачивать всё в far.MacroPost ?
Нежелательно, чтобы плагин вмешивался. Всё должно быть под контролем программиста. Есть существенная разница между "обычным" кодом в action() и кодом, который внутри far.MacroPost(). Первый выполняется немедленно, а второй - отложенный, и выполняется уже после завершения события.

Есть другая идея на эту тему: "отложенный" код помещать в функцию, задаваемую полем action2. Тогда не надо будет вызывать far.MacroPost, есть и другие преимущества у этого варианта. Если данная идея читателям сообщения нравится, то предлагайте имена для этого поля (ибо action2 как-то не очень выразительно). Если не нравится - тоже высказывайтесь.
John Doe wrote:2.

Code: Select all

       Event {
         group="EditorEvent";
Может достаточно group="Editor"? Зачем масло масляное?
Может и так. Всё это в процессе. Пока я следую терминологии Plugins API:
ProcessEditorEventW -> EditorEvent, и т.п.
А есть ещё ProcessEditorInputW.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

NightRoman wrote:Встречный вопрос. Зачем отключать обработку событий во время записи макроса?
Учитывая, что "события" и остальные макросы работают сейчас независимо - незачем.

Но необходимость в отключении событий - есть.
Как флаг макроса
И/Или как команда макроса

Вероятно, стоит предусмотреть и в главном меню какой-то выключатель
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Shmuel wrote:Если данная идея читателям сообщения нравится, то предлагайте имена для этого поля (ибо action2 как-то не очень выразительно).
Идея более чем нравится, потому что избавляет от неестественных манипуляций.
Но пока я не понимаю принципиальной разницы между action1 и action2.
Почему например не использовать action2 всегда? Какие недостатки?
Shmuel wrote:Может и так. Всё это в процессе.
Лучше поскорее определиться, чтобы не пришлось ломать.
User avatar
t-rex
Страшный и ужасный
Posts: 4910
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by t-rex »

события это совсем и не макросы в общем, и их не надо отключать так же как и не отключаются плагины.
события, это теже плагины.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Вообще-то отключать плагины (все разом) тоже востребовано, но вероятно сложнее.
(а выгрузка не всегда возможна).

"Макро-события" это всё же не плагины, а пользовательские скрипты, и пользователь может такого там накуролесить в процессе отладки...
Например на событие Read назначить F10 (я примерно это и сделал :-).
2useven10
Posts: 5231
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 315 times

Re: Запуск макросов по событиям (build 3157+)

Post by 2useven10 »

Shmuel
action2 -> postponedaction, aftereffect
User avatar
t-rex
Страшный и ужасный
Posts: 4910
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by t-rex »

Это именно теже самые плагины, без никакого отличия вообще!
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Отличие коренные:
- для написания плагина требуется определённая квалификация, а скрипт может наклепать любая домохозяйка.
- в плагинах используется API, и не принято завязывать действия на хоткеи (пример уже был )

Т.е. защита "от дурака" должна быть предусмотрена поболе.

Ну и как уже сказано: возможность отключать плагины без выгрузки тоже очень привлекательна.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Запуск макросов по событиям (build 3157+)

Post by Shmuel »

John Doe wrote:Отличие коренные:
- для написания плагина требуется определённая квалификация, а скрипт может наклепать любая домохозяйка.
- в плагинах используется API, и не принято завязывать действия на хоткеи (пример уже был
Любая домохозяйка знает, что ножом можно порезаться. То же самое и здесь.
А в примере-то хоткея и нет, у событий нет хоткеев.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Keys("ShiftAltF9 Down Down Down Down 3 Enter")

В данном случае от кнопконажиманий можно уйти. Но домохозяйка-то напишет именно так
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Shmuel wrote:Любая домохозяйка знает, что ножом можно порезаться. То же самое и здесь.
Я могу продолжить эти метафоры, но давайте сэкономим время.

Возможно ли отключить события по команде?
Полагаю да.
Тогда почему бы и нет?
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Запуск макросов по событиям (build 3157+)

Post by Shmuel »

John Doe wrote:
Shmuel wrote:Если данная идея читателям сообщения нравится, то предлагайте имена для этого поля (ибо action2 как-то не очень выразительно).
Идея более чем нравится, потому что избавляет от неестественных манипуляций.
Но пока я не понимаю принципиальной разницы между action1 и action2.
Почему например не использовать action2 всегда? Какие недостатки?
Ну вот, например, обработчик события "Save" в редакторе, который удаляет концевые пробелы в строках. Если он сделает это в action(), то-есть, внутри события, то файл будет сохранён и значка модификации не будет. А если это будет сделано через far.MacroPost(), то-есть, после окончания события, то появится значок * модификации, со всеми вытекающими.
Post Reply

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