mirror of
https://github.com/MeexReay/poshlostios.git
synced 2025-06-24 18:42:59 +03:00
woman update and terminal some fix
This commit is contained in:
parent
937407b97b
commit
5eed144ff5
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "woman",
|
"name": "woman",
|
||||||
"version": "0.1.0",
|
"version": "0.1.1",
|
||||||
"description": "Wisdom Order Manuals",
|
"description": "Wisdom Order Manuals",
|
||||||
"author": "MeexReay",
|
"author": "MeexReay",
|
||||||
"apps": [ "woman.js" ],
|
"apps": [ "woman.js" ],
|
||||||
|
@ -8,8 +8,9 @@ async function main(args) {
|
|||||||
* files - Работа файлов в приложениях
|
* files - Работа файлов в приложениях
|
||||||
* stdin - Чтение ввода пользователя
|
* stdin - Чтение ввода пользователя
|
||||||
* stdout - Вывод текста в консоль
|
* stdout - Вывод текста в консоль
|
||||||
* cursor - Работа с курсором
|
* terminal - Работа с остальными функциями консоли
|
||||||
* packaging - Пакетирование приложений
|
* packaging - Пакетирование приложений
|
||||||
|
* graphics - Отрисовка графики
|
||||||
`)
|
`)
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
@ -17,6 +18,8 @@ async function main(args) {
|
|||||||
if (args[1] == "apps") {
|
if (args[1] == "apps") {
|
||||||
writeStdout(`# Создание приложений
|
writeStdout(`# Создание приложений
|
||||||
|
|
||||||
|
## Написание программ
|
||||||
|
|
||||||
Все приложения в PoshlostiOS это JS скрипты
|
Все приложения в PoshlostiOS это JS скрипты
|
||||||
Каждый такой скрипт должен иметь свой entry-point - асинхронная функция
|
Каждый такой скрипт должен иметь свой entry-point - асинхронная функция
|
||||||
с названием main и единственным аргументом args в
|
с названием main и единственным аргументом args в
|
||||||
@ -29,12 +32,16 @@ async function main(args) {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
Читайте также:
|
## Вызов команд
|
||||||
* files - Работа файлов в приложениях
|
|
||||||
* stdin - Чтение ввода пользователя
|
Вот как выглядит функция:
|
||||||
* stdout - Вывод текста в консоль
|
|
||||||
* cursor - Работа с курсором
|
executeCommand(args, read=readStdin, write=writeStdout) -> {"id": string, "name": args.join(" "), "promise": Promise}
|
||||||
* packaging - Пакетирование приложений
|
|
||||||
|
Первый аргумент при вызове команды должен быть путем до исполняемого файла
|
||||||
|
Функция возвращает промис в поле promise, чтобы дождаться конца команды используйте await
|
||||||
|
Ты чо дебик мог и сам догадаться
|
||||||
|
все бб
|
||||||
|
|
||||||
`)
|
`)
|
||||||
|
|
||||||
@ -42,35 +49,177 @@ async function main(args) {
|
|||||||
} else if (args[1] == "files") {
|
} else if (args[1] == "files") {
|
||||||
writeStdout(`# Работа файлов в приложениях
|
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
|
return 0
|
||||||
} else if (args[1] == "stdin") {
|
} else if (args[1] == "stdin") {
|
||||||
writeStdout(`# Чтение ввода пользователя
|
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
|
return 0
|
||||||
} else if (args[1] == "stdout") {
|
} else if (args[1] == "stdout") {
|
||||||
writeStdout(`# Вывод текста в консоль
|
writeStdout(`# Вывод текста в консоль
|
||||||
|
|
||||||
Статья в разработке
|
Функция:
|
||||||
|
|
||||||
|
writeStdout(content)
|
||||||
|
|
||||||
|
всё
|
||||||
|
|
||||||
`)
|
`)
|
||||||
return 0
|
return 0
|
||||||
} else if (args[1] == "cursor") {
|
} else if (args[1] == "terminal") {
|
||||||
writeStdout(`# Работа с курсором
|
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
|
return 0
|
||||||
} else if (args[1] == "packaging") {
|
} else if (args[1] == "packaging") {
|
||||||
writeStdout(`# Пакетирование приложений
|
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
|
return 0
|
||||||
|
@ -29,6 +29,14 @@ function trimTerminal(length) {
|
|||||||
updateTerminal()
|
updateTerminal()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getTerminal() {
|
||||||
|
return terminal_text
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTerminal(content) {
|
||||||
|
terminal_text = content
|
||||||
|
}
|
||||||
|
|
||||||
function clearTerminal() {
|
function clearTerminal() {
|
||||||
terminal_text = ""
|
terminal_text = ""
|
||||||
updateTerminal()
|
updateTerminal()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user