From d7514f5be1b959c03c16f30735d4f0d4a4d981c5 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 27 Mar 2023 08:47:57 +0000 Subject: [PATCH] Add a format to show if there are unseen changes while in a mode, from Dan Aloni in GitHub issue 3498. --- usr.bin/tmux/format.c | 17 ++++++++++++++++- usr.bin/tmux/input.c | 6 +++++- usr.bin/tmux/tmux.1 | 5 +++-- usr.bin/tmux/tmux.h | 3 ++- usr.bin/tmux/window.c | 3 ++- 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/usr.bin/tmux/format.c b/usr.bin/tmux/format.c index d2e187d0cc1..223441aaece 100644 --- a/usr.bin/tmux/format.c +++ b/usr.bin/tmux/format.c @@ -1,4 +1,4 @@ -/* $OpenBSD: format.c,v 1.311 2023/02/07 10:21:01 nicm Exp $ */ +/* $OpenBSD: format.c,v 1.312 2023/03/27 08:47:57 nicm Exp $ */ /* * Copyright (c) 2011 Nicholas Marriott @@ -1885,6 +1885,18 @@ format_cb_pane_input_off(struct format_tree *ft) return (NULL); } +/* Callback for pane_unseen_changes. */ +static void * +format_cb_pane_unseen_changes(struct format_tree *ft) +{ + if (ft->wp != NULL) { + if (ft->wp->flags & PANE_UNSEENCHANGES) + return (xstrdup("1")); + return (xstrdup("0")); + } + return (NULL); +} + /* Callback for pane_last. */ static void * format_cb_pane_last(struct format_tree *ft) @@ -2953,6 +2965,9 @@ static const struct format_table_entry format_table[] = { { "pane_tty", FORMAT_TABLE_STRING, format_cb_pane_tty }, + { "pane_unseen_changes", FORMAT_TABLE_STRING, + format_cb_pane_unseen_changes + }, { "pane_width", FORMAT_TABLE_STRING, format_cb_pane_width }, diff --git a/usr.bin/tmux/input.c b/usr.bin/tmux/input.c index 6ca2f08db38..64b32ff0f6d 100644 --- a/usr.bin/tmux/input.c +++ b/usr.bin/tmux/input.c @@ -1,4 +1,4 @@ -/* $OpenBSD: input.c,v 1.213 2023/01/03 11:43:24 nicm Exp $ */ +/* $OpenBSD: input.c,v 1.214 2023/03/27 08:47:57 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -971,6 +971,10 @@ input_parse_buffer(struct window_pane *wp, u_char *buf, size_t len) window_update_activity(wp->window); wp->flags |= PANE_CHANGED; + /* Flag new input while in a mode. */ + if (!TAILQ_EMPTY(&wp->modes)) + wp->flags |= PANE_UNSEENCHANGES; + /* NULL wp if there is a mode set as don't want to update the tty. */ if (TAILQ_EMPTY(&wp->modes)) screen_write_start_pane(sctx, wp, &wp->base); diff --git a/usr.bin/tmux/tmux.1 b/usr.bin/tmux/tmux.1 index b580b424f36..2db9aafbc41 100644 --- a/usr.bin/tmux/tmux.1 +++ b/usr.bin/tmux/tmux.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: tmux.1,v 1.916 2023/02/07 10:21:01 nicm Exp $ +.\" $OpenBSD: tmux.1,v 1.917 2023/03/27 08:47:57 nicm Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott .\" @@ -14,7 +14,7 @@ .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: February 7 2023 $ +.Dd $Mdocdate: March 27 2023 $ .Dt TMUX 1 .Os .Sh NAME @@ -5257,6 +5257,7 @@ The following variables are available, where appropriate: .It Li "pane_title" Ta "#T" Ta "Title of pane (can be set by application)" .It Li "pane_top" Ta "" Ta "Top of pane" .It Li "pane_tty" Ta "" Ta "Pseudo terminal of pane" +.It Li "pane_unseen_changes" Ta "" Ta "1 if there were changes in pane while in mode" .It Li "pane_width" Ta "" Ta "Width of pane" .It Li "pid" Ta "" Ta "Server PID" .It Li "rectangle_toggle" Ta "" Ta "1 if rectangle selection is activated" diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h index 12f61fc8cd8..f750737383c 100644 --- a/usr.bin/tmux/tmux.h +++ b/usr.bin/tmux/tmux.h @@ -1,4 +1,4 @@ -/* $OpenBSD: tmux.h,v 1.1194 2023/02/05 21:15:33 nicm Exp $ */ +/* $OpenBSD: tmux.h,v 1.1195 2023/03/27 08:47:57 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -1045,6 +1045,7 @@ struct window_pane { #define PANE_STATUSDRAWN 0x400 #define PANE_EMPTY 0x800 #define PANE_STYLECHANGED 0x1000 +#define PANE_UNSEENCHANGES 0x2000 int argc; char **argv; diff --git a/usr.bin/tmux/window.c b/usr.bin/tmux/window.c index 4903ca5d538..5e02fc251c7 100644 --- a/usr.bin/tmux/window.c +++ b/usr.bin/tmux/window.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window.c,v 1.284 2023/01/08 22:17:04 nicm Exp $ */ +/* $OpenBSD: window.c,v 1.285 2023/03/27 08:47:57 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -1120,6 +1120,7 @@ window_pane_reset_mode(struct window_pane *wp) next = TAILQ_FIRST(&wp->modes); if (next == NULL) { + wp->flags &= ~PANE_UNSEENCHANGES; log_debug("%s: no next mode", __func__); wp->screen = &wp->base; } else { -- 2.20.1