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

Здесь обсуждается всё, что касается макросов.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

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

Post by gotar »

Хочу поделиться своей проблемой:

Сейчас в наборе макросов от SimSU 44 макрофайла в каждом из которых определено не меньше 5 макроклавиш. Уверен, что не найдется ни одного человека, который способен запомнить такое большое количество клавиш. Думаю, что даже сам автор не использует все макросы, входящие в его набор. Поэтому мне приходится, каждый раз после обновления макросов заменять некоторые макросы с Macro на NoMacro. И не дай бог я где-то забуду это сделать. Фар может начать вести себя совершенно хаотичным образом. Понять, что проблема в макросах можно только запустив Фар с ключом /m. Никакой возможности понять, является ли данная клавиша горячей клавишей фара, макроклавишей или обычной клавишей нет. Если макрос, повешенный на клавишу вообще то полезен, но в данную минуту тебе мешает, никакой возможности вернуть на время одной клавише действие по умолчанию нет.
Поэтому вместо макроклавиш я предпочитаю использовать usermenu. У меня на клавишу Ctrl-K повешен макрос, вызывающий меню. Сочетания подобные Ctrl-K r я набираю не задумываясь на автомате. Если я забыл про какую то клавишу, подсказка у меня будет сразу перед глазами. При таком подходе у меня три проблемы:

1. Меню для панелей и редактора очень похожи. Мне бы хотелось иметь или какой-нибудь механизм наследования меню, или includes, или условия для пунктов usermenu (для редактора выполнить текущий файл, как lua программу, для панелей передать фай под курсором в lm;post; некоторые пункты меню имеют смысл только для редактора или только для панелей)
2. Вызов lua функций из меню выглядит довольно неуклюже.

Code: Select all

lm:post func(params)
3. Все луа писатели делают функции внутри макро файла локальными. Поэтому в конце этих файлов приходится писать строчки типа _G.func_name=func_name, что создает еще одну трудность при обновлении макроса.

Кто нибудь еще сталкивался с подобными проблемами? Как Вы их решали?
Last edited by gotar on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Убрано спец. оформление (значок)
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Организация Макросов

Post by SUSim »

