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
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 »

Latest post of the previous page:

Новая утилита pipeTo.lua
Executes specified command, putting specified text to it's input stream, and returns it's output/err Syntax: out, err = sh.pipeto(cmd,input)
Задействована в em.lua
Expand Emmet's html abbreviations in editor To use it place cursor at the line with abbreviation and run 'em' See https://docs.emmet.io/cheat-sheet/
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:

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

Post by John Doe »

Некоторые макросы на нашем форуме тоже можно запускать как скрипты.
(Кстати в этом ничего хитрого: просто в макрофайле проверяется наличие функции Macro, и если её нет, то сразу выполняется необходимое действие).

Выложил примеры таких скриптов в шапке.

Code: Select all

dialog:
------
pick.lua                 alias to std/editor/pickFromEditor.lua
Dlg.Id.lua               Show dialog/menu ID by Shmuel

bax:
---
StartMenu.lua            Действия с элементами StartMenu by buniak_a_h

jd:
--
EnablePrivileges.lua     Получение привилегий backup/restore by John Doe
ScriptsBrowser.lua       ScriptsBrowser — управление скриптами by John Doe
MacroBrowserAlt.lua      Macro Browser alt. — обозреватель макросов
Compose.lua              Compose Key — удобный ввод юникодных символов
XKeys.lua                Enable windows special keys in FAR
le.lua                   Lua Explorer „Advanced“ by John Doe

lf4ed:
-----
fill_selection.lua       Fill selection (lf4ed)
shift_selection.lua      Shift selection (lf4ed) — Move text back and forth inside the vertical selection (lf4ed)
selectingex.lua          SelectingEx — Пометка файлов (lf4ed)
colorize.lua             Select colorizer in the editor (lf4ed)

SimSU:
-----
Common_Calculator.lua    Вычисление математических выражений. © SimSU
Common_Calendar.lua      Календарь. © SimSU
Shell_Description.lua    Редактирование описания в файле. © SimSU
Shell_FileTime.lua       Работа с датой/временем файлов/папок. © SimSU
Shell_SelectingEx.lua    Работа с пометкой файлов. © SimSU
Editor_MacroComplete.lua Список завершения LuaMacro. © SimSU
Editor_SelectingEx.lua   Работа с помеченным блоком в редакторе. © SimSU
Editor_Transpose.lua     Транспонирование (строки превращаются в столбцы) текста. © SimSU
Editor_Trimmer.lua       Удаление конечных пробелов и символов табуляции и пустых строк. © SimSU
Editor_WordComplete.lua  Завершения слов в редакторе. © SimSU
Dialog_ToEditor.lua      Редактирование строки ввода диалога в редакторе. © SimSU
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:

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

Post by John Doe »

  • browse.lua предназначен для интерактивного просмотра lua-значений, в частности таблиц.
    Использует lua explorer.
    • Если же модуль "le" отсутствует в системе, то выводится значение,
      обработанное утилитой dump см. ниже.
    • Вместо "le" можно использовать любую аналогичную утилиту, для этого проще всего создать
      в utils\overrides свой browse.lua, который и будет её возвращать (пример прилагается).
  • dump.lua предназначена для преобразования lua-значений (особенно таблиц) в читаемую форму,
    например для последующего вывода на экран командой print.
    Использует inspect.lua, плюс функция, защищающая от "некорректного" utf-8, и превращающая
    бинарные гуиды в читаемую форму.
    • Если модуль "inspect" отсутствует, то вместо него используется прилагаемая к мунскрипту
      встроенная функция require"moon".dump
    • Вместо "inspect" можно использовать любую утилиту, создаd в utils\overrides свой dump.lua,
      который и должен будет её возвращать (пример прилагается).
В качестве утилит browse.lua и dump.lua могут быть использованы например таким образом:

Code: Select all

