John Doe wrote:В Macro Browser alt. давно реализована возможность переназначения (нажатием CtrlShiftF11 в списке макросов).
Правда не вижу нигде чтобы я это анонсировал... Вероятно просто не довёл до конца всё задуманное...
Так и есть, посмотрел в черновиках. Конечной целью была как раз такаясистема, где для изменения хоткеев любого макроса не нужно предпринимать вообще никаких специальных действий в коде.
Просто открываешь Macro Browser, выбираешь нужный макрос, и задаёшь пользовательское сочетание клавиш, оно сохраняется в базе и используется вместо того что указано в файле.
А как при этом однозначно идентифицировать макрос? Файл может быть переименован, описание может быть идентичное у нескольких макросов, ID макроса может измениться при изменении состава файлов.
В качестве proof of concept я собирался идентифицировать макросы по описанию.
Этот способ конечно не очень надёжен, и в дальнейшем можно придумать что-то получше (есть варианты)
John Doe wrote:В Macro Browser alt. давно реализована возможность переназначения (нажатием CtrlShiftF11 в списке макросов).
Правда не вижу нигде чтобы я это анонсировал... Вероятно просто не довёл до конца всё задуманное...
Так и есть, посмотрел в черновиках. Конечной целью была как раз такая система, где для изменения хоткеев любого макроса не нужно предпринимать вообще никаких специальных действий в коде.
Просто открываешь Macro Browser, выбираешь нужный макрос, и задаёшь пользовательское сочетание клавиш, оно сохраняется в базе и используется вместо того что указано в файле.
Что самое забавное: в последнее время тоже серьёзно обдумываю реализацию этой идеи. Видимо, данное развитие мысли закономерно.
Shmuel wrote:Дополнительное опциональное поле, заполняется автором макроса, не изменяется при обновлениях макроса.
Идея очень вкусная, я поддерживаю всеми руками. Смущает один нюанс: как быть с теми макросами, для которых гуид не задан? Навскидку, конечно, можно так: <полное имя файла с макросом, включая путь, с поддержкой переменных окружения>:<смещение до начала определения макроса в файле>. Но это тоже не совсем удобно. И не будет работать для макросов не из файлов, хотя это уже, наверное, не критично.
Кстати, можно ли добавить следующую функциональность: при чтении макросов из файла сохранять смещение до начала его определения, чтобы затем получать его через debug.getinfo() или аналогичным способом, как это делается для функций?
IgorZ wrote:Смущает один нюанс: как быть с теми макросами, для которых гуид не задан?
Ничего не делать.
IgorZ wrote:Кстати, можно ли добавить следующую функциональность: при чтении макросов из файла сохранять смещение до начала его определения,
Функциональность, о которой мы говорим, может быть реализована и без каких-либо изменений в LuaMacro.
Фокус в том, что функцию Macro можно подменить на собственную (идею можно посмотреть в MacroBrowserAlt).
А из собственной функции мы легко можем получить место её вызова - debug.getinfo(2).currentline - это и будет позиция начала определения макроса.
Используется ключ REBIND в базе LuaMacro.
Информация о переназначенных макросах записывается в подключи с именами-гуидами.
Каждая запись представляет собой таблицу { key, description, FileName }.
Фактически используется только поле key, а остальные выполняют лишь информационную функцию, на случай если понадобится определить от каких макросов остались те или иные биндинги (по гуидам не очень-то поймёшь :-)
Этот модуль должен инициализироваться до всех определений макросов, поэтому его загрузку необходимо прописать в файле _macroinit.lua: require'rebind'
Для того, чтобы макрос можно было переназначить, у него должен быть задан идентификатор (поле guid). Например:
Разумеется это только для демонстрации, а чтобы стало по-настоящему удобно переназначать клавиши необходимо сделать ещё один шаг — внедрить функцию переназначения в какой-либо из существующих MacroBrowser'ов.
P.S. IgorZ
Обратите внимание, теперь в таблице макроса, получаемой по mf.GetMacroCopy, присутствует поле defline, в котором хранится номер строки, с которой начинается определение макроса.
Есть только прототип этой функциональности. И автор LuaMacro пока не давал комментариев на этот счёт, т.е. будет ли нечто подобное 'из коробки' — неизвестно.
Как бы там ни было, но в своём Macro Browser alt. я обязательно реализую такое 'лёгкое переназначение'.
(Хотя в качестве идентификаторов я бы предпочёл произвольные строки, а не гуиды)
SUSim wrote:или подход с отдельными файлами настроек лучше???
Подход, предлагаемый выше, решает только вопрос с переназначением клавиш, об остальных настройках надо заботиться самостоятельно, как и раньше.
Вообще такой общий способ переназначения мне нравиться тем, что:
1) не требует от автора скрипта вообще никаких усилий по реализации
2) избавляет пользователя от необходимости вникать в особенности реализации всего велопарка настроек (каждый автор ведь всё делает по-своему)
Собственно, если вы как автор предпочитаете настройки/хоткеи в файлах, то это ваше право.
Я лично не вижу препятствий в том, чтобы совмещать оба подхода, а пользователь уж решит как ему удобнее.
John Doe wrote:
2) избавляет пользователя от необходимости вникать в особенности реализации всего велопарка настроек (каждый автор ведь всё делает по-своему)
С пользователем дело обстоит так:
- ставит пользователь Far 3 x64;
- потирая рученки записывает макрос;
- проверяет - макрос работает;
- жмет F11 \ Macro Browser - видит там свой макрос, правда как-то не понятно, но по хоткею видно, что это он (да и других нету);
- жмет F4 и получает "Имя файла недоступно";
- перекособочившись в лице, перезапускает Far и обнаруживает, что макроса больше нет;
- совершенно обоснованно изрекает связку матов в сторону фанатов вской скриптовой фигни типа lua, ибо до этого все работало и было прозрачно даже для школьника. А теперь lua, какие-то недоступные файлы и записанный макрос нигде не сохранился.
Вот такие дела со стороны пользователя, который не понимает, зачем разработчики то и дело добавляют геммороя и портят то, что было почти идеально.
P.S.: В догонку:
- пользователь - администратор;
- винда - семерка;
- UAC выключен;
- владелец всех файлов/папок на диске - "Администраторы";
- "Все" имеют полные права на эти все файлы.
Испокон веков для сохранения записанных макросов надо нажать ShiftF9 чтобы сохранить конфигурацию (если у вас до сих пор отключено автосохранение).
Только в этой теме это оффтопик.
Испокон веков для сохранения записанных макросов надо нажать ShiftF9 чтобы сохранить конфигурацию
Что есть НЕ интуитивно.
И испокон веков я помню запрос на сохранение макроса. А необходимости фиксировать весь конфиг фара после записи мне не приходилось.
Ну и если бы конфиг макросов находился в одном файле, то и сушить голову вопросом "как однозначно переназначать хоткеи" не пришлось бы (ибо все ОДНОзначно в ОДНОМ файле). Причем, кому - диалог, а кто захочет - вручную может править файл (а не 100 файлов). Одни удобства.
Вниманию противников хранения переназначенных клавиш в базе:
Есть и другой вариант, без использования базы — см. давнюю идею о переопределении клавиш посредством Rebind {...} (а недавно подобное пожелание высказывал Max Rusov).
Функция Rebind по употреблению чем-то схожа с Macro {...}.
Допустим, у нас определены такие макросы:
Как видно, доступны такие поля: uid — любой уникальный идентификатор, в данном случае гуид key — новая клавиша, переопределяющая ту, что была указана в декларации Macro {...} disabled — возможность просто отключить макрос