Custom Events

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

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: 5817
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 147 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: 12823
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

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: 12823
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

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: 5817
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 147 times
Contact:

Custom Events

Post by zg »

John Doe wrote:
Sat 23 May, 2020 13:42
Суть: сейчас никакое из наших апи не позволяет колореру инициировать собственные события (например смена схемы текущего редактора)
удовлетворяющим ваше чуство прекрасного способом. так-то можно.

User avatar
John Doe
Бюрократ
Posts: 12823
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

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: 5817
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 147 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: 12823
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

Custom Events

Post by John Doe »

Попробую догадаться, видимо речь об этом:
https://t.me/FarManager — Telegram чат

User avatar
John Doe
Бюрократ
Posts: 12823
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

Custom Events

Post by John Doe »

Вот для затравки: https://github.com/FarGroup/FarManager/pull/244
https://t.me/FarManager — Telegram чат

buniak_a_h
Posts: 1848
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 times
Contact:

Custom Events

Post by buniak_a_h »

John Doe, там есть такое замечание:
нестандартные поля в определении обработчика отбрасываются
В связи с этим было бы кузяво, чтоб в condition и в action передавалась таблица data (аналогично макросам) - это та таблица, что передаётся в функцию Event. Я довольно часто использую её для передачи данных из condition в action.

User avatar
John Doe
Бюрократ
Posts: 12823
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

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

buniak_a_h
Posts: 1848
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 times
Contact:

Custom Events

Post by buniak_a_h »

John Doe,
1. а в чём сложность? Ну, будет data на разных местах в разных группах - кому это помешало бы? В мануале трудно описать? (сейчас написано, что параметры такие же, как у соответствующей экспортируемой функции)
2. В конце концов мы описываем кастомную группу. Пусть только в ней первым параметром будет data.
──
Просто если она не передаётся в обработчики, то я не понимаю, чем Вас не устраивает то, что нестандартные имена отбрасываются: доступа-то к ним всё равно нету …

User avatar
John Doe
Бюрократ
Posts: 12823
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

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

Post Reply

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