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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 11246
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 81 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 63 times

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

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

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

Latest post of the previous page:

Тогда ок.

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

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

Post by IgorZ » Fri 15 Jul, 2016 05:38

John Doe wrote:Собственно, будущая версия rebind уже хранит свои данные иначе, и в общем-то нет препятствий использовать поле с любым именем.
Поэтому просьба всех заинтересованных высказаться, стоит ли uid переименовывать в guid
На мой взгляд, в целях совместимости лучше оставить старое название. Или, как минимум, предусмотреть возможность принимать и uid, и guid. Но оставить, как есть, проще и надёжнее. Разве что кто-то сумеет аргументированно доказать, что сохранение существующего названия вызывает объективные проблемы.

Заодно напомню про пожелание использования uid/guid и для Event. Надеюсь, это будет в новой версии?

Кстати, идея на рассмотрение: можно вообще варьировать имя в зависимости от типа скрипта: uid(Macro, уже есть)/euid(Event, надеюсь, будет)/guid(MenuItem, есть изначально)/puid(CommandLine, если будет реализовано - впрочем, необязательно и даже, возможно, вредно, там сам префикс должен быть уникален).

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

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

Post by John Doe » Fri 15 Jul, 2016 08:40

IgorZ wrote: предусмотреть возможность принимать и uid, и guid.
..как промежуточный этап в процессе (потенциального) перехода.

Если по сути, то имя "uid" точнее соответствует особенностям текущей реализации.
Однако это всё пользователю малоинтересно, а лишние сущности только запутывают дело, поэтому мне понятна позиция Smitis.
IgorZ wrote: варьировать имя в зависимости от типа скрипта:
Это был бы ад)
IgorZ wrote: Разве что кто-то сумеет аргументированно доказать, что сохранение существующего названия вызывает объективные проблемы.
Объективных проблем нет, но субъективные тоже не стоит игнорировать.
Может быть выскажется ещё кто-нибудь из заинтересованных.

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

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

Post by John Doe » Fri 15 Jul, 2016 16:36

IgorZ wrote: Заодно напомню про пожелание использования uid/guid и для Event. Надеюсь, это будет в новой версии?
Да, конечно я помню.

Кроме того обдумываю не будет ли полезно разрешить переназначать не только клавиши, но и приоритеты, описания [, ...?]

И ещё одна мысль: изменять произвольные параметры

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

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

Post by IgorZ » Mon 18 Jul, 2016 05:22

John Doe wrote:Если по сути, то имя "uid" точнее соответствует особенностям текущей реализации.
Однако это всё пользователю малоинтересно, а лишние сущности только запутывают дело, поэтому мне понятна позиция Smitis.
Мой личный опыт утверждает, что если сущности разные, то имена у них тоже лучше делать разными. Так что, на мой взгляд, под спойлером находятся аж два достаточных обоснования оставления имени "uid". Причём, первое отпадёт только если Shmuel сделает поле "guid" обязательным для макросов.
John Doe wrote:
IgorZ wrote: варьировать имя в зависимости от типа скрипта:
Это был бы ад)
Возможно. Не все спонтанные идеи оказываются гениальны. (здесь не помешал бы смайлик с Наполеоном)
John Doe wrote:
IgorZ wrote: Разве что кто-то сумеет аргументированно доказать, что сохранение существующего названия вызывает объективные проблемы.
Объективных проблем нет, но субъективные тоже не стоит игнорировать.
Субъективные по самому определению сугубо индивидуальны. Поэтому их стоит принимать в расчёт только если подавляющее большинство высказывается одинаково. Здесь, к сожалению, пока маловато людей поделились своим взглядом на вопрос.
John Doe wrote:Кроме того обдумываю не будет ли полезно разрешить переназначать не только клавиши, но и приоритеты, описания [, ...?]
Не будет ли это фактически параллельной базой макросов? Возможно, в качестве компромисса имеет смысл подумать о переназначении только тех полей, которые не влияют на идентификацию макроса? Скажем, приоритет разрешить менять, а описание - нет.
John Doe wrote:И ещё одна мысль: изменять произвольные параметры
Мысль богатая, но возникает ряд вопросов. Скажем, в новой версии скрипта автор изменил тип переменной - со строки на таблицу. Или просто изменил формат строки. Как быть? Ситуация-то потенциально проблемная... Думаю, стоит заранее хорошенько подумать над возможными подводными камнями и путями их преодоления. Может, как вариант, хранить хэш-код файла скрипта и при его изменении выводить предупреждение?

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

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

Post by John Doe » Mon 18 Jul, 2016 07:37

IgorZ wrote: если Shmuel сделает поле "guid" обязательным для макросов.
Вот обязательным не стоит.
Достаточно просто поддержать его "из коробки", т.е. хранить в таблице макросов, проверять уникальность, может ещё что-то.
IgorZ wrote: Скажем, приоритет разрешить менять, а описание - нет.
Мне лично изменение описания не нужно, но я знаю что есть пользователи, которые действительно правят описания для своих целей.
IgorZ wrote: Скажем, в новой версии скрипта автор изменил тип переменной - со строки на таблицу.
Такой ситуации не будет, поскольку предлагаемая функция будет работать только с теми параметрами, которые предусмотрел автор скрипта явно.
Применительно к примеру под спойлером, чтобы rebind мог повлиять на параметр width, должна быть такая запись:

