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 - 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]] 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