Как правильно создать свой модуль на lua и подключить его

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
ladserg
Posts: 215
Joined: Thu 19 Feb, 2009 14:51
Has thanked: 1 time
Been thanked: 1 time

Как правильно создать свой модуль на lua и подключить его

Post by ladserg » Tue 02 Sep, 2014 10:00

Не могу разобраться как в lua-плагине подключить свой модуль, да и из скрипта тоже не могу. Создаю файл mymodule.lua:

Code: Select all

local mymodule = {}

function mymodule.foo()
    print("Hello World!")
end

return mymodule
В плагине вставляю :

Code: Select all

m = require "mymodule"
И получаю кучу издевательств от LUA. Причем если файл положить в папку %FARHOME%\lua, то модуль грузится прекрасно, но мне нужно загрузить его из папки плагина собственно из плагина.

Как это сделать?
Last edited by ladserg on Sat 20 Sep, 2014 00:51, edited 1 time in total.

Shmuel
Posts: 5836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Re: Как правильно создать свой модуль на lua и подключить ег

Post by Shmuel » Tue 02 Sep, 2014 10:05

В начале стартового Lua-файла плагина вставьте
package.path = far.PluginStartupInfo().ModuleDir .. "?.lua;" .. package.path

ladserg
Posts: 215
Joined: Thu 19 Feb, 2009 14:51
Has thanked: 1 time
Been thanked: 1 time

Re: Как правильно создать свой модуль на lua и подключить ег

Post by ladserg » Tue 02 Sep, 2014 11:16

Shmuel wrote:В начале стартового Lua-файла плагина вставьте
package.path = far.PluginStartupInfo().ModuleDir .. "?.lua;" .. package.path
Спасибо, помогло. А можно что нибудь такое же, что бы и в обычном скрипте можно было бы подключить модуль, который находится в каталоге скрипта?

П.С. Хм, странно что при выполнении скрипта командой:

Code: Select all

lua:@script.lua
не подхватываются модули из каталога скрипта, хотя этот каталог в package.path есть :-/
Last edited by ladserg on Tue 02 Sep, 2014 11:20, edited 1 time in total.

Shmuel
Posts: 5836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Re: Как правильно создать свой модуль на lua и подключить ег

Post by Shmuel » Tue 02 Sep, 2014 11:20

ladserg wrote:А можно что нибудь такое же, что бы и в обычном скрипте можно было бы подключить модуль, который находится в каталоге скрипта?
Что имеется в виду под "обычным скриптом": скрипт, исполняемый вашим плагином или же плагином LuaMacro?

ladserg
Posts: 215
Joined: Thu 19 Feb, 2009 14:51
Has thanked: 1 time
Been thanked: 1 time

Re: Как правильно создать свой модуль на lua и подключить ег

Post by ladserg » Tue 02 Sep, 2014 11:22

Shmuel wrote:
ladserg wrote:А можно что нибудь такое же, что бы и в обычном скрипте можно было бы подключить модуль, который находится в каталоге скрипта?
Что имеется в виду под "обычным скриптом": скрипт, исполняемый вашим плагином или же плагином LuaMacro?
Скрипт исполняемый плагином LuaMacro, я посмотрел - в package.path добавлен путь к каталогу скрипта (т.е. к текущему), видимо вставляется самим плагином, но из каталога скрипта модули не цепляются.

User avatar
John Doe
Бюрократ
Posts: 12323
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 168 times

Re: Как правильно создать свой модуль на lua и подключить ег

Post by John Doe » Tue 02 Sep, 2014 11:24

ladserg wrote:А можно что нибудь такое же, что бы и в обычном скрипте можно было бы подключить модуль, который находится в каталоге скрипта?
Для загрузки можно использовать функцию loadfile.
Но в отличии от модуля, загруженного по require, такой модуль не будет доступен во всех скриптах.
ladserg wrote:но из каталога скрипта модули не цепляются.
package.path можно изменить в самом скрипте, после чего вызвать requre.
Или даже напрямую изменить package.loaded.
Но это не будет хорошим решением (да вряд ли это вообще вам нужно).

ladserg
Posts: 215
Joined: Thu 19 Feb, 2009 14:51
Has thanked: 1 time
Been thanked: 1 time

Re: Как правильно создать свой модуль на lua и подключить ег

Post by ladserg » Tue 02 Sep, 2014 11:29

О! Кажется нашел где трабла, почему то в package.path к текущему пути добавляется точка, из-за чего текущий путь станов. Но вот если указывать полный путь к скрипту, например так:
lua:@C:\path\to\script\script.lua
то в package.path добавляется трижды путь до скрипта и зачем то один раз путь до скрипта с точкой в самом начале :-/

А зачем точка прибавляется к пути о скрипта? :-/

ladserg
Posts: 215
Joined: Thu 19 Feb, 2009 14:51
Has thanked: 1 time
Been thanked: 1 time

Re: Как правильно создать свой модуль на lua и подключить ег

Post by ladserg » Tue 02 Sep, 2014 11:30

