View Issue Details

IDProjectCategoryView StatusLast Update
0002595WishesMacropublic2020-05-31 17:35
ReporterJohnDoe Assigned To 
PrioritynormalSeverityfeatureReproducibilityN/A
Status newResolutionopen 
Product Version3.0 
Summary0002595: Обработчики событий: добавить в спецификацию фильтр по Event и Msg
DescriptionХотелось бы иметь возможность указать в спецификации виды событий, обрабатываемых данным обработчиком.
При наличии такой предварительная фильтрации код самого обработчика станет менее громоздким.

Предлагаю ввести опциональное поле filter, в котором указывать требуемое событие строкой, числом, или массивом.

Для диалоговых событий требуется второй аналогичный фильтр - filtermsg
TagsNo tags attached.
Build

Activities

JohnDoe

2014-09-03 13:56

updater   bugnote:0012986

Ещё один аргумент в пользу дополнительных полей: возможность фильтрации в макробраузере.

JohnDoe

2020-05-31 14:48

updater   bugnote:0016868

Last edited: 2020-05-31 17:35

View 5 revisions

Пример того, как хочется:
Event {
  description="handle DN_BTNCLICK only";
  msg=F.DN_BTNCLICK;
  action=function()
    --...
  end
}

msg здесь нестандартное поле, и чтобы это работало, необходимо предварительно задать соответствующий фильтр:

local F = far.Flags

local groups = "DialogEvent"

local fn = function(tEvent,options,...)
  -- example of arguments
  --   tEvent: macro table of original definition
  --   options: { filename="C:\example.txt" }
  --   ...: same arguments as event handler will receive

  local event,params = ...
  if tEvent.msg and tEvent.msg != params.Msg then return false end
end

SetEventFilter(groups,fn)

В примере выше SetEventFilter (или, скажем, Event.AddFilter) это загрузочная функция, предполагается что заданные с её помощью фильтры активны только в текущем макрофайле.

Это как вариант. Альтернативно, это может быть общедоступная функция mf.SetEventFilter, задающая фильтры глобально, для всех макрофайлов.

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

Issue History

Date Modified Username Field Change
2014-02-03 10:48 JohnDoe New Issue
2014-09-03 13:56 JohnDoe Note Added: 0012986
2020-05-31 14:48 JohnDoe Note Added: 0016868
2020-05-31 14:48 JohnDoe Note Edited: 0016868 View Revisions
2020-05-31 14:53 JohnDoe Note Edited: 0016868 View Revisions
2020-05-31 16:37 JohnDoe Note Edited: 0016868 View Revisions
2020-05-31 17:35 JohnDoe Note Edited: 0016868 View Revisions