View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003796 | Wishes.Plugins | LuaMacro / Macro Browser | public | 2020-05-19 16:25 | 2020-05-30 08:13 |
Reporter | JohnDoe | Assigned To | |||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | new | Resolution | open | ||
Platform | x86 | OS | Windows | OS Version | XP SP3 |
Product Version | 3.0 | ||||
Summary | 0003796: Кастомные события | ||||
Description | Было бы удобно использовать систему событий (предоставляемую Luamacro) и для произвольных событий, которые бы инициировались пользовательскими скриптами. https://forum.farmanager.com/viewtopic.php?f=15&t=12153 https://github.com/FarGroup/FarManager/pull/244 | ||||
Additional Information | Например, востребовано событие о смене директории в панелях. Некий скрипт мог бы следить за этим по таймеру, и иницировать событие с помощью сервисной функции, скажем mf.EmitEvent("FolderChanged", new, old, ...). Все прочие скрипты могли бы подписываться на событие штатным образом, например: Event { group="FolderChanged", ... | ||||
Tags | No tags attached. | ||||
|
Интересная идея. |
|
В идеале лучше так: Event { group="Custom", type="FolderChanged", action=... Но это уже требует реализации https://bugs.farmanager.com/view.php?id=2595 (в той или иной форме) |
|
Отдельно надо подумать: 1) нужна ли какая-то обработка возвращаемых значений, по аналогии с обычными событиями. Если да, то mf.EmitEvent могла бы возвращать массив значений. Или же использовать какой-то коллбэк. С другой стороны, можно обойтись и без какой-то специальной поддержки. 2) нужна ли возможность прекратить обработку события немедленно (даже если остались ещё невыполненные обработчики). Но и без этого тоже скорее всего можно обойтись |
|
Для пользовательских событий желательна возможность предварительной фильтрации по значению свойств, указанных в определении Event { group="...", prop1="...", prop2=".." Это должно быть несложно реализовать дополнительной функцией-фильтром, передаваемой (в числе других аргументов) в mf.EmitEvent. Эта функция-фильтр будет выступать как предварительный condition: фильтровать массив всех обработчиков. P.S. Подобный подход можно будет применить и для реализации #2595. |