87 lines
4.5 KiB
Markdown
87 lines
4.5 KiB
Markdown
# Окно и ввод — `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` и клик мышью
|
||
вне окна закрывают его без вызова колбэка.
|
||
|
||
```lua
|
||
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` и
|
||
клик вне окна закрывают список без колбэка.
|
||
|
||
```lua
|
||
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,
|
||
})
|
||
```
|