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

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

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

Post by John Doe »

Latest post of the previous page:

Вниманию противников хранения переназначенных клавиш в базе:
Есть и другой вариант, без использования базы — см. давнюю идею о переопределении клавиш посредством 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 — возможность просто отключить макрос
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

uid как и сказано выше, может представлять собой любую строку, главное чтобы она была уникальна.
Часто для этого используют гуиды. Кто не в курсе — сгенерировать гуид можно даже из командной строки
Да, только мы ведь уже понаустанавливали стотыщ макросов, и никакие гуиды там не прописаны...

В общем-то в качестве идентификатора макроса можно было бы использовать его описание + имя макрофайла.
Уникальность получившихся идентификаторов можно контролировать, и в случае совпадений выдавать предупреждение.
Для надёжности этот режим стоит по умолчанию запретить, а в случае необходимости активировать с помощью настроек, вот так:
require'rebind'.Setup {auto_uids=true}

(Потенциально) выдаваемые предупреждения служат для того, чтобы пользователь сразу устранил конфликт.
Но если, допустим, возиться сейчас нет желания, то предупреждения можно временно отключить:
require'rebind'.Setup {auto_uids=true,no_warnings=true}

Всё, теперь можно переназначения записать так:

Code: Select all

Rebind { 
  FileName="test_rebind.lua";
  description="test rebind 1";
  key="CtrlF1";  disabled=true;
}

Rebind {
  FileName="test_rebind.lua";
  description="test rebind 2";
  key="CtrlF1";
}
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Ещё один момент: необходимо чтобы переопределения загрузились до соответствующих макросов.
Лучше всего загружать биндинги из _macroinit.lua.
Можно разместить переопределения прямо в нём, но имхо удобнее выделить для них отдельный файл, загрузку которого осуществлять из _macroinit.lua.
Чтобы облегчить задачу — можно предложить функцию LoadBindings(file), если file не указан, то используется scripts\bindings.
...

В общем, всё вышеописанное реализовано, и вроде работает:


P.S.
Чтобы воспользоваться автоматическим назначением уидов надо в файле _macroinit.lua раскоментировать строку
--rebind.Setup {auto_uids=true,no_warnings=true}

Update:
Новая версия пока здесь: http://forum.farmanager.com/viewtopic.p ... 34#p120234
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Задача изменения пользовательских шорткатов из общего интерфейса вроде как решена.
Но у скрипта помимо этого могут быть и другие настройки.
Хочу предложить идею общего управления настройками любого скрипта.

В первую очередь, скрипт необходимо однозначно идентифицировать.
И нужна команда для регистрации скрипта.
В идеале это должна быть встроенная команда LuaMacro, но для примера можно сделать всё обычным модулем:
  1. local settings = { --sample settings for script "xxx"
  2.  
  3.   xxx = {a=1,b=2}
  4.  
  5. }
  6.  
  7. local scripts = {}
  8.  
  9. local function regscript(t,FullPath)
  10.  
  11.   if not type(t)=="table" then return end
  12.  
  13.   if not t.uid then return end --check if uid is present
  14.  
  15.   if scripts[t.uid] then return end --check if uid is unique
  16.  
  17.   t.FileName = FullPath
  18.  
  19.   scripts[t.uid] = t
  20.  
  21.   local e = settings[t.uid]
  22.  
  23.   if e then
  24.  
  25.     local env = getfenv(2)
  26.  
  27.     le(env)
  28.  
  29.     for k,v in pairs(e) do
  30.  
  31.       if env[k]==nil then
  32.  
  33.         env[k] = v
  34.  
  35.       end
  36.  
  37.     end
  38.  
  39.   end
  40.  
  41. end
  42.  
  43. return regscript
А для самого скрипта, требующего настроек, всё может выглядеть так:

Code: Select all

require"regscript"{uid="xxx"}

a = a or 0  -- defaults
b = b or 0  --

far.Show(a,b) --test
Запустив этот пример мы увидим "1, 2", значит наши настройки из модуля подхватились.

