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

Здесь обсуждается всё, что касается макросов.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 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: 107 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ,

Многословный существенный .

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 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: 107 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 26 times
F 3_utrir.lua.7z
(2.97 KiB) Downloaded 24 times
Last edited by sToLp on Mon 10 Dec, 2018 22:13, edited 1 time in total.

IgorZ
Posts: 679
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 56 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: 679
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 56 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: 107 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: 107 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ wrote:
Tue 11 Dec, 2018 06:35
Это моё замечание относилось конкретно к разным вариантам функции action, а не ко всему макросу.
Всенепременно ещё и ещё раз внимательно испытаю оба варианта на практике и потом сообщу, что у меня в результате получится.

IgorZ
Posts: 679
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 56 times

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

Post by IgorZ »

С заменой стандартной функции Macro пока затык, так что, в качестве временной меры функция MMacro для _macroinit.lua:
  1. local w,OldMacro = math.min(Far.Width-31,99),Macro
  2. local rx = regex.new("(.*)(?<=LCtrl|.LAlt|RCtrl|.RAlt|.Ctrl|..Alt|Shift)(?!LCtrl|LAlt|RCtrl|RAlt|Ctrl|Alt|Shift)")
  3. function _G.MMacro(m)
  4.   if type(m.key2)=="string" then
  5.     local mod = (rx:match("  "..m.key2)or""):sub(3)
  6.     local k = m.key2:sub(mod:len()+1)
  7.     m.description = ("%-"..w.."."..w.."s %14s%s%s"):format(m.description:gsub("&",""),mod,k:len()>1 and "" or "&",k)
  8.   end
  9.   return OldMacro(m)
  10. end
  11. mf.postmacro(function () _G.MMacro = nil end)
Примечания:
  1. Место под исходное описание выделяется, исходя из того, что при ширине экрана в 80 символов, максимальной длине комбинации модификаторов (RCtrlRAltShift) и имени клавиши в 5 символов результирующее описание должно полностью помещаться в строке меню. Для более широкого экрана, соответственно, и место под исходное описание выделяется больше.
  2. Клавиатурные комбинации выравниваются по границе между модификатором и клавишей.
  3. Клавиши вида F1, PgDn и т. д. не подсвечиваются (увы, способ подсветки в меню нескольких символов подряд мне неизвестен).
Естественно, для максимальной эффективности нужен и модифицированный макрос для меню выбора:
  1. local MSMenuGuid = "165AA6E3-C89B-4F82-A0C5-C309243FD21B"
  2. local mod,k,rx = "","",regex.new("(.*)(?<=LCtrl|.LAlt|RCtrl|.RAlt|.Ctrl|..Alt|Shift)(?!LCtrl|LAlt|RCtrl|RAlt|Ctrl|Alt|Shift)")
  3. local function GetMod(key) return (rx:match("  "..key)or""):sub(3) end
  4.  
  5. Macro{
  6.   id="817F6653-F4AC-48DC-809B-7AD94AEFC8EC";
  7.   area="Menu";
  8.   key="/.+/";
  9.   priority=100;
  10.   condition=function(key)
  11. mod = GetMod(key)
  12. k = key:sub(mod:len()+1)
  13. return Menu.Id==MSMenuGuid
  14.   end;
  15.   action=function()
  16. if Menu.Select(" "..mod..k,2,0)>0 or (mod=="" and Menu.Select(" "..GetMod(Object.Title:match("%S+$"))..k,2,0)>0) then
  17.   Keys("Enter")
  18. else
  19.   Keys("AKey")
  20. end
  21.   end;
  22. }