browse far
dump panel.GetPanelInfo(nil,1)
  • showRet.lua не предназначен для использования как самостоятельная утилита,
    используется внутри во всех случаях когда надо отобразить возвращаемые значения (через browse.lua)
  • ret.lua интерфейс командной строки к showRet.lua.
  • Toast.lua помимо общего использования (описанного в его справке), исполняется каждый раз когда,
    когда запущенный из командной строки скрипт возвращает значения, и позволяет (своевременным нажатием Enter),
    просмотреть их.
  • do.lua предназначен для исполнения lua-выражений из командной строки Far.
    В диалоге (Ctrl-G) не требуется, т.к. там можно вводить выражения сразу.
  • Все утилиты (включае те что выше не описаны) имеют собственную справку, которую можно увидеть запустив утилиту
    вхолостую (без параметров).


P.S.
dump.lua, browse.lua, и ещё пару утилит обновлены (в шапке).
Плюс, добавлена утилита lineup, и простенький итератор
Selected lines iterator for editor Usage: for str,n in sh.sellines_it(opt) do ... end opt: optional table with fields: id: integer, EditorID info: table, EditorInfo, ifnosel: string Action if no selection detected nil (default), - no action "all", - iterate over all lines "curline", - iterate once with current line
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 »

  • Новая утилита, подбирающая блок текста основываясь на общем отступе, опционально принимающая функцию, задающую дополнительное условие.
    Pick text block in editor based on indentation Usage: block_pick Being called from another script - returns function Syntax: selection = sh.block_pick([opts]) opts: table with optional fields - match : function, every line should pass - excludeEmpty : boolean , stop on empty lines - excludeNested: boolean , stop on deeper indentation - ignoreIndent : boolean , take into account match only - info : table , editor info
  • В пост об indent.lua добавлены макросы, автоматически выделяющие блок.
    Изменения в indent.lua: если символ отступа не задан, то пытаемся взять его из текущей строки.
  • Утилита lineup теперь официально входит в пакет
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:

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

Post by John Doe »

Новая утилитка Block_process.lua
Processes selected block in editor with specified external utility, piping it to utility's stdin and then replacing selection with returned stdout's content. Syntax: sh.processblock([cmdline][,fn])
Пример использования:

Code: Select all

sh.block_process([[gawk.exe -f Damastes.awk -v FS="\\\\s*\\\\|\\\\s*" -v OFS=" | "]])
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,
наткнулься вот еще, наверное отсюда можно чего-то позаимствовать
Command-line utilties for performing common Lua one-liners, like matching string patterns and substitution.
https://github.com/stevedonovan/lua-command-tools
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 »

LuaShell v0.2
Вобрал все упомянутые выше изменения, и кроме того:
  • Повторный запуск скрипта ------------------------ Чтобы повторить запуск скрипта можно воспользоваться одним из шорткатов: `CtrlG:Double`, `Ctrl-Alt-G`. А если запустить шорткатом `Ctrl-Alt-Shift-G` - после завершения скрипта откроется [Просмотр возвращаемых значений].
  • RunMacro.lua
    Utility to run macro from specified file Syntax: sh.runmacro(filename,filterFn) Returns table of enumerated macros, see examples for more info.
    (примеры использования последуют ниже)
Структура директорий немного изменилась, поэтому желательно не распаковывать поверх, а установить начисто.
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:

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

Post by John Doe »

Благодаря RunMacro.lua можно читать обычные макрофайлы не устанавливая их, и исполнять из них заданные макросы.
В шапке в качестве примера прилагается набор 3rd-party-macros.7z:

Code: Select all

Dialog
------
listcopy.lua     Копирование содержимого меню и списков by John Doe
pass.lua         DI_PSWEDIT - Макросы для работы с паролями, скрытыми под звёздочками by John Doe

Editor
------
align.lua        Macro "Align Block Special" for Editor by farman
check.lua        Проверка корректности скрипта в редакторе + выполнение by John Doe
grep.lua         Показывает менюшку со всеми строками, которые содержат слово под курсором by JouriM
indent.lua       BlockIndent — Смещение блока by t-rex
paste.lua        Paste smart — макрос для "умной" вставки by John Doe

Editor [Shmuel]
---------------
dupfighter.lua   Duplicate Fighter (Анти-дубликатор) bu Shmuel
expr.lua         [Выражение] Набор макросов для вычислений в блоке редактора bu Shmuel
ind.lua          BlockIndent alt. — Смещение блока by Shmuel
lf4ed.lua        LuaFAR for Editor (LuaMacro version) by Shmuel
move.lua         Двигаем строку текста в редакторе вверх или вниз by Shmuel
sum.lua          [Сумма] Набор макросов для вычислений в блоке редактора by Shmuel
xlit.lua         Макрос для транслита в редакторе by Shmuel