John Doe wrote:
ladserg wrote:А можно что нибудь такое же, что бы и в обычном скрипте можно было бы подключить модуль, который находится в каталоге скрипта?
Для загрузки можно использовать функцию loadfile.
Но в отличии от модуля, загруженного по require, такой модуль не будет доступен во всех скриптах.
ladserg wrote:но из каталога скрипта модули не цепляются.
package.path можно изменить в самом скрипте, после чего вызвать requre.
Или даже напрямую изменить package.loaded.
Но это не будет хорошим решением (да вряд ли это вообще вам нужно).
Спасибо, уже разобрался, достаточно указывать полный путь, не знаю фича это или ошибка с поломкой текущего пути, но пока проблема обойдена.

Shmuel
Posts: 5836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Re: Как правильно создать свой модуль на lua и подключить ег

Post by Shmuel » Tue 02 Sep, 2014 11:33

ladserg wrote:Но вот если указывать полный путь к скрипту, например так:
lua:@C:\path\to\script\script.lua
то в package.path добавляется трижды путь до скрипта и зачем то один раз путь до скрипта с точкой в самом начале :-/

А зачем точка прибавляется к пути о скрипта? :-/
Фантастика какая-то.

User avatar
John Doe
Бюрократ
Posts: 12323
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 168 times

Re: Как правильно создать свой модуль на lua и подключить ег

Post by John Doe » Tue 02 Sep, 2014 11:37

ladserg
Какая точка? Какая поломка??
Что за код вообще?
Может стоит почитать lua manual?

P.S.
ladserg wrote:

Code: Select all

lua:@script.lua
не подхватываются модули из каталога скрипта, хотя этот каталог в package.path есть :-/
И не должны, у вашего плагина независимое окружение, в том числе свой package.path.
lua:far.Show(package.path)

ladserg
Posts: 215
Joined: Thu 19 Feb, 2009 14:51
Has thanked: 1 time
Been thanked: 1 time

Re: Как правильно создать свой модуль на lua и подключить ег

Post by ladserg » Tue 02 Sep, 2014 11:41

John Doe wrote:ladserg
Какая точка? Какая поломка??
Что за код вообще?
Может стоит почитать lua manual?
Прошу прощения, злополучную точку оказывается добавил я, и поломка была в результате моей ошибки :-)
Теперь всё работает как часы.

Shmuel
Posts: 5836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Re: Как правильно создать свой модуль на lua и подключить ег

Post by Shmuel » Tue 02 Sep, 2014 11:48

John Doe wrote:lua:far.Show(package.path)
lua:=package.path :sarcastic_hand

User avatar
John Doe
Бюрократ
Posts: 12323
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 168 times

Re: Как правильно создать свой модуль на lua и подключить ег

Post by John Doe » Tue 02 Sep, 2014 11:59

ladserg wrote:я посмотрел - в package.path добавлен путь к каталогу скрипта (т.е. к текущему).
.\?.lua означает текущий каталог, но ведь сам скрипт может быть загружен вовсе не из текущего.
Собственный путь скрипт получает либо первым параметром, либо в окружении (см. luamacro manual).

ladserg
Posts: 215
Joined: Thu 19 Feb, 2009 14:51
Has thanked: 1 time
Been thanked: 1 time

Re: Как правильно создать свой модуль на lua и подключить ег

Post by ladserg » Tue 02 Sep, 2014 12:09

John Doe wrote:
ladserg wrote:я посмотрел - в package.path добавлен путь к каталогу скрипта (т.е. к текущему).
.\?.lua означает текущий каталог, но ведь сам скрипт может быть загружен вовсе не из текущего.
Собственный путь скрипт получает либо первым параметром, либо в окружении (см. luamacro manual).
.\?.lua почему то не работает, с точкой в прямом пути накосячил я, уже разобрался, перенес часть функций из своего скрипта в модули. Я скрипты при помощи LuaMacro запускаю только для отладки, что бы потом перенести в плагин.

User avatar
John Doe
Бюрократ
Posts: 12323
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 168 times

Re: Как правильно создать свой модуль на lua и подключить ег

Post by John Doe » Tue 02 Sep, 2014 12:13

ladserg wrote:.\?.lua почему то не работает
Разумеется работает.
Всё согласно мануалу.
ladserg wrote:Я скрипты при помощи LuaMacro запускаю только для отладки, что бы потом перенести в плагин.
Если я правильно понял вашу задачу, то особой необходимости оформлять ваш скрипт плагином нет.

ladserg
Posts: 215
Joined: Thu 19 Feb, 2009 14:51
Has thanked: 1 time
Been thanked: 1 time

Re: Как правильно создать свой модуль на lua и подключить ег

Post by ladserg » Tue 02 Sep, 2014 12:25

John Doe wrote:
ladserg wrote:.\?.lua почему то не работает
Разумеется работает.
Всё согласно мануалу.
Не знаю, у меня в Far версии 3.0.4070 не работает. Если указать полный путь в package.path, тогда работает, а так модули из текущего каталога не подхватывает.
John Doe wrote: Если я правильно понял вашу задачу, то особой необходимости оформлять ваш скрипт плагином нет.
Возможно, тем более, что perl решает, просто решил попробовать оформить это в виде плагина, для собственного удобства и любопытства.

П.С. Раз пошла такая пьянка, из плагина снять выделение с файла можно только перебором всех файлов с активной панели и сравнения имени из числа выделенных? Или можно как то иначе?

Post Reply

Return to “Нужна помощь”