Контест этого топика: Леннарт теперь до эмуляторов терминала добрался (комментарий)
EXL:
Лучше бы Lennart взялся за Bash.
Там только выкинуть целиком. Я вот хочу попытаться для lua сделать обвязку для скриптинга уровня оболочки. Подобные либы на Lua есть, но качество и объем фич мне не нравится. Надо лучше. Тебе бы был интересен такой проект?
Итак, вот моя идея в общих чертах. Составные части, на которых основываться:
https://github.com/BanceDev/lush
Низкое качество сборочного скрипта. Вероятно, и кода тоже. Интересует идея в первую очередь.
https://github.com/mna/luashell
Ключевое, что нам нужно. Взять за основу. Но:
- Нужны полнофункциональные средства перенаправления ввода-вывода, заменить эту часть API. Под капотом, вероятно. придётся делать полноценную обработку
fork - настройка процесса - exec
. test()
должен быть вменяемый, а не парсить строку по пробелам. Просто алиас дляsh.cmd("test", ...).exec()
- Форк процесса без exec в качестве элемента пайплайна на уровне API
- Как расширение предыдущего - обёртка а ля
sh.echo("text")
.
В качестве базового API взять https://25thandclement.com/~william/projects/lunix.html вместо https://github.com/luaposix/luaposix
Также рассмотреть для включения и/или как источник идей:
- https://github.com/moteus/lua-path
- https://github.com/luarocks/argparse
- https://lunarmodules.github.io/luasystem/modules/system.html
- https://www.inf.puc-rio.br/~roberto/lpeg/lpeg.html
- https://luarocks.org/modules/lunarmodules/luasocket
- https://github.com/luaposix/lfs-posix
- https://github.com/lcurses/lcurses
- Пакеты для работы с датой и временем
- Пакеты для парсинга JSON
Общая идея:
- Lua + lunix — получаем возможность писать на Луа «приложения как на Си под libc».
- Сверху на это - форкнутый и допиленный luashell. Это ключевое.
- Далее QoL вещи: lua-path, argparse, функции для парсинга и форматирвоания времени, функции для JSON.
- Далее - разработать интерактивный режим для использования в качестве командной оболочки.
Продукт компилируется в статический бинарь с musl и/или cosmopolitan libc и получаем «вечный» shell. При этом весьма компактный.