summaryrefslogtreecommitdiffstats
path: root/init.lua
diff options
context:
space:
mode:
authorThomas Vanbesien <tvanbesi@proton.me>2026-06-07 14:14:28 +0200
committerThomas Vanbesien <tvanbesi@proton.me>2026-06-07 14:14:28 +0200
commitf1d0eb4764ed86cc0ebce4c9dd4f5ed963e3d652 (patch)
tree2afa79cf3b400b2d8ccff098406a2be336eac40c /init.lua
parent09a03951ecfa74f6b5aa01eba082862a4d5d79c9 (diff)
downloadnvim-config-f1d0eb4764ed86cc0ebce4c9dd4f5ed963e3d652.tar.gz
nvim-config-f1d0eb4764ed86cc0ebce4c9dd4f5ed963e3d652.zip
refactor(nvim): make `show_buf_diff_orig()` more robust
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua23
1 files changed, 18 insertions, 5 deletions
diff --git a/init.lua b/init.lua
index 3b81fa3..efc6e23 100644
--- a/init.lua
+++ b/init.lua
@@ -15,13 +15,26 @@ vim.g.dotfiles = {
-- Show the diff between the current buffer and the file it was loaded from
local function show_buf_diff_orig()
- vim.cmd.new({ mods = { vertical = true } })
- vim.b.buftype = "nofile"
- vim.cmd.read("++edit #")
- vim.api.nvim_buf_set_lines(0, 0, 2, true, {})
+ local bname = vim.api.nvim_buf_get_name(0)
+ if not vim.uv.fs_stat(bname) then
+ vim.notify("Cannot diff with original because " .. bname .. " doesn't exist", vim.log.levels.WARN)
+ return
+ end
+ local cwin = vim.api.nvim_get_current_win()
vim.cmd.diffthis()
- vim.cmd.wincmd("p")
+ local temp = vim.fn.tempname()
+ local ok, err = vim.uv.fs_copyfile(bname, temp)
+ if not ok then
+ vim.notify("Could not copy file: " .. err, vim.log.levels.ERROR)
+ return
+ end
+ vim.cmd.split({ temp, mods = { vertical = vim.api.nvim_win_get_width(0) >= vim.o.textwidth * 2, keepalt = true } })
vim.cmd.diffthis()
+ vim.opt_local.bufhidden = "wipe"
+ vim.opt_local.buftype = "nofile"
+ vim.opt_local.swapfile = false
+ vim.opt_local.readonly = true
+ vim.api.nvim_set_current_win(cwin)
end
local function reload_buffer()