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

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

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

Post by sToLp »

Latest post of the previous page:

IgorZ wrote: Mon 10 Dec, 2018 06:06 для тестирования я использую выложенный Вами lfsearch_e ({S поискИзаменаВредакторе[lfsearch](smuel)(сАвтовыводомКлючейПоJD)pluEdi.lua. В ходе последних проверок наткнулся на две ошибки в строках

Code: Select all

 local f,l,y,x,p,n,s = GInfo()
и

Code: Select all

local f=GetFileName(l)
Функции GInfo и GetFileName - глобальные, определённые Вами где-то в другом файле? Если да, то, как минимум, требовалось явно указать, что данные макросы для корректной работы требуют другого файла, и приложить его или, хотя бы, ссылку на него, выложенного в другом месте. Если же нет, то это явная ошибка.
Действительно, существенный блок выпал. Спасибо, что указали! Исправлено.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ,

Многословный существенный .
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ wrote: Mon 10 Dec, 2018 06:06 По поводу action, мой вариант исправляется просто: соответствующая строка заменяется на

Code: Select all

if Menu and Menu.Value and Menu.Value:match(mod..k.."$") then
Очень хорошо! Спасибо за разъяснение! Подозреваю, что, вероятнее всего, этот способ также пригодится в этой или изменённой форме.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ wrote: Mon 10 Dec, 2018 06:06С другой стороны, Ваш вариант имеет свои достоинства. Какой лучше — с ходу не скажу.
Полагаю, что целесообразнее сравнивать не варианты приведённого Вами примера между собой. А оба их с исходным сабжевым макросом. На текущий момент у меня получились следующие результаты.

а) Об ограниченности действия приведённого Вами примера в его первоначальном виде я многословно писал чуть выше.

б) Его видоизменённый мною вариант почему-то не активирует макрос, если ему назначен ключ типа AltF3.

в) Сабжевый макрос оказался не отточен на случаи, когда более короткий ключ стоит в позиции ниже более длинного ключа, в который значение короткого входит в качестве составляющей. Например:
utrir.png
если в данном утрированном меню нажать на F3, то активирована будет позиция с ключом AltF3, поскольку он находится выше по списку.

upd: проблема в) решается тем, что в соответствующих местах макроса сопоставление указаний ключей в строках меню выбора макроса следует вести не с сугубо нажатым ключом, а с ключом, предваряемым одним пробелом:
mf.substr(Menu.Value,-k:len(),k:len())==" "..k
и
Menu.Select(mf.string(" "..k), 2, 0) > 0
Attachments
~ [multi] запускВыборочнойКомандыВменюВыбораМакросаИдр[вариант2018_12_10](sToLp)men.lua.7z
(1.84 KiB) Downloaded 76 times
F 3_utrir.lua.7z
(2.97 KiB) Downloaded 88 times
Last edited by sToLp on Mon 10 Dec, 2018 22:13, edited 1 time in total.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

sToLp wrote: Mon 10 Dec, 2018 17:10 IgorZ,

Многословный существенный .
Универсальность - это хорошо. Но в данном случае, по моему мнению, она не нужна. Поскольку комбинация из двух клавиатурных комбинаций, в которой вторая имеет не те же модификаторы, что и первая, теряет главное преимущество: удобство и скорость последовательного нажатия. В этом случае после первого нажатия приходится отпускать клавиши-модификаторы, и в результате нажатие одной только быстрой клавиши удобнее, чем вместе с модификатором. Иначе говоря, CtrlK CtrlF удобно, CtrlK F менее удобно, но CtrlK AltF совершенно неудобно.
Возможно, предлагаемый Вами подход был оправдан, когда вторая клавиатурная комбинация тоже находилась в key, из-за её попадания в число активных, но после вынесения в key2 она вообще перестаёт существовать для LuaMacro вне конкретного локального меню, что предоставляет полную свободу для выбора удобных вариантов. И наиболее удобными являются те, в которых префиксы первой и второй комбинаций совпадают.
Кстати, ранее Вы действовали, исходя именно из этих соображений (выделил жирным):
sToLp wrote: Tue 04 Dec, 2018 10:25
John Doe wrote: Mon 03 Dec, 2018 22:03 возможно для автора ценность не в запуске последовательностями
По моему убеждению, основная ценность — в целокупности, в неразрывной и желательно гармоничной связи с тем, что происходит за пределами непосредственно самого меню выбора макроса, как я попытался изложить это выше.
И вопрос, какими именно последовательностями осуществлять запуск макросов из данного меню, к этому также всецело относится как существенный момент. А поскольку Вы верно указали на противоречия в ключах приведённого примера, то я в файле поменял CtrlShiftE на AltShiftV и CtrlShiftW на AltShiftO, и посмотрю, как это скажется на дееспособности данных макросов практически.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

