* feat(#1850): add no bookmark filter * feat(#1850): add no bookmark filter - style
This commit is contained in:
committed by
GitHub
parent
141c0f97c3
commit
8f92e1edd3
@@ -170,14 +170,15 @@ Show the mappings: `g?`
|
|||||||
`e` Rename: Basename |nvim-tree-api.fs.rename_basename()|
|
`e` Rename: Basename |nvim-tree-api.fs.rename_basename()|
|
||||||
`]e` Next Diagnostic |nvim-tree-api.node.navigate.diagnostics.next()|
|
`]e` Next Diagnostic |nvim-tree-api.node.navigate.diagnostics.next()|
|
||||||
`[e` Prev Diagnostic |nvim-tree-api.node.navigate.diagnostics.prev()|
|
`[e` Prev Diagnostic |nvim-tree-api.node.navigate.diagnostics.prev()|
|
||||||
`F` Clean Filter |nvim-tree-api.live_filter.clear()|
|
`F` Live Filter: Clear |nvim-tree-api.live_filter.clear()|
|
||||||
`f` Filter |nvim-tree-api.live_filter.start()|
|
`f` Live Filter: Start |nvim-tree-api.live_filter.start()|
|
||||||
`g?` Help |nvim-tree-api.tree.toggle_help()|
|
`g?` Help |nvim-tree-api.tree.toggle_help()|
|
||||||
`gy` Copy Absolute Path |nvim-tree-api.fs.copy.absolute_path()|
|
`gy` Copy Absolute Path |nvim-tree-api.fs.copy.absolute_path()|
|
||||||
`H` Toggle Filter: Dotfiles |nvim-tree-api.tree.toggle_hidden_filter()|
|
`H` Toggle Filter: Dotfiles |nvim-tree-api.tree.toggle_hidden_filter()|
|
||||||
`I` Toggle Filter: Git Ignore |nvim-tree-api.tree.toggle_gitignore_filter()|
|
`I` Toggle Filter: Git Ignore |nvim-tree-api.tree.toggle_gitignore_filter()|
|
||||||
`J` Last Sibling |nvim-tree-api.node.navigate.sibling.last()|
|
`J` Last Sibling |nvim-tree-api.node.navigate.sibling.last()|
|
||||||
`K` First Sibling |nvim-tree-api.node.navigate.sibling.first()|
|
`K` First Sibling |nvim-tree-api.node.navigate.sibling.first()|
|
||||||
|
`M` Toggle Filter: No Bookmark |nvim-tree-api.tree.toggle_no_bookmark_filter()|
|
||||||
`m` Toggle Bookmark |nvim-tree-api.marks.toggle()|
|
`m` Toggle Bookmark |nvim-tree-api.marks.toggle()|
|
||||||
`o` Open |nvim-tree-api.node.open.edit()|
|
`o` Open |nvim-tree-api.node.open.edit()|
|
||||||
`O` Open: No Window Picker |nvim-tree-api.node.open.no_window_picker()|
|
`O` Open: No Window Picker |nvim-tree-api.node.open.no_window_picker()|
|
||||||
@@ -502,6 +503,7 @@ Following is the default configuration. See |nvim-tree-opts| for details.
|
|||||||
dotfiles = false,
|
dotfiles = false,
|
||||||
git_clean = false,
|
git_clean = false,
|
||||||
no_buffer = false,
|
no_buffer = false,
|
||||||
|
no_bookmark = false,
|
||||||
custom = {},
|
custom = {},
|
||||||
exclude = {},
|
exclude = {},
|
||||||
},
|
},
|
||||||
@@ -1223,6 +1225,12 @@ For performance reasons this may not immediately update on buffer
|
|||||||
delete/wipe. A reload or filesystem event will result in an update.
|
delete/wipe. A reload or filesystem event will result in an update.
|
||||||
Type: `boolean`, Default: `false`
|
Type: `boolean`, Default: `false`
|
||||||
|
|
||||||
|
*nvim-tree.filters.no_bookmark*
|
||||||
|
Do not show files that are not bookarked.
|
||||||
|
Toggle via |nvim-tree-api.tree.toggle_no_bookmark_filter()|, default `M`
|
||||||
|
Enabling this is not useful as there is no means yet to persist bookmarks.
|
||||||
|
Type: `boolean`, Default: `false`
|
||||||
|
|
||||||
*nvim-tree.filters.custom*
|
*nvim-tree.filters.custom*
|
||||||
Custom list of vim regex for file/directory names that will not be shown.
|
Custom list of vim regex for file/directory names that will not be shown.
|
||||||
Backslashes must be escaped e.g. "^\\.git". See |string-match|.
|
Backslashes must be escaped e.g. "^\\.git". See |string-match|.
|
||||||
@@ -1666,6 +1674,10 @@ tree.toggle_git_clean_filter()
|
|||||||
tree.toggle_no_buffer_filter()
|
tree.toggle_no_buffer_filter()
|
||||||
Toggle |nvim-tree.filters.no_buffer| filter.
|
Toggle |nvim-tree.filters.no_buffer| filter.
|
||||||
|
|
||||||
|
*nvim-tree-api.tree.toggle_no_bookmark_filter()*
|
||||||
|
tree.toggle_no_bookmark_filter()
|
||||||
|
Toggle |nvim-tree.filters.no_bookmark| filter.
|
||||||
|
|
||||||
*nvim-tree-api.tree.toggle_custom_filter()*
|
*nvim-tree-api.tree.toggle_custom_filter()*
|
||||||
tree.toggle_custom_filter()
|
tree.toggle_custom_filter()
|
||||||
Toggle |nvim-tree.filters.custom| filter.
|
Toggle |nvim-tree.filters.custom| filter.
|
||||||
@@ -2138,14 +2150,15 @@ You are encouraged to copy these to your own |nvim-tree.on_attach| function.
|
|||||||
vim.keymap.set('n', 'e', api.fs.rename_basename, opts('Rename: Basename'))
|
vim.keymap.set('n', 'e', api.fs.rename_basename, opts('Rename: Basename'))
|
||||||
vim.keymap.set('n', ']e', api.node.navigate.diagnostics.next, opts('Next Diagnostic'))
|
vim.keymap.set('n', ']e', api.node.navigate.diagnostics.next, opts('Next Diagnostic'))
|
||||||
vim.keymap.set('n', '[e', api.node.navigate.diagnostics.prev, opts('Prev Diagnostic'))
|
vim.keymap.set('n', '[e', api.node.navigate.diagnostics.prev, opts('Prev Diagnostic'))
|
||||||
vim.keymap.set('n', 'F', api.live_filter.clear, opts('Clean Filter'))
|
vim.keymap.set('n', 'F', api.live_filter.clear, opts('Live Filter: Clear'))
|
||||||
vim.keymap.set('n', 'f', api.live_filter.start, opts('Filter'))
|
vim.keymap.set('n', 'f', api.live_filter.start, opts('Live Filter: Start'))
|
||||||
vim.keymap.set('n', 'g?', api.tree.toggle_help, opts('Help'))
|
vim.keymap.set('n', 'g?', api.tree.toggle_help, opts('Help'))
|
||||||
vim.keymap.set('n', 'gy', api.fs.copy.absolute_path, opts('Copy Absolute Path'))
|
vim.keymap.set('n', 'gy', api.fs.copy.absolute_path, opts('Copy Absolute Path'))
|
||||||
vim.keymap.set('n', 'H', api.tree.toggle_hidden_filter, opts('Toggle Filter: Dotfiles'))
|
vim.keymap.set('n', 'H', api.tree.toggle_hidden_filter, opts('Toggle Filter: Dotfiles'))
|
||||||
vim.keymap.set('n', 'I', api.tree.toggle_gitignore_filter, opts('Toggle Filter: Git Ignore'))
|
vim.keymap.set('n', 'I', api.tree.toggle_gitignore_filter, opts('Toggle Filter: Git Ignore'))
|
||||||
vim.keymap.set('n', 'J', api.node.navigate.sibling.last, opts('Last Sibling'))
|
vim.keymap.set('n', 'J', api.node.navigate.sibling.last, opts('Last Sibling'))
|
||||||
vim.keymap.set('n', 'K', api.node.navigate.sibling.first, opts('First Sibling'))
|
vim.keymap.set('n', 'K', api.node.navigate.sibling.first, opts('First Sibling'))
|
||||||
|
vim.keymap.set('n', 'M', api.tree.toggle_no_bookmark_filter, opts('Toggle Filter: No Bookmark'))
|
||||||
vim.keymap.set('n', 'm', api.marks.toggle, opts('Toggle Bookmark'))
|
vim.keymap.set('n', 'm', api.marks.toggle, opts('Toggle Bookmark'))
|
||||||
vim.keymap.set('n', 'o', api.node.open.edit, opts('Open'))
|
vim.keymap.set('n', 'o', api.node.open.edit, opts('Open'))
|
||||||
vim.keymap.set('n', 'O', api.node.open.no_window_picker, opts('Open: No Window Picker'))
|
vim.keymap.set('n', 'O', api.node.open.no_window_picker, opts('Open: No Window Picker'))
|
||||||
|
|||||||
@@ -507,6 +507,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
|
|||||||
dotfiles = false,
|
dotfiles = false,
|
||||||
git_clean = false,
|
git_clean = false,
|
||||||
no_buffer = false,
|
no_buffer = false,
|
||||||
|
no_bookmark = false,
|
||||||
custom = {},
|
custom = {},
|
||||||
exclude = {},
|
exclude = {},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -31,6 +31,11 @@ function M.no_buffer()
|
|||||||
reload()
|
reload()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M.no_bookmark()
|
||||||
|
filters.config.filter_no_bookmark = not filters.config.filter_no_bookmark
|
||||||
|
reload()
|
||||||
|
end
|
||||||
|
|
||||||
function M.dotfiles()
|
function M.dotfiles()
|
||||||
filters.config.filter_dotfiles = not filters.config.filter_dotfiles
|
filters.config.filter_dotfiles = not filters.config.filter_dotfiles
|
||||||
reload()
|
reload()
|
||||||
|
|||||||
@@ -136,6 +136,8 @@ Api.tree.toggle_custom_filter = wrap(require("nvim-tree.actions.tree-modifiers.t
|
|||||||
|
|
||||||
Api.tree.toggle_hidden_filter = wrap(require("nvim-tree.actions.tree-modifiers.toggles").dotfiles)
|
Api.tree.toggle_hidden_filter = wrap(require("nvim-tree.actions.tree-modifiers.toggles").dotfiles)
|
||||||
|
|
||||||
|
Api.tree.toggle_no_bookmark_filter = wrap(require("nvim-tree.actions.tree-modifiers.toggles").no_bookmark)
|
||||||
|
|
||||||
Api.tree.toggle_help = wrap(require("nvim-tree.help").toggle)
|
Api.tree.toggle_help = wrap(require("nvim-tree.help").toggle)
|
||||||
|
|
||||||
Api.tree.is_tree_buf = wrap(require("nvim-tree.utils").is_nvim_tree_buf)
|
Api.tree.is_tree_buf = wrap(require("nvim-tree.utils").is_nvim_tree_buf)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
local utils = require "nvim-tree.utils"
|
local utils = require "nvim-tree.utils"
|
||||||
|
local marks = require "nvim-tree.marks"
|
||||||
|
|
||||||
local M = {
|
local M = {
|
||||||
ignore_list = {},
|
ignore_list = {},
|
||||||
@@ -69,6 +70,12 @@ local function dotfile(path)
|
|||||||
return M.config.filter_dotfiles and utils.path_basename(path):sub(1, 1) == "."
|
return M.config.filter_dotfiles and utils.path_basename(path):sub(1, 1) == "."
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param path string
|
||||||
|
---@param bookmarks table<string, boolean> absolute paths bookmarked
|
||||||
|
local function bookmark(path, bookmarks)
|
||||||
|
return M.config.filter_no_bookmark and not bookmarks[path]
|
||||||
|
end
|
||||||
|
|
||||||
---@param path string
|
---@param path string
|
||||||
---@return boolean
|
---@return boolean
|
||||||
local function custom(path)
|
local function custom(path)
|
||||||
@@ -103,17 +110,23 @@ end
|
|||||||
--- git_status: reference
|
--- git_status: reference
|
||||||
--- unloaded_bufnr: copy
|
--- unloaded_bufnr: copy
|
||||||
--- bufinfo: empty unless no_buffer set: vim.fn.getbufinfo { buflisted = 1 }
|
--- bufinfo: empty unless no_buffer set: vim.fn.getbufinfo { buflisted = 1 }
|
||||||
|
--- bookmarks: absolute paths to boolean
|
||||||
function M.prepare(git_status, unloaded_bufnr)
|
function M.prepare(git_status, unloaded_bufnr)
|
||||||
local status = {
|
local status = {
|
||||||
git_status = git_status or {},
|
git_status = git_status or {},
|
||||||
unloaded_bufnr = unloaded_bufnr,
|
unloaded_bufnr = unloaded_bufnr,
|
||||||
bufinfo = {},
|
bufinfo = {},
|
||||||
|
bookmarks = {},
|
||||||
}
|
}
|
||||||
|
|
||||||
if M.config.filter_no_buffer then
|
if M.config.filter_no_buffer then
|
||||||
status.bufinfo = vim.fn.getbufinfo { buflisted = 1 }
|
status.bufinfo = vim.fn.getbufinfo { buflisted = 1 }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
for _, node in pairs(marks.get_marks()) do
|
||||||
|
status.bookmarks[node.absolute_path] = true
|
||||||
|
end
|
||||||
|
|
||||||
return status
|
return status
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -127,7 +140,11 @@ function M.should_filter(path, status)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
return git(path, status.git_status) or buf(path, status.bufinfo, status.unloaded_bufnr) or dotfile(path) or custom(path)
|
return git(path, status.git_status)
|
||||||
|
or buf(path, status.bufinfo, status.unloaded_bufnr)
|
||||||
|
or dotfile(path)
|
||||||
|
or custom(path)
|
||||||
|
or bookmark(path, status.bookmarks)
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.setup(opts)
|
function M.setup(opts)
|
||||||
@@ -137,6 +154,7 @@ function M.setup(opts)
|
|||||||
filter_git_ignored = opts.filters.git_ignored,
|
filter_git_ignored = opts.filters.git_ignored,
|
||||||
filter_git_clean = opts.filters.git_clean,
|
filter_git_clean = opts.filters.git_clean,
|
||||||
filter_no_buffer = opts.filters.no_buffer,
|
filter_no_buffer = opts.filters.no_buffer,
|
||||||
|
filter_no_bookmark = opts.filters.no_bookmark,
|
||||||
}
|
}
|
||||||
|
|
||||||
M.ignore_list = {}
|
M.ignore_list = {}
|
||||||
|
|||||||
@@ -64,14 +64,15 @@ function M.default_on_attach(bufnr)
|
|||||||
vim.keymap.set('n', 'e', api.fs.rename_basename, opts('Rename: Basename'))
|
vim.keymap.set('n', 'e', api.fs.rename_basename, opts('Rename: Basename'))
|
||||||
vim.keymap.set('n', ']e', api.node.navigate.diagnostics.next, opts('Next Diagnostic'))
|
vim.keymap.set('n', ']e', api.node.navigate.diagnostics.next, opts('Next Diagnostic'))
|
||||||
vim.keymap.set('n', '[e', api.node.navigate.diagnostics.prev, opts('Prev Diagnostic'))
|
vim.keymap.set('n', '[e', api.node.navigate.diagnostics.prev, opts('Prev Diagnostic'))
|
||||||
vim.keymap.set('n', 'F', api.live_filter.clear, opts('Clean Filter'))
|
vim.keymap.set('n', 'F', api.live_filter.clear, opts('Live Filter: Clear'))
|
||||||
vim.keymap.set('n', 'f', api.live_filter.start, opts('Filter'))
|
vim.keymap.set('n', 'f', api.live_filter.start, opts('Live Filter: Start'))
|
||||||
vim.keymap.set('n', 'g?', api.tree.toggle_help, opts('Help'))
|
vim.keymap.set('n', 'g?', api.tree.toggle_help, opts('Help'))
|
||||||
vim.keymap.set('n', 'gy', api.fs.copy.absolute_path, opts('Copy Absolute Path'))
|
vim.keymap.set('n', 'gy', api.fs.copy.absolute_path, opts('Copy Absolute Path'))
|
||||||
vim.keymap.set('n', 'H', api.tree.toggle_hidden_filter, opts('Toggle Filter: Dotfiles'))
|
vim.keymap.set('n', 'H', api.tree.toggle_hidden_filter, opts('Toggle Filter: Dotfiles'))
|
||||||
vim.keymap.set('n', 'I', api.tree.toggle_gitignore_filter, opts('Toggle Filter: Git Ignore'))
|
vim.keymap.set('n', 'I', api.tree.toggle_gitignore_filter, opts('Toggle Filter: Git Ignore'))
|
||||||
vim.keymap.set('n', 'J', api.node.navigate.sibling.last, opts('Last Sibling'))
|
vim.keymap.set('n', 'J', api.node.navigate.sibling.last, opts('Last Sibling'))
|
||||||
vim.keymap.set('n', 'K', api.node.navigate.sibling.first, opts('First Sibling'))
|
vim.keymap.set('n', 'K', api.node.navigate.sibling.first, opts('First Sibling'))
|
||||||
|
vim.keymap.set('n', 'M', api.tree.toggle_no_bookmark_filter, opts('Toggle Filter: No Bookmark'))
|
||||||
vim.keymap.set('n', 'm', api.marks.toggle, opts('Toggle Bookmark'))
|
vim.keymap.set('n', 'm', api.marks.toggle, opts('Toggle Bookmark'))
|
||||||
vim.keymap.set('n', 'o', api.node.open.edit, opts('Open'))
|
vim.keymap.set('n', 'o', api.node.open.edit, opts('Open'))
|
||||||
vim.keymap.set('n', 'O', api.node.open.no_window_picker, opts('Open: No Window Picker'))
|
vim.keymap.set('n', 'O', api.node.open.no_window_picker, opts('Open: No Window Picker'))
|
||||||
|
|||||||
Reference in New Issue
Block a user