LuaShell — запуск lua/moon скриптов из командной строки

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

LuaShell — запуск lua/moon скриптов из командной строки

Post by John Doe »

Назначение данной утилиты — реализовать запуск lua/moon/yue скриптов из командной строки
максимально естественным образом, наподобие команд оболочки, и наравне с ними.

Точно так же скрипты можно запускать просто по имени, не задумываясь где именно
они расположены (в текущей папке, или где-то в %PATH%).
И по тем же правилам им можно передавать аргументы в командной строке.

Скрипты удобно не только запускать вручную, но и использовать в ассоциациях,
меню пользователя, диалоге “Применить команду” и т.п.

Область действия не ограничена панелями, командная строка доступна в любой области
фара, с автодополнением и историей.

Скриптам: предоставляется ряд средств, в числе которых — простое обращение к другим
скриптам, доступным в %PATH%, что позволяет сформировать собственную экосистему,
в некотором роде альтернативную модулям Lua.

Макросам: предоставляется модуль sh для доступа к скриптам (см. API).

Установка

Опции

Использование

Скрипты

Диалог запуска скрипта

Просмотр возвращаемых значений

Повторный запуск скрипта

API, предоставляемый скрипту

Командная строка
Attachments
3rd-party-macros.7z
21/08/2021
(116.24 KiB) Downloaded 301 times
LuaShell-02.7z
20/08/2021
(34.44 KiB) Downloaded 266 times
3rd-party.7z
08/08/2021
(57.77 KiB) Downloaded 259 times
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Lua shell — запуск lua/moon скриптов из командной строки

Post by citRiks »

Latest post of the previous page:

buniak_a_h,
Согласен что неясен, нo во введении описан довольно богатый функционал,
превышающий ваше простое ассоциирование, вот и хотелось взглянуть.
Там например насписано что можно передавать параметры.
А насколько мне известно, с lua:@.. можно передать только один единственный строковый параметр?
поправьте меня если я где ошибаюсь
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Lua shell — запуск lua/moon скриптов из командной строки

Post by buniak_a_h »

citRiks wrote: Wed 02 Sep, 2020 18:25 с lua:@.. можно передать только один единственный строковый параметр?
Только один - да.
Строковый - нет.
Отсюда - передаю таблицу.
Например, скрипт:

Code: Select all

far.Show(unpack(...))
Запускаю:
lua:@"C:\Temp\200902\qqq.lua" {[[C:\Temp\200902\qqq.lua]], 'qqq', math.pi}
Получаю:

Code: Select all

╔════════════════════════════╗
║  1│ C:\Temp\200902\qqq.lua ║
║  2│ qqq                    ║
║  3│ 3.1415926535898        ║
╚═══════ 3 arguments ════════╝
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Lua shell — запуск lua/moon скриптов из командной строки

Post by citRiks »

buniak_a_h,
признателен за пример, полезно.
Но вот в чем еще незадача, этот метод некий нестандарт для запуска Луа-скриптов.
Во внешнем Луа-мире (что не ФАР) луа-скрипты получают таблицу аргументов arg с параметрами, включая имя скрипта.
Это верно что в ФАРе мы получаем и _filename, и это трехточие которое может быть таблицей,
и так можно воссоздать этот самый arg.
Но еще лучше было найти способ этого не делать,
т.е. без каких-либо изменений запускать Луа-скрипты справедливо ожидающие получить arg.
я вот чего-то и подумал, что в предмете обсуждения речь шла как раз про это
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Lua shell — запуск lua/moon скриптов из командной строки

Post by buniak_a_h »

citRiks wrote: Wed 02 Sep, 2020 18:58 луа-скрипты получают таблицу аргументов arg с параметрами, включая имя скрипта.
Это касается только скриптов, загружающихся при загрузке макросов. Запуск через lua: по умолчанию ничего не передаёт (если явно не указать).
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Lua shell — запуск lua/moon скриптов из командной строки

Post by citRiks »

buniak_a_h,
ну так тем более. иметь готовый arg (которого в ФАре из корпки просто нигде нет) было бы лучше чем не иметь его
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Lua shell — запуск lua/moon скриптов из командной строки

Post by John Doe »

citRiks wrote: Wed 02 Sep, 2020 16:44 Эмм, а куда делся предмет обсуждения, сам оный скрипт?
Застрял в процессе рефакторинга, увы.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Lua shell — запуск lua/moon скриптов из командной строки

Post by John Doe »

Нецелесообразно.
Даже в законченном виде оно требует документации и примеров.
Документация (наполовину написанная) в процессе переделок стала не вполне актуальна.
С примерами аналогично - только часть была актуализирована.
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Lua shell — запуск lua/moon скриптов из командной строки

Post by citRiks »

buniak_a_h wrote: Wed 02 Sep, 2020 18:43 Только один - да.
Строковый - нет.
Справедливости ради надо отметить что работает и со многими паметрами:

Code: Select all