Примечания:
  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: 107 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: 679
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 56 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: 107 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: 679
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 56 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. local nfo = Info {_filename or ...,
  3.   name          = "key2 process";
  4.   description   = "Обработка последовательности двух клавиатурных комбинаций";
  5.   version       = "0.9.0"; --http://semver.org/lang/ru/
  6.   author        = "IgorZ";
  7. --  url           = "http://forum.farmanager.com/viewtopic.php?t=8465";
  8.   id            = "F571989C-F7FA-4C55-B9AD-5E0974F1CDF5";
  9.   minfarversion = {3,0,0,4000,0};
  10. --  files         = "*Eng.hlf;*Rus.hlf;*Eng.lng;*Rus.lng";
  11.   helptxt       = [[
  12.   Обрабатывает два дополнительных поля в определении Macro:
  13.     - key2:  вторичная клавиатурная комбинация, работающая в меню выбора макроса;
  14.     - key2l: длина, отводимая под базовую часть описания.
  15.   Добавляет key2 в конец описания.
  16.   alignkey определяет, как выравнивать key2:
  17.     - L: по левому краю key2;
  18.     - C: по границе между модификаторами и клавишей в key2;
  19.     - R: по правому краю key2.
  20.   Для использования добавить в _macroinit.lua строки ниже.
  21.   Если данный файл лежит не в каталоге "scripts", исправить путь.
  22.  
  23.   local Add_key2 = loadfile(win.GetEnv("FARPROFILE").."\\Macros\\scripts\\key2Process.lua")
  24.   if Add_key2 then Add_key2()() end
  25. ]];
  26.   history       = [[
  27. 2018/12/14 v0.9.0 - Публичная бета.
  28. ]];
  29.   options       = {
  30.     alignkey = "C",--"L","C","R"
  31.   }
  32. }
  33. if not nfo then return end
  34. -- +
  35. --[[константы]]
  36. -- -
  37. local MSMenuGuid = "165AA6E3-C89B-4F82-A0C5-C309243FD21B"
  38. local rx = regex.new("(.*)(?<=LCtrl|.LAlt|RCtrl|.RAlt|.Ctrl|..Alt|Shift)(?!LCtrl|LAlt|RCtrl|RAlt|Ctrl|Alt|Shift)")
  39. -- +
  40. --[[настройки]]
  41. -- -
  42. -- +
  43. --[[переменные]]
  44. -- -
  45. local w,OldAddRegularMacro,mod,k = math.min(Far.Width-32,99)
  46. -- +
  47. --[=[вспомогательные функции]=]
  48. -- -
  49. local function GetMod(key) return (rx:match("  "..key)or""):sub(3) end
  50.  
  51. local function getUpvalue(f,name)
  52. for i=1,math.huge do
  53.   local n,v = debug.getupvalue (f,i)
  54.   if n==nil then error("unable to get upvalue: "..name) end
  55.   if n==name then return v,i end
  56. end
  57. end
  58. --
  59. local function AddRegularMacroNew(m,fp)
  60. if type(m.key2)=="string" then
  61.   local modk2 = (rx:match("  "..m.key2)or""):sub(3)
  62.   local kk2 = m.key2:sub(modk2:len()+1)
  63.   local wk2 = type(m.key2l)=="number" and m.key2l or w
  64.   local fmt = "%-"..wk2.."."..wk2.."s %"..(({L="",C=14,R=(19-kk2:len())})[nfo.options.alignkey] or 14).."s%s%s"
  65.   m.description = fmt:format(m.description:gsub("&",""),modk2,kk2:len()>1 and "" or "&",kk2)
  66. end
  67. return OldAddRegularMacro(m,fp)
  68. end
  69. --
  70. local function ReplaceAddRegularMacro()
  71. local LoadMacros = getUpvalue(eval,"utils").LoadMacros
  72. local AddRegularMacro,iAddRegularMacro = getUpvalue(LoadMacros,"AddRegularMacro")
  73. if not OldAddRegularMacro then OldAddRegularMacro = AddRegularMacro end
  74. debug.setupvalue (LoadMacros,iAddRegularMacro,assert(AddRegularMacroNew))
  75. end
  76. -- +
  77. --[=[Макрос]=]
  78. -- -
  79. if Macro then Macro{
  80.   id="817F6653-F4AC-48DC-809B-7AD94AEFC8EC";
  81.   description="Обработка вторичной клавиатурной комбинации в меню выбора макроса";
  82.   area="Menu"; key="/.+/"; priority=100;
  83.   condition=function(key)
  84. mod = GetMod(key)
  85. k = key:sub(mod:len()+1)
  86. return Menu.Id==MSMenuGuid
  87.   end;
  88.   action=function()
  89. if Menu.Select(" "..mod..k,2,0)>0 or (mod=="" and Menu.Select(" "..GetMod(Object.Title:match("%S+$"))..k,2,0)>0) then
  90.   Keys("Enter")
  91. else
  92.   Keys("AKey")
  93. end
  94.   end;
  95. } end
  96. --
  97. 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 35 times

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 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: 107 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: 107 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 “Обсуждение макросов”