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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

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

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

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

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

Также возможно непосредственно исполнять набранные в строке ввода lua(/moon/yue)-выражения,
и просматривать возвращаемые значения.

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

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

Обсуждение на форуме: https://forum.farmanager.com/viewtopic.php?f=15&t=10907

Назначение

Утилиты

Установка

Опции

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

Выполнение Lua-выражений

Командная строка

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

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

API

API для обращения к другим скриптам — sh

User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

Latest post of the previous page:

urldecode.lua

Code: Select all

sh.block_process_lines(function (sel)
  return sel:gsub('%%(%x%x)', function(hex)
    return string.char(tonumber(hex, 16))
  end)
end, {ifnosel="curline"})
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

Следующий скрипт аналогичен прочим макросам, выбирающим пару файлов для сравнения
через VisualCompare (©ccaid, ©Shmuel, ©SimSU, @AleXH, ©LanKing)
и через WinMerge (©gene.pavlovsky, ©DV).

Разница в том что:
  • это не макрос, а скрипт, запускаемый из командной строки
  • в качестве параметра можно указать утилиту для сравнения. Например diff meld или diff winmerge
Алгоритм выбора пары:
  • либо выделенная пара файлов на активной панели
  • либо пара файлов с противоположных панелей
    • на активной: выделенный (если 1) или текущий
    • на пассивной: выделенный(если 1) или одноимённый
Поддерживаются и плагиновые панели с реальными файлами (TmpPanel, Branch, ...).
(На пассивной плагиновой панели поиск одноимённого файла не предусмотрен, работа только с выделенным).

User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

Предлагаю своё решение задачи универсального выбора/обработки файлов, (опционально) удовлетворяющих заданному условию.
Навеяно темой, где надо было выделить файлы со слишком длинными именами: viewtopic.php?t=13253
Например для решения той задачи достаточно запустить: files_process (file)->#file.FileName>255.



Кроме того, можно применить любое другое ограничение, и/или ограничить обработку только файлами/директориями/выделением.
Есть возможность выделить, снять выделение, или выполнить какое-либо другое действие.
Краткую справку можно получить запустив скрипт без параметров.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

Диалоговый интерфейс к предыдущему скрипту.
Использование в макросах - см. справку.
Attachments
files.7z
(5.64 KiB) Downloaded 51 times
files.PNG
https://t.me/FarManager — Telegram чат
dest
Posts: 146
Joined: Mon 29 Jun, 2015 01:30
Has thanked: 24 times
Been thanked: 8 times

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

Post by dest »

Мелочь небольшая.
John Doe wrote: Sun 17 Sep, 2017 15:09 При старте в переменную среды PATHEXT добавляются расширения .lua;.moon;.yue
В доке LuaShell.ru.text:
a. При старте в переменную среды `PATHEXT` добавляются расширения `.lua;.moon`
(если отсутствуют).


Фактически (двойная ";", только луа и мун):
PATHEXT=.lua;.moon;;.COM;.EXE;.BAT....
dest
Posts: 146
Joined: Mon 29 Jun, 2015 01:30
Has thanked: 24 times
Been thanked: 8 times

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

Post by dest »

Люди, спасайте.
Пока воевал с правкой скрипта одного, наткнулая на то, что он не воспринимает аргументы без кавычек
Поковырявшись, выяснил, что дело в ассоциации .lua
Для вызова по Enter было lua:=@"!\!.!" [[!\!.!]], для вызова по Ctrl-PgDn lua:@"!\!.!" [[!\!.!]]
Эту ассоциацию создал я пару-тройку дней назад, не от фонаря создал, а где-то тут вычитал и записал именно так... но где именно это было написано - найти не могу, и понять причину присутствия вот этого " [[!\!.!]]" в команде - тоже понять не могу. Если я убираю этот хвост, то скрипты начинают воспринимать аргументы и без кавычек, и нет ошибок при запуске скрипта непосредственно в директории со скриптом.

Вот тут в стартпосте ясно сказано Добавить ассоциацию: *.lua,*.moon,*.yue | luash:"!\!.!". Так где же я тогда надыбал другой вариант? Не приснился же мне он...
Я в замешательстве,честно говоря. Как должно быть на самом деле? Как по мне - без хвоста. Но если у всех с хвостами а у меня будет без хвоста, то скрипт данный кому-либо будет работать неверно.

PS: поиск не даёт результатов, поскольку одни символы...
Last edited by dest on Wed 27 Dec, 2023 13:45, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

