Page 17 of 19

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

Posted: Tue 05 Feb, 2013 23:18
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 как язык макросов

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

Posted: Sun 28 Apr, 2013 16:07
by t-rex

Latest post of the previous page:

И вообще на сколько известно этот EE_CHANGE нужен только тебе, и только в тех случаях когда ты дебагишь через редактор фара - т.е. скажем для 1% из редакторных сессий.

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

Posted: Sun 28 Apr, 2013 16:17
by zg
t-rex wrote:И вообще на сколько известно этот EE_CHANGE нужен только тебе, и только в тех случаях когда ты дебагишь через редактор фара - т.е. скажем для 1% из редакторных сессий.
красящие плагины используют. тот же колорер.

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

Posted: Sun 28 Apr, 2013 16:17
by Shmuel
t-rex wrote:Макрос который отписался, получать то EE_CHANGE больше не хочет - т.е. тебе кроме каунтера нужно точно знать кому пересылать это сообщение а кому нет.
Наверное не обязательно для макросов-событий в точности воспроизводить логику плагинов. Те макросы-события, которые "отписались" и не хотят больше обрабатывать EE_CHANGE, могут фильтровать его как раньше, по логике своего функционирования. В этом случае простого "счётчика активных подписок" будет достаточно.

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

Posted: Sun 28 Apr, 2013 16:23
by t-rex
zg wrote:
t-rex wrote:И вообще на сколько известно этот EE_CHANGE нужен только тебе, и только в тех случаях когда ты дебагишь через редактор фара - т.е. скажем для 1% из редакторных сессий.
красящие плагины используют. тот же колорер.
Да, про этот я забыл, но все ровно в общем мало плагинов.

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

Posted: Sun 28 Apr, 2013 16:24
by t-rex
Shmuel wrote:
t-rex wrote:Макрос который отписался, получать то EE_CHANGE больше не хочет - т.е. тебе кроме каунтера нужно точно знать кому пересылать это сообщение а кому нет.
Наверное не обязательно для макросов-событий в точности воспроизводить логику плагинов. Те макросы-события, которые "отписались" и не хотят больше обрабатывать EE_CHANGE, могут фильтровать его как раньше, по логике своего функционирования. В этом случае простого "счётчика активных подписок" будет достаточно.
Я не против, главное чтоб уложилось в логику. Но все ровно как то странно получать сообщение от которых отписались.

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

Posted: Sun 28 Apr, 2013 16:30
by t-rex
Тока не забудь, что каунтер он per EditorID (который может быть и -1 для текущего редактора).

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

Posted: Sun 28 Apr, 2013 16:32
by Shmuel
t-rex wrote:Я не против, главное чтоб уложилось в логику. Но все ровно как то странно получать сообщение от которых отписались.
Ну не будем называть это "отписались", а "декрементировали счётчик" или ещё как покрасивее придумаем. И раньше, и теперь плагины и макросы-обработчики фильтровали ненужные им "подсобытия".

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

Posted: Sun 28 Apr, 2013 16:33
by Shmuel
t-rex wrote:Тока не забудь, что каунтер он per EditorID (который может быть и -1 для текущего редактора).
Да, жить стало веселее. :)

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

Posted: Sun 28 Apr, 2013 16:47
by t-rex
Всегда рад развеселить :)

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

Posted: Sun 28 Apr, 2013 17:41
by NightRoman
> И не понял вообще фразу - "Вместо лишней работы в Фаре теперь лишняя работа будет делаться в плагинах".
Вместо лишних вызовов плагинов будут лишние проверки и работа в плагинах. Подписка, отписка, регистрация.

> И вообще на сколько известно этот EE_CHANGE нужен только тебе, и только в тех случаях когда ты дебагишь через редактор фара - т.е. скажем для 1% из редакторных сессий.
Но ведь и другие применения могут найтись. И это может быть не 1%. Я - просто первый пользователь фичи, который ее и просил.

Но решили, так решили. Выигрыш какой от этого получился, есть уже данные?

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

Posted: Sun 28 Apr, 2013 18:10
by t-rex
подписка и отписка они бесплатные, а частое оповещение всех плагинов подряд не бесплатно.

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

Posted: Sun 28 Apr, 2013 18:19
by t-rex
NightRoman wrote:> И не понял вообще фразу - "Вместо лишней работы в Фаре теперь лишняя работа будет делаться в плагинах".
Вместо лишних вызовов плагинов будут лишние проверки и работа в плагинах. Подписка, отписка, регистрация.
Ещё раз повторяю, ты не обязан ничего вообще делать заумного, добавляешь две строки в свой код в обработке EE_READ:
EditorSubscribeChangeEvent esce = { sizeof(EditorSubscribeChangeEvent), PluginGuid };
Info.EditorControl(-1, ECTL_SUBSCRIBECHANGEEVENT, 0, &esce);

И всё, твои суб плагины никакой разницы от "слома" не почувствуют.

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

Posted: Sun 28 Apr, 2013 18:30
by Shmuel
t-rex
Пока вот что получилось, зацени:

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

Posted: Sun 28 Apr, 2013 18:39
by t-rex
Вроде как оно. Subscriptions это же какой нибудь хэш а не масив, да?

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

Posted: Sun 28 Apr, 2013 18:41
by Shmuel
t-rex wrote:Subscriptions это же какой нибудь хэш а не масив, да?
Хэш.

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

Posted: Sun 28 Apr, 2013 18:42
by t-rex
Тогда, да, оно.