Misc.
-----
cal.lua          Calendar by dimfish
cdd.lua          История команд, запущенных из текущего каталога by fml2
CharacterMapLua  (Lua Character Map — Таблица символов) by ivank
cmp.lua          Сравнение файлов с панелей (например, используя WinMerge) by DV
diff.lua         Многовариантный макрос для Visual Compare by LanKing
env.lua          EnvEdit — редактор переменных среды by Smitis
fixunicode.lua   Исправление некорректного юникода by 2useven10
goUp.lua         Меню со списком родительских папок (CD up) by HaRT
hexed.lua        Hex Editor by zg

AleXH
-----
boom.lua         Selection files with BOM by AleXH
hexsel.lua       (un)HEX selected files, VERY FAST! by AleXH
update.lua       Opening changelog and updating Far Manager to any version available on the site by AleXH

BAX
---
panelcontent.lua Старый плагин Panel Content by buniak_a_h
table.lua        Аналог браузера таблиц Lua с доп возможностями by buniak_a_h

IgorZ
-----
dbedit.lua       Редактор БД плагинов by IgorZ
disk.lua         Переключение дисков по Ctrl/Alt/Shift+←/→ by IgorZ
envman.lua       Менеджер переменных окружения by IgorZ

jd
--
clipfix.lua      Исправление некорректного юникода из буфера обмена by John Doe
fuzzycompare.lua "Нечёткое" сравнение файлов по именам by John Doe

Shmuel
------
calc.lua         Калькулятор by Shmuel
cdup.lua         Меню со списком родительских папок (CD up) by Shmuel
pfilt.lua        PanelFilter — фильтр панели by Shmuel
timer.lua        Скрипт, заменяющий плагин Timer by Shmuel
https://t.me/FarManager — Telegram чат
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

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

Post by gotar »

John Doe wrote: Fri 20 Aug, 2021 13:08
Структура директорий немного изменилась, поэтому желательно не распаковывать поверх, а установить начисто.
Честно говоря я не понял какие папки и файлы надо удалить прежде чем устанавливать новую версию.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

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

Post by gotar »

Можно ли чуть подробнее об RunMacro. Например, что означает второй параметр этой функции? Или таблицу, которую возвращает функция, можно вызывать как функцию. Что эта функция делает? Каждый элемент таблицы тоже можно вызывать как функцию. Что делает эта функция? и.т.п.
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 »

gotar wrote: Sun 22 Aug, 2021 09:27 какие папки и файлы надо удалить
  • %FARPROFILE%\Macros\scripts\Macro\Luashell\
  • %FARPROFILE%\Macros\utils\
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:

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

Post by John Doe »

John Doe wrote: Sun 22 Aug, 2021 12:16 что означает второй параметр этой функции
Функция-фильтр, для отбора макросов в результирующую таблицу.
gotar wrote: Sun 22 Aug, 2021 10:33 таблицу, которую возвращает функция, можно вызывать как функцию. Что эта функция делает?
Запускает макрос - первый элемент таблицы.
gotar wrote: Sun 22 Aug, 2021 10:33 Каждый элемент таблицы тоже можно вызывать как функцию. Что делает эта функция?
Запускает соответствующий макрос. Т.е. проверяет condition и выполняет action.
gotar wrote: Sun 22 Aug, 2021 10:33и.т.п.
см. примеры.
https://t.me/FarManager — Telegram чат
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

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

Post by gotar »

John Doe wrote: Sun 22 Aug, 2021 12:22 Функция-фильтр, для отбора макросов в результирующую таблицу.
А можно пример?
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

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

Post by gotar »

И еще уточнение: если я вызываю возвращаемое значение RunMacro как функцию, condition макроса тоже будет исполнен?
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 »

gotar wrote: Sun 22 Aug, 2021 12:31 А можно пример?
3rd-party-macros.7z
gotar wrote: Sun 22 Aug, 2021 12:36 condition макроса тоже будет исполнен?
Будет
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:

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

Post by John Doe »

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 чат
Post Reply

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