sToLp wrote: Mon 10 Dec, 2018 18:12
IgorZ wrote: Mon 10 Dec, 2018 06:06С другой стороны, Ваш вариант имеет свои достоинства. Какой лучше — с ходу не скажу.
Полагаю, что целесообразнее сравнивать не варианты приведённого Вами примера между собой. А оба их с исходным сабжевым макросом.
На всякий случай решил уточнить. Это моё замечание относилось конкретно к разным вариантам функции action, а не ко всему макросу. А то мне показалось, что Вы неправильно меня поняли.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ wrote: Tue 11 Dec, 2018 05:54 наиболее удобными являются те [варианты комбинаций клавиш], в которых префиксы первой и второй комбинаций совпадают
Это бесспорно. И теоретически, и эстетически, и практически.
IgorZ wrote: Tue 11 Dec, 2018 05:54 ранее Вы действовали, исходя именно из этих соображений (выделил жирным):

sToLp писал(а):
Вт 04 дек, 2018 12:25

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

И при этом, в своей практике (а этой теме почти 3,5 года и она продолжает оставаться для меня животрепещущей) я ещё более многократно убеждался в необходимости реализации и более универсального подхода тоже. И со временем я попытаюсь продемонстрировать то, что он необходим, на работающих примерах. И буду очень рад узнать их оценку и с Вашей точки зрения тоже.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ wrote: Tue 11 Dec, 2018 06:35 Это моё замечание относилось конкретно к разным вариантам функции action, а не ко всему макросу.
Всенепременно ещё и ещё раз внимательно испытаю оба варианта на практике и потом сообщу, что у меня в результате получится.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

С заменой стандартной функции Macro пока затык, так что, в качестве временной меры функция MMacro для _macroinit.lua:
  1. local w,OldMacro = math.min(Far.Width-31,99),Macro
  2.  
  3. local rx = regex.new("(.*)(?<=LCtrl|.LAlt|RCtrl|.RAlt|.Ctrl|..Alt|Shift)(?!LCtrl|LAlt|RCtrl|RAlt|Ctrl|Alt|Shift)")
  4.  
  5. function _G.MMacro(m)
  6.  
  7.   if type(m.key2)=="string" then
  8.  
  9.     local mod = (rx:match("  "..m.key2)or""):sub(3)
  10.  
  11.     local k = m.key2:sub(mod:len()+1)
  12.  
  13.     m.description = ("%-"..w.."."..w.."s %14s%s%s"):format(m.description:gsub("&",""),mod,k:len()>1 and "" or "&",k)
  14.  
  15.   end
  16.  
  17.   return OldMacro(m)
  18.  
  19. end
  20.  
  21. mf.postmacro(function () _G.MMacro = nil end)
Примечания:
  1. Место под исходное описание выделяется, исходя из того, что при ширине экрана в 80 символов, максимальной длине комбинации модификаторов (RCtrlRAltShift) и имени клавиши в 5 символов результирующее описание должно полностью помещаться в строке меню. Для более широкого экрана, соответственно, и место под исходное описание выделяется больше.
  2. Клавиатурные комбинации выравниваются по границе между модификатором и клавишей.
  3. Клавиши вида F1, PgDn и т. д. не подсвечиваются (увы, способ подсветки в меню нескольких символов подряд мне неизвестен).
