woman update and terminal some fix

This commit is contained in:
MeexReay 2025-03-20 01:04:17 +03:00
parent 937407b97b
commit 5eed144ff5
3 changed files with 172 additions and 15 deletions

View File

@ -1,6 +1,6 @@
{
"name": "woman",
"version": "0.1.0",
"version": "0.1.1",
"description": "Wisdom Order Manuals",
"author": "MeexReay",
"apps": [ "woman.js" ],

View File

@ -8,8 +8,9 @@ async function main(args) {
* files - Работа файлов в приложениях
* stdin - Чтение ввода пользователя
* stdout - Вывод текста в консоль
* cursor - Работа с курсором
* terminal - Работа с остальными функциями консоли
* packaging - Пакетирование приложений
* graphics - Отрисовка графики
`)
return 1
}
@ -17,6 +18,8 @@ async function main(args) {
if (args[1] == "apps") {
writeStdout(`# Создание приложений
## Написание программ
Все приложения в PoshlostiOS это JS скрипты
Каждый такой скрипт должен иметь свой entry-point - асинхронная функция
с названием main и единственным аргументом args в
@ -29,12 +32,16 @@ async function main(args) {
return 0
}
Читайте также:
* files - Работа файлов в приложениях
* stdin - Чтение ввода пользователя
* stdout - Вывод текста в консоль
* cursor - Работа с курсором
* packaging - Пакетирование приложений
## Вызов команд
Вот как выглядит функция:
executeCommand(args, read=readStdin, write=writeStdout) -> {"id": string, "name": args.join(" "), "promise": Promise}
Первый аргумент при вызове команды должен быть путем до исполняемого файла
Функция возвращает промис в поле promise, чтобы дождаться конца команды используйте await
Ты чо дебик мог и сам догадаться
все бб
`)
@ -42,35 +49,177 @@ async function main(args) {
} else if (args[1] == "files") {
writeStdout(`# Работа файлов в приложениях
Статья в разработке
Вот описание всех функций для работы с файлами:
readFile(path) -> string - читает контент файла
writeFile(path, content) - записать контент в файл
hasFile(path) -> boolean - узнает существует ли файл
listFiles(path) -> list[string] - выдает список из имен файлов в папке
createFolder(path) - создать папку
removeFile(path) - удалить файл
isFolder(path) -> boolean - узнает это файл или папка
simplifyPath(path) -> string - переделать в абсолютный путь и убрать лишнее
clearFileSystem() - удалить все файлы к чертям собачьим
Всю начинку ФС вы можете увидеть в исходном коде в sys/fs.js
`)
return 0
} else if (args[1] == "stdin") {
writeStdout(`# Чтение ввода пользователя
Статья в разработке
## Редактирование флагов
setStdinFlag(SILENT_STDIN) // Сделать чтоб при вводе не писались символы
setStdinFlag(RENDER_STDIN) // Сделать чтобы символы при вводе обратно выводились
setStdinFlag(DISABLE_STDIN) // Выключить ввод
setStdinFlag(ENABLE_STDIN) // Включить ввод
## Чтение ввода сырым
Функция:
readStdin() -> string
Она выдает всего один символ:
Чтобы прочитать спец-клавишу, он выдает такие символы по порядку:
"\\r"
int(is_ctrl)
int(is_alt)
int(is_shift)
key
"\\r"
## Чтение ивентов с ввода
Чтобы не читать ввод сырым, вы можете читать ивентами
Функция:
pollStdinEvent() -> event
Ивент при спец-клавише выглядит так:
{
"type": "key",
"ctrl": is_ctrl,
"alt": is_alt,
"shift": is_shift,
"key": key
}
Ивент при обычном символе выглядит так:
{
"type": "char",
"char": char
}
## Чтение строками
Функция:
readLine(on_key=(key, ctrl, alt, shift, content, pos) => [content, pos]) -> string
На спец-клавишу будет вызываться on_key,
единственное что Backspace, ArrowLeft, ArrowRight уже обрабатываются функцией,
и на них on_key не будет вызываться
`)
return 0
} else if (args[1] == "stdout") {
writeStdout(`# Вывод текста в консоль
Статья в разработке
Функция:
writeStdout(content)
всё
`)
return 0
} else if (args[1] == "cursor") {
writeStdout(`# Работа с курсором
} else if (args[1] == "terminal") {
writeStdout(`# Работа с остальными функциями консоли
Статья в разработке
Вот функции остальные:
getTerminal() -> string - получить контент терминала
setTerminal(content) - изменить контент терминала
writeTerminalAtCursor(content) - написать в терминал на курсоре
writeTerminal(content) - написать в терминал в конец
replaceTerminal(content) - изменить терминал и обновить
trimTerminal(length) - обрезать терминал
setCursor(x, y) - установить курсор
clearTerminal() - очистить терминал
updateTerminalWOCursor() - обновить терминал без установки курсора в конец
updateTerminal() - обновить терминал
updateCursor() - обновить курсор
getCursorIndex() -> index - получить индекс курсора в тексте терминала
getCursor() -> [x, y] - получить курсор
`)
return 0
} else if (args[1] == "packaging") {
writeStdout(`# Пакетирование приложений
Статья в разработке
Пакет выглядит примерно так в репозитории (package_name для примера):
~ repository/package_name/package.json
{
"name": "package_name",
"version": "0.1.0",
"apps": [ "package_name.js" ],
"configs": [ "package_name.json" ],
"comment": "fields 'name', 'version', 'apps' and 'configs' are required!!! other fields can be used like this:",
"description": "PackageDescription",
"author": "AuthorName",
"license": "MIT",
"home_page": "https://example.com",
"source_code": "https://github.com/example"
}
~ repository/package_name/package_name.json
{
"config_1": "this is your config file",
"config_2": "use it as you need",
}
~ repository/package_name/package_name.js
async function main(args) {
let config = JSON.parse(readFile("/config/package_name.json")) // object
writeStdout("here is your config file content: " + config + "\n")
return 0
}
`)
return 0
} else if (args[1] == "graphics") {
writeStdout(`# Отрисовка графики
Описание использования:
enableGraphics() // включить графику
var graphics = getGraphics() // получить графику
// var ctx = graphics.context // получить контекст чтоб рисоват
// var width = graphics.width // получить ширину
// var height = graphics.height // получить высоту
var window = createWindow(x, y, w, h, title)
// var width = window.width // получить ширину
// var height = window.height // получить высоту
// var x = window.x // получить x
// var y = window.y // получить y
window.move(x, y, w, h)
// var ctx = window.context // получить контекст чтоб рисоват
window.destroy() // удалить окно
disableGraphics() // отключить графику
`)
return 0

View File

@ -29,6 +29,14 @@ function trimTerminal(length) {
updateTerminal()
}
function getTerminal() {
return terminal_text
}
function setTerminal(content) {
terminal_text = content
}
function clearTerminal() {
terminal_text = ""
updateTerminal()