Я пользуюсь всеми опубликованными макросами + еще десятка 2 специфических (не для всех), конечно не всеми ежедневно.
В данное время я провожу переработку своих (и нетолько) макросов так, чтобы у каждого пользователя были свои настройки, в том числе и клавиш, приоритетов и т.п. Эти настройки персональны не только для копии фара, а для текущего пользователя, и не теряются при обновлении макросов (ну кроме глобальных переделок затрагивающих работу с самими настройками). И для отключения макроса достаточно в файле персональных настроек указать в качестве клавиши "".
- Приоритет настроек таков Локальные_пользовательские - Глобальные_фаровские - Умолчательные_макросовские.
- проходят тестирование (тут ещё ломка апи...) да и времени не хватает, так что пока не публикую :(
SimSU ··· ·· -- ··· ··-
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 »

Отвечу на некоторые пункты.
gotar wrote:Поэтому мне приходится, каждый раз после обновления макросов заменять некоторые макросы с Macro на NoMacro. И не дай бог я где-то забуду это сделать.
Зачем помнить, напишите скрипт делающий это за вас.
gotar wrote:Понять, что проблема в макросах можно только запустив Фар с ключом /m. Никакой возможности понять, является ли данная клавиша горячей клавишей фара, макроклавишей или обычной клавишей нет.
Ctrl-<точка>
gotar wrote:Если макрос, повешенный на клавишу вообще то полезен, но в данную минуту тебе мешает, никакой возможности вернуть на время одной клавише действие по умолчанию нет.
Ctrl-<точка>
gotar wrote:Вызов lua функций из меню выглядят довольно неуклюже.
Надо использовать не юзерменю, а собственное меню. Есть и пример готового решения.
gotar wrote:3. Все луа писатели делают функции внутри макро файла локальными. Поэтому в конце этих файлов приходится писать строчки типа _G.func_name=func_name, что создает еще одну трудность при обновлении макроса.
Напишите скрипт делающий это за вас.
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 »

John Doe wrote:
gotar wrote:Вызов lua функций из меню выглядят довольно неуклюже.
Надо использовать не юзерменю, а собственное меню. Есть и пример готового решения.
Всё ещё проще, используйте меню конфликта макросов.
Т.е. назначьте все такие макросы на CtrlK, и меню для выбора появится автоматически.
Соответственно в панелях/редакторе/вьювере состав меню будет разный, без всяких усилий с вашей стороны.

P.S.
Возможно хоткеи в таком меню надо будет как-то отрегулировать.
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 »

gotar wrote:Сейчас в наборе макросов от SimSU 44 макрофайла в каждом из которых определено не меньше 5 макроклавиш. Уверен, что не найдется ни одного человека, который способен запомнить такое большое количество клавиш.
Я этим набором не пользуюсь, но думаю что 44 файла, с рассеяными по ним клавишами это действительно не очень удобно.

В таких случаях можно порекомендовать разделить весь набор на несколько независимых пакетов, и/или отделить определения функций от назначения клавиш (например вынести назначения клавиш в конец файлов, для удобства их изменения. Или же вообще функции вынести в модуль, оставив в файлах только определения клавиш.)

Есть также способы сделать назначения клавиш более чистым и наглядным, см. http://forum.farmanager.com/viewtopic.php?f=15&t=7584

P.S.
SUSim
Вышеперечисленное всего лишь общие соображения, насколько они применимы к вашему набору я судить не могу.
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Организация Макросов

Post by SUSim »

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

John Doe, каково ваше мнение о примере?

gotar, я обновил макросы (те что переделал), теперь, для них нет нужны менять текст самих файлов макросов, достаточно создать соответствующие файлы конфигурации в Profile\SimSU\ - смотри первые строки макроса, где можно настроить НАВСЕГДА свои клавиши вызова или отключить задав в качестве вызова "", так удобней?
SimSU ··· ·· -- ··· ··-
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 »

SUSim wrote:Всё таки, я не собираюсь использовать глобальные пакеты
Я не знаю что такое глобальные пакеты, а если речь о том, что я предлагал выше, то имелось ввиду разделить один большой пакет на несколько более мелких, но функционально независимых друг от друга.
Не факт, что это подходит вашему пакету, и не факт, что это было бы удобно вам как мейнтейнеру, но мне (как пользователю) проще было бы поставить и освоить только нужную мне часть.

А в случае установки большого пакета я гарантировано получу 150 конфликтующих макросов, клавиши которых хоть и настраиваются, но делать-то это всё равно придётся вручную (и непонятно где, по разным файлам)!
И если я поставил пакет ради (к примеру) 5 макросов, то как править клавиши остальным я даже не представляю...
Если поставить умолчательный приоритет <50, то конфликтов не будет, но и нужные макросы могут не завестись сходу...
SUSim wrote:каково ваше мнение о примере?
Пример определённо решает задачу, а больше я мало что могу сказать, пока сам подобные задачи не решал.
И надо смотреть что из этого получится в итоге.
Пока не очень понятно насколько красиво это будет выглядеть в случае определения в файле нескольких макросов.
Надо чтобы в самом файле умолчательные настройки чётко читались.

Есть (сырая) идея - определить собственный загрузчик вместо функции Macro.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Организация Макросов

Post by gotar »

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

Re: Организация Макросов

Post by Wave »

Второй пункт существенней. Гораздо. Я в меру сил с ним борюсь так:
а) часто используемые макросы висят на клавиатуре, да;
б) редко используемые, но полезные макры стараюсь дублировать в пользовательском меню. Или просто в меню запихиваю. Сыграть аккорд F2 T D не намного сложней, чем комбинацию типа CtrlAltD. Зато комбинацию могу забыть, а меню перед глазами.

Ещё с этим помогает бороться макролиб, он умеет показывать список всех макросов, в котором легко нужный отфильтровать.
Пользуюсь ФАРом больше 20 лет © собирательный.
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Организация Макросов

Post by SUSim »

А почему не повесить все редкие для вас макросы, например, на CtrlShiftF12? Тогда тогда меню из макросов будет появляться.
SimSU ··· ·· -- ··· ··-
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: Организация Макросов

Post by Wave »

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

П.с. Про макролиб упомянул так, просто. Сам при переезде с двойки на тройку от макролиба отказался. Но, чёрт, занятная идея всё же с несколькими макросами на одной клавише. Это тоже получается организация своих меню (можно несколько клавиш по группам макросов занять) без всяких усилий. А то Editor.Menu.lua у меня — такая портянка на полтыщи строк!
Пользуюсь ФАРом больше 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 »

