From e7b1d3aa8381449216b35e1d8b1c8ff38713303e Mon Sep 17 00:00:00 2001 From: Jonny Barnes Date: Fri, 14 Aug 2026 10:55:50 +0100 Subject: [PATCH] Add a diff-against-branch keymap to diffview.nvim gd only diffs the working tree against the index, so it shows nothing once a branch's work is already committed - found this reviewing a fully-committed branch, where it just showed blank panes. gm prompts for a rev and opens DiffviewOpen ...HEAD instead. The prompt defaults to whatever the first remote's HEAD points to, since the base branch name isn't consistent across repos (main here, develop in jonnybarnes.uk). Verified against jonnybarnes.uk's micropub-token-revocation branch: default_branch() correctly resolved forge/HEAD to develop there vs main in this repo, and DiffviewOpen develop...HEAD listed all 25 changed files. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_013t7aQbc4EyYtab1crvSFTd --- neovim/config/plugins/diffview.lua | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/neovim/config/plugins/diffview.lua b/neovim/config/plugins/diffview.lua index f9630bb..0f7befd 100644 --- a/neovim/config/plugins/diffview.lua +++ b/neovim/config/plugins/diffview.lua @@ -10,3 +10,25 @@ map('gd', 'DiffviewOpen', 'Diff against index') map('gc', 'DiffviewClose', 'Close diff view') map('gh', 'DiffviewFileHistory %', 'File history') map('gH', 'DiffviewFileHistory', 'Branch history') + +-- The base branch name varies per repo (main, master, develop, ...), so ask +-- the first remote's HEAD what it is rather than hardcoding one. +local function default_branch() + local remote = vim.fn.systemlist('git remote')[1] + if not remote or remote == '' then + return '' + end + local ref = vim.fn.systemlist('git symbolic-ref refs/remotes/' .. remote .. '/HEAD')[1] + if not ref or ref == '' then + return '' + end + return ref:gsub('^refs/remotes/' .. remote .. '/', '') +end + +map('gm', function() + vim.ui.input({ prompt = 'Diff against: ', default = default_branch() }, function(rev) + if rev and rev ~= '' then + vim.cmd('DiffviewOpen ' .. rev .. '...HEAD') + end + end) +end, 'Diff against branch')