Custom Events

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Custom Events

Post by John Doe »

Копирую с мантиса пожелание о реализации кастомных событий: 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 (в той или иной форме).
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

LuaMacro — Lua как язык макросов

Post by zg »

John Doe wrote: Tue 19 May, 2020 16:36Например, востребовано событие о смене директории в панелях. Некий скрипт мог бы следить за этим по таймеру, и иницировать событие с помощью сервисной функции, скажем mf.EmitEvent("FolderChanged", new, old, ...).
подождите, но ведь чуть более месяца назад:
Image
т.е. получается что вы просите фичу. и вы же хотите, чтобы её добавили, поэтому наверняка для максимальной мотивации привели наилучший пример её использования, ведь так? и этот лучший пример — костыль. я боюсь представить, что там в не лучших примерах. т.е. получается вы предлагаете фичу, которая поощряет костыльные решения. как так-то? где ваше легендарное чувство прекрасного?
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

LuaMacro — Lua как язык макросов

Post by John Doe »

zg wrote: Wed 20 May, 2020 00:56 т.е. получается что вы просите фичу. и вы же хотите, чтобы её добавили
Не совсем.
Это идея в копилку к прочим, опубликована с целью начать обсуждение.
Немедленной её реализации вот прямо по приведённой там спецификации я не хочу.
Как минимум должно собраться несколько достойных юзкейсов.
zg wrote: Wed 20 May, 2020 00:56 привели наилучший пример её использования, ведь так? и этот лучший пример — костыль.
zg wrote: Wed 20 May, 2020 00:56 т.е. получается вы предлагаете фичу, которая поощряет костыльные решения
О, вот с этим я сильно поспорю.
У меня в макросах полно костылей. Вообще любой нетривиальный макрос просто вынужден выходить за пределы апи.
По итогу обычно я создаю тикеты с предложениями что изменить в фаре, чтобы макрос был попрямее (часто эти тикеты остаются без движения, что тоже нормально).

И в целом #3796 призван уменьшить количество костылей - событие инициируется "искуственно", зато метод подписки на него - стандартный, и не придётся колхозить ещё и это.
zg wrote: Wed 20 May, 2020 00:56 наверняка для максимальной мотивации привели наилучший пример её использования, ведь так?
Не так.
Идея родилась при обсуждении того что вы называете "костылём", только и всего.
В данном случае действительно то событие ("FolderChanged") желательно реализовать в фаре.
Однако ж сейчас его нет (и не факт что появится), а предложенное решение универсально, и годится для любых событий, в том числе и имеющих смысл только для какого-то локального скрипта (разумеется вы правы, нужно больше примеров).
Last edited by John Doe on Wed 20 May, 2020 08:21, edited 1 time in total.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

LuaMacro — Lua как язык макросов

Post by John Doe »

zg wrote: Wed 20 May, 2020 00:56 подождите, но ведь чуть более месяца назад:
Кстати, не такой уж плохой пример. Обсуждение было тут:

Суть: сейчас никакое из наших апи не позволяет колореру инициировать собственные события (например смена схемы текущего редактора), и в обсуждении было предложено поступать наоборот, а именно по EE_REDRAW (каждый из скриптов) может поллить состояние колорера через Plugin.Call.
Решение хоть и непрямое, но рабочее.

Прямым было бы ввести в плагиновое апи кастомные события.

Но возможно и нечто среднее - ввести кастомные события в макро апи.
А далее - всё так же поллить состояние, НО: это уже будет делать единственный вспомогательный макрос, а остальные могут получать это удобным способом, как родные события.
А можно выпрямлять и дальше: колорер мог бы прямо инициировать события, через Plugin.Call.
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Custom Events

Post by zg »

John Doe wrote: Sat 23 May, 2020 13:42Суть: сейчас никакое из наших апи не позволяет колореру инициировать собственные события (например смена схемы текущего редактора)
удовлетворяющим ваше чуство прекрасного способом. так-то можно.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Custom Events

Post by John Doe »

zg wrote: Mon 25 May, 2020 03:24так-то можно.
Видимо я пропустил. Ссылку можно?
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Custom Events

Post by zg »

John Doe wrote: Wed 27 May, 2020 08:26
zg wrote: Mon 25 May, 2020 03:24так-то можно.
Видимо я пропустил. Ссылку можно?
в той же дискуссии я несколько вариантов приводил.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Custom Events

Post by John Doe »

Попробую догадаться, видимо речь об этом:
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Custom Events

Post by John Doe »

Вот для затравки: https://github.com/FarGroup/FarManager/pull/244
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Custom Events

Post by buniak_a_h »

John Doe, там есть такое замечание:
нестандартные поля в определении обработчика отбрасываются
В связи с этим было бы кузяво, чтоб в condition и в action передавалась таблица data (аналогично макросам) - это та таблица, что передаётся в функцию Event. Я довольно часто использую её для передачи данных из condition в action.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Custom Events

Post by John Doe »

buniak_a_h wrote: Fri 29 May, 2020 21:32 в condition и в action передавалась таблица data (аналогично макросам)
Аналогично не выйдет, поскольку список аргументов обработчиков событий определён изначально. Добавить в конец как ещё один аргумент - довольно криво, ведь в разных группах даже количество аргументов отличается.

Можно добавить как отдельное поле Event. Но тогда и для макросов стоит переделать аналогично.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Custom Events

Post by buniak_a_h »

John Doe,
1. а в чём сложность? Ну, будет data на разных местах в разных группах - кому это помешало бы? В мануале трудно описать? (сейчас написано, что параметры такие же, как у соответствующей экспортируемой функции)
2. В конце концов мы описываем кастомную группу. Пусть только в ней первым параметром будет data.
──
Просто если она не передаётся в обработчики, то я не понимаю, чем Вас не устраивает то, что нестандартные имена отбрасываются: доступа-то к ним всё равно нету …
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Custom Events

Post by John Doe »

buniak_a_h wrote: Sat 30 May, 2020 11:21 кому это помешало бы?
Мне не нравится хотя бы даже эстетически.
buniak_a_h wrote: Sat 30 May, 2020 11:21 В конце концов мы описываем кастомную группу. Пусть только в ней первым параметром будет data.
Я предполагал что механизм должен быть универсальным.
buniak_a_h wrote: Sat 30 May, 2020 11:21 чем Вас не устраивает то, что нестандартные имена отбрасываются: доступа-то к ним всё равно нету …
Доступ дать можно, в той или иной форме.
В какой форме - зависит от практики.

В настоящий момент например я хотел бы реализовать фильтр по полям (мантис 2595), и это (пока) кажется достаточным.
buniak_a_h wrote: Sat 30 May, 2020 11:21 чем Вас не устраивает то
"Не устраивает" следует понимать что мой патч в текущем виде мне не видится достаточным.
А буду ли я продолжать его доработку, зависит от того поддержит ли автор плагина мои идеи (пока что нет).
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Custom Events

Post by citRiks »

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.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Custom Events

Post by John Doe »

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 чат
Post Reply

Return to “Обсуждение макросов”