local info = panel.GetPanelInfo(nil,1)
local tt = {}
for k=1,info.SelectedItemsNumber do
local item = panel.GetSelectedPanelItem(nil,1,k)
if item.FileAttributes:find("d") then
table.insert(tt,item.FileName)
end
end
local paths = table.concat(tt, ";")
far.MacroLoadAll(paths)
в %farprofile%\Macros.
В пользовательском меню добавляем пункт "Load Macro folders" с командой lua:@%farprofile%\Macros\load_macro_folders.lua
Теперь можно выделять папки и вызывать данный пункт пользовательского меню - загрузятся макросы из выделенных папок, все остальные выгрузятся.
ПРЕДУПРЕЖДЕНИЕ: не вызывайте этот скрипт на папках, в содержимом которых вы не уверены, это может плохо кончиться.
Вот другой вариант, не требующий файла - только команда пользовательского меню (всё должно быть в одну строчку): lua: info = panel.GetPanelInfo(nil,1) tt = {} for k=1,info.SelectedItemsNumber do item = panel.GetSelectedPanelItem(nil,1,k) if item.FileAttributes:find("d") then table.insert(tt,item.FileName) end end paths = table.concat(tt, ";") far.MacroLoadAll(paths)
;== загрузить макросы из выделенных папок, а все остальные выгрузить см. Shmuel Sat 27 Feb 2021 02:03 https://forum.farmanager.com/viewtopic.php?p=165246#p165246
какой=lua: info = panel.GetPanelInfo(nil,1) tt = {} for k=1,info.SelectedItemsNumber do item = panel.GetSelectedPanelItem(nil,1,k) if item.FileAttributes:find("d") then table.insert(tt,item.FileName) end end paths = table.concat(tt, ";") far.MacroLoadAll(paths)
rfrjq=lua: info = panel.GetPanelInfo(nil,1) tt = {} for k=1,info.SelectedItemsNumber do item = panel.GetSelectedPanelItem(nil,1,k) if item.FileAttributes:find("d") then table.insert(tt,item.FileName) end end paths = table.concat(tt, ";") far.MacroLoadAll(paths)
what=lua: info = panel.GetPanelInfo(nil,1) tt = {} for k=1,info.SelectedItemsNumber do item = panel.GetSelectedPanelItem(nil,1,k) if item.FileAttributes:find("d") then table.insert(tt,item.FileName) end end paths = table.concat(tt, ";") far.MacroLoadAll(paths)
црфе=lua: info = panel.GetPanelInfo(nil,1) tt = {} for k=1,info.SelectedItemsNumber do item = panel.GetSelectedPanelItem(nil,1,k) if item.FileAttributes:find("d") then table.insert(tt,item.FileName) end end paths = table.concat(tt, ";") far.MacroLoadAll(paths)
;== !!! ПРЕДУПРЕЖДЕНИЕ: не вызывайте алиасы 'какой' и 'what' на папках, в содержимом которых вы не уверены, это может плохо кончиться. !!!
;== обновить все макросы с визуальной индикацией см. shmuz 22:41 19-02-2015 http://forum.ru-board.com/topic.cgi?forum=5&topic=31718&start=6280#13
все=lua:local msg = win.GetEnv("farlang")=="Russian" and "Перезагрузка макросов" or "Reload macros" far.MacroLoadAll() far.Message(msg,"","") win.Sleep(1000) far.AdvControl("ACTL_REDRAWALL")
dct=lua:local msg = win.GetEnv("farlang")=="Russian" and "Перезагрузка макросов" or "Reload macros" far.MacroLoadAll() far.Message(msg,"","") win.Sleep(1000) far.AdvControl("ACTL_REDRAWALL")
all=lua:local msg = win.GetEnv("farlang")=="Russian" and "Перезагрузка макросов" or "Reload macros" far.MacroLoadAll() far.Message(msg,"","") win.Sleep(1000) far.AdvControl("ACTL_REDRAWALL")
фдд=lua:local msg = win.GetEnv("farlang")=="Russian" and "Перезагрузка макросов" or "Reload macros" far.MacroLoadAll() far.Message(msg,"","") win.Sleep(1000) far.AdvControl("ACTL_REDRAWALL")
.
И теперь тренируюсь на них. После исполнения алиаса 'какой' (назван как сокращение фразы 'какой макрос мешает?') на порожней папке МакроБрауезер выдал окошко:
Оказалось, что это у меня случайно затесался один макрос ручного набора %FarProfile%\Macros\internal\Editor_AltF8.lua
Ann, сейчас проверил, подтвердилось.
Значит сохранённые клавиатурные макросы загружаются вызовом far.MacroLoadAll, независимо от указанных путей.
Придётся с этим смириться.
Last edited by Shmuel on Sat 27 Feb, 2021 13:07, edited 1 time in total.
В дополнение к четырём алиасам с макросами, предложенными уважаемым Shmuel`ем, (первые два из которых перезагружают все макросы; а вторые два грузят макросы из выделенных папок, а все остальные выгружают) я подготовил следующие
;== включить макрос под курсором см. citRiks Sat 27 Feb 2021 01:19 https://forum.farmanager.com/viewtopic.php?p=165242#p165242
вкл=lua:mf.print('lua:Xer0X.fnc_macro_one_load(nil,[[') Keys("CtrlF BS") mf.print(']])') Keys("Enter")
drk=lua:mf.print('lua:Xer0X.fnc_macro_one_load(nil,[[') Keys("CtrlF BS") mf.print(']])') Keys("Enter")
;== отключить макрос под курсором см. citRiks Sat 27 Feb 2021 01:19 https://forum.farmanager.com/viewtopic.php?p=165242#p165242
откл=lua:mf.print('lua:Xer0X.fnc_mcr_src_all_clean([[') Keys("CtrlF BS") mf.print(']])') Keys("Enter")
jnrk=lua:mf.print('lua:Xer0X.fnc_mcr_src_all_clean([[') Keys("CtrlF BS") mf.print(']])') Keys("Enter")
алиаса, на основе макросов, предложенных уважаемым citRiks`ом (первый из этих алиасов включает, а второй выключает одиночный макрос, находящийся под курсором).
Shmuel, citRiks, buniak_a_h
Для полноты набора инструментов, предназначенных, прежде всего, для обнаружения макроса-хулигана, теперь недостаёт только алиасов, грузящих и отключающих макросы группой выделенных файлов, находящихся в одной папке.
На всякий случай обосную эту потребность. На определённом этапе процесса поиска макроса-виновника определяется папка, в которой искомый макрос находится с высокой вероятностью. И может так сложиться, что в данной папке оказывается помещено существенно большое множество файлов с макросами. Например, в моей практике это вполне может быть папка с 212 lua-файлами.
Разумеется, можно разложить эти файлы по нескольким подпапкам и продолжить исследование. И пока что это так и делается. Однако это процедура, требующая немало времени на раскладку файлов и последующий сбор их обратно. Поэтому, после того как будут созданы скрипты, грузящие и отключающие макросы из одной папки группами, процесс поиска виновника ещё больше облегчится и ускориться.
Ann, ваша идея по групповому включению/отключеню макрофайлов безусловно полезна.
Может быть не мне, но другим - поскольку я пользуюсь на 95% своими макросами, то искать виновника практически никогда не приходится.
У вас в одной папке 212 макрофайлов, а у меня во всех папках вместе 70.
Ann wrote: ↑Sat 27 Feb, 2021 06:51так работает: lua:Xer0X.fnc_macro_one_load(nil,[[C:\tmp\PassGenerate.lu_a]])
Вспомнил, что можно попробовать одиночную обработку распространить на группу выделенных файлов через нативную команду "Применить команду Ctrl+G", попробовал — вроде бы работает. И сделал ещё
;== включить группу выделенных макросов через CtrlG см. citRiks Sat 27 Feb 2021 01:19 https://forum.farmanager.com/viewtopic.php?p=165242#p165242
вклГр=lua:Keys("CtrlG CtrlY l u a : X e r 0 X . f n c _ m a c r o _ o n e _ l o a d ( n i l , [ [ ! . ! ] ] ) Enter")
drkUh=lua:Keys("CtrlG CtrlY l u a : X e r 0 X . f n c _ m a c r o _ o n e _ l o a d ( n i l , [ [ ! . ! ] ] ) Enter")
Ann, вместо: jnrk=lua:mf.print('lua:Xer0X.fnc_mcr_src_all_clean([[') Keys("CtrlF BS") mf.print(']])') Keys("Enter")
.. мне кажется что проще и лучше типа так: jnrk=lua:Xer0X.fnc_mcr_src_all_clean(APanel.Current)
по CtrlG (применить команду/Apply command), тоже почему не так вот: lua:Xer0X.fnc_mcr_src_all_clean([[!.!]])
Можно еще поэкпериментировать с консольными алиасами типа такого: my_cool_alias=lua:far.Message([[$*]]) Если все еще чего не хватает (??)
то я думаю что вскоре напишу удаление всех макросов из директории,
ровно так же удаляются и записанный клавиатурные
Last edited by citRiks on Sun 28 Feb, 2021 10:31, edited 3 times in total.
Ann wrote: ↑Sat 27 Feb, 2021 20:32теперь недостаёт только алиасов, грузящих и отключающих макросы группой выделенных файлов, находящихся в одной папке.
так разобрались вроде уже? )
Apply Command/применить комманду
citRiks wrote: ↑Sun 28 Feb, 2021 10:16вместо: jnrk=lua:mf.print('lua:Xer0X.fnc_mcr_src_all_clean([[') Keys("CtrlF BS") mf.print(']])') Keys("Enter")
.. мне кажется что проще и лучше типа так: jnrk=lua:Xer0X.fnc_mcr_src_all_clean(APanel.Current)
Но дело в том, что APanel.Current выдаёт просто имя файла под курсором, без пути; а Keys("CtrlF BS") вставляет в поле ввода полное имя файла с путём. А без последнего данная команда не срабатывает.
по CtrlG (применить команду/Apply command), тоже почему не так вот: lua:Xer0X.fnc_mcr_src_all_clean([[!.!]])
Во-первых, сама по себе данная команда через подстановочный знак !.! – lua:Xer0X.fnc_mcr_src_all_clean([[!.!]]) не срабатывает, а вот через подстановку полного пути по Keys("CtrlF BS") – lua:mf.print('lua:Xer0X.fnc_mcr_src_all_clean([[') Keys("CtrlF BS") mf.print(']])') Keys("Enter") работает.
А во-вторых, она отключает только одиночный файл. И в т.ч. и по CtrlG она тоже отключает только одиночный файл, находящийся под курсором, а остальные выделенные файлы – нет.
Вижу что дискуссия выглядит незавершенной,
хотя с тех пор код претерпел улучшения и сейчас работает идеально.
моя мотивация была в том чтобы любое изменения в файле сразу автоматически перегружало все скрипты что в этом файле,
но использовать можно и по мере любой другой надобности.
Сигнатура функции:
local tbl_env_mcr_ini, tbl_exinfo
= Xer0X.fnc_macro_one_load = function(
--[[ file data from recursiveSearch only,
currently is not used:]] mcr_info,
mcr_path, no_clean, no_exec
)
Аргументы: mcr_info - не используется mcr_path - файл загрузить из него макросы no_clean - НЕ удалять прежне загруженные макросы из этого же файла no_exec - НЕ загружать файл.
(зато будет приготовлена среда загрузки для этого файла tbl_env_mcr_ini, смотреть ниже)