summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorTJ DeVries <devries.timothyj@gmail.com>2020-09-05 07:34:38 -0400
committerGitHub <noreply@github.com>2020-09-05 07:34:38 -0400
commitc70d6e58a0ab09db1ee57aded0695d350db2dd83 (patch)
tree7215ab223c65788c9218923f6c7ee0c61550991c /lua
parent4abb5f7867fb087aa69bcd49d40537609a1e2e46 (diff)
feat: add buffer list (#30)
NOTE: Buffer entry sometimes uses unstyled window, and I can't figure out why. * feat: add buffers * fixup
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/actions.lua28
-rw-r--r--lua/telescope/builtin.lua23
-rw-r--r--lua/telescope/make_entry.lua22
3 files changed, 66 insertions, 7 deletions
diff --git a/lua/telescope/actions.lua b/lua/telescope/actions.lua
index dc864d1..1f70a41 100644
--- a/lua/telescope/actions.lua
+++ b/lua/telescope/actions.lua
@@ -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
+
+ actions.close(prompt_bufnr)
- a.nvim_set_current_win(picker.original_win_id or 0)
- vim.cmd(string.format(":%s %s", command, filename))
+ local original_win_id = picker.original_win_id or 0
+ local entry_bufnr = entry.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})
+ -- 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]]
diff --git a/lua/telescope/builtin.lua b/lua/telescope/builtin.lua
index 75421e0..112054d 100644
--- a/lua/telescope/builtin.lua
+++ b/lua/telescope/builtin.lua
@@ -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
diff --git a/lua/telescope/make_entry.lua b/lua/telescope/make_entry.lua
index 09c7d30..7c35699 100644
--- a/lua/telescope/make_entry.lua
+++ b/lua/telescope/make_entry.lua
@@ -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