files
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
print("[lua] init.lua выполнен")
|
||||
|
||||
-- Доступные методы объекта app (номера вкладок — с нуля):
|
||||
-- app:tabs() -- {{ index = 0, title = "main.rs" }, ...}
|
||||
-- app:tabs() -- {{ index = 0, title = "main.rs", icon = "file" }, ...}
|
||||
-- app:active_tab() -- индекс активной вкладки
|
||||
-- app:set_active_tab(index) -- true, если вкладка существует
|
||||
-- app:next_tab() -- переключить на следующую, вернуть индекс
|
||||
@@ -23,7 +23,15 @@ print("[lua] init.lua выполнен")
|
||||
-- app:open_tab() -- открыть пустую вкладку, вернуть индекс
|
||||
-- app:open(path) -- открыть файл с диска, вернуть индекс вкладки;
|
||||
-- -- если файла нет — пустой буфер с таким именем
|
||||
-- app:list_dir(path) -- {{ id = "src/main.rs", name = "main.rs",
|
||||
-- -- is_dir = false }, ...}; пустой путь —
|
||||
-- -- текущий каталог, id — путь от него
|
||||
-- app:close_tab(index) -- true, если вкладка закрыта
|
||||
-- app:set_tab_icon(i, name) -- иконка вкладки из каталога Lucide
|
||||
-- -- (file, file-code, book-open, ...);
|
||||
-- -- false — нет вкладки или иконки
|
||||
-- app:clear_tab_icon(i) -- вернуть иконку по умолчанию (file)
|
||||
-- app:tab_icon(i) -- имя иконки вкладки или nil
|
||||
-- app:active_text() -- текст активной вкладки
|
||||
-- app:set_active_text(text) -- заменить текст активной вкладки
|
||||
-- app:set_language(i, "rust") -- включить подсветку (rust|go|js|json|python)
|
||||
@@ -92,6 +100,18 @@ print("[lua] init.lua выполнен")
|
||||
-- app.bottom_panel:toggle()
|
||||
-- app.bottom_panel:is_open()
|
||||
--
|
||||
-- Блоки панелей. Сценарий сам решает, что показывает блок: редактор умеет
|
||||
-- рисовать только абстрактное дерево.
|
||||
-- local tree = app.left_panel:add_tree()
|
||||
-- tree:append(nodes, parent_id) -- nodes = { { id=..., label=..., icon=...,
|
||||
-- -- expandable=..., expanded=... }, ... };
|
||||
-- -- parent_id = "" — корень дерева
|
||||
-- tree:remove(id) -- удалить ноду и всех потомков
|
||||
-- tree:on_toggle(fn) -- fn(expanded, id, loaded)
|
||||
-- tree:on_click(fn) -- fn(id) — клик по конечной ноде
|
||||
-- tree:selected() -- id выбранной строки или nil
|
||||
-- tree:focus(id) -- раскрыть родителей, выбрать и дать фокус
|
||||
--
|
||||
-- Методы добавляются в src/api.rs: всё, что есть в impl AppApi, помеченном
|
||||
-- #[mlua::userdata_impl], автоматически доступно из Lua.
|
||||
--
|
||||
@@ -136,9 +156,56 @@ end
|
||||
-- app:map_key("<C-s>", function() app:save() end)
|
||||
-- app:map_key("<!Esc>", function() app:close() end)
|
||||
|
||||
-- Файловое дерево проекта.
|
||||
--
|
||||
-- Редактор рисует абстрактное дерево; смысл узлов (файлы, папки, что угодно)
|
||||
-- задаёт этот сценарий. Здесь корень — текущий каталог, а каждая папка
|
||||
-- дозагружается при первом раскрытии.
|
||||
local project_tree = app.left_panel:add_tree()
|
||||
|
||||
local function load_dir(tree, path)
|
||||
local nodes = {}
|
||||
for _, entry in ipairs(app:list_dir(path)) do
|
||||
nodes[#nodes + 1] = {
|
||||
id = entry.id,
|
||||
label = entry.name,
|
||||
icon = entry.is_dir and "folder" or "file",
|
||||
expandable = entry.is_dir,
|
||||
expanded = false,
|
||||
}
|
||||
end
|
||||
tree:append(nodes, path)
|
||||
end
|
||||
|
||||
project_tree:on_toggle(function(expanded, id, loaded)
|
||||
-- loaded == false только при первом раскрытии: позже дети уже в дереве.
|
||||
if expanded and not loaded then
|
||||
load_dir(project_tree, id)
|
||||
end
|
||||
end)
|
||||
|
||||
project_tree:on_click(function(id)
|
||||
app:open(id)
|
||||
end)
|
||||
|
||||
app.left_panel:open()
|
||||
load_dir(project_tree, "")
|
||||
|
||||
-- Открытие/закрытие панели с деревом. При открытии возвращаем фокус на
|
||||
-- последнюю выбранную строку, чтобы можно было сразу продолжить навигацию.
|
||||
app:map_key("<C-b>", function()
|
||||
local opened = app.left_panel:toggle()
|
||||
if opened then
|
||||
local selected = project_tree:selected()
|
||||
if selected then
|
||||
project_tree:focus(selected)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
app:map_key("<C-q>", function() app:close() end)
|
||||
|
||||
app:map_key("<C-e>", function() app.right_panel:toggle() end)
|
||||
app:map_key("<C-e>", function() app.left_panel:toggle() end)
|
||||
app:map_key("<C-t>", function() app.bottom_panel:toggle() end)
|
||||
|
||||
app:open_tab()
|
||||
|
||||
Reference in New Issue
Block a user