mirror of
https://github.com/hyzendust/KickestEnd.nvim.git
synced 2026-02-15 04:01:13 +01:00
Add: preserve undo history using neotree toggle while closing a buffer
This commit is contained in:
@@ -209,11 +209,7 @@ local function smart_save(force_save_as)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- Preserve cursor position and undo history
|
|
||||||
local cursor_pos = vim.api.nvim_win_get_cursor(0)
|
|
||||||
vim.api.nvim_buf_set_option(0, 'modified', false)
|
vim.api.nvim_buf_set_option(0, 'modified', false)
|
||||||
vim.api.nvim_win_set_cursor(0, cursor_pos)
|
|
||||||
|
|
||||||
print('Saved ' .. filename)
|
print('Saved ' .. filename)
|
||||||
end
|
end
|
||||||
-- Save current buffer
|
-- Save current buffer
|
||||||
@@ -268,8 +264,30 @@ local function is_alpha_running()
|
|||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
-- Helper function: toggle Undotree to preserve undo history for root-protected files
|
||||||
|
local function toggle_undotree_twice(callback)
|
||||||
|
local filename = vim.api.nvim_buf_get_name(0)
|
||||||
|
if filename ~= '' and vim.fn.filereadable(filename) == 1 and vim.fn.filewritable(filename) == 0 then
|
||||||
|
if vim.fn.exists ':UndotreeToggle' == 2 then
|
||||||
|
vim.cmd 'UndotreeToggle'
|
||||||
|
vim.defer_fn(function()
|
||||||
|
vim.cmd 'UndotreeToggle'
|
||||||
|
if callback then
|
||||||
|
vim.defer_fn(callback, 50)
|
||||||
|
end
|
||||||
|
end, 50)
|
||||||
|
elseif callback then
|
||||||
|
callback()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if callback then
|
||||||
|
callback()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
-- Main function
|
-- Main function
|
||||||
local function close_window(mode)
|
local function close_window(mode)
|
||||||
|
local function do_close()
|
||||||
local bufnr = vim.api.nvim_get_current_buf()
|
local bufnr = vim.api.nvim_get_current_buf()
|
||||||
local modified = vim.bo.modified
|
local modified = vim.bo.modified
|
||||||
local buftype = vim.api.nvim_buf_get_option(bufnr, 'buftype') -- detect terminal buffer
|
local buftype = vim.api.nvim_buf_get_option(bufnr, 'buftype') -- detect terminal buffer
|
||||||
@@ -352,6 +370,9 @@ local function close_window(mode)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- Toggle Undotree before closing to ensure undo history is preserved
|
||||||
|
toggle_undotree_twice(do_close)
|
||||||
|
end
|
||||||
-- Asks what to do if the window is unsaved, otherwise just close
|
-- Asks what to do if the window is unsaved, otherwise just close
|
||||||
vim.keymap.set('n', '<leader>q', function()
|
vim.keymap.set('n', '<leader>q', function()
|
||||||
close_window()
|
close_window()
|
||||||
|
|||||||
Reference in New Issue
Block a user