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

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

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

Post by John Doe » Fri 26 Apr, 2013 08:58

Latest post of the previous page:

Я ведь не о FAR Plugin API.
А в Lua добавить параметр это раз плюнуть.

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

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

Post by John Doe » Fri 26 Apr, 2013 09:18

John Doe wrote:Я ведь не о FAR Plugin API.
Но раз уж зашла речь, то и о нём спрошу:
Кроме EE_CHANGE, для чего передаются ненужные значения (а не NULL)?
Для совместимости что-ли?

User avatar
Aidar
Posts: 533
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 6 times
Contact:

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

Post by Aidar » Fri 26 Apr, 2013 09:28

1. EditorID полезен для вызова API-функций редактора. Например, параметр используется в LuaFAR context для "привязки" типов файлов к нескольким редакторам.
2. По-моему, в некоторых событиях EditorID нельзя получать стандартным образом из-за зацикливания.
3. В Lua убрать параметр просто, но библиотека LuaFAR не написана на Lua. Но когда реализуете обработку событий на Lua (например, в рамках LuaFAR for Editor), параметр можно убрать (или переименовать).

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

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

Post by John Doe » Fri 26 Apr, 2013 09:36

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: 8051
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 100 times

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

Post by HaRT » Fri 26 Apr, 2013 10:50

John Doe
А нельзя ли в шапке осмысленно поименовать спойлеры? А то читателям сложно понять, какие из них когда есть смысл открывать…
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

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

Post by John Doe » Fri 26 Apr, 2013 10:59

Возможно.
Вообще не должно быть никаких спойлеров, и шапки быть не должно.
Считайте это "work in progress"

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Sun 28 Apr, 2013 15:02

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

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

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

Post by t-rex » Sun 28 Apr, 2013 15:11

Что то я не уверен что сделано логически правильно, тут получается макросы могут друг другу мешать, если один подписал а другой отписал.
Т.е. тебе там нужно как то следить за подпиской/отпиской каждого макроса в отдельности.

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Sun 28 Apr, 2013 15:19

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

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

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

Post by t-rex » Sun 28 Apr, 2013 15:21

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

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

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

Post by t-rex » Sun 28 Apr, 2013 15:25

А также упрощённый вариант:
Именно для макросов (не для lua плагинов) вообще не давать эту функцию, а вернуть назад этот отдельный обработчик для EE_CHANGE и подписываться (внутри, на каждом EE_READ) если есть такие макросы.

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Sun 28 Apr, 2013 15:27

Подумаю.

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

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

Post by t-rex » Sun 28 Apr, 2013 15:32

если внутри ты знаешь какой макрос вызвал функцию то лучше конечно делать полный вариант.
или добавить в параметры функции какой то идентификатор макроса (guid например :)

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Sun 28 Apr, 2013 15:36

Наверное придётся делать "полный вариант".
Идентификаторы у макросов есть (не гуиды), за исключением макросов MCTL_MACROPOST.

User avatar
NightRoman
Posts: 5849
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 8 times
Contact:

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

Post by NightRoman » Sun 28 Apr, 2013 15:56

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

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

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

Post by t-rex » Sun 28 Apr, 2013 16:04

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

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

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

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

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

Post Reply

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