В этой иллюстрации настройки a и b жёстко зашиты в модуле.
На практике они могут читаться из пользовательского файла, или из базы LuaMacro.

Преимущество такого подхода: автору скрипта не требуется выдумывать велосипед для задания и хранения настроек.
И пользователю скрипта тоже легче жить, т.к. не приходится вникать в особенности настроек каждого скрипта.
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

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

Post by Wave »

Из личного.
Как бы мне не хотелось не трогать скачаные макросы, но вообще-то я их устанавливаю одновременно редактируя дескрипшн. В таком стиле:

© SimSU: Panel — Переименование с сохранением расширения.
© SimSU: Editor — Уменьшение отступа помеченного блока.
Shell: создание папки с именем = текущей дате
RESearch: Shell - ShiftF7

Это ОЧЕНЬ помогает находить нужные макросы в макробраузере и всё такое. Дополнительный уровень сортировки.
Так что rebind для меня не так чтобы слишком полезен. Он не снимает необходимость лезть в исходный макр. В общем, если предложение пройдёт, то пожелание также уметь переопределять описание макроса.

Второе. Дошли-таки руки начать вносить макросы в FarMenu.ini и Editor.Menu.lua. И оказалось, что великолепно всё работает даже если ставить макросам шоткаты типа calend и checkspel. Да, макросы при этом вызываются ТОЛЬКО из меню, но зато полностью исключаются конфликты шоткатов. А заодно шоткаты стали немного намекать на то, что они делают.
Пользуюсь ФАРом больше 20 лет © собирательный.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Wave wrote:Как бы мне не хотелось не трогать скачаные макросы, но вообще-то я их устанавливаю одновременно редактируя дескрипшн. В таком стиле:

© SimSU: Panel — Переименование с сохранением расширения.
© SimSU: Editor — Уменьшение отступа помеченного блока.
Shell: создание папки с именем = текущей дате
RESearch: Shell - ShiftF7

Это ОЧЕНЬ помогает находить нужные макросы в макробраузере и всё такое. Дополнительный уровень сортировки.
Сценарий использования мне пока не до конца ясен.
Важно ДЛЯ ЧЕГО вы ищете макросы, и что с ними далее делаете.

Менять комментарий с помощью rebind тоже ВОЗМОЖНО, но прежде давайте рассмотрим другие варианты решения, доступные в MacroBrowser alt.
  • Перед тем, как искать макросы в огромном списке, можно применить фильтр. По имени файла, по области, и т.д.
  • Можно (планируется) выводить дополнительную колонку с именем файла (сортировка по файлу есть).
    Есть режим группировки: все макросы группируются согласно файлу, в котором определены.
  • Можно (в перспективе) выводить дополнительную колонку с тагами, которые вы можете задавать сами для каждого макроса.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Wave wrote:Второе. Дошли-таки руки начать вносить макросы в FarMenu.ini и Editor.Menu.lua. И оказалось, что великолепно всё работает даже если ставить макросам шоткаты типа calend и checkspel. Да, макросы при этом вызываются ТОЛЬКО из меню, но зато полностью исключаются конфликты шоткатов. А заодно шоткаты стали немного намекать на то, что они делают.
eval нельзя назвать удобным средством вызывать макросы из меню.
Такие макросы по сути уже не являются макросами, и по хорошему их стоит поместить в библиотеку функций (которые можно назвать как угодно).

Но ваша идея мне тоже нравится. И ведь не обязательно заменять шорткат, иногда лучше его дополнить, просто добавив ещё одно имя, по которому вы будете вызывать его из своих меню.
Rebind кстати эту задачу успешно решает.
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

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

Post by Wave »

