Skip to content

Commit 8a04edf

Browse files
author
johndoe
committed
luamacro: implement custom events (POC)
define event handler: ```lua Event { description="test!"; group="CustomEvent"; action=function(Event,...) far.Show(Event,...) end; } ``` emit event: ```lua mf.ProcessEvent("CustomEvent",{},1,2,3) ```
1 parent 7bda1c2 commit 8a04edf

2 files changed

Lines changed: 15 additions & 7 deletions

File tree

plugins/luamacro/api.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ mf.usermenu = function(mode, filename)
9292
end
9393

9494
mf.GetMacroCopy = utils.GetMacroCopy
95+
96+
mf.ProcessEvent = utils.ProcessEvent
9597
--------------------------------------------------------------------------------
9698

9799
Object = {

plugins/luamacro/utils.lua

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ local function AddId (trg, src)
183183
end
184184

185185
local function EV_Handler (macros, filename, ...)
186+
if not macros then return end
186187
-- Get current priorities.
187188
local indexes,priorities = {},{}
188189
for i,m in ipairs(macros) do
@@ -293,6 +294,10 @@ local function export_GetContentData (filename, colnames)
293294
return tOut
294295
end
295296

297+
local function ProcessEvent (group, options, ...) --todo
298+
return EV_Handler(Events[group:lower()], options and options.filename, options, ...)
299+
end
300+
296301
local ExpandKey do -- измеренное время исполнения на ключе "CtrlAltShiftF12" = ??? (Lua); 2.3uS (LuaJIT);
297302
local t={}
298303

@@ -479,7 +484,8 @@ end
479484
local AddEvent_fields = {"group","action","description","priority","condition","filemask"}
480485
local function AddEvent (srctable, FileName)
481486
local group = type(srctable)=="table" and type(srctable.group)=="string" and srctable.group:lower()
482-
if not (group and Events[group]) then return end
487+
if not group then return end
488+
Events[group] = Events[group] or {}
483489

484490
if type(srctable.action)~="function" then return end
485491

@@ -710,7 +716,6 @@ local function LoadMacros (unload, paths)
710716

711717
local AreaNames = allAreas and AllAreaNames or SomeAreaNames
712718
for _,name in pairs(AreaNames) do newAreas[name]={} end
713-
for _,name in ipairs(EventGroups) do Events[name]={} end
714719
for k in pairs(package.loaded) do
715720
if initial_modules[k]==nil and not package.nounload[k] then
716721
package.loaded[k]=nil
@@ -851,11 +856,11 @@ local function LoadMacros (unload, paths)
851856

852857
far.RecursiveSearch (DirMacros.."internal", "*.lua", LoadRecordedFile, 0)
853858

854-
export.ExitFAR = Events.exitfar[1] and export_ExitFAR
855-
export.ProcessDialogEvent = Events.dialogevent[1] and export_ProcessDialogEvent
856-
export.ProcessEditorInput = Events.editorinput[1] and export_ProcessEditorInput
857-
export.ProcessViewerEvent = Events.viewerevent[1] and export_ProcessViewerEvent
858-
export.ProcessConsoleInput = Events.consoleinput[1] and export_ProcessConsoleInput
859+
export.ExitFAR = Events.exitfar and export_ExitFAR
860+
export.ProcessDialogEvent = Events.dialogevent and export_ProcessDialogEvent
861+
export.ProcessEditorInput = Events.editorinput and export_ProcessEditorInput
862+
export.ProcessViewerEvent = Events.viewerevent and export_ProcessViewerEvent
863+
export.ProcessConsoleInput = Events.consoleinput and export_ProcessConsoleInput
859864
if ContentColumns[1] then
860865
export.GetContentFields = export_GetContentFields
861866
export.GetContentData = export_GetContentData
@@ -1245,6 +1250,7 @@ return {
12451250
InitMacroSystem = InitMacroSystem,
12461251
LoadingInProgress = function() return LoadingInProgress end,
12471252
LoadMacros = LoadMacros,
1253+
ProcessEvent = ProcessEvent,
12481254
ProcessRecordedMacro = ProcessRecordedMacro,
12491255
RunStartMacro = RunStartMacro,
12501256
UnloadMacros = InitMacroSystem,

0 commit comments

Comments
 (0)