rebind — управление клавишами вызова макросов

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

rebind — управление клавишами вызова макросов

Post by John Doe »


Ниже предлагается простое централизованное решение, позволяющее отключить любой сторонний макрос, или переопределить его клавиатурную комбинацию.
Прототип обсуждался ранее, а теперь всё это можно делать интерактивно, с помощью одного из двух альтернативных макро браузеров:
  • http://forum.farmanager.com/viewtopic.php?f=60&t=7936 (подробности в шапке темы)
  • MacroBrowser подробности тут:
Все настройки (состояние запрета и переназначенные клавиши) сохраняются в базе, и загружаются при запуске фара.
Также поддерживается альтернативный способ хранения настроек, в файле %FARPROFILE%\Macros\scripts\bindings.

Всё что требуется для работы перечисленных функций — это подключить в _macroinit.lua модуль rebind: require"rebind".
На практике полезно дополнительно настроить модуль:

Об идентификаторах макросов:

Требования: Far 3.0 build >4743 (luamacro build 580)
Attachments
rebind-1.1.7z
(5.15 KiB) Downloaded 272 times
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

rebind

Post by IgorZ »

Пара предложений по rebind:
1. Почему бы не назначать uid и клавиатурным макросам, и обработчикам событий тоже. Это позволит:
1.1. Отключать и те, и другие при необходимости;
1.2. Сделать полезный задел на будущее.
2. Неплохо было бы сделать функцию генерации uid внешней. А то мне она понадобилась - так пришлось лезть в код rebind и копировать оттуда кусок. Некрасиво и неправильно.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Macro Browser alt. — обозреватель макросов

Post by John Doe »

1. Обработчикам событий бесспорно. А клавиатурным макросам не вижу смысла.
2. Запросто, правда задумана она внутренней, и понятия не имею зачем вам понадобилась.

Вообще rebind ждёт переделка.
Дополнительные данные (сейчас ~4 элемента) хранятся прямо в таблице макроса, т.е. во внутренней структуре LuaMacro, что не очень хорошо.
Вместо этого в таблице макроса будет храниться только один элемент — таблица (или даже userdata) с метаметодами.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Macro Browser alt. — обозреватель макросов

Post by John Doe »

Исправил модуль rebind (был неработоспособен после рефакторинга в LuaMacro build 472).
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Macro Browser alt. — обозреватель макросов

Post by IgorZ »

После

Code: Select all

shmuel 28.10.2015 13:23:40 +0200 - build 538

1. Изменение API: загрузочные функции 'Macro' и 'Event' теперь возвращают true в случае успеха,
   а не число-идентификатор макроса/события, как было раньше.
перестал работать rebind. Исправление ждать?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Macro Browser alt. — обозреватель макросов

Post by Shmuel »

IgorZ wrote: перестал работать rebind. Исправление ждать?
Автор, к сожалению, не отвечает. Исправление может быть таким: .
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Macro Browser alt. — обозреватель макросов

Post by John Doe »

Shmuel wrote: Автор, к сожалению, не отвечает
Спасибо что исправили, мне пока действительно не до этого.
Да и код несколько ушёл вперёд...
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Macro Browser alt. — обозреватель макросов

Post by IgorZ »

Shmuel, John Doe, спасибо за ответ.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Macro Browser alt. — обозреватель макросов

Post by IgorZ »

Shmuel wrote:
IgorZ wrote: перестал работать rebind. Исправление ждать?
Автор, к сожалению, не отвечает. Исправление может быть таким: .
В процессе эксплуатации выяснилось, что исправление было недостаточным:
  1. у функции загрузки появился второй параметр (имя файла);
  2. уровень вложенности вызова функции увеличился на 1.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

EnvEdit — редактор переменных среды

Post by John Doe »

Smitis wrote: неразбериха
Дело в том, что luamacro изначально использует поле guid для макросов, назначенных посредством MCTL_ADDMACRO
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

EnvEdit — редактор переменных среды

Post by Shmuel »

John Doe wrote: Дело в том, что luamacro изначально использует поле guid для макросов, назначенных посредством MCTL_ADDMACRO
Это так (деталь реализации), но одного наличия поля guid в регулярном макросе недостаточно, чтобы сбить LuaMacro с толку.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

EnvEdit — редактор переменных среды

Post by John Doe »

Shmuel wrote: но одного наличия поля guid в регулярном макросе недостаточно, чтобы сбить LuaMacro с толку.
Вот эта строка из utils.lua меня смущает:

Code: Select all

        if m.guid and m.guid[1]==guid[1] and m.callbackId==callbackId and not m.disabled then
Если guid окажется не таблицей, то попытка индексирования приведёт к ошибке.
Глубоко не копал, может это и проверяется в другом месте.

Собственно, будущая версия rebind уже хранит свои данные иначе, и в общем-то нет препятствий использовать поле с любым именем.
Поэтому просьба всех заинтересованных высказаться, стоит ли uid переименовывать в guid
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

EnvEdit — редактор переменных среды

Post by Shmuel »

John Doe wrote: Если guid окажется не таблицей, то попытка индексирования приведёт к ошибке.
Глубоко не копал, может это и проверяется в другом месте.
Это нигде не проверяется, но при нормальной работе (то-есть, если не модифицировать внутренности LuaMacro библиотекой debug), данная ошибка невозможна.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

EnvEdit — редактор переменных среды

Post by John Doe »

Shmuel wrote: если не модифицировать внутренности LuaMacro
Но мы ведь обсуждаем как раз этот случай, разве нет?
(Ведь если не модифицировать, то поле guid в определении макроса просто игнорируется)

А так да, в luamacro всё чётко.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

EnvEdit — редактор переменных среды

Post by Shmuel »

John Doe wrote: Но мы ведь обсуждаем как раз этот случай, разве нет?
Не, я это не обсуждаю. Тот, кто берётся это делать, должен хорошо знать, что он делает.
Post Reply

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