Организация макросов, пользовательские хоткеи, настройки, …

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

Re: Менеджер Lua-скриптов для Farа

Post by John Doe »

Latest post of the previous page:

John Doe wrote:В Macro Browser alt. давно реализована возможность переназначения (нажатием CtrlShiftF11 в списке макросов).
Правда не вижу нигде чтобы я это анонсировал... Вероятно просто не довёл до конца всё задуманное...
Так и есть, посмотрел в черновиках. Конечной целью была как раз такая система, где для изменения хоткеев любого макроса не нужно предпринимать вообще никаких специальных действий в коде.

Просто открываешь Macro Browser, выбираешь нужный макрос, и задаёшь пользовательское сочетание клавиш, оно сохраняется в базе и используется вместо того что указано в файле.

Shmuel
Posts: 5976
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

Re: Организация макросов, пользовательские хоткеи, настройки

Post by Shmuel »

А как при этом однозначно идентифицировать макрос? Файл может быть переименован, описание может быть идентичное у нескольких макросов, ID макроса может измениться при изменении состава файлов.

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

Re: Организация макросов, пользовательские хоткеи, настройки

Post by John Doe »

В качестве proof of concept я собирался идентифицировать макросы по описанию.
Этот способ конечно не очень надёжен, и в дальнейшем можно придумать что-то получше (есть варианты)

Shmuel
Posts: 5976
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

Re: Организация макросов, пользовательские хоткеи, настройки

Post by Shmuel »

Простейший вариант как бы на поверхности: назначение макросу GUID'а (потребует поддержки со стороны LuaMacro; сделать это очень просто).

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

Re: Организация макросов, пользовательские хоткеи, настройки

Post by John Doe »

Имеется в виду дополнительное (опциональное?) поле в структуре Macro, о котором пользователь должен позаботиться сам (или спецмакросом)?

Shmuel
Posts: 5976
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

Re: Организация макросов, пользовательские хоткеи, настройки

Post by Shmuel »

Дополнительное опциональное поле, заполняется автором макроса, не изменяется при обновлениях макроса.

IgorZ
Posts: 660
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 12 times
Been thanked: 52 times

Re: Организация макросов, пользовательские хоткеи, настройки

Post by IgorZ »

John Doe wrote:
John Doe wrote:В Macro Browser alt. давно реализована возможность переназначения (нажатием CtrlShiftF11 в списке макросов).
Правда не вижу нигде чтобы я это анонсировал... Вероятно просто не довёл до конца всё задуманное...
Так и есть, посмотрел в черновиках. Конечной целью была как раз такая система, где для изменения хоткеев любого макроса не нужно предпринимать вообще никаких специальных действий в коде.

Просто открываешь Macro Browser, выбираешь нужный макрос, и задаёшь пользовательское сочетание клавиш, оно сохраняется в базе и используется вместо того что указано в файле.
Что самое забавное: в последнее время тоже серьёзно обдумываю реализацию этой идеи. Видимо, данное развитие мысли закономерно.
Shmuel wrote:Дополнительное опциональное поле, заполняется автором макроса, не изменяется при обновлениях макроса.
Идея очень вкусная, я поддерживаю всеми руками. Смущает один нюанс: как быть с теми макросами, для которых гуид не задан? Навскидку, конечно, можно так: <полное имя файла с макросом, включая путь, с поддержкой переменных окружения>:<смещение до начала определения макроса в файле>. Но это тоже не совсем удобно. И не будет работать для макросов не из файлов, хотя это уже, наверное, не критично.

Кстати, можно ли добавить следующую функциональность: при чтении макросов из файла сохранять смещение до начала его определения, чтобы затем получать его через debug.getinfo() или аналогичным способом, как это делается для функций?

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

Re: Организация макросов, пользовательские хоткеи, настройки

Post by John Doe »

IgorZ wrote:Смущает один нюанс: как быть с теми макросами, для которых гуид не задан?
Ничего не делать.
IgorZ wrote:Кстати, можно ли добавить следующую функциональность: при чтении макросов из файла сохранять смещение до начала его определения,
Функциональность, о которой мы говорим, может быть реализована и без каких-либо изменений в LuaMacro.
Фокус в том, что функцию Macro можно подменить на собственную (идею можно посмотреть в MacroBrowserAlt).
А из собственной функции мы легко можем получить место её вызова - debug.getinfo(2).currentline - это и будет позиция начала определения макроса.

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

Re: Организация макросов, пользовательские хоткеи, настройки

Post by John Doe »

Вот рабочий прототип модуля, реализующего 'лёгкое переназначение' клавиш, не затрагивая файлы макросов:
Этот модуль должен инициализироваться до всех определений макросов, поэтому его загрузку необходимо прописать в файле _macroinit.lua: require'rebind'

Для того, чтобы макрос можно было переназначить, у него должен быть задан идентификатор (поле guid). Например:
  1. Macro { description="test rebind 1";
  2.   area="Shell"; key="F1"; guid="5D3CBA90-F32D-433C-B016-9BB4AF96FAC1";
  3.   action=function() msgbox"just test" end;
  4. }
Вот и всё. Для переназначения клавиш служит функция RebindMacro, возвращаемая в таблице модуля.
Запустить можно даже из командной строки:

Code: Select all

lm:post require"rebind".RebindMacro"5D3CBA90-F32D-433C-B016-9BB4AF96FAC1"
Разумеется это только для демонстрации, а чтобы стало по-настоящему удобно переназначать клавиши необходимо сделать ещё один шаг — внедрить функцию переназначения в какой-либо из существующих MacroBrowser'ов.

