Обработчики событий

Far Manager Macro System

Обработчики событий


Как и стационарные макросы, обработчики событий загружаются из Lua-файлов (расширение *.lua), находящихся в папке %FARPROFILE%\Macros\scripts и её подпапках. Каждый Lua-файл может содержать вместе и макросы, и обработчики событий.

Загрузка обработчика происходит при вызове глобальной функции Event, которой передаётся один аргумент – таблица с параметрами обработчика. При успешной загрузке функция возвращает true.

Event {
  group       = "EditorEvent";                          -- string
  description = "Event example";                        -- string (опциональное поле)
  filemask    = "*.txt,*.cpp";                          -- string (опциональное поле)
  priority    = 50;                                     -- number (опциональное поле)
  condition   = function() ...... end;                  -- function (опциональное поле)
  action      = function() ...... end;                  -- function
  id          = "F0109446-AA63-4873-AEC3-17AEE993AA53"; -- string (опциональное поле)
}

Поле group может иметь одно из следующих значений:
"DialogEvent", "EditorEvent", "EditorInput", "ExitFAR", "ViewerEvent", "ConsoleInput".
Данные имена являются производными от имён соответствующих функций, экспортируемых плагином, например:

    export.ProcessDialogEvent -> DialogEvent

Функции condition и action обработчика вызываются с теми же параметрами, с которыми вызывается соответствующая экспортируемая функция (см. мануал LuaFAR).

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

Событие "ExitFAR" вызывается в следующих случаях: (a) выход из Far Manager, (b) выгрузка плагина LuaMacro, (c) выгрузка либо перезагрузка макросов. Обработчик события получает один аргумент булевого типа: false для случаев (a) и (b); true для случая (c).