From 458d045bd258cb3ec31cdde8088e758be2bb519e Mon Sep 17 00:00:00 2001 From: Michael Grant Date: Wed, 29 Jul 2026 22:10:19 +0100 Subject: [PATCH] =?UTF-8?q?With=20collapsible=20output=20active,=20line-nu?= =?UTF-8?q?mbers-on=20now=20shows=20each=20visible=20line=E2=80=99s=20orig?= =?UTF-8?q?inal=20buffer=20line=20number,=20so=20hidden=20lines=20remain?= =?UTF-8?q?=20counted.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- regress/copy-mode-exit-status.sh | 4 ++++ window-copy.c | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/regress/copy-mode-exit-status.sh b/regress/copy-mode-exit-status.sh index 9a0e5f850..acbc6732a 100644 --- a/regress/copy-mode-exit-status.sh +++ b/regress/copy-mode-exit-status.sh @@ -63,6 +63,10 @@ capture check_grep "!+ p\$ two" check_grep "! p\$ silent" check_no_grep "!+ p\$ silent" +$TMUX2 send -X line-numbers-on || exit 1 +sleep 1 +capture +check_grep " 3 !+ p\$ two" # A format wider than the standard three-column gutter is not truncated. $TMUX2 send -X cancel || exit 1 diff --git a/window-copy.c b/window-copy.c index 6ef8e813e..2342d1c6f 100644 --- a/window-copy.c +++ b/window-copy.c @@ -5939,6 +5939,12 @@ window_copy_line_number_mode(struct window_mode_entry *wme) static int window_copy_line_number_is_absolute(struct window_mode_entry *wme) { + struct window_copy_mode_data *data = wme->data; + + if (data->output_gutter && + window_copy_line_number_mode(wme) == + WINDOW_COPY_LINE_NUMBERS_DEFAULT) + return (1); switch (window_copy_line_number_mode(wme)) { case WINDOW_COPY_LINE_NUMBERS_ABSOLUTE: case WINDOW_COPY_LINE_NUMBERS_RELATIVE: @@ -6142,7 +6148,10 @@ window_copy_write_line(struct window_mode_entry *wme, if (data->lines != NULL && backing_y < data->line_count) absolute = data->lines[backing_y].source_line + 1; mode = window_copy_line_number_mode(wme); - if (mode == WINDOW_COPY_LINE_NUMBERS_DEFAULT) { + if (mode == WINDOW_COPY_LINE_NUMBERS_DEFAULT && + data->output_gutter) + line_number = absolute; + else if (mode == WINDOW_COPY_LINE_NUMBERS_DEFAULT) { if (py < data->oy) line_number = data->oy - py; else @@ -7681,8 +7690,7 @@ window_copy_scroll_up(struct window_mode_entry *wme, u_int ny) return; } if (window_copy_line_numbers_active(wme)) { - if (window_copy_line_number_mode(wme) != - WINDOW_COPY_LINE_NUMBERS_ABSOLUTE) { + if (!window_copy_line_number_is_absolute(wme)) { window_copy_redraw_screen(wme); return; } @@ -7752,8 +7760,7 @@ window_copy_scroll_down(struct window_mode_entry *wme, u_int ny) return; } if (window_copy_line_numbers_active(wme)) { - if (window_copy_line_number_mode(wme) != - WINDOW_COPY_LINE_NUMBERS_ABSOLUTE) { + if (!window_copy_line_number_is_absolute(wme)) { window_copy_redraw_screen(wme); return; }