summaryrefslogtreecommitdiffstats
path: root/.config/nvim
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
commit7cba96266c028eded4c7afa2c364a90fe4bd793e (patch)
treeeabd03dc51e356831dddb89952dfdca957fc9dba /.config/nvim
parent73506be5f8b267eda4df06f44e0942ec6ef64a14 (diff)
downloaddotfiles-7cba96266c028eded4c7afa2c364a90fe4bd793e.tar.gz
dotfiles-7cba96266c028eded4c7afa2c364a90fe4bd793e.zip
refactor(nvim): make `show_buf_diff_orig()` more robust
Diffstat (limited to '.config/nvim')
-rw-r--r--.config/nvim/init.lua23
1 files changed, 18 insertions, 5 deletions
diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua
index 3b81fa3..efc6e23 100644
--- a/.config/nvim/init.lua
+++ b/.config/nvim/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()