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

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

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

Postby 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: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Tue 02 Apr, 2013 15:03

Latest post of the previous page:

А какой диалог вы так автоматизируете?

P.S.
Исправил на [code2]

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

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

Postby John Doe » Tue 02 Apr, 2013 15:07

И насколько я понимаю, return false смысла делать явно нет.
Другое дело когда надо чтобы событие дальше не передавалось, тогда возвращаем true.

2useven10
Posts: 2880
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 76 times

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

Postby 2useven10 » Tue 02 Apr, 2013 15:11

всё тот же - смена кодировки через Shift-F4 :bojan:
этот фрагмент выбирает [Reload] после смены кодировки.

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

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

Postby John Doe » Tue 02 Apr, 2013 15:23

Надо попробовать.
А почему решили через события, а не обычным макросом?

2useven10
Posts: 2880
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 76 times

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

Postby 2useven10 » Tue 02 Apr, 2013 15:29

обычный макрос там тоже есть...
не умею нормально дождаться завершения выбора кодировки.
цикл GetKey(); Keys('AKey) работает криво и буква 'P' в левом верхнем углу раздражает.
да и просто хотелось попробовать работу с эвентами...

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

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

Postby John Doe » Tue 02 Apr, 2013 15:35

Попробовать это да.
Но имхо там где можно (полноценно) обойтись без событий - стоит обходиться.

Цикл "GetKey(); Keys('AKey)" конечно не очень красив, но вполне может работать прямо.

2useven10
Posts: 2880
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 76 times

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

Postby 2useven10 » Tue 02 Apr, 2013 15:43

CtrlBreak и выбор в меню мышкой работают ?

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

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

Postby John Doe » Tue 02 Apr, 2013 15:53

CtrlBreak пока "централизовано" не обрабатывается, но в цикле можно проверять самостоятельно.
В целом не очень красиво, но что-то можно спрятать в функции.

Что касается мышки, то я обычно её игнорирую, поэтому сходу не скажу (SUSim наверно знает).
Хотя на самом деле не всегда важно как выбран пункт меню.

В общем без текста макроса сложно сказать.

User avatar
SUSim
Posts: 1471
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 4 times
Been thanked: 3 times

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

Postby SUSim » Tue 02 Apr, 2013 18:17

прерывание циклов по мышке тоже легко сделать...
но вот как прервать макрос с рекурсией без перезагрузки фара не знаю :(
SimSU ··· ·· -- ··· ··-

2useven10
Posts: 2880
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 76 times

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

Postby 2useven10 » Tue 02 Apr, 2013 18:36

у меня в простом цикле:
  1. local mm, keys = mmode(1, 0), nil
  2. while Menu.Value ~= "" do
  3.   keys = mf.waitkey(); Keys(keys) -- ? CtrlBreak & LMB click doesn't work here
  4. end
  5. mmode(1, mm)
не работает выбор мышкой пункта меню.

Shmuel
Posts: 4956
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 125 times

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

Postby Shmuel » Tue 02 Apr, 2013 19:01

В до-Lua Фаре (2796) клик мышкой тоже в этом случае не работает, но CtrlBreak прерывает макрос.

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

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

Postby John Doe » Sun 14 Apr, 2013 22:35

Возможно ли реализовать запрет вывода во время обработки события?
far.MacroPost("Keys'Esc'",F.KMFLAGS_DISABLEOUTPUT) - работает как надо
far.SendDlgMessage(Param.hDlg,F.DM_CLOSE) - вызывает видимое мелькание, и mmode(1,1) не действует

Shmuel
Posts: 4956
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 125 times

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

Postby Shmuel » Mon 15 Apr, 2013 06:46

John Doe wrote:Возможно ли реализовать запрет вывода во время обработки события?

Наверное, возможно.

Shmuel
Posts: 4956
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 125 times

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

Postby Shmuel » Tue 23 Apr, 2013 16:25

Не связано с закончившейся ломкой API, но тем не менее тоже ломающее изменение (ломает только события, обрабатывающие EE_CHANGE, надеюсь почти ни у кого их пока нет).

Code: Select all

shmuel 23.04.2013 18:01:28 +0200 - build 137

1. LuaFAR: экспортируемая функция ProcessEditorEventW теперь соответствует двум Lua-функциям:
       a) export.ProcessEditorChange - если параметр Event==EE_CHANGE;
       b) export.ProcessEditorEvent - для остальных значений параметра Event.
   Это изменение - продолжение билда 136.

2. В макросах-событиях добавилась группа: group="EditorChange".

Теперь LuaFAR-плагины (включая LuaMacro) не будут вносить существенного замедления при массовых заменах в редакторе, если нет загруженных событий типа group="EditorChange".

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

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

Postby John Doe » Fri 26 Apr, 2013 08:26

Мануал:

Code: Select all

result = export.ProcessEditorEvent (EditorID, Event, Param)

Parameters:
  EditorID: integer
  Event:    integer
  Param:    integer

Писание: http://api.farmanager.com/ru/structures ... tinfo.html

Насколько я могу судить, ни при одном типе события (кроме EE_CHANGE) обработчик не получает в этом параметре ничего полезного.
EE_CLOSE Параметр Param указывает на переменную, содержащую значение EditorID закрываемого редактора.
EE_READ Param = NULL.
EE_SAVE Param = NULL.
EE_REDRAW Param указывает на константу EEREDRAW_ALL.
EE_KILLFOCUS Param указывает на переменную, содержащую значение EditorID редактора, теряющего фокус.
EE_GOTFOCUS Param указывает на переменную, содержащую значение EditorID редактора, получающего фокус.

Т.е. либо NULL (EE_READ и EE_SAVE), либо значение константа (EE_REDRAW), либо значение совпадает с первым параметром (EE_CLOSE, EE_KILLFOCUS и EE_GOTFOCUS).

Или я что-то упускаю, или параметр лишний.

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

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

Postby t-rex » Fri 26 Apr, 2013 08:53

Ну а завтра добавится какое то значение, и что, опять менять всё?

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

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

Postby John Doe » Fri 26 Apr, 2013 08:58

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


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

Who is online

Users browsing this forum: No registered users and 6 guests