Естественно, для максимальной эффективности нужен и модифицированный макрос для меню выбора:
  1. local MSMenuGuid = "165AA6E3-C89B-4F82-A0C5-C309243FD21B"
  2.  
  3. local mod,k,rx = "","",regex.new("(.*)(?<=LCtrl|.LAlt|RCtrl|.RAlt|.Ctrl|..Alt|Shift)(?!LCtrl|LAlt|RCtrl|RAlt|Ctrl|Alt|Shift)")
  4.  
  5. local function GetMod(key) return (rx:match("  "..key)or""):sub(3) end
  6.  
  7.  
  8.  
  9. Macro{
  10.  
  11.   id="817F6653-F4AC-48DC-809B-7AD94AEFC8EC";
  12.  
  13.   area="Menu";
  14.  
  15.   key="/.+/";
  16.  
  17.   priority=100;
  18.  
  19.   condition=function(key)
  20.  
  21. mod = GetMod(key)
  22.  
  23. k = key:sub(mod:len()+1)
  24.  
  25. return Menu.Id==MSMenuGuid
  26.  
  27.   end;
  28.  
  29.   action=function()
  30.  
  31. if Menu.Select(" "..mod..k,2,0)>0 or (mod=="" and Menu.Select(" "..GetMod(Object.Title:match("%S+$"))..k,2,0)>0) then
  32.  
  33.   Keys("Enter")
  34.  
  35. else
  36.  
  37.   Keys("AKey")
  38.  
  39. end
  40.  
  41.   end;
  42.  
  43. }
Примечания:
  1. Быстрые клавиши вида F1, PgDn и т. д. поддерживаются, как и буквенные.
  2. Если модификатор первичной комбинации совпадает с модификатором вторичной, то можно нажимать вторичную как с модификаторами, так и без. Например, для первичной CtrlA и вторичной CtrlF1 можно нажать как CtrlF1, так и просто F1.
  3. Если модификатор первичной комбинации НЕ совпадает с модификатором вторичной, и клавиша не буквенная, то необходимо нажимать вторичную ТОЛЬКО с модификаторами. Например, для первичной CtrlA и вторичной AltF1 можно нажать ТОЛЬКО AltF1.
  4. Клавиши рассматриваются все без исключений, поскольку, если пользователь решил задействовать какую-то как вторичную для макроса, это его право, а если не задействовал, она отработает корректно.
P. S. В макрос для меню выбора вкраласть ошибка! Нечаянно не скопировал две последние строки. Макрос исправлен. Спасибо sToLp за обнаружение ошибки.
Last edited by IgorZ on Thu 13 Dec, 2018 06:16, edited 1 time in total.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ wrote: Wed 12 Dec, 2018 07:49 функция MMacro для _macroinit.lua

и модифицированный макрос для меню выбора
Благодарю Вас за щедрый подарок! Приступил к освоению.

UPD: Для начала: общее впечатление — прекрасное! Далее — о первых существенных нюансах:

а) при нажатии AltF4 на любой позиции в меню выбора макроса в редактор попадает не соответствующий этой позиции макрос, а _macroinit.lua.

б) в отношении в целом весьма удачной, на мой взгляд, установки:
1. Место под исходное описание выделяется, исходя из того, что при ширине экрана в 80 символов, максимальной длине комбинации модификаторов (RCtrlRAltShift) и имени клавиши в 5 символов результирующее описание должно полностью помещаться в строке меню. Для более широкого экрана, соответственно, и место под исходное описание выделяется больше.
— желательно также в файлах с наборами макросов иметь возможность и дополнительной подстройки этих размеров тоже, поскольку ширина размеров меню в разных случаях может существенно варьироваться.

в) касательно же:
2. Клавиатурные комбинации выравниваются по границе между модификатором и клавишей.
— весьма желательно выравнивание сделать просто по правой границе меню, поскольку тогда меню в целом будет смотреться гораздо лучше.
Last edited by sToLp on Wed 12 Dec, 2018 22:36, edited 1 time in total.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