-- some-script-1.lua:
local tbl_1, str_1, num_1 =  ...
far.Message(num_1, _filename)
------
lua:@some-script-1.lua {a = 111, b = 222, c = 333}, "some-str-param-1", 1234567
Правда, в Lua 5.1.5 есть для этого arg, а в ФАРовском LuaJit нет, что иногда подводит.
Ну наверное "так надо", и не очень принципиально, ныть по этому поводу не буду.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Lua shell — запуск lua/moon скриптов из командной строки

Post by buniak_a_h »

citRiks wrote: Wed 16 Sep, 2020 17:27 работает и со многими паметрами
Прежде, чем ответить тогда, я проверил … Возможно, ошибся… Разделял аргументы пробелом, а надо было через запятуху писать.
citRiks wrote: Wed 16 Sep, 2020 17:27 в Lua 5.1.5 есть для этого arg,
Насчёт arg - не знаю. Вроде, select предоставляет полный инструменатарий для доступа к аргументам функции. От получения количества до получения аргумента по номеру
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Lua shell — запуск lua/moon скриптов из командной строки

Post by John Doe »

citRiks wrote: Wed 16 Sep, 2020 17:27 Справедливости ради надо отметить что работает и со многими паметрами:
И это есть в справке, раздел "Работа из командной строки". Найдите подходящую тему для обсуждения (или новую создайте). Тут не надо.
Корни отсюда: viewtopic.php?p=120184#p120184

Сабжевый же скрипт изначально был создан для того чтобы предоставить возможность передачи параметров не таким "Lua-путём", а более привычным способом (разделяя параметры пробелами). Это тоже обсуждалось. Например тут: viewtopic.php?p=145800#p145800
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Lua shell — запуск lua/moon скриптов из командной строки

Post by John Doe »

API, предоставляемое скрипту ============================ `_filename` : Полное имя скрипта `...` (`vararg`) : аргументы командной строки `_cmdline` : Переменная, в которую помещаются неразделённые аргументы в виде строки (исключая имя скрипта, только аргументы). - Если скрипт вызван без параметров, то `_cmdline==""` - Если скрипт запущен не из командной строки, а вызван другим скриптом, то переменной `_cmdline` в окружении не будет. Таким образом возможно различить как запущен скрипт, и в зависимости от этого либо вернуть значение (в том числе функцию, таблицу), либо непосредственно выполнить соответствующие действия, оперируя аргументами переданными в командной строке. `_cmdline:eval(env)` : Вычисляет строку как lua-выражение (опционально, передавая таблицу с окружением) Полезно как для собственно вычислений (`1+math.sin 2`), так и для передачи любых lua-значений (`_G, Far, 123, "abc", {k="v"}, function() print"hello" end`, ...) Применимо не только к `_cmdline`, но и к любым строкам (`eval` добавляется в метатаблицу). Допустимо как moonscript- так и lua-выражение. Перед lua-выражением сначала делается попытка подставить "return ". `sh` : Таблица, содержащая дополнительные сервисные функции `sh.print(...)` : Юникодный аналог стандатной Lua-функции `print` Выводит текст в буфер под панелями (активируется автоматически, нет необходимости в ручном вызове `GetUserScreen`/`SetUserScreen`). По умолчанию данная функция помещается прямо в окружение скрипта, поэтому можно использовать и просто `print` без префикса. (при этом остаются доступны и встроенные _G.print / mf.print) `sh.<anyname>` : Позволяет запускать другие скрипты (доступные в PATH) по имени, и получать возвращаемые значения `sh(name,env)` : Позволяет загружать другие скрипты (доступные в PATH) по имени, опционально передавая таблицу-окружение (`gefenv(1)` чтобы передать собственное окружение) Возвращает функцию. Примеры: ~~~ sh"anyname"(arg1,arg2,...) sh("anyname", gefenv(1))(arg1,arg2,...) ~~~
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

LuaShell — запуск lua/moon скриптов из командной строки

Post by citRiks »

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

LuaShell — запуск lua/moon скриптов из командной строки

Post by John Doe »

citRiks wrote: Wed 07 Jul, 2021 20:23 а это АПИ к чему было?
Для иллюстрации некоторого прогресса.
Ну и вдруг замечания/пожелания какие будут.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

LuaShell — запуск lua/moon скриптов из командной строки

Post by citRiks »

на мой взгляд выглядит концептуально похоже не это:
PostMacro — интерактивный запуск макросов из любой макрообласти
viewtopic.php?f=60&t=9940
Может как-то обьединить фичеры/АПИ оттуда и отсюда?
чтобы людям не приходилось выбирать что лучше/хуже, для чего подходит или же нет.
а то при таких выборах, чем особенно вникать, больше напрашивается "махнуть рукой на оба ваших дома, и написать что-нибудь свое"

Стандартный дисклаймер:
Это мое мнение, поправьте где ошибаюсь
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

LuaShell — запуск lua/moon скриптов из командной строки

Post by John Doe »

citRiks wrote: Thu 08 Jul, 2021 06:30 Может как-то обьединить фичеры/АПИ оттуда и отсюда?
Предлагайте, почему нет.
Пока что мне кажется что LuaShell уже покрывает все возможности подобных скриптов, но интерфейс конечно не дублирует.
https://t.me/FarManager — Telegram чат
Post Reply

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