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

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

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

Post by John Doe » Tue 05 Feb, 2013 23:18

Реализован запуск макросов по событиям (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
Aidar
Posts: 534
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 6 times
Contact:

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

Post by Aidar » Sun 28 Apr, 2013 18:50

Latest post of the previous page:

zg wrote:
t-rex wrote:И вообще на сколько известно этот EE_CHANGE нужен только тебе, и только в тех случаях когда ты дебагишь через редактор фара - т.е. скажем для 1% из редакторных сессий.
красящие плагины используют. тот же колорер.
Пакет LuaFAR area config для плагина LuaFAR for Editor тоже использует.
Shmuel wrote:

Code: Select all

shmuel 28.04.2013 16:32:41 +0200 - build 140
1. LuaFAR: новая функция editor.SubscribeChangeEvent.
2. В связи с появлением ECTL_SUBSCRIBECHANGEEVENT, ECTL_UNSUBSCRIBECHANGEEVENT (Фар 3.0.3371)
   откатываем 137.1 и 137.2.
137.1 и 137.2 - это viewtopic.php?p=108510#p108510
137.1 был удобнее, а плагин сам бы мог определить, подписываться ему или нет на это событие.

Shmuel
Posts: 5235
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Sun 28 Apr, 2013 18:57

Aidar wrote:137.1 был удобнее, а плагин сам бы мог определить, подписываться ему или нет на это событие.
* Может и было удобнее, но не хочется без особой нужды отклоняться от API плагинов, изобретать новые сущности.
* Плагин и теперь может сам определить.

User avatar
t-rex
Страшный и ужасный
Posts: 4872
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Contact:

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

Post by t-rex » Mon 29 Apr, 2013 14:49

Ты счётчик коммитить не собираешся?

Shmuel
Posts: 5235
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Mon 29 Apr, 2013 14:51

t-rex wrote:Ты счётчик коммитить не собираешся?
Собираюсь, просто знаю, что это вроде никого пока не держит и хотел подождать день-два, вдруг новая идея появится.

User avatar
John Doe
Бюрократ
Posts: 11429
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Mon 03 Feb, 2014 11:53

0002595: Обработчики событий: добавить в спецификацию фильтр по Event и Msg

Хотелось бы иметь возможность указать в спецификации виды событий, обрабатываемых данным обработчиком.
При наличии такой предварительная фильтрации код самого обработчика станет менее громоздким.

Предлагаю ввести опциональное поле filter, в котором указывать требуемое событие строкой, числом, или массивом.

Для диалоговых событий требуется второй аналогичный фильтр - filtermsg

P.S.
Добавлю что предлагаемый фильтр был с самого начала, в виде поля name, но в какой-то момент отменили: viewtopic.php?p=103711#p103711

User avatar
John Doe
Бюрократ
Posts: 11429
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Fri 11 Jul, 2014 11:26

Использование far.Message в обработчиках событий имеет странные последствия: после закрытия сообщения экран не обновляется, даже при нажатии курсорных клавиш. Только Home/End помогают.
Например:
Сообщение "VE_READ" отображается на фоне панелей, и даже после { OK } на экране всё ещё панели.

Использование far.Show не влечёт таких спецэффекетов.

User avatar
zg
zero-gravity
Posts: 5313
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

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

Post by zg » Fri 11 Jul, 2014 11:56

John Doe wrote:Использование far.Message в обработчиках событий имеет странные последствия: после закрытия сообщения экран не обновляется, даже при нажатии курсорных клавиш.

Использование far.Show не влечёт таких спецэффекетов.
Message запрещает перерисовку. это на мантис надо, макросы тут вообще не причём.

User avatar
John Doe
Бюрократ
Posts: 11429
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Fri 11 Jul, 2014 12:02

P.S.
Появилась проблема в последних билдах, в 3987 ещё не было.

0002733

User avatar
zg
zero-gravity
Posts: 5313
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

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

Post by zg » Fri 11 Jul, 2014 12:08

John Doe wrote:Появилась проблема в последних билдах, в 3987 ещё не было.
иногда ошибки компенсируют друг друга. в фаре даже не иногда. про указанную особенность message упоминалось например тут, и это было до последних билдов. просто теперь вылезло ещё и здесь.

User avatar
John Doe
Бюрократ
Posts: 11429
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Tue 30 Aug, 2016 09:35

Событие ExitFAR сейчас вызывается и (1)при выгрузке/перезагрузке макросов, и (2)при выходе из фара (или выгрузке плагина).
Возникла потребность различать эти два случая.

Пока что обошёлся своими силами, используя тот факт, что при выходе из фара АПИ уже не функционирует (может быть что-то и работает, но в Энциклопедии не сказано).
Поэтому можно результат вызова какой-нибудь функции, например так:

Code: Select all

Event { group="ExitFAR"; description="test if Far is really exiting";
  action=function()
      if 0==far.AdvControl"ACTL_COMMIT" then
        io.write("Far is really exiting","\n")
        win.Sleep(10000)
      else
        far.Message("macros are unloading")
      end
  end;
}
Last edited by John Doe on Tue 30 Aug, 2016 09:37, edited 1 time in total.

Shmuel
Posts: 5235
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Tue 30 Aug, 2016 09:46

John Doe wrote: Возникла потребность различать эти два случая.
Вообще-то легко можно добавить параметр для action. Надо?

User avatar
John Doe
Бюрократ
Posts: 11429
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Tue 30 Aug, 2016 09:57

Вот как раз собирался попросить, но обнаружил, что для моей задачи надо отследить именно выход из фара.
А плагинам это событие приходит и при выгрузке (например по unload:).

Т.е. пока необходимости нет, буду смотреть по мере возникновения практических задач.

User avatar
John Doe
Бюрократ
Posts: 11429
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Tue 30 Aug, 2016 10:13

Shmuel wrote: Вообще-то легко можно добавить параметр для action. Надо?
Впрочем, посмотрев на свои макросы пришёл к выводу, что таки надо.
Способ, о котором я писал выше не позволяет определить что плагин выгружается, а иногда надо именно это.

Shmuel
Posts: 5235
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Mon 05 Sep, 2016 07:43

Если передавать параметр числом:
1 - окончание сессии Far либо выгрузка плагина
2 - _G.RecreateLuaState=true
3 - выгрузка либо перезагрузка макросов
Есть другие идеи?

User avatar
John Doe
Бюрократ
Posts: 11429
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Mon 05 Sep, 2016 07:55

Мне видится что различать выгрузку плагина и RecreateLuaState на практике вряд ли нужно, а если понадобится, то отличить можно анализируя эту самую переменную.
Поэтому я бы предложил ограничиться одним значением true/false (по смыслу UnloadMacro, или наоборот, TrueExit, имхо непринципиально)

P.S.
А вот что на практике надо, так это отличать окончание сессии фара от выгрузки плагина.
Но полагаю вы будете против, поскольку официально апи плагинов такого не предусматривает.
Last edited by John Doe on Mon 05 Sep, 2016 08:10, edited 1 time in total.

Shmuel
Posts: 5235
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Mon 05 Sep, 2016 08:11

John Doe wrote: отличить можно анализируя эту самую переменную
Всё гениальное просто.
John Doe wrote: А вот что на практике надо, так это отличать окончание сессии фара от выгрузки плагина.
Но полагаю вы будете против, поскольку официально апи плагинов такого не предусматривает.
Это можно сделать в рамках расширения API, т.к. ExitFARW() получает параметр-структуру, на данный момент пустую.

User avatar
zg
zero-gravity
Posts: 5313
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

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

Post by zg » Mon 05 Sep, 2016 09:51

а можно реальный сценарий, когда принципиально различать выгрузку плагина и выход из фара? а то мне фантазии даже на нереальный сценарий не хватает.

Post Reply

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