This commit is contained in:
2026-11-01 01:54:53 +03:00
parent 51cfc86084
commit b8292acc96
8 changed files with 800 additions and 37 deletions
+60
View File
@@ -76,6 +76,16 @@ print("[lua] init.lua выполнен")
-- -- Enter подтверждает и вызывает callback,
-- -- Esc или клик вне окна закрывают без него;
-- -- пока окно открыто, привязки клавиш молчат
-- api.window:open_select(options) -- плавающий список выбора чуть выше центра;
-- -- options = { title = "...",
-- -- selected = "id",
-- -- items = {{ id = "...", label = "...",
-- -- icon = "file", description = "..." }},
-- -- callback = function(id) ... end };
-- -- стрелки/Home/End меняют выделение,
-- -- Enter или клик по пункту вызывают callback,
-- -- Esc или клик вне окна закрывают без него;
-- -- пока окно открыто, привязки клавиш молчат
--
-- Редактор api.editor (номера вкладок — с нуля):
-- api.editor:tabs() -- {{ index = 0, title = "main.rs",
@@ -481,6 +491,56 @@ api.keymap:map_key("", "<C-g>", function()
})
end)
-- Демонстрация списка выбора. Ctrl+J открывает пункты с иконками и
-- описаниями: title отделён разделителем, selected заранее выделяет пункт,
-- у части пунктов иконки нет (их текст остаётся выровненным), длинное
-- описание обрезается троеточием и не перетирает название. Enter или клик
-- передаёт в callback id выбранного пункта.
api.keymap:map_key("", "<C-j>", function()
api.window:open_select({
title = "Демонстрация списка выбора",
selected = "info",
items = {
{
id = "info",
label = "Информация",
icon = "info",
description = "короткое описание",
},
{
id = "file",
label = "Открыть файл",
icon = "file",
description = "Ctrl+G",
},
{
id = "folder",
label = "Папка",
icon = "folder",
description = "длинное описание, которое обрезается троеточием, не перетирая название",
},
{
id = "plain",
label = "Без иконки",
description = "место иконки остаётся пустым для выравнивания",
},
{
id = "note",
label = "Без описания",
icon = "notebook",
},
},
callback = function(id)
-- Колбэк получает id уже после закрытия списка. Он может открыть
-- новое окно — здесь это поле ввода с итогом выбора.
api.window:open_input({
title = "Выбрано: " .. id,
placeholder = "Enter закроет окно",
})
end,
})
end)
api.keymap:map_key("", "<C-t>", "toggle_bottom_panel")
-- Дерево диагностики в нижней панели.