1. Повторюсь — дополнительный уровень фильтрации. Например, увидеть только макросы для панелей, причём, из них только макросы из набора SimSU. Причём, увидеть сразу, не фильтруя, потому что они уже отсортированы. Собственно браузером макросов я пользовался ещё во втором ФАРе, когда до луа было далеко, а макробраузер был нативным плагином. Именно тогда завёл себе такую практику. Может быть сейчас это уже не нужно, если привыкнуть активно фильтровать макры, запомнить все хоткеи и возможности MacroBrowser alt., но я не так часто им пользуюсь, чтобы на память всё знать. Вот занялся давеча макросами, мне пришлось лезть в файл, чтобы вспомнить, как этот макробраузер вызвать. И читать справку, чтобы вспомнить, где какая сортировка. Не говоря уже о том, что некоторые колонки мне не совсем понятны. Например, что за галочки стоят перед некоторыми макросами? Перед колонкой макрообластей.
На таких условиях мне удобней отсортировать по описаниям, где сразу видно, к чему относится макрос.

2. Что поделать, если эта библиотека функций оформлена именно как макрос? И хорошо если в этом макросе есть отдельно функция, а отдельно её вызов по хоткею, тогда в принципе её можно отправить в модули и из меню вызывать именно как require "mymacros"; functionOfMacros(argument); А если нет? Зачем оно мне нужно именно в меню, я уже писал. А чтобы организовать это всё у себя «правильно», мне нужно гораздо плотнее и глубже это всё освоить-перебрать и переписать много чего скачанного с форума. Либо просто закинуть в scripts и засунуть в меню eval("hotkey", 2);
Пользуюсь ФАРом больше 20 лет © собирательный.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Wave wrote:[...]запомнить все хоткеи и возможности MacroBrowser alt., но я не так часто им пользуюсь, чтобы на память всё знать. Вот занялся давеча макросами, мне пришлось лезть в файл, чтобы вспомнить, как этот макробраузер вызвать. И читать справку, чтобы вспомнить, где какая сортировка.
Нижний заголовок списка содержит основные клавиши, их достаточно для эпизодического использования.
Wave wrote:Не говоря уже о том, что некоторые колонки мне не совсем понятны. Например, что за галочки стоят перед некоторыми макросами? Перед колонкой макрообластей.
Перед колонкой макрообластей галка обозначает то же, что и в штатном браузере: макросы, применимые к области, из которой вы вызвали браузер. Ctrl-H фильтрует список соответственно.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Wave wrote:1. Повторюсь — дополнительный уровень фильтрации. Например, увидеть только макросы для панелей, причём, из них только макросы из набора SimSU. Причём, увидеть сразу, не фильтруя, потому что они уже отсортированы.[...]
На таких условиях мне удобней отсортировать по описаниям, где сразу видно, к чему относится макрос.
Но чтобы достичь этого вам пришлось вручную править описания.
А MacroBrowser alt. мог бы дать ту же возможность одним нажатием: имя файла начинается с SimSU, описания отсортированы, отображаются только макросы Shell.
Wave wrote:2. Что поделать, если эта библиотека функций оформлена именно как макрос?
Я ведь выше и написал, что ваша идея хороша, и имена даже можно добавлять к имеющимся шорткатам.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

Т.е. частично вопрос можно решить добавлением в MBA автогенератора описания, берущего по uid сопоставленный ник, добавляет двоеточие с пробелом, область действия с точкой и пробелом, и уже после описание. Вопрос лишь в том, что нужен некий "стандарт" в описании макросов.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Я очень сомневаюсь, что можно рассчитывать на какой-то стандарт в обозримом будущем.
Реальнее сделать в MBA кастомную колонку по заданному шаблону. Вместо автора использовать таг.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

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

Post by gotar »

John Doe, используете ли Вы все о чем Вы здесь писали? В частности, работает ли rebind после изменения возвращаемого значения у AddMacro?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

gotar wrote: используете ли Вы все о чем Вы здесь писали?
Использую.
Всё ли - не знаю, уточните вопрос.
gotar wrote: работает ли rebind
Да, с этим исправлением http://forum.farmanager.com/viewtopic.p ... 81#p133781
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

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

Post by gotar »

Могли бы Вы опубликовать тот rebind, которым Вы пользуетесь?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Я год к нему не прикасался, и даже не помню в каком он состоянии.
Функций там не добавилось.
Post Reply

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