feat(folding): Support toggling of folds
This commit is contained in:
@@ -118,6 +118,13 @@ function M._goto_location(change_focus)
|
|||||||
end
|
end
|
||||||
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)
|
function M._set_folded(folded, move_cursor, node_index)
|
||||||
local node = M.state.flattened_outline_items[node_index] or M._current_node()
|
local node = M.state.flattened_outline_items[node_index] or M._current_node()
|
||||||
local changed = (folded ~= folding.is_folded(node))
|
local changed = (folded ~= folding.is_folded(node))
|
||||||
@@ -144,6 +151,20 @@ function M._set_folded(folded, move_cursor, node_index)
|
|||||||
end
|
end
|
||||||
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)
|
function M._set_all_folded(folded, nodes)
|
||||||
local stack = { nodes or M.state.outline_items }
|
local stack = { nodes or M.state.outline_items }
|
||||||
|
|
||||||
@@ -256,6 +277,8 @@ local function setup_keymaps(bufnr)
|
|||||||
map(config.options.keymaps.close, function()
|
map(config.options.keymaps.close, function()
|
||||||
M.view:close()
|
M.view:close()
|
||||||
end)
|
end)
|
||||||
|
-- toggle fold selection
|
||||||
|
map(config.options.keymaps.fold_toggle, M._toggle_fold)
|
||||||
-- fold selection
|
-- fold selection
|
||||||
map(config.options.keymaps.fold, function()
|
map(config.options.keymaps.fold, function()
|
||||||
M._set_folded(true)
|
M._set_folded(true)
|
||||||
@@ -264,6 +287,8 @@ local function setup_keymaps(bufnr)
|
|||||||
map(config.options.keymaps.unfold, function()
|
map(config.options.keymaps.unfold, function()
|
||||||
M._set_folded(false)
|
M._set_folded(false)
|
||||||
end)
|
end)
|
||||||
|
-- toggle fold all
|
||||||
|
map(config.options.keymaps.fold_toggle_all, M._toggle_all_fold)
|
||||||
-- fold all
|
-- fold all
|
||||||
map(config.options.keymaps.fold_all, function()
|
map(config.options.keymaps.fold_all, function()
|
||||||
M._set_all_folded(true)
|
M._set_all_folded(true)
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ M.defaults = {
|
|||||||
code_actions = 'a',
|
code_actions = 'a',
|
||||||
show_help = '?',
|
show_help = '?',
|
||||||
fold = 'h',
|
fold = 'h',
|
||||||
|
fold_toggle = '<tab>',
|
||||||
|
fold_toggle_all = '<S-tab>',
|
||||||
unfold = 'l',
|
unfold = 'l',
|
||||||
fold_all = 'W',
|
fold_all = 'W',
|
||||||
unfold_all = 'E',
|
unfold_all = 'E',
|
||||||
|
|||||||
Reference in New Issue
Block a user