sToLp wrote: Wed 12 Dec, 2018 11:45 а) при нажатии AltF4 на любой позиции в меню выбора макроса в редактор попадает не соответствующий этой позиции макрос, а _macroinit.lua.
Повторить не удаётся. Возможно, из-за того, что я уже кое-что переделал.
sToLp wrote: Wed 12 Dec, 2018 11:45 б) в отношении в целом весьма удачной, на мой взгляд, установки:
1. Место под исходное описание выделяется, исходя из того, что при ширине экрана в 80 символов, максимальной длине комбинации модификаторов (RCtrlRAltShift) и имени клавиши в 5 символов результирующее описание должно полностью помещаться в строке меню. Для более широкого экрана, соответственно, и место под исходное описание выделяется больше.
— желательно также в файлах с наборами макросов иметь возможность и дополнительной подстройки этих размеров тоже, поскольку ширина размеров меню в разных случаях может существенно варьироваться.
Могу, разве что, добавить параметр в Macro, в пару к key2.
sToLp wrote: Wed 12 Dec, 2018 11:45 в) касательно же:
2. Клавиатурные комбинации выравниваются по границе между модификатором и клавишей.
— весьма желательно выравнивание сделать просто по правой границе меню, поскольку тогда меню в целом будет смотреться гораздо лучше.
Сделаю настройку.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ wrote: Thu 13 Dec, 2018 07:49
sToLp wrote: Wed 12 Dec, 2018 11:45 а) при нажатии AltF4 на любой позиции в меню выбора макроса в редактор попадает не соответствующий этой позиции макрос, а _macroinit.lua.
Повторить не удаётся.
УТОЧНЕНИЕ: переход по AltF4 в _macroinit.lua происходит с позиций только тех макросов, определение которых MMacro, а с тех, у которых традиционное Macro, переход происходит по-старому — в соответствующий им файл.
IgorZ wrote: Thu 13 Dec, 2018 07:49 Могу, разве что, добавить параметр в Macro, в пару к key2.
Хорошо. Спасибо!
IgorZ wrote: Thu 13 Dec, 2018 07:49 Сделаю настройку.
И это тоже хорошо. Спасибо!
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