dest wrote: Wed 27 Dec, 2023 13:42 Для вызова по Enter было lua:=@"!\!.!" [[!\!.!]], для вызова по Ctrl-PgDn lua:@"!\!.!" [[!\!.!]]
Эта команда запускает скрипт штатными средствами luamacro и передаёт ему первым аргументом полный путь к скрипту.
Зачем это может быть надо в ассоциации на Enter - неизвестно.

Далее вы упоминаете ассоциацию на luash:, и это совсем другое, это уже не штатный запуск, а функциональность сабжа.

По существу комментировать пока не чего, поскольку совершенно непонятно что конкретно у вас не получается.
Опишите что конкретно вы делаете, чего ожидаете в результате, и что происходит вместо этого:
dest wrote: Wed 27 Dec, 2023 13:42 Пока воевал с правкой скрипта одного, наткнулая на то, что он не воспринимает аргументы без кавычек
dest wrote: Wed 27 Dec, 2023 13:42 Если я убираю этот хвост, то скрипты начинают воспринимать аргументы и без кавычек, и нет ошибок при запуске скрипта непосредственно в директории со скриптом.
https://t.me/FarManager — Telegram чат
dest
Posts: 146
Joined: Mon 29 Jun, 2015 01:30
Has thanked: 24 times
Been thanked: 8 times

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

Post by dest »

Пытаюсь передать скрипту test.lua аргументы
if print==mf.print then print = mf.printconsole end local a,b,c = ... local arg = {...} local narg = select("#", ...) print ("a: ", a, "b: ", b, "c: ", c) print ("arg: ", arg) print ("narg: ", narg)
test.lua 123:
a: 123 b: nil c: nil arg: table: 0x01d1ad68 narg: 1[/c] test.lua "123": [ascii]a: 123 b: nil c: nil arg: table: 0x06e13b60 narg: 1
test.lua blablabla:
a: nil b: nil c: nil arg: table: 0x01dd70d8 narg: 1
test.lua "blablabla":
a: blablabla b: nil c: nil arg: table: 0x01adb258 narg: 1
Это запущено из командной строки, сейчас ассоциация такая: lua:=@"!\!.!", удалил хвост. С ним дичь какая-то вообще, если без кавычек аргументы передавать.
Вот narg сейчас везде единица, т.е. аргументы видно, но числовой аргумент считывается что с кавычками, что без, а текстовый - только с кавычками
Где собака зарылась?
Last edited by dest on Wed 27 Dec, 2023 14:09, edited 1 time in total.
dest
Posts: 146
Joined: Mon 29 Jun, 2015 01:30
Has thanked: 24 times
Been thanked: 8 times

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

Post by dest »

[Форум похоже падал основательно.]

Я устанавливал как в шапке написано (и где-то явно ещё, потому что был хвост, о котором я перед этим написал).
То, что первая часть команды передаёт полный путь к скрипту - мне понятно. Мне непонятен хвост, откуда он взялся. Явно не из стартпоста, но где-то в других местах форума, связанных с этим скриптом. Я не мог просто так дописать от нефиг делать " [[!\!.!]]". А коль я это взял откуда-то - значит оно зачем-то нужно. И мне непонятно зачем, оно ведь ломает запуск скриптов с аргументами без кавычек.

