Как передать в скрипт его FullPath
- John Doe
- Бюрократ
- Posts: 14174
- Joined: Wed 27 Apr, 2005 20:42
- Location: github.com/FarManagerLegacy
- Has thanked: 80 times
- Been thanked: 454 times
- Contact:
Re: Spring — внедрение Lua в качестве макроязыка
Можно ли в макросе как-то получить путь к файлу, из которого он загружается?
-
- Posts: 6970
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 42 times
- Been thanked: 562 times
Re: Spring — внедрение Lua в качестве макроязыка
Он сохраняется во внутренней таблице макроса, но пока нигде не используется, и доступа пока нет. Вообще, запланировано кое-что в этом направлении, но ... всему своё время.John Doe wrote:Можно ли в макросе как-то получить путь к файлу, из которого он загружен?
- John Doe
- Бюрократ
- Posts: 14174
- Joined: Wed 27 Apr, 2005 20:42
- Location: github.com/FarManagerLegacy
- Has thanked: 80 times
- Been thanked: 454 times
- Contact:
Re: Spring — внедрение Lua в качестве макроязыка
Собственно в данном случае макроса нет.
Есть lua файл, который лежит в scripts и исполняется при загрузке макросов.
Вот в нём и возникла потребность узнать путь самого файла.
Есть lua файл, который лежит в scripts и исполняется при загрузке макросов.
Вот в нём и возникла потребность узнать путь самого файла.
- John Doe
- Бюрократ
- Posts: 14174
- Joined: Wed 27 Apr, 2005 20:42
- Location: github.com/FarManagerLegacy
- Has thanked: 80 times
- Been thanked: 454 times
- Contact:
Re: Spring — внедрение Lua в качестве макроязыка
Я почему-то надеялся вычислить путь по arg[0].
Ну ничего, не критично. Может когда-нибудь.
Ну ничего, не критично. Может когда-нибудь.
- Smitis
- Posts: 1716
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 56 times
Как передать в скрипт его FullPath
Ответ был нет. Однако потребность в этом понемногу назревает (если к lua прилагаются другие файлы, которые хочется положить в ту же папку). В то же время при загрузке макроса через loadfile известен его FullPath. Может быть помещать его куда-нибудь перед загрузкой, например в mf.FullPath? Добавить одну строчку в utils.lua. Тогда можно было бы сохранить его в локальных переменных и проблема бы отпала. Возможно есть более лучший способ.John Doe wrote:Можно ли в макросе как-то получить путь к файлу, из которого он загружается?
Разум когда-нибудь победит.
- John Doe
- Бюрократ
- Posts: 14174
- Joined: Wed 27 Apr, 2005 20:42
- Location: github.com/FarManagerLegacy
- Has thanked: 80 times
- Been thanked: 454 times
- Contact:
Re: LuaMacro — Lua как язык макросов
Другой вариант - передавать путь к файлу как параметр функции action.
И потребность есть не только в пути, но и в разной другой информации, надо хорошенько подумать как это всё увязать.
На всё отдельных параметров конечно не напасёшься, поэтому это должна быть таблица.
А если смотреть ещё глобальнее, то хотелось бы иметь доступ к информации не только текущего, но и вообще всех загруженных.
В частности, это позволило бы менять их на лету.
И потребность есть не только в пути, но и в разной другой информации, надо хорошенько подумать как это всё увязать.
На всё отдельных параметров конечно не напасёшься, поэтому это должна быть таблица.
А если смотреть ещё глобальнее, то хотелось бы иметь доступ к информации не только текущего, но и вообще всех загруженных.
В частности, это позволило бы менять их на лету.
- Smitis
- Posts: 1716
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 56 times
Re: LuaMacro — Lua как язык макросов
Но если передавать в качестве параметра action - это надо где-то хранить (усложнение, которое может быть и не будет реализованно). И в момент загрузки этой информации не будет.
А вот даже такое простое решение в utils.lua Позволит в модуле поставить local fullpath=mf.FullPath и использовать и в момент загрузки и при вызове макроса.
Может быть mf не самое лучшее место. И после загрузки всех модулей надо переменную обнулять/удалять как потерявшую актуальность. Но тем не менее, вариант самый простой.
А вот даже такое простое решение в utils.lua Позволит в модуле поставить local fullpath=mf.FullPath и использовать и в момент загрузки и при вызове макроса.
Может быть mf не самое лучшее место. И после загрузки всех модулей надо переменную обнулять/удалять как потерявшую актуальность. Но тем не менее, вариант самый простой.
Разум когда-нибудь победит.
- John Doe
- Бюрократ
- Posts: 14174
- Joined: Wed 27 Apr, 2005 20:42
- Location: github.com/FarManagerLegacy
- Has thanked: 80 times
- Been thanked: 454 times
- Contact:
Re: LuaMacro — Lua как язык макросов
И сейчас много чего хранится.Smitis wrote:Но если передавать в качестве параметра action - это надо где-то хранить (усложнение, которое может быть и не будет реализованно).
Т.е. вам это нужно за пределами action.Smitis wrote:И в момент загрузки этой информации не будет.
В этом случае можно было бы рассматривать путь как нулевой параметр командной строки.
Типа ({...})[0]
Нет, так не работает, можно только arg[0].
(Интересно как с этим работают в Lua 5.2, где нет "arg")
- Smitis
- Posts: 1716
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 56 times
Re: LuaMacro — Lua как язык макросов
Я бы сказал - и за пределами action. А получив там, я с могу использовать и в action.John Doe wrote:Т.е. вам это нужно за пределами action.
В этом случае можно было бы рассматривать путь как нулевой параметр командной строки.
Типа ({...})[0]
Нет, так не работает, можно только arg[0].
(Интересно как с этим работают в Lua 5.2, где нет "arg")
arg[0] тоже вариант, но как туда передать?
Разум когда-нибудь победит.
- John Doe
- Бюрократ
- Posts: 14174
- Joined: Wed 27 Apr, 2005 20:42
- Location: github.com/FarManagerLegacy
- Has thanked: 80 times
- Been thanked: 454 times
- Contact:
Re: LuaMacro — Lua как язык макросов
Вообще передать аргумент через arg можно вызвав функцию-загрузчик с параметрами.
Но не знаю возможно ли так передать нулевой [0]
Но не знаю возможно ли так передать нулевой [0]
- Smitis
- Posts: 1716
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 56 times
Re: LuaMacro — Lua как язык макросов
Разве loadfile, через который загружаются файлы, поддерживают передачу параметров? В utils.lua это строка "local f, msg = loadfile(FullPath)" Куда там параметры писать?John Doe wrote:Вообще передать аргумент через arg можно вызвав функцию-загрузчик с параметрами.
Но не знаю возможно ли так передать нулевой [0]
Разум когда-нибудь победит.
- John Doe
- Бюрократ
- Posts: 14174
- Joined: Wed 27 Apr, 2005 20:42
- Location: github.com/FarManagerLegacy
- Has thanked: 80 times
- Been thanked: 454 times
- Contact:
Re: LuaMacro — Lua как язык макросов
Не loadfile, а созданная им функция-загрузчик.Smitis wrote:Разве loadfile, через который загружаются файлы, поддерживают передачу параметров? В utils.lua это строка "local f, msg = loadfile(FullPath)" Куда там параметры писать?John Doe wrote:Вообще передать аргумент через arg можно вызвав функцию-загрузчик с параметрами.
Но не знаю возможно ли так передать нулевой [0]
f(par1,par2,par3)
- Smitis
- Posts: 1716
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 56 times
Re: LuaMacro — Lua как язык макросов
Тфу-ты, не в ту сторону меня понесло. Всё проще.
Вызов в utils.lua делается так "local ok, msg = pcall(f,FullPath)" и получаем первым параметром local FullPath=select(1,...)
Вызов в utils.lua делается так "local ok, msg = pcall(f,FullPath)" и получаем первым параметром local FullPath=select(1,...)
Разум когда-нибудь победит.
- John Doe
- Бюрократ
- Posts: 14174
- Joined: Wed 27 Apr, 2005 20:42
- Location: github.com/FarManagerLegacy
- Has thanked: 80 times
- Been thanked: 454 times
- Contact:
Re: LuaMacro — Lua как язык макросов
http://www.lua.org/manual/5.1/manual.html#pdf-select
Перевожу: использование select для получения первого параметра лишено смысла.
Достаточно local FullPath = ...
Code: Select all
If index is a number, returns all arguments after argument number index. Otherwise, index must be the string "#", and select returns the total number of extra arguments it received.
Достаточно local FullPath = ...