mirror of
https://github.com/stevearc/aerial.nvim
synced 2024-09-16 14:34:08 +02:00
feat: tree can set collapse level
This commit is contained in:
parent
b247ef50c7
commit
c892e2ea82
7 changed files with 55 additions and 44 deletions
41
README.md
41
README.md
|
@ -201,26 +201,27 @@ require("aerial").setup({
|
|||
|
||||
## Commands
|
||||
|
||||
| Command | arg | description |
|
||||
| -------------------------- | ---------------------- | -------------------------------------------------------------------------- |
|
||||
| `AerialToggle[!]` | `left`/`right`/`float` | Open or close the aerial window. With `[!]` cursor stays in current window |
|
||||
| `AerialOpen[!]` | `left`/`right`/`float` | Open the aerial window. With `[!]` cursor stays in current window |
|
||||
| `AerialOpenAll` | | Open an aerial window for each visible window |
|
||||
| `AerialClose` | | Close the aerial window |
|
||||
| `AerialCloseAll` | | Close all visible aerial windows |
|
||||
| `AerialCloseAllButCurrent` | | Close all visible aerial windows except for the focused one |
|
||||
| `AerialPrev` | N=1 | Jump backwards N symbols |
|
||||
| `AerialNext` | N=1 | Jump forwards N symbols |
|
||||
| `AerialPrevUp` | N=1 | Jump up the tree N levels, moving backwards |
|
||||
| `AerialNextUp` | N=1 | Jump up the tree N levels, moving forwards |
|
||||
| `AerialGo` | N=1, `v`/`h` | Jump to the Nth symbol |
|
||||
| `AerialTreeOpen[!]` | | Expand tree at current location. `[!]` makes it recursive. |
|
||||
| `AerialTreeClose[!]` | | Collapse tree at current location. `[!]` makes it recursive. |
|
||||
| `AerialTreeToggle[!]` | | Toggle tree at current location. `[!]` makes it recursive. |
|
||||
| `AerialTreeOpenAll` | | Open all tree nodes |
|
||||
| `AerialTreeCloseAll` | | Collapse all tree nodes |
|
||||
| `AerialTreeSyncFolds` | | Sync code folding with current tree state |
|
||||
| `AerialInfo` | | Print out debug info related to aerial |
|
||||
| Command | arg | description |
|
||||
| ---------------------------- | ---------------------- | -------------------------------------------------------------------------- |
|
||||
| `AerialToggle[!]` | `left`/`right`/`float` | Open or close the aerial window. With `[!]` cursor stays in current window |
|
||||
| `AerialOpen[!]` | `left`/`right`/`float` | Open the aerial window. With `[!]` cursor stays in current window |
|
||||
| `AerialOpenAll` | | Open an aerial window for each visible window |
|
||||
| `AerialClose` | | Close the aerial window |
|
||||
| `AerialCloseAll` | | Close all visible aerial windows |
|
||||
| `AerialCloseAllButCurrent` | | Close all visible aerial windows except for the focused one |
|
||||
| `AerialPrev` | N=1 | Jump backwards N symbols |
|
||||
| `AerialNext` | N=1 | Jump forwards N symbols |
|
||||
| `AerialPrevUp` | N=1 | Jump up the tree N levels, moving backwards |
|
||||
| `AerialNextUp` | N=1 | Jump up the tree N levels, moving forwards |
|
||||
| `AerialGo` | N=1, `v`/`h` | Jump to the Nth symbol |
|
||||
| `AerialTreeOpen[!]` | | Expand tree at current location. `[!]` makes it recursive. |
|
||||
| `AerialTreeClose[!]` | | Collapse tree at current location. `[!]` makes it recursive. |
|
||||
| `AerialTreeToggle[!]` | | Toggle tree at current location. `[!]` makes it recursive. |
|
||||
| `AerialTreeOpenAll` | | Open all tree nodes |
|
||||
| `AerialTreeCloseAll` | | Collapse all tree nodes |
|
||||
| `AerialTreeSetCollapseLevel` | N | Collapse symbols at a depth greater than N (0 collapses all) |
|
||||
| `AerialTreeSyncFolds` | | Sync code folding with current tree state |
|
||||
| `AerialInfo` | | Print out debug info related to aerial |
|
||||
|
||||
## Options
|
||||
|
||||
|
|
|
@ -91,6 +91,10 @@ COMMANDS *aerial-commands
|
|||
:AerialTreeCloseAll
|
||||
Collapse all the tree nodes.
|
||||
|
||||
*:AerialTreeSetCollapseLevel*
|
||||
:AerialTreeSetCollapseLevel
|
||||
Collapse symbols at a depth greater than N (0 collapses all)
|
||||
|
||||
*:AerialTreeSyncFolds*
|
||||
:AerialTreeSyncFolds
|
||||
Sync code folding with current tree state. This ignores the
|
||||
|
|
1
doc/tags
1
doc/tags
|
@ -14,6 +14,7 @@
|
|||
:AerialTreeCloseAll aerial.txt /*:AerialTreeCloseAll*
|
||||
:AerialTreeOpen aerial.txt /*:AerialTreeOpen*
|
||||
:AerialTreeOpenAll aerial.txt /*:AerialTreeOpenAll*
|
||||
:AerialTreeSetCollapseLevel aerial.txt /*:AerialTreeSetCollapseLevel*
|
||||
:AerialTreeSyncFolds aerial.txt /*:AerialTreeSyncFolds*
|
||||
:AerialTreeToggle aerial.txt /*:AerialTreeToggle*
|
||||
Aerial aerial.txt /*Aerial*
|
||||
|
|
|
@ -26,6 +26,7 @@ command! -bang AerialTreeToggle call luaeval('require("aerial.command")._tree_cm
|
|||
command! AerialTreeOpenAll lua require'aerial'.tree_open_all()
|
||||
command! AerialTreeCloseAll lua require'aerial'.tree_close_all()
|
||||
command! AerialTreeSyncFolds lua require'aerial'.sync_folds()
|
||||
command! -nargs=1 AerialTreeSetCollapseLevel call luaeval('require("aerial").tree_set_collapse_level(0, tonumber(_A))', <q-args>)
|
||||
command! AerialInfo lua require'aerial'.info()
|
||||
]])
|
||||
end
|
||||
|
|
|
@ -122,7 +122,10 @@ M.maybe_set_foldmethod = function(bufnr)
|
|||
vim.api.nvim_win_set_var(winid, prev_fde, fde)
|
||||
vim.api.nvim_win_set_option(winid, "foldmethod", "expr")
|
||||
vim.api.nvim_win_set_option(winid, "foldexpr", "v:lua.aerial_foldexpr()")
|
||||
if config.link_tree_to_folds then
|
||||
if config.link_folds_to_tree then
|
||||
local fdl = vim.api.nvim_win_get_option(winid, "foldlevel")
|
||||
require("aerial").tree_set_collapse_level(bufnr, fdl)
|
||||
elseif config.link_tree_to_folds then
|
||||
vim.api.nvim_win_set_option(winid, "foldlevel", 99)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -173,33 +173,27 @@ end
|
|||
|
||||
-- Collapse all nodes in the symbol tree
|
||||
M.tree_close_all = function(bufnr)
|
||||
bufnr = bufnr or 0
|
||||
local mybuf = vim.api.nvim_get_current_buf()
|
||||
if bufnr == 0 then
|
||||
bufnr = mybuf
|
||||
end
|
||||
local new_cursor_pos
|
||||
local bufdata = data[bufnr]
|
||||
if bufnr == mybuf and util.is_aerial_buffer(bufnr) then
|
||||
local lnum = vim.api.nvim_win_get_cursor(0)[1]
|
||||
local root = bufdata:get_root_of(bufdata:item(lnum))
|
||||
tree.close_all(bufdata)
|
||||
new_cursor_pos = bufdata:indexof(root)
|
||||
else
|
||||
tree.close_all(bufdata)
|
||||
end
|
||||
if config.link_tree_to_folds then
|
||||
M.sync_folds(bufnr)
|
||||
end
|
||||
_post_tree_mutate(bufnr, new_cursor_pos)
|
||||
M.tree_set_collapse_level(bufnr, 0)
|
||||
end
|
||||
|
||||
-- Expand all nodes in the symbol tree
|
||||
M.tree_open_all = function(bufnr)
|
||||
bufnr = bufnr or 0
|
||||
tree.open_all(data[bufnr])
|
||||
M.tree_set_collapse_level(bufnr, 99)
|
||||
end
|
||||
|
||||
-- 0 is all closed, use 99 to open all
|
||||
M.tree_set_collapse_level = function(bufnr, level)
|
||||
bufnr = util.get_buffers(bufnr or 0)
|
||||
if not data:has_symbols(bufnr) then
|
||||
return
|
||||
end
|
||||
tree.set_collapse_level(data[bufnr], level)
|
||||
if config.link_tree_to_folds then
|
||||
M.sync_folds(bufnr)
|
||||
for _, winid in ipairs(vim.api.nvim_list_wins()) do
|
||||
if vim.api.nvim_win_get_buf(winid) == bufnr then
|
||||
vim.api.nvim_win_set_option(winid, "foldlevel", level)
|
||||
end
|
||||
end
|
||||
end
|
||||
_post_tree_mutate(bufnr)
|
||||
end
|
||||
|
@ -245,7 +239,7 @@ M.tree_cmd = function(action, opts)
|
|||
recurse = opts.recurse,
|
||||
})
|
||||
end
|
||||
_post_tree_mutate(new_cursor_pos)
|
||||
_post_tree_mutate(0, new_cursor_pos)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -25,6 +25,13 @@ M.open_all = function(bufdata)
|
|||
bufdata.collapsed = {}
|
||||
end
|
||||
|
||||
M.set_collapse_level = function(bufdata, level)
|
||||
bufdata:visit(function(item)
|
||||
local collapsed = bufdata:is_collapsable(item) and level <= item.level
|
||||
bufdata:set_collapsed(item, collapsed)
|
||||
end)
|
||||
end
|
||||
|
||||
M.edit_tree_node = function(bufdata, action, index, opts)
|
||||
opts = vim.tbl_extend("keep", opts or {}, {
|
||||
bubble = true,
|
||||
|
|
Loading…
Reference in a new issue