Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Здесь обсуждается всё, что касается макросов.
User avatar
sToLp
Posts: 926
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 106 times
Been thanked: 8 times

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Post by sToLp » Wed 17 Jun, 2015 21:14

Полагаю целесообразным поделиться следующим вспомогательным макросом, который я использую в меню выбора макросов в качестве удобного дополнения к замечательному штатному сервису:

Code: Select all

local EamId="165AA6E3-C89B-4F82-A0C5-C309243FD21B" -- гуид меню выбора lua-макросов (= Исполнить макрос = или = Execute a macro =)
Macro {
description="В меню выбора lua-макросов запустить выборочную позицию обозначенным шорткатом (sToLp) [multi]";
  area="Menu"; priority = 40; -- без конфликтов с макросами с нормальным (50) приоритетом
  key="/^(?!.$|AltF4|Up|Down|Left|Right|Home|End|Enter|Esc|CtrlIns|CtrlC).+/"; 
  -- за пример регулярки особое спасибо shmuz http://forum.ru-board.com/topic.cgi?forum=5&topic=31718&start=6900#14
  condition=function() return Menu.Id==EamId end;
  action=function()
    local k=mf.akey(1)
    if (mf.substr(Menu.Value,-k:len(),k:len())==k) then -- если ТОЛЬКО тот же шорткат в конце строки меню (k:len() - длина шортката в символах)
      Keys("Enter")
    else
      if (Menu.Select(mf.string(k), 2, 0) > 0) then
        Keys("Enter")
      else
        Keys("AKey")
      end
    end
  end;
}
С его помощью в меню = Исполнить макрос = я могу запускать выбранный макрос по обозначенному в нём (в конце поля description) шорткату.
Last edited by sToLp on Mon 03 Dec, 2018 16:58, edited 2 times in total.

User avatar
sToLp
Posts: 926
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 106 times
Been thanked: 8 times

Удобное дополнение к меню выбора макросов

Post by sToLp » Mon 20 Jul, 2015 20:47

John Doe wrote:http://forum.farmanager.com/viewtopic.p ... 69#p121169
Сейчас встроенные средства LuaMacro уже позволяют легко достичь похожей функциональности, используя меню конфликта макросов.
Однако такой подход накладывает ряд ограничений:
  • Позволяет использовать только символьные хоткеи.
    Невозможно использовать функциональные, курсорные, служебные клавиши.
  • Невозможно использовать клавиши с модификаторами
    Например, чтобы набрать проследовательность Ctrl-K-K необходимо отпустить модификатор после первого K.
Обнародованный макрос снимает большинство из перечисленных ограничений. Он позволяет из меню выбора макросов запускать макросы по шорткатам, указанным в самом конце их полей description. Шорткаты могут быть и одиночными функциональными клавишами, и с любыми, принятыми в Фаре, модификаторами.

В частности, меню выбора макроса из набора Ctrl-K-x, упомянутого в теме turbo — работа с выделением в редакторе, в таком случае .
Повторюсь: макросы из него могут запускаться в том числе по шорткатам, указанным в конце соответствующих позиций данного меню.

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

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

Удобное дополнение к меню выбора макросов

Post by John Doe » Thu 19 Oct, 2017 15:57

Спустя два года только врубился о чём этот макрос.
Оказывается, это альтернативная реализация одного из старейших тикетов: 0000009: множественные комбинации клавиш для активации макроса, т.е. запуск макросов последовательностями клавиш (аналогичную возможсть предоставляет MacroEx).

Стоит конкретизировать заголовок темы, типа "Запуск макросов последовательностями, через меню конфликта макросов".

User avatar
sToLp
Posts: 926
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 106 times
Been thanked: 8 times

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Post by sToLp » Mon 03 Dec, 2018 17:58

С тех пор, как в меню выбора макроса показываются макросы с пониженным приоритетом
shmuel 01.12.2018 22:09:18 +0200 - build 676

1. M#3684: Включать и выключать показ макросов с пониженным приоритетом в меню выбора макросов.
--> включение и выключение решено не делать, а показывать их всегда после макросов с наивысшим
приоритетом, отделёнными от них сепаратором.
данная тема становится ещё более актуальной. Ведь показ макросов с пониженным priority особенно полезно сопровождать указанием ключей, их вызывающих.

