aboutsummaryrefslogtreecommitdiff
path: root/configs/nvim/lua/crupest/nvim.lua
diff options
context:
space:
mode:
Diffstat (limited to 'configs/nvim/lua/crupest/nvim.lua')
-rw-r--r--configs/nvim/lua/crupest/nvim.lua39
1 files changed, 28 insertions, 11 deletions
diff --git a/configs/nvim/lua/crupest/nvim.lua b/configs/nvim/lua/crupest/nvim.lua
index 2eea4f1..c47b7d5 100644
--- a/configs/nvim/lua/crupest/nvim.lua
+++ b/configs/nvim/lua/crupest/nvim.lua
@@ -37,6 +37,7 @@ local function get_previous_buffer(buf)
return bufs[index - 1]
end
+-- list the windows that are currently editing the given buffer
local function list_wins_editing_buf(buf)
local wins = vim.api.nvim_list_wins()
local result = {}
@@ -48,25 +49,28 @@ local function list_wins_editing_buf(buf)
return result
end
+-- Delete current buffer and jump back.
+-- If no previous jump, switch to previous buffer.
+-- If no previous buffer (no other buffers), create a unnamed one. (So the window does not quit.)
local function win_close_buf()
- local current_buffer = vim.api.nvim_get_current_buf()
+ local buf = vim.api.nvim_get_current_buf()
local jumps_info = vim.fn.getjumplist()
- local old_jump_list = { unpack(jumps_info[1], 1, jumps_info[2]) }
- while #old_jump_list ~= 0 do
- local last_jump = old_jump_list[#old_jump_list]
- if last_jump.bufnr ~= current_buffer and vim.fn.bufexists(last_jump.bufnr) ~= 0 and vim.fn.buflisted(last_jump.bufnr) ~= 0 then
+ local old_jumps = { unpack(jumps_info[1], 1, jumps_info[2]) }
+ while #old_jumps ~= 0 do
+ local last_jump = old_jumps[#old_jumps]
+ if last_jump.bufnr ~= buf and vim.fn.bufexists(last_jump.bufnr) ~= 0 and vim.fn.buflisted(last_jump.bufnr) ~= 0 then
break
end
- table.remove(old_jump_list, #old_jump_list)
+ table.remove(old_jumps, #old_jumps)
end
- if #old_jump_list ~= 0 then
- local last_jump = old_jump_list[#old_jump_list]
+ if #old_jumps ~= 0 then
+ local last_jump = old_jumps[#old_jumps]
vim.api.nvim_win_set_buf(0, last_jump.bufnr)
vim.api.nvim_win_set_cursor(0, {last_jump.lnum, last_jump.col})
else
- local previous_buf = get_previous_buffer(current_buffer)
+ local previous_buf = get_previous_buffer(buf)
if previous_buf then
vim.api.nvim_win_set_buf(0, previous_buf)
else
@@ -75,13 +79,26 @@ local function win_close_buf()
end
end
- vim.api.nvim_buf_delete(current_buffer, {})
+ local wins = list_wins_editing_buf(buf)
+ if #wins == 0 then
+ vim.api.nvim_buf_delete(buf, {})
+ end
+end
+
+local function close_float()
+ local wins = vim.api.nvim_list_wins()
+ for _, v in ipairs(wins) do
+ if vim.api.nvim_win_get_config(v).relative ~= '' then
+ vim.api.nvim_win_close(v, false)
+ end
+ end
end
return {
list_listed_bufs = list_listed_bufs,
get_previous_buffer = get_previous_buffer,
list_wins_editing_buf = list_wins_editing_buf,
- win_close_buf = win_close_buf
+ win_close_buf = win_close_buf,
+ close_float = close_float,
}