gotar wrote:Моей проблемы такой подход не решает.
...
Мне бы хотелось, чтобы большую часть времени клавиши имели свое умалчиваемое значение, но в некоторые моменты мне бы хотелось переопределить какие-то клавиши для выполнения макросов.
Именно это предлагаемый SUSim подход как раз успешно решает.
gotar wrote:Меня очень напрягает, что какая-то редко используемая клавиша из за полезного макроса, о котором я совсем забыл, ведет себя не так как написано в документации.
Это да, причина на мой взгляд именно в том, что пакет большой, и в нагрузку с нужными пользователю макросами ставится масса неиспользуемых.
Как вариант, по умолчанию макросы могут быть не активированы. Тоже не супер конечно...

Стоит присмотреться к LuaFAR for Editor, там как раз принято скрипты вызывать из меню.
gotar wrote:Или, наоборот, чтобы понять на какой клавише сидит макрос, который мне потребовался нужно перелопатить кучу файлов.
А в доку заглянуть? Всё в шапке, или в wiki.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Организация Макросов

Post by gotar »

А почему не повесить все редкие для вас макросы, например, на CtrlShiftF12? Тогда тогда меню из макросов будет появляться
. В принципе мне эта идея нравится. Но хотелось бы иметь возможность назначать горячие клавиши, чтобы они не ползли при добавлении макросов.
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 »

Появилась несколько свежих мыслей.
  • скрипт может иметь собственные средства переназначения клавиш
    а) в собственном файле настроек (как в примере SUSim выше)
    б) в общей базе настроек, как в примере http://forum.farmanager.com/viewtopic.p ... 81#p109481
    Этот вариант лично мне нравится больше, т.к. позволяет абстрагироваться от того где и как настройки хранятся физически (вижу в этом плюс как для разработчика, так и для пользователей)
  • средства управления горячими клавишами могут предоставляться централизовано
    а) посредством стороннего модуля (довольно простого, особенно если будет минимальная поддержка от LuaMacro)
    В этом случае в любом скрипте достаточно будет подключить модуль, и клавиши этого скрипта станут доступными для изменения в некоем общем списке макросов. (Сам список может выводиться любой утилитой аналогичной Macro Browser lite или LuaManager или даже MacroLib)
    б) или же эти средства могут предоставляться "из коробки", плагином LuaMacro.
    Это на мой взгляд вообще идеальный вариант, сразу избавляющий нас от зоопарка самодельных велосипедов.
    Но до него ещё нужно дорости, т.к. протолкнуть изменения в LuaMacro непросто
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Организация Макросов

Post by Smitis »

Чем мне не нравится хранение в базе - теряется мобильность, у меня во всяком случае, так как db плагинов я между компьютерами не синхронизирую (в настоящий момент получилась хорошая мобильная версия, в том числе и на флешке, одинаково работающая на всех доступных мне компьютерах).

Стороний модуль тоже плохо - если кому-то дам файл с макросами придётся ещё и объяснять, что это за модуль, что с ним делать, куда ставить. Нафиг.

Из коробки, это хорошо. Но я затрудняюсь сказать, что этот модуль вообще должен делать. В моём понимании, назначение клавиш - это просто таблица, элементы которой используются в качестве значения для keys или ещё где. Плюс настройки, отличные от горячих клавиш, с которыми тоже надо что-то делать.

Я пока склоняюсь к варианту а). Простое, (почти) рабочее решение.
В принципе, у меня сейчас примерно так:
  1. if arg[0] then
  2.  
  3.     local f, msg = loadfile(arg[0]:gsub(".lua$",".cfg"))
  4.  
  5.     if f then
  6.  
  7.         setfenv(f,{cfg=cfg})
  8.  
  9.         if not pcall(f) then msgbox("","CONFIG ERROR",1) end
  10.  
  11.     end
  12.  
  13. end
Но это только у меня с соответствующем патчем utils.lua - файл конфигурации должен лежать в той же папке, что и скрипт, иметь то же имя с расширение cfg. При отсутствии файла конфигурации будут использоваться настройки по умолчанию.
Разум когда-нибудь победит.
Post Reply

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