Настраиваемый путь для загрузки макросов

Здесь обсуждается всё, что касается макросов.
Post Reply
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Настраиваемый путь для загрузки макросов

Post by gotar »

Предлагаю сделать две настройки для LuaMacro.dll:
1. Строку по типу package.path для указания того какие файлы надо грузить по команде lm:load и при начальной загрузки макросов.

2. Строковую переменную, в которой указываются каталоги в которых надо искать файл в команде lm:post @file.lua. Чтобы не приходилось писать ужаса

Code: Select all

eval('@' .. win.GetEnv('FARPROFILE') .. '\\Macros\\lua_explorer.lua')
Shmuel вроде бы не возражает это сделать, если это кому нибудь нужно кроме меня.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Настраиваемый путь для загрузки макросов

Post by John Doe »

(2) поддерживаю, но в чём фишка (1)?
Сейчас грузятся (=исполняются) все файлы из Macros\scripts, включая подкаталоги.
Чего не хватает?
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Настраиваемый путь для загрузки макросов

Post by gotar »

Лично я добавлю в аналог package.path относительные пути ./luamacro.lua;./LuaMacro/?.lua и буду грузить макросы из того каталога в котором нахожусь. Мне неудобны глобальные макросы, которые всегда действуют. Для одного проекта мне нужны одни макросы, для другого другие. Кроме того мне кажется это будет полезно при отладке макросов. Убрал из пути отлаживаемые макросы, сделал lm:load и у тебя работают стабильные версии макросов. Механизм событий и функция far.MacroLoadAll тоже позволят сделать что нибудь вкусное.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Настраиваемый путь для загрузки макросов

Post by John Doe »

Мне была бы полезна функция far.MacroLoad(path).

Но ваше предложение позволит обойтись для этих целей far.MacroLoadAll, если предварительно подменить список путей на нужный.
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Настраиваемый путь для загрузки макросов

Post by gotar »

Code: Select all

local F = far.Flags
_G.far.MacroLoad=function(path)
     far.MacroPost("@"..path, F.KMFLAGS_DISABLEOUTPUT)
end;
или даже

Code: Select all

_G.far.MacroLoad=function(path)
     eval("@"..path)
end;
Это не то?
Last edited by gotar on Sun 24 Feb, 2013 10:53, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Настраиваемый путь для загрузки макросов

Post by John Doe »

Так не работает.

А по поводу package.path такой вопрос.
DLL-библиотеки сейчас ищутся в текущей папке, и в %FARHOME%.
Хотелось бы добавить и другие места.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Настраиваемый путь для загрузки макросов

Post by Shmuel »

John Doe wrote:А по поводу package.path такой вопрос.
DLL-библиотеки сейчас ищутся в текущей папке, и в %FARHOME%.
Хотелось бы добавить и другие места.
Можно так: создайте файл с именем, например, config.lua, положите его в %farprofile%\Macros\scripts, а в нём сконструируйте свои package.path и package.cpath.
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Настраиваемый путь для загрузки макросов

Post by gotar »

Так не работает
А что не работает?
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Настраиваемый путь для загрузки макросов

Post by gotar »

Вот что у меня получилось

Code: Select all

runpath=".;%FARPROFILE%\\Macros"

function _G.run(file)
    local crunk=nil
    for p in runpath:gmatch("[^;]+")do
        
	local dirname=p:gsub("%%(.-)%%", win.GetEnv)
	local script=dirname..'\\'..file
	local attr=win.GetFileAttr(script)
	
	if attr ~= nil then 
	   if attr:find("^[acr]*$") ~= nil then
		local msg
		crunk,msg=loadfile(script)
		if not crunk then
		    far.Message(msg,"Load " .. script,_,'w')
		    return 
		end
		break
	   end
  	end
     end
     if crunk==nil then
	far.Message(file .. " not found",'Run file',_,'w')
	return 
     end
--     setfenv(chunk, getfenv(1))
     local state, err = pcall(crunk)
     if not state then
	far.Message(err,"Run ",_,'w')
	return
     end
end
Имеется ввиду использовать функцию run вместо "@" в lm:post. По всей видимости строку с setfenv нужно раскоментарить но я не понимаю как ее правильно написать
Last edited by gotar on Sun 24 Feb, 2013 10:41, edited 2 times in total.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Настраиваемый путь для загрузки макросов

Post by Shmuel »

gotar wrote:Чтобы не приходилось писать ужаса

Code: Select all

eval('@' .. win.GetEnv('FARPROFILE') .. '\\Macros\\lua_explorer.lua')
Ни eval, ни win.GetEnv не нужны. Попробуйте так:

Code: Select all

lm:post @%farprofile%\Macros\lua_explorer.lua
Это не значит, конечно, что ваша идея нехороша (кстати, я уже давно реализовал подобную идею для lua.exe).
gotar wrote:Вот что у меня получилось [......]
В общем, понятно. Посмотрим ещё.
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Настраиваемый путь для загрузки макросов

Post by gotar »

Я поправил far.MacroLoad. Теперь должно работать
Post Reply

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