From de47bf63701cd570a83b4da89522a1e7d08abe6f Mon Sep 17 00:00:00 2001 From: hl-valdemar Date: Sun, 11 Oct 2026 01:31:48 +0200 Subject: [PATCH] style: fill diff gaps with adjacent slash stripes --- docs/editing.md | 2 +- src/tui.rs | 16 ++++------------ 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/docs/editing.md b/docs/editing.md index 325a1ec..5796d3d 100644 --- a/docs/editing.md +++ b/docs/editing.md @@ -217,7 +217,7 @@ File rows show colored **A** (added, green), **M** (modified, yellow), **D** (re Changed text rows use muted red backgrounds in Before and muted green backgrounds in After, including blank tails and real empty lines. Foreground colors use the editor's bundled Tree-sitter syntax highlighting, parsed independently for each snapshot and its path (including the old path for renames). Unknown languages retain the normal foreground; historical snapshots do not borrow live-buffer LSP tokens. -Missing counterparts use muted `/` stripes on the normal terminal background instead of blank rows, with one space between slashes. Each successive aligned row shifts the stripes one column left, forming continuous diagonals; the phase follows aligned row and horizontal offset so scrolling does not restart the pattern. Actual empty source lines retain their normal/change background and are not hatched. +Missing counterparts use adjacent muted `/` stripes on the normal terminal background instead of blank rows, with a slash in every column. The dense pattern stays continuous while scrolling. Actual empty source lines retain their normal/change background and are not hatched. Tab/Shift+Tab cycles focus between Files, Before, and After. In text panes, Up/Down or Ctrl+j/k scrolls both panes together; Left/Right or Ctrl+h/l scrolls the focused pane horizontally. Home/End goes to the first/last tree row or aligned text row. Wheel input over a text pane scrolls both panes; over Files it navigates visible tree rows without opening them. Esc first leaves filtering when the tree is focused; otherwise it closes the diff and preserves the editor's buffers, cursors, unsaved text, and undo history. Typing and pasted text cannot edit either snapshot. diff --git a/src/tui.rs b/src/tui.rs index 2cbf9de..9642793 100644 --- a/src/tui.rs +++ b/src/tui.rs @@ -1296,9 +1296,8 @@ fn draw_diff_pane( let style = Style::default().fg(Color::Rgb(72, 72, 72)).bg(Color::Reset); let buffer = frame.buffer_mut(); for x in 0..content.width { - let slash = (usize::from(x) % 2 + aligned_row % 2 + left % 2) % 2 == 0; buffer[(content.x + x, row_area.y)] - .set_symbol(if slash { "/" } else { " " }) + .set_symbol("/") .set_style(style); } continue; @@ -2568,8 +2567,7 @@ mod tests { let gap_symbols: Vec<_> = (after.x + 1..after.right() - 1) .map(|x| { let cell = &buffer[(x, y)]; - let column = x - after.x - 1; - assert_eq!(cell.symbol(), [" ", "/"][usize::from(column % 2)]); + assert_eq!(cell.symbol(), "/"); assert_eq!(cell.bg, Color::Reset); assert_eq!(cell.fg, Color::Rgb(72, 72, 72)); cell.symbol().to_owned() @@ -2618,10 +2616,8 @@ mod tests { for offset in 0..2 { let y = before.y + 1 + offset; for x in before.x + 1..before.right() - 1 { - let column = x - before.x - 1; let cell = &buffer[(x, y)]; - let pattern = if offset == 0 { ["/", " "] } else { [" ", "/"] }; - assert_eq!(cell.symbol(), pattern[usize::from(column % 2)]); + assert_eq!(cell.symbol(), "/"); assert_eq!(cell.bg, Color::Reset); assert_eq!(cell.fg, Color::Rgb(72, 72, 72)); } @@ -2641,11 +2637,7 @@ mod tests { render_diff(&mut terminal, &diff, &mut panels); let buffer = terminal.backend().buffer(); for x in before.x + 1..before.right() - 1 { - let column = x - before.x - 1; - assert_eq!( - buffer[(x, before.y + 1)].symbol(), - ["/", " "][usize::from(column % 2)], - ); + assert_eq!(buffer[(x, before.y + 1)].symbol(), "/"); } assert_eq!(buffer[(before.x, before.y + 1)].symbol(), "│"); assert_eq!(buffer[(before.right() - 1, before.y + 1)].symbol(), "│");