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

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

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

Post by John Doe » Tue 01 Jul, 2014 10:36


Ниже предлагается простое централизованное решение, позволяющее отключить любой сторонний макрос, или переопределить его клавиатурную комбинацию.
Прототип обсуждался ранее, а теперь всё это можно делать интерактивно, с помощью одного из двух альтернативных макро браузеров:
  • 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 70 times

IgorZ
Posts: 463
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 times

rebind

Post by IgorZ » Wed 06 Aug, 2014 07:09

Пара предложений по rebind:
1. Почему бы не назначать uid и клавиатурным макросам, и обработчикам событий тоже. Это позволит:
1.1. Отключать и те, и другие при необходимости;
1.2. Сделать полезный задел на будущее.
2. Неплохо было бы сделать функцию генерации uid внешней. А то мне она понадобилась - так пришлось лезть в код rebind и копировать оттуда кусок. Некрасиво и неправильно.

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

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

Post by John Doe » Wed 06 Aug, 2014 09:42

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

Вообще rebind ждёт переделка.
Дополнительные данные (сейчас ~4 элемента) хранятся прямо в таблице макроса, т.е. во внутренней структуре LuaMacro, что не очень хорошо.
Вместо этого в таблице макроса будет храниться только один элемент — таблица (или даже userdata) с метаметодами.

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

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

Post by John Doe » Wed 14 Jan, 2015 11:14

Исправил модуль rebind (был неработоспособен после рефакторинга в LuaMacro build 472).

IgorZ
Posts: 463
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 times

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

Post by IgorZ » Fri 06 Nov, 2015 07:18

После

Code: Select all

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

1. Изменение API: загрузочные функции 'Macro' и 'Event' теперь возвращают true в случае успеха,
   а не число-идентификатор макроса/события, как было раньше.
перестал работать rebind. Исправление ждать?

Shmuel
Posts: 5235
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Sat 07 Nov, 2015 13:08

IgorZ wrote: перестал работать rebind. Исправление ждать?
Автор, к сожалению, не отвечает. Исправление может быть таким: .

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

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

Post by John Doe » Sat 07 Nov, 2015 22:12

Shmuel wrote: Автор, к сожалению, не отвечает
Спасибо что исправили, мне пока действительно не до этого.
Да и код несколько ушёл вперёд...

IgorZ
Posts: 463
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 times

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

Post by IgorZ » Mon 09 Nov, 2015 04:21

Shmuel, John Doe, спасибо за ответ.

IgorZ
Posts: 463
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 times

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

Post by IgorZ » Fri 20 Nov, 2015 06:11

Shmuel wrote:
IgorZ wrote: перестал работать rebind. Исправление ждать?
Автор, к сожалению, не отвечает. Исправление может быть таким: .
В процессе эксплуатации выяснилось, что исправление было недостаточным:
  1. у функции загрузки появился второй параметр (имя файла);
  2. уровень вложенности вызова функции увеличился на 1.

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

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

Post by John Doe » Sat 09 Jul, 2016 09:23

Smitis wrote: неразбериха
Дело в том, что luamacro изначально использует поле guid для макросов, назначенных посредством MCTL_ADDMACRO

Shmuel
Posts: 5235
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Sat 09 Jul, 2016 09:35

John Doe wrote: Дело в том, что luamacro изначально использует поле guid для макросов, назначенных посредством MCTL_ADDMACRO
Это так (деталь реализации), но одного наличия поля guid в регулярном макросе недостаточно, чтобы сбить LuaMacro с толку.

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

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

Post by John Doe » Sat 09 Jul, 2016 10:03

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: 5235
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Sat 09 Jul, 2016 10:28

John Doe wrote: Если guid окажется не таблицей, то попытка индексирования приведёт к ошибке.
Глубоко не копал, может это и проверяется в другом месте.
Это нигде не проверяется, но при нормальной работе (то-есть, если не модифицировать внутренности LuaMacro библиотекой debug), данная ошибка невозможна.

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

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

Post by John Doe » Sat 09 Jul, 2016 10:32

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

А так да, в luamacro всё чётко.

Shmuel
Posts: 5235
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Sat 09 Jul, 2016 10:38

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

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

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

Post by John Doe » Sat 09 Jul, 2016 10:40

Тогда ок.

Post Reply

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