feat: add buffer list (#30)
NOTE: Buffer entry sometimes uses unstyled window, and I can't figure out why. * feat: add buffers * fixup
This commit is contained in:
@@ -34,6 +34,7 @@ function actions.get_selected_entry(prompt_bufnr)
|
||||
return actions.get_current_picker(prompt_bufnr):get_selection()
|
||||
end
|
||||
|
||||
-- TODO: It seems sometimes we get bad styling.
|
||||
local function goto_file_selection(prompt_bufnr, command)
|
||||
local picker = actions.get_current_picker(prompt_bufnr)
|
||||
local entry = actions.get_selected_entry(prompt_bufnr)
|
||||
@@ -68,15 +69,28 @@ local function goto_file_selection(prompt_bufnr, command)
|
||||
col = tonumber(sections[3])
|
||||
end
|
||||
|
||||
vim.cmd(string.format([[bwipeout! %s]], prompt_bufnr))
|
||||
local preview_win = state.get_status(prompt_bufnr).preview_win
|
||||
if preview_win then
|
||||
a.nvim_win_set_config(preview_win, {style = ''})
|
||||
end
|
||||
|
||||
a.nvim_set_current_win(picker.original_win_id or 0)
|
||||
vim.cmd(string.format(":%s %s", command, filename))
|
||||
actions.close(prompt_bufnr)
|
||||
|
||||
local bufnr = vim.api.nvim_get_current_buf()
|
||||
a.nvim_buf_set_option(bufnr, 'buflisted', true)
|
||||
if row and col then
|
||||
a.nvim_win_set_cursor(0, {row, col})
|
||||
local original_win_id = picker.original_win_id or 0
|
||||
local entry_bufnr = entry.bufnr
|
||||
|
||||
-- TODO: Sometimes we open something with missing line numbers and stuff...
|
||||
a.nvim_set_current_win(original_win_id)
|
||||
if entry_bufnr then
|
||||
a.nvim_win_set_buf(original_win_id, entry_bufnr)
|
||||
else
|
||||
vim.cmd(string.format(":%s %s", command, filename))
|
||||
|
||||
local bufnr = vim.api.nvim_get_current_buf()
|
||||
a.nvim_buf_set_option(bufnr, 'buflisted', true)
|
||||
if row and col then
|
||||
a.nvim_win_set_cursor(0, {row, col})
|
||||
end
|
||||
end
|
||||
|
||||
vim.cmd [[stopinsert]]
|
||||
|
||||
@@ -22,6 +22,7 @@ local pickers = require('telescope.pickers')
|
||||
local sorters = require('telescope.sorters')
|
||||
local utils = require('telescope.utils')
|
||||
|
||||
local filter = vim.tbl_filter
|
||||
local flatten = vim.tbl_flatten
|
||||
|
||||
-- TODO: Support silver search here.
|
||||
@@ -340,4 +341,26 @@ builtin.fd = function(opts)
|
||||
}):find()
|
||||
end
|
||||
|
||||
-- TODO: This is partially broken, but I think it might be an nvim bug.
|
||||
builtin.buffers = function(opts)
|
||||
opts = opts or {}
|
||||
|
||||
local buffers = filter(function(b)
|
||||
return
|
||||
vim.api.nvim_buf_is_loaded(b)
|
||||
and 1 == vim.fn.buflisted(b)
|
||||
|
||||
end, vim.api.nvim_list_bufs())
|
||||
|
||||
pickers.new(opts, {
|
||||
prompt = 'Buffers',
|
||||
finder = finders.new_table {
|
||||
results = buffers,
|
||||
entry_maker = make_entry.gen_from_buffer(opts)
|
||||
},
|
||||
previewer = previewers.vim_buffer.new(opts),
|
||||
sorter = sorters.get_norcalli_sorter(),
|
||||
}):find()
|
||||
end
|
||||
|
||||
return builtin
|
||||
|
||||
@@ -169,4 +169,26 @@ function make_entry.gen_from_quickfix(opts)
|
||||
end
|
||||
end
|
||||
|
||||
function make_entry.gen_from_buffer(opts)
|
||||
return function(entry)
|
||||
local bufnr_str = tostring(entry)
|
||||
local bufname = vim.api.nvim_buf_get_name(entry)
|
||||
|
||||
if '' == bufname then
|
||||
return nil
|
||||
end
|
||||
|
||||
return {
|
||||
valid = true,
|
||||
|
||||
value = bufname,
|
||||
ordinal = bufnr_str .. " : " .. bufname,
|
||||
display = bufnr_str .. " : " .. bufname,
|
||||
|
||||
bufnr = entry,
|
||||
filename = bufname,
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
return make_entry
|
||||
|
||||
Reference in New Issue
Block a user