Загрузка макросов из отмеченных папок

Здесь обсуждается всё, что касается макросов.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Загрузка макросов из отмеченных папок

Post by Shmuel »

Чтобы не офтопить, открыл новую тему, хотя оно конечно того не стоит.
Помещаем файл в %farprofile%\Macros.
В пользовательском меню добавляем пункт "Load Macro folders" с командой lua:@%farprofile%\Macros\load_macro_folders.lua
Теперь можно выделять папки и вызывать данный пункт пользовательского меню - загрузятся макросы из выделенных папок, все остальные выгрузятся.
ПРЕДУПРЕЖДЕНИЕ: не вызывайте этот скрипт на папках, в содержимом которых вы не уверены, это может плохо кончиться.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Загрузка макросов из отмеченных папок

Post by Shmuel »

Вот другой вариант, не требующий файла - только команда пользовательского меню (всё должно быть в одну строчку):
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)
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

Загрузка макросов из отмеченных папок

Post by Ann »

Shmuel wrote: Sat 27 Feb, 2021 01:26 загрузятся макросы из выделенных папок, все остальные выгрузятся
Метод реально работает. Очень хорошо. Спасибо.
ПРЕДУПРЕЖДЕНИЕ: не вызывайте этот скрипт на папках, в содержимом которых вы не уверены, это может плохо кончиться
Благодарю за предупреждение. Нелишнее это. И в файл, и в меню поместил. И буду осторожен.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

Загрузка макросов из отмеченных папок

Post by Ann »

Shmuel wrote: Sat 27 Feb, 2021 02:03Вот другой вариант, не требующий файла
А так и ещё удобнее. И тоже очень хорошо работает. Спасибо.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

Загрузка макросов из отмеченных папок

Post by Ann »

Shmuel,

Поместил в doskey.ini четыре .

И теперь тренируюсь на них. После исполнения алиаса 'какой' (назван как сокращение фразы 'какой макрос мешает?') на порожней папке МакроБрауезер выдал окошко:
odin.png
Оказалось, что это у меня случайно затесался один макрос ручного набора %FarProfile%\Macros\internal\Editor_AltF8.lua
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Загрузка макросов из отмеченных папок

Post by Shmuel »

Ann, сейчас проверил, подтвердилось.
Значит сохранённые клавиатурные макросы загружаются вызовом far.MacroLoadAll, независимо от указанных путей.
Придётся с этим смириться.
Last edited by Shmuel on Sat 27 Feb, 2021 13:07, edited 1 time in total.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

Загрузка макросов из отмеченных папок

Post by Ann »

Shmuel wrote: Sat 27 Feb, 2021 12:48Значит сохранённые клавиатурные макросы загружаются вызовом far.MacroLoadAll, независимо от указанных путей.
Придётся с этим смириться
Хорошо, учтём это обстоятельство. И перед поиском макроса-хулигана будем как-то отключать клавиатурные макросы, при их наличии.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

Загрузка макросов из отмеченных папок

Post by Ann »

В дополнение к четырём алиасам с макросами, предложенными уважаемым Shmuel`ем, (первые два из которых перезагружают все макросы; а вторые два грузят макросы из выделенных папок, а все остальные выгружают) я подготовил следующие алиаса, на основе макросов, предложенных уважаемым citRiks`ом (первый из этих алиасов включает, а второй выключает одиночный макрос, находящийся под курсором).

Shmuel, citRiks, buniak_a_h

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

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

Разумеется, можно разложить эти файлы по нескольким подпапкам и продолжить исследование. И пока что это так и делается. Однако это процедура, требующая немало времени на раскладку файлов и последующий сбор их обратно. Поэтому, после того как будут созданы скрипты, грузящие и отключающие макросы из одной папки группами, процесс поиска виновника ещё больше облегчится и ускориться.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Загрузка макросов из отмеченных папок

Post by Shmuel »

Ann, ваша идея по групповому включению/отключеню макрофайлов безусловно полезна.
Может быть не мне, но другим - поскольку я пользуюсь на 95% своими макросами, то искать виновника практически никогда не приходится.
У вас в одной папке 212 макрофайлов, а у меня во всех папках вместе 70.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

Загрузка макросов из отмеченных папок

Post by Ann »

Ann wrote: Sat 27 Feb, 2021 06:51так работает: lua:Xer0X.fnc_macro_one_load(nil,[[C:\tmp\PassGenerate.lu_a]])
Вспомнил, что можно попробовать одиночную обработку распространить на группу выделенных файлов через нативную команду "Применить команду Ctrl+G", попробовал — вроде бы работает. И сделал ещё алиас.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Загрузка макросов из отмеченных папок

Post by citRiks »

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.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Загрузка макросов из отмеченных папок

Post by citRiks »

Ann wrote: Sat 27 Feb, 2021 20:32теперь недостаёт только алиасов, грузящих и отключающих макросы группой выделенных файлов, находящихся в одной папке.
так разобрались вроде уже? )
Apply Command/применить комманду

Code: Select all

lua:Xer0X.fnc_mcr_src_all_clean([[!.!]])
lua:Xer0X.fnc_mcr_src_one_clean([[!.!]])
lua:Xer0X.fnc_macro_one_load(nil,[[!.!]])
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

Загрузка макросов из отмеченных папок

Post by Ann »

citRiks,

Большое спасибо за помощь. Пытаюсь всё посоветованное понять, осознать и усвоить.

При этом, выявилась проблема, относящаяся к следующему.
citRiks wrote: Sun 28 Feb, 2021 10:39
Ann wrote: Sat 27 Feb, 2021 20:32теперь недостаёт только алиасов, грузящих и отключающих макросы группой выделенных файлов, находящихся в одной папке
так разобрались вроде уже? )
Apply Command/применить комманду

Code: Select all

...
lua:Xer0X.fnc_mcr_src_one_clean([[!.!]])
...
Увы, вот конкретно так не срабатывает. И, мало того, ещё и Фар.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

Загрузка макросов из отмеченных папок

Post by Ann »

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 она тоже отключает только одиночный файл, находящийся под курсором, а остальные выделенные файлы – нет.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Загрузка макросов из отмеченных папок

Post by citRiks »

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

Code: Select all

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, смотреть ниже)

Возвращает:
tbl_env_mcr_ini - среда загрузки макроса, выглядит так:

Code: Select all

local tbl_env_mcr_ini = {
	Macro		= function(...) --[[...]] end,
	Event		= function(...) --[[...]] end,
	MenuItem	= function(...) --[[...]] end,
        CommandLine	= function(...) --[[...]] end,
	PanelModule	= function(...) --[[...]] end,
	ContentColumns = function(...) --[[...]] end,
	LoadRegularFile	= function(...) --[[...]] end,
--	+ NoMacro, NoEvent, etc.
}
tbl_exinfo - добавочная диагностическая информация,
так как диагностики не бывает слишком много)
Last edited by citRiks on Tue 18 May, 2021 20:25, edited 1 time in total.
Post Reply

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