P.S.
IgorZ
Обратите внимание, теперь в таблице макроса, получаемой по mf.GetMacroCopy, присутствует поле defline, в котором хранится номер строки, с которой начинается определение макроса.

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

Re: Организация макросов, пользовательские хоткеи, настройки

Post by John Doe »

SUSim wrote:Кстати, guid'ы к макросам делать?
Есть только прототип этой функциональности. И автор LuaMacro пока не давал комментариев на этот счёт, т.е. будет ли нечто подобное 'из коробки' — неизвестно.
Как бы там ни было, но в своём Macro Browser alt. я обязательно реализую такое 'лёгкое переназначение'.
(Хотя в качестве идентификаторов я бы предпочёл произвольные строки, а не гуиды)
SUSim wrote:или подход с отдельными файлами настроек лучше???
Подход, предлагаемый выше, решает только вопрос с переназначением клавиш, об остальных настройках надо заботиться самостоятельно, как и раньше.

Вообще такой общий способ переназначения мне нравиться тем, что:
1) не требует от автора скрипта вообще никаких усилий по реализации
2) избавляет пользователя от необходимости вникать в особенности реализации всего велопарка настроек (каждый автор ведь всё делает по-своему)

Собственно, если вы как автор предпочитаете настройки/хоткеи в файлах, то это ваше право.
Я лично не вижу препятствий в том, чтобы совмещать оба подхода, а пользователь уж решит как ему удобнее.

edd_k
Posts: 3
Joined: Thu 26 Dec, 2013 17:58

Re: Организация макросов, пользовательские хоткеи, настройки

Post by edd_k »

John Doe wrote: 2) избавляет пользователя от необходимости вникать в особенности реализации всего велопарка настроек (каждый автор ведь всё делает по-своему)
С пользователем дело обстоит так:
- ставит пользователь Far 3 x64;
- потирая рученки записывает макрос;
- проверяет - макрос работает;
- жмет F11 \ Macro Browser - видит там свой макрос, правда как-то не понятно, но по хоткею видно, что это он (да и других нету);
- жмет F4 и получает "Имя файла недоступно";
- перекособочившись в лице, перезапускает Far и обнаруживает, что макроса больше нет;
- совершенно обоснованно изрекает связку матов в сторону фанатов вской скриптовой фигни типа lua, ибо до этого все работало и было прозрачно даже для школьника. А теперь lua, какие-то недоступные файлы и записанный макрос нигде не сохранился.

Вот такие дела со стороны пользователя, который не понимает, зачем разработчики то и дело добавляют геммороя и портят то, что было почти идеально.

edd_k
Posts: 3
Joined: Thu 26 Dec, 2013 17:58

Re: Организация макросов, пользовательские хоткеи, настройки

Post by edd_k »

P.S.: В догонку:
- пользователь - администратор;
- винда - семерка;
- UAC выключен;
- владелец всех файлов/папок на диске - "Администраторы";
- "Все" имеют полные права на эти все файлы.

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

Re: Организация макросов, пользовательские хоткеи, настройки

Post by John Doe »

Испокон веков для сохранения записанных макросов надо нажать ShiftF9 чтобы сохранить конфигурацию (если у вас до сих пор отключено автосохранение).
Только в этой теме это оффтопик.

edd_k
Posts: 3
Joined: Thu 26 Dec, 2013 17:58

Re: Организация макросов, пользовательские хоткеи, настройки

Post by edd_k »

Испокон веков для сохранения записанных макросов надо нажать ShiftF9 чтобы сохранить конфигурацию
Что есть НЕ интуитивно.

И испокон веков я помню запрос на сохранение макроса. А необходимости фиксировать весь конфиг фара после записи мне не приходилось.

Ну и если бы конфиг макросов находился в одном файле, то и сушить голову вопросом "как однозначно переназначать хоткеи" не пришлось бы (ибо все ОДНОзначно в ОДНОМ файле). Причем, кому - диалог, а кто захочет - вручную может править файл (а не 100 файлов). Одни удобства.

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

Re: Организация макросов, пользовательские хоткеи, настройки

Post by John Doe »

Погуляйте-ка до завтрашнего вечера, может память восстановится.
Или попробуйте тут освежить.

2All
Прошу оффтопик не продолжать.

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

Re: Организация макросов, пользовательские хоткеи, настройки

Post by John Doe »

Вниманию противников хранения переназначенных клавиш в базе:
Есть и другой вариант, без использования базы — см. давнюю идею о переопределении клавиш посредством Rebind {...} (а недавно подобное пожелание высказывал Max Rusov).

Функция Rebind по употреблению чем-то схожа с Macro {...}.
Допустим, у нас определены такие макросы:
Чтобы их переопределить, достаточно создать другой макрофайл с переопределениями:

Code: Select all

--local Rebind = require'rebind'.Rebind

Rebind { 
  uid="B25591B0-4E9C-46BC-82F1-259F855F4DBA";
  key="CtrlF1";  disabled=true;
}

Rebind {
  uid="B8FAEC0A-EC03-4C0B-BF49-D039994459C0";
  key="CtrlF1";
}
Как видно, доступны такие поля:
uid — любой уникальный идентификатор, в данном случае гуид
key — новая клавиша, переопределяющая ту, что была указана в декларации Macro {...}
disabled — возможность просто отключить макрос

Post Reply

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