Обработчики событий: запуск макросов по событиям

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

Обработчики событий: запуск макросов по событиям

Post by John Doe »

Реализован запуск макросов по событиям (build 3157+), документация тут:

Данная статья в MacroAPI manual весьма лаконична, т.к. ссылается на LuaFAR manual, который в свою очередь ссылается на Far PluginAPI.
Скакать между различными файлами документации по меньшей мере неудобно (edit: уже появились гиперссылки, стало намного лучше).
Чтобы облегчить усвоение и без того непростого и фрагментированного материала я скомпоновал для себя информацию в одном месте.
  • result = export.ProcessViewerEvent (ViewerID, Event)
  • result = export.ProcessEditorEvent (EditorID, Event, Param)

    result = editor.SubscribeChangeEvent (EditorId, Subscribe)
  • result = export.ProcessEditorInput (Rec)
    Rec: table InputRecord
  • ret = export.ProcessDialogEvent (Event, Param)
Важно: Ограничения в использовании некоторых функций

Примеры обработчиков событий в готовых макросах:

Основная тема: LuaMacro — Lua как язык макросов
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by zg »

Latest post of the previous page:

John Doe wrote:
zg wrote:4. непонятно, почему в событиях не используется поле priority?
Для автономности. Несколько абсолютно не связанных макросов можно повесить на одно событие, и все они выполнятся, не выдавая никаких запросов.
и чем в данном случае мешает priority? оно наоборот позволяет задать очерёдность, с которой будут выполнятся события.
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Хорошая мысль
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by NightRoman »

John Doe wrote:
NightRoman wrote:А нужно ли поле condition событиям? Ну и description.
Конечно нужно.
Зачем?
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Ровно затем же, что и для макросов на обычные клавиш.
Если вы видите разницу - объясните.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by NightRoman »

Обработчики событий, в отличие от макросов, запускаются все. Если кто-то не хочет работать, просто делает return. Условие для этого не надо.

С макросами иначе. Работает только один (или ни одного). Его надо выбрать. Для этого нужны условия. Если 2+ подходят, то показывается меню. Для этого нужны описания.

Как-то так. Это уже обсуждалось раньше "зачем нужны условия для макросов". Так вот это вроде не нужно для событий потому что *все* обработчики вызываются, а не один/0.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by NightRoman »

Иными словами, обработчики событий и макросы - очень разные по своей природе сущности. Лучше подумать об этом. Если сделать всех "макросами по формату" - не будет это усложнением и для макросов, и для событий?
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Условия есть.
Макрообласть
Флаги
Маска
И условие condition.

ВСЕ эти условия можно перенести в тело макроса.
Но зачем?

Не надо мудрить. Есть возможности - пользуемся.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by NightRoman »

John Doe wrote:ВСЕ эти условия можно перенести в тело макроса.
Кажется, это не так (все можно в условие запихать, но не в тело!). И это уже обсуждалось. Не буду продолжать. Просто предлагаю подумать, нужно ли всё делать по одному формату макросов или разделить разные вещи.
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

P.S.
Что касается описаний.
Вы предлагаете выкинуть, и заменить на комментарий в коде?

Да, сейчас описания отображаются только в меню конфликтов
Но кто мешает создать в ближайшее время меню-список макросов? меню событий?
Это более чем востребовано.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by NightRoman »

Я бы начал с отдельной сущности "событие" со своим форматом описания в луа. И добавлял бы туда только то, что практически нужно. Это из практики будет видно. Пока ни для условия, ни для описания не вижу необходимости. Может, они пригодятся в будущем. Может, не пригодятся. Пока они не нужны, я бы их не добавлял.

Но раз сделано по формату "макроса", то поневоле появились и условие, и описание. В такой ситуации я не предлагаю их выкинуть, раз уж они есть.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by NightRoman »

Да и другие нестыковки есть "автоматом". Что если read=(что-то), а area=(не редактор и не вьюер)? Бессмысленное сочетание?
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Чем меньше разных форматов, тем лучше.
А вынос условий запуска из тела - удобен и логичен.

События в любом случае привязаны к макрообластям.
А попытка назначить обработку события, несуществующего в заданной области - такая же ошибка, как и неправильное написание имени комбинации клавиш.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by NightRoman »

John Doe
В последнем посте не соглашусь ни с одним пунктом :)
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Исходя из вашего стремления к минимализму, предполагаю, что в макросах стоит оставить 2 поля: Key и Condition, а все остальные убрать как избыточные (в том числе и Priority - его уже предлагалось совместить с Condition).
Собственно, и Key можно засунуть в Condition.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by NightRoman »

Что-то в этом духе даже предлагалось (не мной). Ответ был дан разумный. Сделать так можно, но вопрос в удобстве. Так как сейчас - для макросов более-менее удобно, это проверено какой-никакой практикой. То, что удобно для макросов, для событий не обязательно удобно.
Shmuel
Posts: 6839
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Запуск макросов по событиям (build 3157+)

Post by Shmuel »

zg wrote:1. Macro {area="Editor";key="Read"} это конечно мощно и красиво в плане реализации, но мне кажется читабельность страдает. скажем Event {type="EditorRead"} или Event {area="Editor";type="Read"} гораздо очевидней и читабельней. из минусов вижу единственный, что в моём варианте нельзя писать Macro {area="Editor";key="Read CtrlQ"}.

2. так же в коде присутствует вот такое:

Code: Select all

MacroCallFar(MCODE_F_POSTNEWMACRO, m.id, m.code, m.flags)
--if m.action then m.action(EditorID) end
в чём преимущество первого варианта перед вторым? ну кроме зелёной буквы P в левом верхнем углу.

3. мы тут с варпом месяц назад обсуждали GetCustomDataW и FreeCustomDataW. как вариант рассматривали идею, что по умолчанию оставляем всё как есть (а оставить всё как есть — это же очень заманчиво :crazy:), а при наличии специальных луа-ивентов скармливаем всё, что вернули плагины им и выводим то что они вернули. очень примитивно в текущей имплементации это могло бы выглядеть так:

Code: Select all

Macro {area="Shell";key="Columns",action=function(a,b,c) return a.Text..' — '..c.Text end}
не факт что так будет, но помнить о том, что в будущем события могут стать вариантом продвинутой настройки наверное стоит.

4. непонятно, почему в событиях не используется поле priority?
1. Да, так читабельнее.

2. Одно возможное преимущество - это запуск кода не из события. Мой опыт показывает, что Фар некоторые вещи делает криво из событий. Свежий пример можно посмотреть в комментарии к моему вчерашнему коммиту. В плагинах я это делал по-другому - запускал код из таймера.

3. Это было бы здорово. Вот про кастомную сортировку в панелях уже не раз вопрос поднимался.

4. Про очерёдность исполнения думал, но решил для начала сделать по-минимуму и получить обратную связь. Если приоритет влияет на очерёдность, то как: высокий приоритет запускается в первую очередь или наоборот, в последнюю?
Post Reply

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