4.5 KiB
Окно и ввод — api.window
Группа api.window управляет окном приложения, плавающим полем ввода и
списком выбора.
Окно
| Метод | Описание |
|---|---|
api.window:close() |
Закрыть окно |
api.window:toggle_maximize() |
Развернуть окно / вернуть прежний размер |
api.window:set_maximized(true/false) |
Развернуть (true) или восстановить (false) окно |
api.window:minimize() |
Свернуть окно |
api.window:is_maximized() |
Развёрнуто ли окно прямо сейчас |
Команды окна не выполняются в момент вызова из Lua: они складываются в очередь и применяются видом в начале следующего кадра.
Плавающее поле ввода
api.window:open_input(options) открывает однострочное поле ввода чуть выше
центра окна. Параметры передаются таблицей:
| Поле | Описание |
|---|---|
title |
Текст над полем; если не задан, окно состоит из одной строки ввода |
placeholder |
Подсказка внутри пустого поля ввода |
callback |
function(text) — вызывается после Enter, когда окно уже закрыто |
Пока окно открыто, сочетания клавиш приложения не работают. Текст набирается
в поле; Enter подтверждает ввод и запускает callback, Esc и клик мышью
вне окна закрывают его без вызова колбэка.
api.window:open_input({
title = "Имя файла",
placeholder = "src/main.rs",
callback = function(text)
api.editor:open(text, {})
end,
})
Плавающий список выбора
api.window:open_select(options) открывает список выбора чуть выше центра
окна. Параметры передаются таблицей:
| Поле | Описание |
|---|---|
items |
Непустой массив пунктов (см. ниже) |
selected |
id пункта, выделенного при открытии; если не задан или не найден — первый пункт |
title |
Текст над списком; отделяется горизонтальной чертой, без заголовка черты нет |
callback |
function(id) — вызывается после Enter, когда окно уже закрыто; получает id выбранного пункта |
Каждый пункт — таблица с полями:
| Поле | Описание |
|---|---|
label |
Отображаемое значение (обязательно) |
id |
Строка, которая вернётся в callback (обязательно) |
icon |
Имя иконки Lucide, например "file"; пустое или неизвестное имя — пункт без иконки |
description |
Серое описание справа от названия; обрезается троеточием, название имеет приоритет |
Каждый пункт занимает одну строку. Если иконка есть хотя бы у одного пункта, у остальных остаётся пустое место такой же ширины, чтобы названия начинались на одном уровне.
Пока список открыт, сочетания клавиш приложения не работают: стрелки меняют
выделение, Home/End прыгают к краям, Enter подтверждает выбор и вызывает
callback с id пункта, клик по пункту выбирает и подтверждает его, а Esc и
клик вне окна закрывают список без колбэка.
api.window:open_select({
title = "Режим",
selected = "release",
items = {
{ id = "debug", label = "Debug", icon = "file", description = "с отладкой" },
{ id = "release", label = "Release", icon = "folder" },
},
callback = function(id)
api.editor:set_active_text(id)
end,
})