Custom Events
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Custom Events
Копирую с мантиса пожелание о реализации кастомных событий: https://bugs.farmanager.com/view.php?id=3796
Было бы удобно использовать систему событий (предоставляемую Luamacro) и для произвольных событий, которые бы инициировались пользовательскими скриптами.
Например, востребовано событие о смене директории в панелях. Некий скрипт мог бы следить за этим по таймеру, и иницировать событие с помощью сервисной функции, скажем mf.EmitEvent("FolderChanged", new, old, ...).
Все прочие скрипты могли бы подписываться на событие штатным образом, например: Event { group="FolderChanged", ...
В идеале лучше так:
Event { group="Custom", type="FolderChanged", action=...
Но это уже требует реализации https://bugs.farmanager.com/view.php?id=2595 (в той или иной форме).
Было бы удобно использовать систему событий (предоставляемую Luamacro) и для произвольных событий, которые бы инициировались пользовательскими скриптами.
Например, востребовано событие о смене директории в панелях. Некий скрипт мог бы следить за этим по таймеру, и иницировать событие с помощью сервисной функции, скажем mf.EmitEvent("FolderChanged", new, old, ...).
Все прочие скрипты могли бы подписываться на событие штатным образом, например: Event { group="FolderChanged", ...
В идеале лучше так:
Event { group="Custom", type="FolderChanged", action=...
Но это уже требует реализации https://bugs.farmanager.com/view.php?id=2595 (в той или иной форме).
https://t.me/FarManager — Telegram чат
- zg
- zero-gravity
- Posts: 6037
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
LuaMacro — Lua как язык макросов
подождите, но ведь чуть более месяца назад:
т.е. получается что вы просите фичу. и вы же хотите, чтобы её добавили, поэтому наверняка для максимальной мотивации привели наилучший пример её использования, ведь так? и этот лучший пример — костыль. я боюсь представить, что там в не лучших примерах. т.е. получается вы предлагаете фичу, которая поощряет костыльные решения. как так-то? где ваше легендарное чувство прекрасного?
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
LuaMacro — Lua как язык макросов
Не совсем.
Это идея в копилку к прочим, опубликована с целью начать обсуждение.
Немедленной её реализации вот прямо по приведённой там спецификации я не хочу.
Как минимум должно собраться несколько достойных юзкейсов.
О, вот с этим я сильно поспорю.
У меня в макросах полно костылей. Вообще любой нетривиальный макрос просто вынужден выходить за пределы апи.
По итогу обычно я создаю тикеты с предложениями что изменить в фаре, чтобы макрос был попрямее (часто эти тикеты остаются без движения, что тоже нормально).
И в целом #3796 призван уменьшить количество костылей - событие инициируется "искуственно", зато метод подписки на него - стандартный, и не придётся колхозить ещё и это.
Не так.
Идея родилась при обсуждении того что вы называете "костылём", только и всего.
В данном случае действительно то событие ("FolderChanged") желательно реализовать в фаре.
Однако ж сейчас его нет (и не факт что появится), а предложенное решение универсально, и годится для любых событий, в том числе и имеющих смысл только для какого-то локального скрипта (разумеется вы правы, нужно больше примеров).
Last edited by John Doe on Wed 20 May, 2020 08:21, edited 1 time in total.
https://t.me/FarManager — Telegram чат
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
LuaMacro — Lua как язык макросов
Кстати, не такой уж плохой пример. Обсуждение было тут:
Суть: сейчас никакое из наших апи не позволяет колореру инициировать собственные события (например смена схемы текущего редактора), и в обсуждении было предложено поступать наоборот, а именно по EE_REDRAW (каждый из скриптов) может поллить состояние колорера через Plugin.Call.
Решение хоть и непрямое, но рабочее.
Прямым было бы ввести в плагиновое апи кастомные события.
Но возможно и нечто среднее - ввести кастомные события в макро апи.
А далее - всё так же поллить состояние, НО: это уже будет делать единственный вспомогательный макрос, а остальные могут получать это удобным способом, как родные события.
А можно выпрямлять и дальше: колорер мог бы прямо инициировать события, через Plugin.Call.
https://t.me/FarManager — Telegram чат
- zg
- zero-gravity
- Posts: 6037
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
- zg
- zero-gravity
- Posts: 6037
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Custom Events
Вот для затравки: https://github.com/FarGroup/FarManager/pull/244
https://t.me/FarManager — Telegram чат
- buniak_a_h
- Posts: 4268
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Custom Events
John Doe, там есть такое замечание:
В связи с этим было бы кузяво, чтоб в condition и в action передавалась таблица data (аналогично макросам) - это та таблица, что передаётся в функцию Event. Я довольно часто использую её для передачи данных из condition в action.нестандартные поля в определении обработчика отбрасываются
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Custom Events
Аналогично не выйдет, поскольку список аргументов обработчиков событий определён изначально. Добавить в конец как ещё один аргумент - довольно криво, ведь в разных группах даже количество аргументов отличается.buniak_a_h wrote: ↑Fri 29 May, 2020 21:32 в condition и в action передавалась таблица data (аналогично макросам)
Можно добавить как отдельное поле Event. Но тогда и для макросов стоит переделать аналогично.
https://t.me/FarManager — Telegram чат
- buniak_a_h
- Posts: 4268
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Custom Events
John Doe,
1. а в чём сложность? Ну, будет data на разных местах в разных группах - кому это помешало бы? В мануале трудно описать? (сейчас написано, что параметры такие же, как у соответствующей экспортируемой функции)
2. В конце концов мы описываем кастомную группу. Пусть только в ней первым параметром будет data.
──
Просто если она не передаётся в обработчики, то я не понимаю, чем Вас не устраивает то, что нестандартные имена отбрасываются: доступа-то к ним всё равно нету …
1. а в чём сложность? Ну, будет data на разных местах в разных группах - кому это помешало бы? В мануале трудно описать? (сейчас написано, что параметры такие же, как у соответствующей экспортируемой функции)
2. В конце концов мы описываем кастомную группу. Пусть только в ней первым параметром будет data.
──
Просто если она не передаётся в обработчики, то я не понимаю, чем Вас не устраивает то, что нестандартные имена отбрасываются: доступа-то к ним всё равно нету …
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Custom Events
Мне не нравится хотя бы даже эстетически.
Я предполагал что механизм должен быть универсальным.buniak_a_h wrote: ↑Sat 30 May, 2020 11:21 В конце концов мы описываем кастомную группу. Пусть только в ней первым параметром будет data.
Доступ дать можно, в той или иной форме.buniak_a_h wrote: ↑Sat 30 May, 2020 11:21 чем Вас не устраивает то, что нестандартные имена отбрасываются: доступа-то к ним всё равно нету …
В какой форме - зависит от практики.
В настоящий момент например я хотел бы реализовать фильтр по полям (мантис 2595), и это (пока) кажется достаточным.
"Не устраивает" следует понимать что мой патч в текущем виде мне не видится достаточным.
А буду ли я продолжать его доработку, зависит от того поддержит ли автор плагина мои идеи (пока что нет).
https://t.me/FarManager — Telegram чат
Custom Events
Красота это важноJohn Doe wrote: ↑Sat 30 May, 2020 08:10Аналогично не выйдет, поскольку список аргументов обработчиков событий определён изначально. Добавить в конец как ещё один аргумент - довольно криво, ведь в разных группах даже количество аргументов отличается.buniak_a_h wrote: ↑Fri 29 May, 2020 21:32 в condition и в action передавалась таблица data (аналогично макросам)
Можно добавить как отдельное поле Event. Но тогда и для макросов стоит переделать аналогично.
будет меньше ошибок в последовательности параметров
правда непонятно что делать с совместимостью,
но наверное можно ей пожертвовать,
или еще лучше, написать лексер который это чинит в макросах.
фигню написал, это невозможно
С другой стороны,
было предложение вообще через setfenv передавать все нужное.
это было предложено @xerox-ом еще до передачи мета-таблиц в action.
тут прямая аналогия, и если есть setfenv, то грех его не использовать.
это супер безошибочно, красиво, и ничего не ломает.
Last edited by citRiks on Sun 31 May, 2020 21:30, edited 1 time in total.
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Custom Events
А кто-нибудь подскажет в какой теме это у нас обсуждалось?buniak_a_h wrote: ↑Fri 29 May, 2020 21:32 чтоб в condition и в action передавалась таблица data (аналогично макросам)
Update:
Начало тут viewtopic.php?p=157560#p157560
И ещё: viewtopic.php?f=15&t=11950
Last edited by John Doe on Sun 31 May, 2020 12:09, edited 1 time in total.
https://t.me/FarManager — Telegram чат