Как передать в скрипт его FullPath

Здесь обсуждается всё, что касается макросов.
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 »

Latest post of the previous page:

John Doe wrote:А имя скрипта в идеале передавать как arg[0], опять же, никакой самодеятельности.
А а я про что? Только arg[1], так как нумеруем с 1. Он же первый в ... Или мы про разные вещи говорим?
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Как передать в скрипт его FullPath

Post by John Doe »

0 и 1 это разные вещи.
Ведь другие параметры тоже могут понадобиться.

Хотя бы для того, чтобы была возможность вызвать один и тот же файл и как скрипт (на выполнение), и просто как определения макросов
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Как передать в скрипт его FullPath

Post by Smitis »

John Doe wrote:Хотя бы для того, чтобы была возможность вызвать один и тот же файл и как скрипт (на выполнение), и просто как определения макросов
А! Так ты их коммандной строки ещё запускаешь! А как различать, вызов был из ком. строки или из luafar? Как раз по arg и можно различить - если arg==nil, то вызов был из luafar.
В любом случае, из luafar не будет тех же аргументов, что и переданных из ком. строки, по понятным причинам. Всё равно придётся различать, откуда запущено и тут уже без разницы в arg[0] полный путь или в arg[1], обрабатывать аргументы придётся отдельно.
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Как передать в скрипт его FullPath

Post by John Doe »

Отличить легко по окружению: if Far
Аргументы вполне будут, почему нет? например

Разница конечно есть, и её придётся учитывать.
Но не хотелось бы ещё делать скидку на сдвиг параметров.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Как передать в скрипт его FullPath

Post by Smitis »

Хорошо, возвращаемся к arg[0]
В utils.lua в LoadMacros делаем так
local arg = {[0]=FullPath}
local env = k==1 and {Macro=AddMacro,Event=AddEvent,NoMacro=DummyFunc,NoEvent=DummyFunc,arg=arg} or {}
Получаем в скрипте таблицу arg и в ней arg[0].

Можно сократить до
local env = k==1 and {Macro=AddMacro,Event=AddEvent,NoMacro=DummyFunc,NoEvent=DummyFunc,arg={[0]=FullPath}} or {}
Разум когда-нибудь победит.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Как передать в скрипт его FullPath

Post by Smitis »

Так как быть с FullPath? Для скриптов решение с arg есть, для ком. строки нет, но что мешает сделать хотя бы первое?
Разум когда-нибудь победит.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Как передать в скрипт его FullPath

Post by Shmuel »

Smitis wrote:Так как быть с FullPath? Для скриптов решение с arg есть, для ком. строки нет, но что мешает сделать хотя бы первое?
Ну не доходят руки пока что. Ещё надо будет сначала читать, что вы с John Doe написали в форуме на эту тему. Имейте терпение. Каждому здесь нужно что-то своё и каждому в первую очередь.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Как передать в скрипт его FullPath

Post by John Doe »

workaround
  1. function getupvalue(f,name)
  2.  
  3.   for i=1,100 do
  4.  
  5.     local k,v = debug.getupvalue (f, i)
  6.  
  7.     if k==name then return v end
  8.  
  9.   end
  10.  
  11. end
  12.  
  13. far.Show(getupvalue(Macro,"AddMacro_filename"))
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Как передать в скрипт его FullPath

Post by John Doe »

Впрочем можно проще: far.Show(debug.getinfo(1,"S").source:match("^@(.+)"))
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Как передать в скрипт его FullPath

Post by Smitis »

Работает. А откуда там символ @ берётся?
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Как передать в скрипт его FullPath

Post by John Doe »

LuaMacro ничего тут не привносит.
Запустите то же через lua.exe
print(debug.getinfo(1,"S").source)
Post Reply

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