feat: hide_current_buffer option (#176)

* feat: `hide_current_buffer` option

* docs: add `hide_current_buffer` option
This commit is contained in:
JINNOUCHI Yasushi 2024-02-16 14:36:04 +09:00 committed by GitHub
parent 5c5302372b
commit 4f3e007ec2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 22 additions and 2 deletions

View File

@ -175,6 +175,10 @@ See [default configuration](https://github.com/nvim-telescope/telescope.nvim#tel
Disable devicons (if available) Disable devicons (if available)
- `hide_current_buffer` (default: `false`)
If `true`, it does not show the current buffer in candidates.
- `filter_delimiter` (default: `":"`) - `filter_delimiter` (default: `":"`)
Delimiters to indicate the filter like `:CWD:`. Delimiters to indicate the filter like `:CWD:`.

View File

@ -26,6 +26,7 @@ local Finder = {}
---@class FrecencyFinderConfig ---@class FrecencyFinderConfig
---@field chunk_size integer? default: 1000 ---@field chunk_size integer? default: 1000
---@field ignore_filenames string[]? default: {}
---@field sleep_interval integer? default: 50 ---@field sleep_interval integer? default: 50
---@field workspace_scan_cmd "LUA"|string[]|nil default: nil ---@field workspace_scan_cmd "LUA"|string[]|nil default: nil
@ -41,7 +42,7 @@ local Finder = {}
Finder.new = function(database, entry_maker, fs, need_scandir, path, recency, state, config) Finder.new = function(database, entry_maker, fs, need_scandir, path, recency, state, config)
local tx, rx = async.control.channel.mpsc() local tx, rx = async.control.channel.mpsc()
local scan_tx, scan_rx = async.control.channel.mpsc() local scan_tx, scan_rx = async.control.channel.mpsc()
return setmetatable({ local self = setmetatable({
config = vim.tbl_extend("force", { chunk_size = 1000, sleep_interval = 50 }, config or {}), config = vim.tbl_extend("force", { chunk_size = 1000, sleep_interval = 50 }, config or {}),
closed = false, closed = false,
database = database, database = database,
@ -67,6 +68,12 @@ Finder.new = function(database, entry_maker, fs, need_scandir, path, recency, st
return self:find(...) return self:find(...)
end, end,
}) })
if self.config.ignore_filenames then
for _, name in ipairs(self.config.ignore_filenames or {}) do
self.seen[name] = true
end
end
return self
end end
---@param datetime string? ---@param datetime string?

View File

@ -25,6 +25,7 @@ local Frecency = {}
---@field default_workspace string? default: nil ---@field default_workspace string? default: nil
---@field disable_devicons boolean? default: false ---@field disable_devicons boolean? default: false
---@field filter_delimiter string? default: ":" ---@field filter_delimiter string? default: ":"
---@field hide_current_buffer boolean default: false
---@field ignore_patterns string[]? default: { "*.git/*", "*/tmp/*", "term://*" } ---@field ignore_patterns string[]? default: { "*.git/*", "*/tmp/*", "term://*" }
---@field max_timestamps integer? default: 10 ---@field max_timestamps integer? default: 10
---@field show_filter_column boolean|string[]|nil default: true ---@field show_filter_column boolean|string[]|nil default: true
@ -45,6 +46,7 @@ Frecency.new = function(opts)
default_workspace = nil, default_workspace = nil,
disable_devicons = false, disable_devicons = false,
filter_delimiter = ":", filter_delimiter = ":",
hide_current_buffer = false,
ignore_patterns = os_util.is_windows and { [[*.git\*]], [[*\tmp\*]], "term://*" } ignore_patterns = os_util.is_windows and { [[*.git\*]], [[*\tmp\*]], "term://*" }
or { "*.git/*", "*/tmp/*", "term://*" }, or { "*.git/*", "*/tmp/*", "term://*" },
max_timestamps = 10, max_timestamps = 10,
@ -113,10 +115,15 @@ function Frecency:start(opts)
if opts.cwd then if opts.cwd then
opts.cwd = vim.fn.expand(opts.cwd) opts.cwd = vim.fn.expand(opts.cwd)
end end
local ignore_filenames
if opts.hide_current_buffer or self.config.hide_current_buffer then
ignore_filenames = { vim.api.nvim_buf_get_name(0) }
end
self.picker = Picker.new(self.database, self.entry_maker, self.fs, self.recency, { self.picker = Picker.new(self.database, self.entry_maker, self.fs, self.recency, {
default_workspace_tag = self.config.default_workspace, default_workspace_tag = self.config.default_workspace,
editing_bufnr = vim.api.nvim_get_current_buf(), editing_bufnr = vim.api.nvim_get_current_buf(),
filter_delimiter = self.config.filter_delimiter, filter_delimiter = self.config.filter_delimiter,
ignore_filenames = ignore_filenames,
initial_workspace_tag = opts.workspace, initial_workspace_tag = opts.workspace,
show_unindexed = self.config.show_unindexed, show_unindexed = self.config.show_unindexed,
workspace_scan_cmd = self.config.workspace_scan_cmd, workspace_scan_cmd = self.config.workspace_scan_cmd,

View File

@ -26,6 +26,7 @@ local Picker = {}
---@field default_workspace_tag string? ---@field default_workspace_tag string?
---@field editing_bufnr integer ---@field editing_bufnr integer
---@field filter_delimiter string ---@field filter_delimiter string
---@field ignore_filenames string[]?
---@field initial_workspace_tag string? ---@field initial_workspace_tag string?
---@field show_unindexed boolean ---@field show_unindexed boolean
---@field workspace_scan_cmd "LUA"|string[]|nil ---@field workspace_scan_cmd "LUA"|string[]|nil
@ -61,6 +62,7 @@ end
---@class FrecencyPickerOptions ---@class FrecencyPickerOptions
---@field cwd string ---@field cwd string
---@field hide_current_buffer boolean?
---@field path_display ---@field path_display
---| "hidden" ---| "hidden"
---| "tail" ---| "tail"
@ -86,7 +88,7 @@ function Picker:finder(opts, workspace, workspace_tag)
workspace, workspace,
self.recency, self.recency,
self.state, self.state,
{ workspace_scan_cmd = self.config.workspace_scan_cmd } { ignore_filenames = self.config.ignore_filenames, workspace_scan_cmd = self.config.workspace_scan_cmd }
) )
end end