На форуме выкладываются множество макросов. Некоторые идут целыми пакетами.
Очевидно что не все макросы могут быть нужны пользователю, а значит они напрасно занимают клавиши.
Или макросы хочется использовать с другими сочетаниями, а не с теми, которые определил автор.
Можно конечно просто отредактировать макросы, но при каждом обновлении процедуру придётся повторить.
Ниже предлагается простое централизованное решение, позволяющее отключить любой сторонний макрос, или переопределить его клавиатурную комбинацию.
Прототип обсуждался ранее, а теперь всё это можно делать интерактивно, с помощью одного из двух альтернативных макро браузеров:
Del — запретить/разрешить макрос. Запрещённый макрос отображается серым.
ShiftF4 — (пере)назначить сочетание клавиш.
В диалоге можно указать несколько клавиш или регэксп. Пустая строка отменяет переназначение.
После этого все макросы перезагружаются, чтобы изменения вступили в силу.
Переназначенные макросы индицируются звёздочкой перед клавишей.
к перечисленным выше комбинациям клавиш также расширяется дополнительное меню фильтров Misc,
добавляются такие пункты:
rebinded — макросы с переназначенными клавишами
disabled — запрещённые макросы
(db) — макросы, настройки которых прочитаны из базы
(file) — макросы, настройки которых прочитаны из файла bindings
rebindable — макросы, которые возможно переназначить
no id — макросы без идентификатора
Все настройки (состояние запрета и переназначенные клавиши) сохраняются в базе, и загружаются при запуске фара.
Также поддерживается альтернативный способ хранения настроек, в файле %FARPROFILE%\Macros\scripts\bindings.
В MacroBrowser alt для этого служит комбинация CtrlShiftF4, открывающая редактор, и вставляющая шаблон для настройки текущего макроса.
Для макросов, переназначенных таким образом, клавиши Del и ShiftF4 действуют иначе: открывают файл настроек в нужном месте.
Формат файла настроек не описываю, т.к. всё должно быть понятно при вставке шаблона по CtrlShiftF4.
Пример получившегося файла:
Всё что требуется для работы перечисленных функций — это подключить в _macroinit.lua модуль rebind: require"rebind".
На практике полезно дополнительно настроить модуль:
local rebind = require"rebind"
if type(rebind)=="table" then
rebind.Setup {auto_uids=true,no_warnings=true} -- опционально: разрешаем автоназначение идентификаторов, без вывода ошибок
rebind.LoadBindings() -- опционально: загружаем настройки из файла "bindings"
end
Об идентификаторах макросов:
В идеале в определение каждого макроса следует добавить поле id с уникальным идентификатором.
Или разрешить автоматическую их генерацию (auto_uids=true) на основе имени файла и описания макроса.
При загрузке макросов возможна ситуация, когда id получается неуникальным.
В этом случае тут же будет предложено его исправить.
Можно отключить предупреждения (no_warnings=true), проблем не будет, но некоторые макросы невозможно будет переназначить.
Требования: Far 3.0 build >4743 (luamacro build 580)
Обновил версию в шапке.
Помимо вашей строчки изменения в основном технические: Info для ScriptBrowser, переименованы/дооформлены вспомогательные файлы, добавлен макрос для вставки шаблона в bindings.
IgorZ wrote: Чтобы он заработал с уже имевщимся до костыля профилем, надо произвести любую манипуляцию с rebind
Или запустить из командной строки lua:mf.msave("REBIND","RebindProfile","REBIND")
Если закомментировать строку rebind.Setup {auto_uids=true,no_warnings=true} в _macroinit.lua то ошибка не появляется. FAR 4972, в более ранних не проверял.
John Doe wrote: ↑Mon 05 Jun, 2017 21:26
Там строка 63 закомментирована напрасно, по-видимому.
А ещё лучше наверно заменить её на if not filename then return mf.AddMacro(m) end
Так как у меня Alt<что-нибудь> нужны для модуля PanelAutofilter (от JohnDoe), то AltT:double не работает, я поменял на CtrD:double.
Все круто, кроме того что у меня теперь рушиться модуль "rebind" (viewtopic.php?t=10376)