From: nicm Date: Mon, 26 Aug 2024 07:14:40 +0000 (+0000) Subject: Add window_pane_mode helper function to tell if a pane is in copy mode, X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=ad46cda3e5af78ad5d21434447f42e05b9356e2f;p=openbsd Add window_pane_mode helper function to tell if a pane is in copy mode, from Michael Grant. --- diff --git a/usr.bin/tmux/format.c b/usr.bin/tmux/format.c index aa17e924ffe..10283c597cd 100644 --- a/usr.bin/tmux/format.c +++ b/usr.bin/tmux/format.c @@ -1,4 +1,4 @@ -/* $OpenBSD: format.c,v 1.319 2024/08/21 04:17:09 nicm Exp $ */ +/* $OpenBSD: format.c,v 1.320 2024/08/26 07:14:40 nicm Exp $ */ /* * Copyright (c) 2011 Nicholas Marriott @@ -1136,8 +1136,7 @@ format_cb_mouse_word(struct format_tree *ft) return (NULL); if (!TAILQ_EMPTY(&wp->modes)) { - if (TAILQ_FIRST(&wp->modes)->mode == &window_copy_mode || - TAILQ_FIRST(&wp->modes)->mode == &window_view_mode) + if (window_pane_mode(wp) != WINDOW_PANE_NO_MODE) return (window_copy_get_word(wp, x, y)); return (NULL); } @@ -1181,8 +1180,7 @@ format_cb_mouse_line(struct format_tree *ft) return (NULL); if (!TAILQ_EMPTY(&wp->modes)) { - if (TAILQ_FIRST(&wp->modes)->mode == &window_copy_mode || - TAILQ_FIRST(&wp->modes)->mode == &window_view_mode) + if (window_pane_mode(wp) != WINDOW_PANE_NO_MODE) return (window_copy_get_line(wp, y)); return (NULL); } diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h index 44c7cec986d..27ec44ff6a2 100644 --- a/usr.bin/tmux/tmux.h +++ b/usr.bin/tmux/tmux.h @@ -1,4 +1,4 @@ -/* $OpenBSD: tmux.h,v 1.1223 2024/08/26 07:09:34 nicm Exp $ */ +/* $OpenBSD: tmux.h,v 1.1224 2024/08/26 07:14:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -966,6 +966,11 @@ enum pane_lines { #define PANE_BORDER_ARROWS 2 #define PANE_BORDER_BOTH 3 +/* Mode returned by window_pane_mode function. */ +#define WINDOW_PANE_NO_MODE 0 +#define WINDOW_PANE_COPY_MODE 1 +#define WINDOW_PANE_VIEW_MODE 2 + /* Screen redraw context. */ struct screen_redraw_ctx { struct client *c; @@ -3112,6 +3117,7 @@ void window_pane_update_used_data(struct window_pane *, struct window_pane_offset *, size_t); void window_set_fill_character(struct window *); void window_pane_default_cursor(struct window_pane *); +int window_pane_mode(struct window_pane *); /* layout.c */ u_int layout_count_cells(struct layout_cell *); diff --git a/usr.bin/tmux/window.c b/usr.bin/tmux/window.c index 5aebeedaa52..1a085966a34 100644 --- a/usr.bin/tmux/window.c +++ b/usr.bin/tmux/window.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window.c,v 1.291 2024/06/24 08:30:50 nicm Exp $ */ +/* $OpenBSD: window.c,v 1.292 2024/08/26 07:14:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -1662,3 +1662,15 @@ window_pane_default_cursor(struct window_pane *wp) s->default_mode = 0; screen_set_cursor_style(c, &s->default_cstyle, &s->default_mode); } + +int +window_pane_mode(struct window_pane *wp) +{ + if (TAILQ_FIRST(&wp->modes) != NULL) { + if (TAILQ_FIRST(&wp->modes)->mode == &window_copy_mode) + return (WINDOW_PANE_COPY_MODE); + if (TAILQ_FIRST(&wp->modes)->mode == &window_view_mode) + return (WINDOW_PANE_VIEW_MODE); + } + return (WINDOW_PANE_NO_MODE); +}