From 34fd261a4f777250a0fe66652c2049f6a51d6988 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 8 Jun 2026 20:38:54 +0000 Subject: [PATCH] Add a -k flag to choose commands to kill the pane when the mode is exited (useful with floating panes). --- cmd-choose-tree.c | 16 ++++++++-------- window.c | 6 ++++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/cmd-choose-tree.c b/cmd-choose-tree.c index 186672f4..1dfb04f5 100644 --- a/cmd-choose-tree.c +++ b/cmd-choose-tree.c @@ -33,8 +33,8 @@ const struct cmd_entry cmd_choose_tree_entry = { .name = "choose-tree", .alias = NULL, - .args = { "F:f:GK:NO:rst:wyZ", 0, 1, cmd_choose_tree_args_parse }, - .usage = "[-GNrswZ] [-F format] [-f filter] [-K key-format] " + .args = { "F:f:GK:kNO:rst:wyZ", 0, 1, cmd_choose_tree_args_parse }, + .usage = "[-GkNrswZ] [-F format] [-f filter] [-K key-format] " "[-O sort-order] " CMD_TARGET_PANE_USAGE " [template]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -47,8 +47,8 @@ const struct cmd_entry cmd_choose_client_entry = { .name = "choose-client", .alias = NULL, - .args = { "F:f:K:NO:rt:yZ", 0, 1, cmd_choose_tree_args_parse }, - .usage = "[-NrZ] [-F format] [-f filter] [-K key-format] " + .args = { "F:f:K:kNO:rt:yZ", 0, 1, cmd_choose_tree_args_parse }, + .usage = "[-kNrZ] [-F format] [-f filter] [-K key-format] " "[-O sort-order] " CMD_TARGET_PANE_USAGE " [template]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -61,8 +61,8 @@ const struct cmd_entry cmd_choose_buffer_entry = { .name = "choose-buffer", .alias = NULL, - .args = { "F:f:K:NO:rt:yZ", 0, 1, cmd_choose_tree_args_parse }, - .usage = "[-NrZ] [-F format] [-f filter] [-K key-format] " + .args = { "F:f:K:kNO:rt:yZ", 0, 1, cmd_choose_tree_args_parse }, + .usage = "[-kNrZ] [-F format] [-f filter] [-K key-format] " "[-O sort-order] " CMD_TARGET_PANE_USAGE " [template]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -75,8 +75,8 @@ const struct cmd_entry cmd_customize_mode_entry = { .name = "customize-mode", .alias = NULL, - .args = { "F:f:Nt:yZ", 0, 0, NULL }, - .usage = "[-NZ] [-F format] [-f filter] " CMD_TARGET_PANE_USAGE, + .args = { "F:f:kNt:yZ", 0, 0, NULL }, + .usage = "[-kNZ] [-F format] [-f filter] " CMD_TARGET_PANE_USAGE, .target = { 't', CMD_FIND_PANE, 0 }, diff --git a/window.c b/window.c index c0d9078c..ddd1d6f0 100644 --- a/window.c +++ b/window.c @@ -1213,6 +1213,7 @@ window_pane_set_mode(struct window_pane *wp, struct window_pane *swp, TAILQ_INSERT_HEAD(&wp->modes, wme, entry); wme->screen = wme->mode->init(wme, fs, args); } + wme->kill = args_has(args, 'k'); wp->screen = wme->screen; wp->flags |= (PANE_REDRAW|PANE_REDRAWSCROLLBAR|PANE_CHANGED); @@ -1230,11 +1231,13 @@ window_pane_reset_mode(struct window_pane *wp) { struct window_mode_entry *wme, *next; struct window *w = wp->window; + int kill; if (TAILQ_EMPTY(&wp->modes)) return; wme = TAILQ_FIRST(&wp->modes); + kill = wme->kill; TAILQ_REMOVE(&wp->modes, wme, entry); wme->mode->free(wme); free(wme); @@ -1257,6 +1260,9 @@ window_pane_reset_mode(struct window_pane *wp) server_redraw_window_borders(wp->window); server_status_window(wp->window); notify_pane("pane-mode-changed", wp); + + if (kill) + server_kill_pane(wp); } void