Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Jan 9, 2026

The right-side heatmap indicators (vertical bars) in the blame window stay at their original fixed column when the window is resized with :wincmd >, causing them to appear misaligned in the middle of the expanded window.

Changes

  • Add WinResized autocmd to detect blame window resizes and trigger extmark repositioning
  • Add update_right_extmarks() to recalculate window width and reposition heatmap extmarks
  • Extract set_right_extmark() helper to eliminate duplication between initial render and resize update

Implementation

Extmarks use virt_text_win_col to position at a specific column. On resize:

  1. Get actual window width: nvim_win_get_width(blm_win) - 1 (0-indexed)
  2. Delete extmarks with virt_text_win_col property
  3. Recreate at new position

Pattern follows current_line_blame.lua's WinResized handling.

Original prompt

This section details on the original issue you should resolve

<issue_title>blame window: right side extmarks stays untouched at wincmd ></issue_title>
<issue_description>### Description

When increasing the width of the blame window (to see long commit titles) right side extmarks (I'm not sure if it's called heatmap) no longer keep to the right side.

Image

Neovim version

v0.12.0-dev-1050+g9467731865

Operating system and version

Debian Sid

Expected behavior

Right side extmarks are snapped to the right on WinResize.

Actual behavior

See the description

Minimal config

  • notice no --depth=1 only - the rest is untouched.
for name, url in pairs{
  gitsigns = 'https://github.com/lewis6991/gitsigns.nvim',
  -- ADD OTHER PLUGINS _NECESSARY_ TO REPRODUCE THE ISSUE
} do
  local install_path = vim.fn.fnamemodify('gitsigns_issue/'..name, ':p')
  if vim.fn.isdirectory(install_path) == 0 then
    vim.fn.system { 'git', 'clone', url, install_path }
  end
  vim.opt.runtimepath:append(install_path)
end

require('gitsigns').setup{
  debug_mode = true, -- You must add this to enable debug messages
}

Steps to reproduce

  • nvim --clean -u init.lua gitsigns_issue/gitsigns/lua/gitsigns/signs.lua
  • :Gitsigns blame
  • :5wincmd >

Gitsigns debug messages