Решение этой задачи призван сопровождать сабжевый макрос. И моя практика показала, что решает он её хорошо. А оформленное должным образом меню выбора и выглядит аккуратно, и функционирует полноценно, и справочную функцию выполняет добротно.
menu({S.png
И вид его напоминает привычные виды Главного меню.

Однако остаётся один существенный недорешённый вопрос: как сделать так, чтобы ключи, указываемые в правой таблице меню, появлялись бы в нём автоматически? Ведь пока что приходится их вставлять туда вручную. А это весьма трудоёмкий процесс.

Shmuel
Posts: 5608
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Post by Shmuel » Mon 03 Dec, 2018 18:19

Наверное я чего-то недопонимаю, но ведь макросы из этого меню можно запускать по цифре или букве, с которой начинается пункт меню. Мне кажется, нажать 8 проще, чем AltShiftS. Для чего нужны эти дополнительные кнопкосочетания?

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

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Post by John Doe » Mon 03 Dec, 2018 18:30

Не проще, поскольку автором темы это задумано как последовательности с общим модификатор (AltShiftS-F и т. д).

Shmuel
Posts: 5608
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Post by Shmuel » Mon 03 Dec, 2018 18:48

John Doe wrote:
Mon 03 Dec, 2018 18:30
Не проще, поскольку автором темы это задумано как последовательности с общим модификатор (AltShiftS-F и т. д).
Вот на картинке выделена 8-я позиция. Как при этом запустить макрос с 4-й позиции и как с 5-й позиции?

User avatar
sToLp
Posts: 926
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 106 times
Been thanked: 8 times

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Post by sToLp » Mon 03 Dec, 2018 21:37

Shmuel wrote:
Mon 03 Dec, 2018 18:48
Вот на картинке выделена 8-я позиция. Как при этом запустить макрос с 4-й позиции и как с 5-й позиции?
Если Вы особо не возражаете, свой ответ я попробую дать более развёрнуто и с акцентом не на ту картинку, по которой Вы задали вопрос, а на следующую:
glavnoe.png
glavnoe.png (84.31 KiB) Viewed 735 times
Из этого подменю запустить команду, соответствующую 5-ой позиции сверху (Ссылка_______Alt+F6), можно любым из следующих способов:

— подвести к ней курсор и нажать Enter;

— нажать горячую клавишу л;

— нажать клавишесочетание AltF6.

Хотя, в принципе, для запуска выбранной команды достаточно было бы и одного первого способа. Но второй способ быстрее. Ну пусть бы были два способа запуска команды. Но тут присутствует и третий — запустить команду шоркатом AltF6. Причём третий способ, который кто-то вполне логично может посчитать и излишним, очевидно сложнее, чем второй.

Однако в третьем способе сокрыто одно очень существенное обстоятельство — шоркатом AltF6 можно запустить выбранную нами для примера команду и вне данного меню тоже. Прямо из активной файловой панели. И вот это, самое интересное и полезное, по моему убеждению, обстоятельство мне больше всего и нравится в системе команд Far`а — их взаимосвязь.

Из подменю "Файлы" Главного меню можно запустить 5-ю команду указанным шорткатом, но не обязательно. И данный шорткат указан там в том числе для напоминания нам о том, что его можно употребить как в данном меню, так и за его границами. И вот эта системная цельность для меня и притягательна. Она доставляет мне эстетическое удовольствие, и ментальное тоже. Гибкая интерактивность красива и полезна. Она поддерживает ощущение свободы выбора действий пользователя. Можно так и так, и так тоже можно, и по-другому.

Очень надеюсь, что мне удалось-таки ответить на Ваш вполне правомерный вопрос.
Last edited by sToLp on Mon 03 Dec, 2018 21:43, edited 1 time in total.

Shmuel
Posts: 5608
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Post by Shmuel » Mon 03 Dec, 2018 21:50

Мой вопрос, который вы процитировали, не был риторическим. John Doe утверждал, что запустить макрос из данного меню вашим способом не труднее, чем нажать клавишу 8. Глядя на вашу картинку я этого не увидел: как можно запустить, например, пункт 4 одной клавишей (не комбинацией). И на этот вопрос, не риторический, пока ответа не получил.

Что касается ваших объяснений, это да, понятно, эстетическое удовольствие (это нормально, я не иронизирую).

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

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Post by John Doe » Mon 03 Dec, 2018 22:03

Shmuel wrote:
Mon 03 Dec, 2018 18:48
John Doe wrote:
Mon 03 Dec, 2018 18:30
Не проще, поскольку автором темы это задумано как последовательности с общим модификатор (AltShiftS-F и т. д).
Вот на картинке выделена 8-я позиция. Как при этом запустить макрос с 4-й позиции и как с 5-й позиции?
4. Комбинацией AltE, или просто E, используя хоткеи.
Или AltShiftE, используя макрос из шапки.
В редакторе получается последовательность AltShiftS-E, т. е. можно и не отрывая руки от модификаторов.

С 5 аналогично, за исключением того, что не выйдет запустить не отрывая, последовательностью (модификатор отличается).

Это моя интерпретация конечно, возможно для автора ценность не в запуске последовательностями.

User avatar
sToLp
Posts: 926
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 106 times
Been thanked: 8 times

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Post by sToLp » Tue 04 Dec, 2018 10:25

John Doe wrote:
Mon 03 Dec, 2018 22:03
возможно для автора ценность не в запуске последовательностями
По моему убеждению, основная ценность — в целокупности, в неразрывной и желательно гармоничной связи с тем, что происходит за пределами непосредственно самого меню выбора макроса, как я попытался изложить это выше.

И вопрос, какими именно последовательностями осуществлять запуск макросов из данного меню, к этому также всецело относится как существенный момент. А поскольку Вы верно указали на противоречия в ключах приведённого примера, то я в файле поменял CtrlShiftE на AltShiftV и CtrlShiftW на AltShiftO, и посмотрю, как это скажется на дееспособности данных макросов практически.

User avatar
sToLp
Posts: 926
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 106 times
Been thanked: 8 times

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Post by sToLp » Tue 04 Dec, 2018 10:30

Shmuel wrote:
Mon 03 Dec, 2018 21:50
Мой вопрос, который вы процитировали, не был риторическим.
как можно запустить, например, пункт 4 одной клавишей (не комбинацией)
Оу! С ходу-то содержащийся в вопросе существенный нюанс я и не уловил, извините меня, пожалуйста, что торможу.

Реализованная в меню выбора макросов постоянная возможность максимально просто, нажатием всего одной клавиши, запустить макрос, очень удобна. Более того, я уверен в том, что было бы также весьма полезно включить левую колонку нумерации-литерации и во все подменю Главного меню. Особенно полезна она была бы в тех подменю, отдельные позиции которых не сопровождены запускающими их сочетаниями клавиш. А есть и другие подобные места, в которых эта колонка была бы весьма уместна.

И, при этом, по возможности повсеместное, где это целесообразно, введение в применение колонки нумерации-литерации с левой стороны меню, ничуть не умаляет и ценности правой колонки, в которой указываются клавиши/сочетания. Колонки, выполняющей взаимосвязанные функции обозначения способа выполнения команды здесь и сейчас и, вместе с тем, напоминания о возможности вызова данной команды тем же ключом из соответствующей области. И, тем самым, органически связующей данное меню с соответствующими элементами Far`а.

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

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Post by John Doe » Tue 04 Dec, 2018 10:59

sToLp wrote:
Mon 03 Dec, 2018 17:58
Однако остаётся один существенный недорешённый вопрос: как сделать так, чтобы ключи, указываемые в правой таблице меню, появлялись бы в нём автоматически?

Code: Select all

local width = 60
local descr_fmt = "%-"..width.."s %s"

local cas_re = regex.new"^(?:Ctrl)?(?:Alt)?(?:Shift)?"

local function MMacro(m)
  local cas = cas_re:match(m.key)
  if key then
    m.description = descr_fmt:format(m.description,cas:match(m.key)..key)
  end
  return Macro(m)
end

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

User avatar
sToLp
Posts: 926
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 106 times
Been thanked: 8 times

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Post by sToLp » Tue 04 Dec, 2018 11:38

Shmuel wrote:
Mon 03 Dec, 2018 18:19
Для чего нужны эти дополнительные кнопкосочетания?
И ещё раз с точки зрения техники вызова макросов. В дополнение и подтверждение выше уже верно отмеченного существенного нюанса:
John Doe wrote:
Mon 03 Dec, 2018 22:03
можно и не отрывая руки от модификаторов
Сначала, вызывая макрос, я нажимаю AltShiftS. И моя левая рука всё ещё удерживает модификаторы. Появилось меню. В том числе содержащее шпаргалку для напоминания о том каким ключом какую команду вызывать. Определяюсь, что это будет Replace-замена, и правой рукой нажимаю R. Возможно, что я замешкаюсь с определением команды из-за того, что что-то или кто-то в этот момент меня отвлекли, и я успел снять левую руку с модификаторов. Однако нажатие на R всё равно сработает. А если всё прошло быстро, за доли секунды, то нажатыми окажутся AltShiftR, с тем же неизменно превосходным результатом. А заодно моя мышечная подсознательная память будет подкреплена визуально указанием на то, что я нажимаю правильную комбинацию, и что я могу применить эту же самую комбинацию для вызова этой же самой команды из другой области.

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

User avatar
sToLp
Posts: 926
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 106 times
Been thanked: 8 times

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Post by sToLp » Tue 04 Dec, 2018 11:53

John Doe wrote:
Tue 04 Dec, 2018 10:59
Скрипт я ещё не пробовал, но обязательно попробую. Заранее благодарю Вас за него!
John Doe wrote:
Tue 04 Dec, 2018 10:59
А можно от обратного пойти, и задавать дополнительный в таблице макроса явно, дополнительным полем.
А нельзя ли как ни будь в качестве ключа, указываемого затем в меню выбора макроса в позиции макроса вслед за содержанием поля description, брать ключ из поля key? Например, тот, что крайний справа. А если там один, то его.

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

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Post by John Doe » Tue 04 Dec, 2018 11:57

sToLp wrote:
Tue 04 Dec, 2018 11:53
А нельзя ли
Это ещё проще.
Подозреваю, регэксп вы и сами составите.

Post Reply

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