From fe34bf06134e14789fd1ce4408f7bf23b6663349 Mon Sep 17 00:00:00 2001 From: hedy Date: Tue, 31 Oct 2023 20:29:06 +0800 Subject: [PATCH] feat(folding): Support toggling of folds --- lua/symbols-outline.lua | 25 +++++++++++++++++++++++++ lua/symbols-outline/config.lua | 2 ++ 2 files changed, 27 insertions(+) diff --git a/lua/symbols-outline.lua b/lua/symbols-outline.lua index 4e91daf..8c18567 100644 --- a/lua/symbols-outline.lua +++ b/lua/symbols-outline.lua @@ -118,6 +118,13 @@ function M._goto_location(change_focus) end end +function M._toggle_fold(move_cursor, node_index) + local node = M.state.flattened_outline_items[node_index] or M._current_node() + local is_folded = folding.is_folded(node) + + M._set_folded(not is_folded, move_cursor, node_index) +end + function M._set_folded(folded, move_cursor, node_index) local node = M.state.flattened_outline_items[node_index] or M._current_node() local changed = (folded ~= folding.is_folded(node)) @@ -144,6 +151,20 @@ function M._set_folded(folded, move_cursor, node_index) end end +function M._toggle_all_fold(nodes) + nodes = nodes or M.state.outline_items + local folded = true + + for _, node in ipairs(nodes) do + if folding.is_foldable(node) and not folding.is_folded(node) then + folded = false + break + end + end + + M._set_all_folded(not folded, nodes) +end + function M._set_all_folded(folded, nodes) local stack = { nodes or M.state.outline_items } @@ -256,6 +277,8 @@ local function setup_keymaps(bufnr) map(config.options.keymaps.close, function() M.view:close() end) + -- toggle fold selection + map(config.options.keymaps.fold_toggle, M._toggle_fold) -- fold selection map(config.options.keymaps.fold, function() M._set_folded(true) @@ -264,6 +287,8 @@ local function setup_keymaps(bufnr) map(config.options.keymaps.unfold, function() M._set_folded(false) end) + -- toggle fold all + map(config.options.keymaps.fold_toggle_all, M._toggle_all_fold) -- fold all map(config.options.keymaps.fold_all, function() M._set_all_folded(true) diff --git a/lua/symbols-outline/config.lua b/lua/symbols-outline/config.lua index b9446c6..edd97bf 100644 --- a/lua/symbols-outline/config.lua +++ b/lua/symbols-outline/config.lua @@ -30,6 +30,8 @@ M.defaults = { code_actions = 'a', show_help = '?', fold = 'h', + fold_toggle = '', + fold_toggle_all = '', unfold = 'l', fold_all = 'W', unfold_all = 'E',