В общем, я тут подумал, вспомнил, что я не первый окучиваю эту грядку (с расширением возможностей Macro), творчески позаимствовал кое-что из модуля rebind авторства John Doe и таки родил нечто пристойное.
  1. local Info = Info or package.loaded.regscript or function(...) return ... end --luacheck: ignore 113/Info
  2.  
  3. local nfo = Info {_filename or ...,
  4.  
  5.   name          = "key2 process";
  6.  
  7.   description   = "Обработка последовательности двух клавиатурных комбинаций";
  8.  
  9.   version       = "0.9.0"; --http://semver.org/lang/ru/
  10.  
  11.   author        = "IgorZ";
  12.  
  13. --  url           = "http://forum.farmanager.com/viewtopic.php?t=8465";
  14.  
  15.   id            = "F571989C-F7FA-4C55-B9AD-5E0974F1CDF5";
  16.  
  17.   minfarversion = {3,0,0,4000,0};
  18.  
  19. --  files         = "*Eng.hlf;*Rus.hlf;*Eng.lng;*Rus.lng";
  20.  
  21.   helptxt       = [[
  22.  
  23.   Обрабатывает два дополнительных поля в определении Macro:
  24.  
  25.     - key2:  вторичная клавиатурная комбинация, работающая в меню выбора макроса;
  26.  
  27.     - key2l: длина, отводимая под базовую часть описания.
  28.  
  29.   Добавляет key2 в конец описания.
  30.  
  31.   alignkey определяет, как выравнивать key2:
  32.  
  33.     - L: по левому краю key2;
  34.  
  35.     - C: по границе между модификаторами и клавишей в key2;
  36.  
  37.     - R: по правому краю key2.
  38.  
  39.   Для использования добавить в _macroinit.lua строки ниже.
  40.  
  41.   Если данный файл лежит не в каталоге "scripts", исправить путь.
  42.  
  43.  
  44.  
  45.   local Add_key2 = loadfile(win.GetEnv("FARPROFILE").."\\Macros\\scripts\\key2Process.lua")
  46.  
  47.   if Add_key2 then Add_key2()() end
  48.  
  49. ]];
  50.  
  51.   history       = [[
  52.  
  53. 2018/12/14 v0.9.0 - Публичная бета.
  54.  
  55. ]];
  56.  
  57.   options       = {
  58.  
  59.     alignkey = "C",--"L","C","R"
  60.  
  61.   }
  62.  
  63. }
  64.  
  65. if not nfo then return end
  66.  
  67. -- +
  68.  
  69. --[[константы]]
  70.  
  71. -- -
  72.  
  73. local MSMenuGuid = "165AA6E3-C89B-4F82-A0C5-C309243FD21B"
  74.  
  75. local rx = regex.new("(.*)(?<=LCtrl|.LAlt|RCtrl|.RAlt|.Ctrl|..Alt|Shift)(?!LCtrl|LAlt|RCtrl|RAlt|Ctrl|Alt|Shift)")
  76.  
  77. -- +
  78.  
  79. --[[настройки]]
  80.  
  81. -- -
  82.  
  83. -- +
  84.  
  85. --[[переменные]]
  86.  
  87. -- -
  88.  
  89. local w,OldAddRegularMacro,mod,k = math.min(Far.Width-32,99)
  90.  
  91. -- +
  92.  
  93. --[=[вспомогательные функции]=]
  94.  
  95. -- -
  96.  
  97. local function GetMod(key) return (rx:match("  "..key)or""):sub(3) end
  98.  
  99.  
  100.  
  101. local function getUpvalue(f,name)
  102.  
  103. for i=1,math.huge do
  104.  
  105.   local n,v = debug.getupvalue (f,i)
  106.  
  107.   if n==nil then error("unable to get upvalue: "..name) end
  108.  
  109.   if n==name then return v,i end
  110.  
  111. end
  112.  
  113. end
  114.  
  115. --
  116.  
  117. local function AddRegularMacroNew(m,fp)
  118.  
  119. if type(m.key2)=="string" then
  120.  
  121.   local modk2 = (rx:match("  "..m.key2)or""):sub(3)
  122.  
  123.   local kk2 = m.key2:sub(modk2:len()+1)
  124.  
  125.   local wk2 = type(m.key2l)=="number" and m.key2l or w
  126.  
  127.   local fmt = "%-"..wk2.."."..wk2.."s %"..(({L="",C=14,R=(19-kk2:len())})[nfo.options.alignkey] or 14).."s%s%s"
  128.  
  129.   m.description = fmt:format(m.description:gsub("&",""),modk2,kk2:len()>1 and "" or "&",kk2)
  130.  
  131. end
  132.  
  133. return OldAddRegularMacro(m,fp)
  134.  
  135. end
  136.  
  137. --
  138.  
  139. local function ReplaceAddRegularMacro()
  140.  
  141. local LoadMacros = getUpvalue(eval,"utils").LoadMacros
  142.  
  143. local AddRegularMacro,iAddRegularMacro = getUpvalue(LoadMacros,"AddRegularMacro")
  144.  
  145. if not OldAddRegularMacro then OldAddRegularMacro = AddRegularMacro end
  146.  
  147. debug.setupvalue (LoadMacros,iAddRegularMacro,assert(AddRegularMacroNew))
  148.  
  149. end
  150.  
  151. -- +
  152.  
  153. --[=[Макрос]=]
  154.  
  155. -- -
  156.  
  157. if Macro then Macro{
  158.  
  159.   id="817F6653-F4AC-48DC-809B-7AD94AEFC8EC";
  160.  
  161.   description="Обработка вторичной клавиатурной комбинации в меню выбора макроса";
  162.  
  163.   area="Menu"; key="/.+/"; priority=100;
  164.  
  165.   condition=function(key)
  166.  
  167. mod = GetMod(key)
  168.  
  169. k = key:sub(mod:len()+1)
  170.  
  171. return Menu.Id==MSMenuGuid
  172.  
  173.   end;
  174.  
  175.   action=function()
  176.  
  177. if Menu.Select(" "..mod..k,2,0)>0 or (mod=="" and Menu.Select(" "..GetMod(Object.Title:match("%S+$"))..k,2,0)>0) then
  178.  
  179.   Keys("Enter")
  180.  
  181. else
  182.  
  183.   Keys("AKey")
  184.  
  185. end
  186.  
  187.   end;
  188.  
  189. } end
  190.  
  191. --
  192.  
  193. return ReplaceAddRegularMacro