А ещё не воспринимаются аргументы, начинающиеся с "-", "--" :(
John Doe wrote: Wed 27 Dec, 2023 14:02Зачем это может быть надо в ассоциации на Enter - неизвестно.
John Doe wrote: Sun 17 Sep, 2017 15:09 В редакторе конфигурации (far:config) активировать параметр System.Executor.UseAssociations.
Добавить ассоциацию:

.lua,.moon,*.yue | luash:"!\!.!"
Last edited by dest on Wed 27 Dec, 2023 14:48, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

dest wrote: Wed 27 Dec, 2023 14:09 Где собака зарылась?
О штатной функциональности вы можете почитать запустив lm: без параметром.
Всё происходит абсолютно ожидаемым образом, согласно документации, командная строка рассматривается как выражение lua (соответственно строки требуют кавычек).

Другое дело, что "ожидаемым" не значит "желательным", и сабжевый скрипт изначально был призван решить именно эту задачу - получать в скрипте список строк.
И если вы выполните условия из заглавного поста, то так и будет, т.е. будет работать и без кавычек.
Я устанавливал как в шапке написано
Нет же.
Сравните префиксы lua: и luash:.
dest wrote: Wed 27 Dec, 2023 14:47 А коль я это взял откуда-то - значит оно зачем-то нужно.
"Где-то" оно может и нужно, но точно не в ассоциации.
Last edited by John Doe on Wed 27 Dec, 2023 14:55, edited 1 time in total.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4559
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Wed 27 Dec, 2023 14:02 … полный путь к скрипту. Зачем это может быть надо в ассоциации на Enter - неизвестно.
Подозреваю, что ассоциация взята у меня, а я тогда ещё не знал про переменную _filename. А полный путь бывает нужен (для чтения настроек, hlf и lng файлов, например)
Last edited by buniak_a_h on Wed 27 Dec, 2023 18:39, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4559
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

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

Post by buniak_a_h »

dest wrote: Wed 27 Dec, 2023 13:42 Так где же я тогда надыбал другой вариант? Не приснился же мне он...
Это - точно у меня. По Enter вызов lua:=, по Ctrl+PgDn - без =. Откуда взялся "хвост" [[!\!.!]] - я писал выше.
User avatar
buniak_a_h
Posts: 4559
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

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

Post by buniak_a_h »

dest wrote: Wed 27 Dec, 2023 14:09 Где собака зарылась?
А что Вас удивляет? Вы всё время вызываете скрипт с одним аргументом. Причём в первом случае это - число 123, во втором - неопределённая переменная blablabla (а т.к. она не определена, то её значение == nil, что доказывает вывод a: nil, в третьем - строка "blablabla". Если Вы хотите передать несколько параметров, перечислите их через запятуху.
И, кстати, обратите внимание: таким образом передавать можно аргументы любого типа (в т.ч. таблицы и функции)
Вызовите test.lua 1,'q',{'qwe'} - получите 3 аргумента.
dest wrote: Wed 27 Dec, 2023 14:47 А ещё не воспринимаются аргументы, начинающиеся с "-", "--"
1. Аргумент, начинающийся с -, воспринимается, если минус - часть числа или числового выражения:
test.lua -2,-math.pi
Если аргумент начинается с двух минусов, и они не внутри строки, то это - комментарий и всё после минусов не воспринимается в точном соответствии с синтаксисом языка.
Last edited by buniak_a_h on Wed 27 Dec, 2023 19:10, edited 1 time in total.
dest
Posts: 146
Joined: Mon 29 Jun, 2015 01:30
Has thanked: 24 times
Been thanked: 8 times

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

Post by dest »

Картина прояснилась. Да, строки для ассоциации я взял из нашей переписки и успешно забыл :)
Собственно всем этим занялся после начала общения... и venv, и LuaShell, и тот, который добавляет двойные нажатия, удержания (забыл названия и файлы успешно) - вот с последним у меня приключения, начались лаги в фаре, проглатывания нажатий клавиш иногда, подвисоны. Явно в нём дело. [Во, MacroEx, от присутствующего тут мастера John Doe :Bravo: ] - удалил его и глюки эти вдруг пропали.

Вопрос ещё по поводу LuaShell, в поиске по темам и в этой ничего не нашлось:
Если запускать скрипты, когда в ассоциации по Enter прописано lua:=@"!\!.!", то после вызова функций panel.GetUserScreen а затем panel.SetUserScreen вывод printуспешно работает, но если в ассоциации прописан LuaShell luash:"!\!.!", то после panel.SetUserScreen() вывода никакого больше нет. Так задумано? Или "иди читай рулон обоев документации, там всё написано"?
Last edited by dest on Wed 27 Dec, 2023 19:31, edited 2 times in total.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

И снова совершенно непонятно в чём у вас проблема
https://t.me/FarManager — Telegram чат
dest
Posts: 146
Joined: Mon 29 Jun, 2015 01:30
Has thanked: 24 times
Been thanked: 8 times

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

Post by dest »

В отсутствии вывода после panel.SetUserScreen если lua вызываются через LuaShell

Проблему можно увидеть в моём "форке" скрипта venv viewtopic.php?p=176769#p176769
В одном случае принт после panel.SetUserScreen() (строка 98) есть, в другом (с LuaShell) - нет
image.png
image.png (7.18 KiB) Viewed 3051 times
image.png
image.png (7.3 KiB) Viewed 3051 times
Last edited by dest on Wed 27 Dec, 2023 20:28, edited 1 time in total.
Post Reply

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