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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 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: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Latest post of the previous page:

Я ведь не о FAR Plugin API.
А в Lua добавить параметр это раз плюнуть.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

John Doe wrote:Я ведь не о FAR Plugin API.
Но раз уж зашла речь, то и о нём спрошу:
Кроме EE_CHANGE, для чего передаются ненужные значения (а не NULL)?
Для совместимости что-ли?
User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

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

Post by Aidar »

1. EditorID полезен для вызова API-функций редактора. Например, параметр используется в LuaFAR context для "привязки" типов файлов к нескольким редакторам.
2. По-моему, в некоторых событиях EditorID нельзя получать стандартным образом из-за зацикливания.
3. В Lua убрать параметр просто, но библиотека LuaFAR не написана на Lua. Но когда реализуете обработку событий на Lua (например, в рамках LuaFAR for Editor), параметр можно убрать (или переименовать).
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Aidar wrote:1. EditorID полезен для вызова API-функций редактора. Например, параметр используется в LuaFAR context для "привязки" типов файлов к нескольким редакторам.
2. По-моему, в некоторых событиях EditorID нельзя получать стандартным образом из-за зацикливания.
Что-то я растерялся:

Code: Select all

struct ProcessEditorEventInfo
{
  size_t StructSize;
  intptr_t Event;
  void *Param;
  intptr_t EditorID;
};
(http://api.farmanager.com/ru/structures ... tinfo.html)
EditorID отдельно же есть.
Вопрос для чего его значение дублируется в Param?
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

John Doe
А нельзя ли в шапке осмысленно поименовать спойлеры? А то читателям сложно понять, какие из них когда есть смысл открывать…
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Возможно.
Вообще не должно быть никаких спойлеров, и шапки быть не должно.
Считайте это "work in progress"
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

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 - это http://forum.farmanager.com/viewtopic.p ... 10#p108510
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 »

Что то я не уверен что сделано логически правильно, тут получается макросы могут друг другу мешать, если один подписал а другой отписал.
Т.е. тебе там нужно как то следить за подпиской/отпиской каждого макроса в отдельности.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

t-rex 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 »

Это самый простой вариант, но тоже не правильны.
Макрос который отписался, получать то EE_CHANGE больше не хочет - т.е. тебе кроме каунтера нужно точно знать кому пересылать это сообщение а кому нет.
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 »

А также упрощённый вариант:
Именно для макросов (не для lua плагинов) вообще не давать эту функцию, а вернуть назад этот отдельный обработчик для EE_CHANGE и подписываться (внутри, на каждом EE_READ) если есть такие макросы.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

Подумаю.
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 »

если внутри ты знаешь какой макрос вызвал функцию то лучше конечно делать полный вариант.
или добавить в параметры функции какой то идентификатор макроса (guid например :)
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

Наверное придётся делать "полный вариант".
Идентификаторы у макросов есть (не гуиды), за исключением макросов MCTL_MACROPOST.
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 »

А не зря эту подписку ввели? Использование АПИ в плагинах усложнилось. Для нетривиальных плагинов типа Луа и Фарнет существенно усложнилось, ибо внутренние дополнительные счетчики и регистрации нужны, если делать по полному варианту. Это усложнение действительно приносит пользу? Вместо лишней работы в Фаре теперь лишняя работа будет делаться в плагинах. Не получится шило на мыло или реально совершенно мизерный выигрыш?
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 »

Да ничего такого не усложнилось, мелочи это - тем более что выбор за тобой, можешь вообще ничего не менять а всегда подписываться - твоё дело. А выигрыш бешеный, этот EE_CHANGE нужен от силы 1% плагинов если не меньше.
И не понял вообще фразу - "Вместо лишней работы в Фаре теперь лишняя работа будет делаться в плагинах".
Post Reply

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