View Issue Details

IDProjectCategoryView StatusLast Update
0003796Wishes.PluginsLuaMacro / Macro Browserpublic2020-05-30 08:13
ReporterJohnDoe Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status newResolutionopen 
Platformx86OSWindowsOS VersionXP SP3
Product Version3.0 
Summary0003796: Кастомные события
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", ...
TagsNo tags attached.

Activities

shmuel

2020-05-19 16:31

developer   bugnote:0016843

Интересная идея.

JohnDoe

2020-05-19 16:32

updater   bugnote:0016844

В идеале лучше так:
Event { group="Custom", type="FolderChanged", action=...

Но это уже требует реализации https://bugs.farmanager.com/view.php?id=2595 (в той или иной форме)

JohnDoe

2020-05-19 17:02

updater   bugnote:0016845

Отдельно надо подумать:
1) нужна ли какая-то обработка возвращаемых значений, по аналогии с обычными событиями.
Если да, то mf.EmitEvent могла бы возвращать массив значений. Или же использовать какой-то коллбэк. С другой стороны, можно обойтись и без какой-то специальной поддержки.

2) нужна ли возможность прекратить обработку события немедленно (даже если остались ещё невыполненные обработчики).
Но и без этого тоже скорее всего можно обойтись

JohnDoe

2020-05-21 07:25

updater   bugnote:0016847

Для пользовательских событий желательна возможность предварительной фильтрации по значению свойств, указанных в определении Event { group="...", prop1="...", prop2=".."

Это должно быть несложно реализовать дополнительной функцией-фильтром, передаваемой (в числе других аргументов) в mf.EmitEvent.

Эта функция-фильтр будет выступать как предварительный condition: фильтровать массив всех обработчиков.

P.S.
Подобный подход можно будет применить и для реализации #2595.

Issue History

Date Modified Username Field Change
2020-05-19 16:25 JohnDoe New Issue
2020-05-19 16:31 shmuel Note Added: 0016843
2020-05-19 16:32 JohnDoe Note Added: 0016844
2020-05-19 17:02 JohnDoe Note Added: 0016845
2020-05-21 07:25 JohnDoe Note Added: 0016847
2020-05-30 08:13 JohnDoe Description Updated