Особенности:
  • больше не требуется функция MMacro, вместо этого расширяется функциональность стандартной Macro;
  • настройка выравнивания вторичной клавиатурной комбинации с помощью параметра alignkey:
    • L: по левому краю key2;
    • C: по границе между модификаторами и клавишей в key2 (значение по умолчанию);
    • R: по правому краю key2.
  • поле key2l жёстко задаёт ширину базовой части description для конкретного макроса;
  • для использования положить файл в каталог scripts и вставить в _macroinit.lua следующий код:

    Code: Select all

    local Add_key2 = loadfile(win.GetEnv("FARPROFILE").."\\Macros\\scripts\\key2Process.lua")
    if Add_key2 then Add_key2()() end
Attachments
key2Process.lua.0.9.0.7z
(1.91 KiB) Downloaded 92 times
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ wrote: Fri 14 Dec, 2018 05:54родил нечто пристойное
Шикарно! Большое спасибо!

, см. объяснение в следующем посте.
Last edited by sToLp on Sat 15 Dec, 2018 05:17, edited 1 time in total.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ,
Практика показала, что я был не прав, когда просил:
sToLp wrote: Fri 14 Dec, 2018 10:05 пожелание в отношении:
- key2l: длина, отводимая под базовую часть описания.
Желательно бы не "под базовую часть описания", а под всю позицию в меню, включая указание клавиши/сочетания.
Потому что при выключке (т.е. выравнивании) строк влево alignkey = "L" получаются вполне приемлемые результаты по сравнению с выключкой вправо alignkey = "R" и, тем более, по сравнению с выключкой по границе между модификаторами и клавишей в key2 alignkey = "C". этого приводится на примере подборки макросов разных способов удаления файлов/папок нажатием клавиши Del и далее в меню выбора макроса соответствующими клавишами/сочетаниями.

Поэтому полагаю, что усложнять в этом отношении ни чего не нужно. И, более того, возможно даже стоит чуток упростить key2Process.lua и оставить выключку только влево "вшитой".
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ,

На текущий момент единственный нюанс, который меня реально беспокоил в результатах работы key2Process.lua, это изъятие подсветки из предустановленных пометок Native: во множестве макросов, в которых содержание полей description начинается конкретно с этих пометок. Такие макросы либо дублируют внутренние команды Far`а, назначенные на соответствующие ключи, либо сообщают о том, что на данный ключ нативная команда не назначена. Они выполняют справочную функцию, являясь при этом вполне дееспособными. И мне очень не хотелось бы терять данную пометку в этих макросах.

Но всё, до чего я додумался, это сдвинуть строку 65

Code: Select all

m.description = fmt:format(m.description:gsub("&",""),modk2,kk2:len()>1 and "" or "&",kk2)
с тем, чтобы обусловить её выполнение отсутствием наличия в качестве первых двух знаков в самом начале поля description амперсанта & и литеры N, идущих подряд. И вместо одной строки изобразил пять строк:

Code: Select all

  if m.description:sub(0,2)=="&N" then 
    m.description = fmt:format(m.description,modk2,kk2:len()>1 and "" or "",kk2) 
  else 
    m.description = fmt:format(m.description:gsub("&",""),modk2,kk2:len()>1 and "" or "&",kk2) 
  end

И таким образом то, что показано под спойлером [Демонстрация] в предыдущем посте, сохраняет свой вид и с полновесным применением ценных достоинств key2Process.lua в указанных макросах. А этого мне, собственно, и нужно было.

Посмотрите, пожалуйста, насколько это мною сделано корректно в принципе и нельзя ли этого же результата достичь более цивильно?
Last edited by sToLp on Sat 15 Dec, 2018 20:44, edited 1 time in total.
Post Reply

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