Code: Select all

local width = width or 40

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

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

Post by Shmuel » Mon 18 Jul, 2016 08:17

John Doe wrote: проверять уникальность
И что делать, если оказался неуникальным: игнорировать, оставлять, выдавать предупреждение?

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

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

Post by John Doe » Mon 18 Jul, 2016 09:15

Выдавать предупреждение, в котором будет предлагаться исправить/оставить/пропустить макрос.
При выборе "оставить" макрос заносится, но без поля guid.

Или же управлять этим поведением через luamacro.ini

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

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

Post by Shmuel » Mon 18 Jul, 2016 09:26

Идея с предупреждением или тем более с luamacro.ini мне не нравится (сложно). Фар не выдаёт предупреждений в случае двух плагинов с одинаковым гуидом и не предусматривает конфигурирование этой ситуации.

Могу сделать следующее: добавить опциональное поле uid (д. быть валидный GUID), а в случае совпадения с гуидом уже загруженного макроса/обработчика события - оставлять это поле пустым.

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

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

Post by John Doe » Mon 18 Jul, 2016 09:34

Shmuel wrote: добавить опциональное поле uid (д. быть валидный GUID)
Мне кажется нет необходимости проверять на валидность гуида.
А если уж проверять, тогда и назвать поле guid, чтобы не множить сущности.
Shmuel wrote: а в случае совпадения с гуидом уже загруженного макроса/обработчика события - оставлять это поле пустым.
Согласен, достаточно и этого.

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

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

Post by IgorZ » Mon 18 Jul, 2016 09:49

John Doe wrote: Вот обязательным не стоит.
Достаточно просто поддержать его "из коробки", т.е. хранить в таблице макросов, проверять уникальность, может ещё что-то.
Как разработчик, я предпочёл бы обязательное указание guid. Очень облегчило бы жизнь.
John Doe wrote: предлагаемая функция будет работать только с теми параметрами, которые предусмотрел автор скрипта явно.
На мой взгляд, если уж делать, то с возможностью заменять значение любой статической переменной. После загрузки содержимого файла это вполне реально. Иначе же теряется самый смак - текст скрипта всё равно должен быть предварительно правлен автором или пользователем. Причём, в случае правки автором лучше сделать ещё один шаг и начать хранить значение в БД.

Last edited by IgorZ on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Удалён оверквотинг

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

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

Post by John Doe » Mon 18 Jul, 2016 09:58

IgorZ wrote: Как разработчик, я предпочёл бы обязательное указание guid. Очень облегчило бы жизнь.
Пользователи не оценят.
IgorZ wrote: На мой взгляд, если уж делать, то с возможностью заменять значение любой статической переменной. После загрузки содержимого файла это вполне реально.
После загрузки уже поздно.
Да и использования debug-функций очень хочется избежать.
IgorZ wrote: сгенерировать uid по шаблону, наподобие того, как это делается сейчас из имени файла и описания
Это не есть хорошо.
Но в rebind мы можем продолжать это делать, во всяком случае пока uid/guid как стандартное поле не будет принят большинством авторов.
IgorZ wrote: дописать в исходный файл в определение макроса.
luamacro не трогает макрофайлы, и не вижу причин для чего бы ему начинать.
Но это можно делать прямо в луа менеджере.

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

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

Post by Shmuel » Mon 18 Jul, 2016 10:01

John Doe wrote: Мне кажется нет необходимости проверять на валидность гуида.
Идея гуидов в их уникальности, и широко используется в Фар. Но с другой стороны, если поле опциональное, то-есть допустимо вообще это не указывать, то можно разрешить любой стринг (и тогда, вероятно, сравнивать их case insensitive).

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

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

Post by John Doe » Mon 18 Jul, 2016 10:09

Shmuel wrote: (и тогда, вероятно, сравнивать их case insensitive)
Логично.

Лично я на практике использую валидные гуиды, просто потому что так проще.
Но (в ранних обсуждениях) многие высказывались против.

Не требуя валидных гуидов мы просто угождаем и тем и этим. Главное условие ведь уникальность.

User avatar
zg
zero-gravity
Posts: 5263
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 43 times
Contact:

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

Post by zg » Mon 18 Jul, 2016 10:40

какое преимущество даёт отказ от валидных гуидов?

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

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

Post by John Doe » Mon 18 Jul, 2016 10:48

1. Возможность использовать в качестве идентификатора произвольную строку, с осмысленным названием.
Макрос ведь не бинарник, поэтому особая строгость и не нужна, имхо.

2. Возможность использовать "условно-постоянные" сгенерированные идентификаторы, на время пока (г)уиды не будут приняты большинством авторов Update хотя при желании гуид можно сделать и из хэша строки..

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

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

Post by Shmuel » Mon 18 Jul, 2016 10:51

zg wrote: какое преимущество даёт отказ от валидных гуидов?
Для непродвинутых авторов легче написать id="Вася", чем непонятно откуда брать валидный гуид. И при этом "Вася" будет более уникальным, чем опустить это поле. (Это так, мысли вслух).

Post Reply

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