:Gitsigns debug_messages
0.03 D dprintf: Deriving GitSignsAdd from Added
0.16 D derive: Deriving GitSignsChange from Changed
0.21 D derive: Deriving GitSignsDelete from Removed
0.31 D derive: Deriving GitSignsChangedelete from GitSignsChange
0.34 D derive: Deriving GitSignsTopdelete from GitSignsDelete
0.41 D derive: Deriving GitSignsUntracked from GitSignsAdd
0.47 D derive: Deriving GitSignsAddNr from GitSignsAdd
0.50 D derive: Deriving GitSignsChangeNr from GitSignsChange
0.52 D derive: Deriving GitSignsDeleteNr from GitSignsDelete
0.57 D derive: Deriving GitSignsChangedeleteNr from GitSignsChangeNr
0.59 D derive: Deriving GitSignsTopdeleteNr from GitSignsDeleteNr
0.62 D derive: Deriving GitSignsUntrackedNr from GitSignsAddNr
0.64 D derive: Deriving GitSignsAddLn from DiffAdd
0.67 D derive: Deriving GitSignsChangeLn from DiffChange
0.71 D derive: Deriving GitSignsChangedeleteLn from GitSignsChangeLn
0.75 D derive: Deriving GitSignsTopdeleteLn from GitSignsDeleteLn
0.82 D derive: Deriving GitSignsUntrackedLn from GitSignsAddLn
0.84 D derive: Deriving GitSignsAddCul from GitSignsAdd
0.88 D derive: Deriving GitSignsChangeCul from GitSignsChange
0.90 D derive: Deriving GitSignsDeleteCul from GitSignsDelete
0.92 D derive: Deriving GitSignsChangedeleteCul from GitSignsChangeCul
0.95 D derive: Deriving GitSignsTopdeleteCul from GitSignsDeleteCul
0.97 D derive: Deriving GitSignsUntrackedCul from GitSignsAddCul
1.01 D derive: Deriving GitSignsStagedAdd from GitSignsAdd
1.04 D derive: Deriving GitSignsStagedChange from GitSignsChange
1.07 D derive: Deriving GitSignsStagedDelete from GitSignsDelete
1.10 D derive: Deriving GitSignsStagedChangedelete from GitSignsChangedelete
1.12 D derive: Deriving GitSignsStagedTopdelete from GitSignsTopdelete
1.15 D derive: Deriving GitSignsStagedUntracked from GitSignsUntracked
1.23 D derive: Deriving GitSignsStagedAddNr from GitSignsAddNr
1.27 D derive: Deriving GitSignsStagedChangeNr from GitSignsChangeNr
1.30 D derive: Deriving GitSignsStagedDeleteNr from GitSignsDeleteNr
1.33 D derive: Deriving GitSignsStagedChangedeleteNr from GitSignsChangedeleteNr
1.37 D derive: Deriving GitSignsStagedTopdeleteNr from GitSignsTopdeleteNr
1.40 D derive: Deriving GitSignsStagedUntrackedNr from GitSignsUntrackedNr
1.42 D derive: Deriving GitSignsStagedAddLn from GitSignsAddLn
1.45 D derive: Deriving GitSignsStagedChangeLn from GitSignsChangeLn
1.49 D derive: Deriving GitSignsStagedChangedeleteLn from GitSignsChangedeleteLn
1.56 D derive: Could not derive GitSignsStagedTopdeleteLn
1.59 D derive: Deriving GitSignsStagedUntrackedLn from GitSignsUntrackedLn
1.62 D derive: Deriving GitSignsStagedAddCul from GitSignsAddCul
1.64 D derive: Deriving GitSignsStagedChangeCul from GitSignsChangeCul
1.73 D derive: Deriving GitSignsStagedDeleteCul from GitSignsDeleteCul
1.76 D derive: Deriving GitSignsStagedChangedeleteCul from GitSignsChangedeleteCul
1.79 D derive: Deriving GitSignsStagedTopdeleteCul from GitSignsTopdeleteCul
1.84 D derive: Deriving GitSignsStagedUntrackedCul from GitSignsUntrackedCul
1.89 D derive: Deriving GitSignsAddPreview from DiffAdd
1.92 D derive: Deriving GitSignsDeletePreview from DiffDelete
1.96 D derive: Deriving GitSignsCurrentLineBlame from NonText
2.01 D derive: Deriving GitSignsAddInline from TermCursor
2.04 D derive: Deriving GitSignsDeleteInline from TermCursor
2.07 D derive: Deriving GitSignsChangeInline from TermCursor
2.10 D derive: Deriving GitSignsAddLnInline from GitSignsAddInline
2.13 D derive: Deriving GitSignsChangeLnInline from Git...

</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes lewis6991/gitsigns.nvim#1398

<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more [Copilot coding agent tips](https://gh.io/copilot-coding-agent-tips) in the docs.

Copilot AI changed the title [WIP] Fix right side extmarks alignment in blame window Fix blame window heatmap alignment on resize Jan 9, 2026
Copilot AI requested a review from lewis6991 January 9, 2026 15:05
@lewis6991 lewis6991 marked this pull request as ready for review January 9, 2026 15:15
When the blame window is resized, update the right-side extmarks
(heatmap indicators) to stay aligned with the window's right edge.

Co-authored-by: lewis6991 <lewis6991@gmail.com>
@lewis6991 lewis6991 force-pushed the copilot/fix-right-side-extmarks-alignment branch from 793f732 to 78a1682 Compare January 9, 2026 15:16
@lewis6991 lewis6991 merged commit ecd3717 into main Jan 9, 2026
7 checks passed
@lewis6991 lewis6991 deleted the copilot/fix-right-side-extmarks-alignment branch January 9, 2026 15:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants