package.path и package.cpath

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
zg
zero-gravity
Posts: 6038
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

package.path и package.cpath

Post by zg »

  1. require("test")
test.lua ищется и в %FARPROFILE%\Macros\modules\ и в %FARHOME% и в папке с luamacro и в %FARHOME%\lua.
test.dll ищется только в %FARHOME%.
этому поведению есть какой-то глубокий смысл?
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaMacro — Lua как язык макросов

Post by Shmuel »

zg wrote:этому поведению есть какой-то глубокий смысл?
Поиск в папке с плагином можно было бы убрать (это работа библиотеки LuaFAR), но пока не убираю, т.к. другие мои плагины зависят от этого, а времени на переделку пока нет. С другой стороны, это вроде никому не должно мешать.

Любой, кто хочет изменить папки поиска или их порядок, может легко это сделать в любом макрофайле (вне макросов), установив свои значения для package.path и package.cpath.
User avatar
zg
zero-gravity
Posts: 6038
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: LuaMacro — Lua как язык макросов

Post by zg »

не, то как ищется lua меня устраивает. вопрос был, почему dll точно так же не ищется?
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaMacro — Lua как язык макросов

Post by Shmuel »

zg wrote:не, то как ищется lua меня устраивает. вопрос был, почему dll точно так же не ищется?
Просто используется package.cpath по умолчанию, который lua5.1.dll устанавливает на папку с exe-файлом (в нашем случае - Far.exe). Мы можем это изменить как угодно - предлагайте.

Например, можно добавить в package.cpath папки %farprofile%\Macros\CModules32 и %farprofile%\Macros\CModules64.
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: LuaMacro — Lua как язык макросов

Post by John Doe »

Нужен официальный способ модификации package.path/cpath
Можно делать это в _macroinit.lua , но не всё так просто как хотелось бы, потому что этот код будет исполняться при каждой перезагрузке (в рамках сессии), соответственно переменные будут расти и расти.

Можно написать функцию, которая прежде чем добавить элемент будет проверять а не добавлен ли он уже.
Или можно сохранять где-то изначальное состояние переменных и работать уже с ним.
Или указывать пути в настройках LuaMacro (или в far.exe.ini?)

В любом случае, хотелось бы иметь один рекомендованый способ, описанный в документации.
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaMacro — Lua как язык макросов

Post by Shmuel »

John Doe wrote:Нужен официальный способ модификации package.path/cpath
Не уверен насчёт необходимости официального. Как вариант, можно использовать какое-либо поле таблицы package для запоминания факта инициализации, например:
  1. -- _macroinit.lua
  2.  
  3. if not package.inited then
  4.  
  5.   package.inited = true
  6.  
  7.   package.path = ......
  8.  
  9.   package.cpath = ......
  10.  
  11. end
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: LuaMacro — Lua как язык макросов

Post by John Doe »

Shmuel wrote:Как вариант, можно использовать какое-либо поле таблицы package для запоминания факта инициализации
В этом варианте проблематично изменить путь не перегружая фар или плагин.
Лучше сохранять начальные значения, и далее работать с ними.

Code: Select all

package.path_bak = package.path_bak or package.path end
package.cpath_bak = package.cpath_bak or package.cpath end
package.path = package.path_bak..somepath
package.cpath = package.path_bak..somepath
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaMacro — Lua как язык макросов

Post by Shmuel »

Ну, изощряться можно сколько угодно, и никто не запрещает. Кому-то и ваш способ покажется недостаточно гибким, а мне и этого достаточно (на самом деле я даже этим не пользуюсь).
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: LuaMacro — Lua как язык макросов

Post by Smitis »

Как вариант, установить переменные среды LUA_PATH и LUA_CPATH, глобально для Винды или в командном файле, через который запускать ФАР. Но глобальные не всегда удобно, так как влияют на другие приложения, использующие LUA другой версии.
Разум когда-нибудь победит.
Post Reply

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