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
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 »

Latest post of the previous page:

Тогда ок.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

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

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

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

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

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

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

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

И ещё одна мысль: изменять произвольные параметры
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

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: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

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

Code: Select all

local width = width or 40
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote: проверять уникальность
И что делать, если оказался неуникальным: игнорировать, оставлять, выдавать предупреждение?
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 »

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

Или же управлять этим поведением через luamacro.ini
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

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

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

Shmuel wrote: добавить опциональное поле uid (д. быть валидный GUID)
Мне кажется нет необходимости проверять на валидность гуида.
А если уж проверять, тогда и назвать поле guid, чтобы не множить сущности.
Shmuel wrote: а в случае совпадения с гуидом уже загруженного макроса/обработчика события - оставлять это поле пустым.
Согласен, достаточно и этого.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

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: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

IgorZ wrote: Как разработчик, я предпочёл бы обязательное указание guid. Очень облегчило бы жизнь.
Пользователи не оценят.
IgorZ wrote: На мой взгляд, если уж делать, то с возможностью заменять значение любой статической переменной. После загрузки содержимого файла это вполне реально.
После загрузки уже поздно.
Да и использования debug-функций очень хочется избежать.
IgorZ wrote: сгенерировать uid по шаблону, наподобие того, как это делается сейчас из имени файла и описания
Это не есть хорошо.
Но в rebind мы можем продолжать это делать, во всяком случае пока uid/guid как стандартное поле не будет принят большинством авторов.
IgorZ wrote: дописать в исходный файл в определение макроса.
luamacro не трогает макрофайлы, и не вижу причин для чего бы ему начинать.
Но это можно делать прямо в луа менеджере.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

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

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

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

Не требуя валидных гуидов мы просто угождаем и тем и этим. Главное условие ведь уникальность.
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

какое преимущество даёт отказ от валидных гуидов?
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 »

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

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

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