Do not consider a selection present if it is empty, from Michael Grant
authornicm <nicm@openbsd.org>
Thu, 21 Mar 2024 11:26:28 +0000 (11:26 +0000)
committernicm <nicm@openbsd.org>
Thu, 21 Mar 2024 11:26:28 +0000 (11:26 +0000)
(GitHub issue 3869). Also a typo fix from GitHub issue 3877.

usr.bin/tmux/cmd-detach-client.c
usr.bin/tmux/screen.c
usr.bin/tmux/window-copy.c

index 5b190e5..ed4d3f3 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-detach-client.c,v 1.36 2021/08/21 10:22:38 nicm Exp $ */
+/* $OpenBSD: cmd-detach-client.c,v 1.37 2024/03/21 11:26:28 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -59,6 +59,7 @@ cmd_detach_client_exec(struct cmd *self, struct cmdq_item *item)
 {
        struct args             *args = cmd_get_args(self);
        struct cmd_find_state   *source = cmdq_get_source(item);
+       struct client           *c = cmdq_get_client(item);
        struct client           *tc = cmdq_get_target_client(item), *loop;
        struct session          *s;
        enum msgtype             msgtype;
@@ -101,9 +102,13 @@ cmd_detach_client_exec(struct cmd *self, struct cmdq_item *item)
                return (CMD_RETURN_NORMAL);
        }
 
-       if (cmd != NULL)
+       if (cmd != NULL) {
+               if (c == NULL || c->session == NULL) {
+                       cmdq_error(item, "must be attached for -E");
+                       return (CMD_RETURN_ERROR);
+               }
                server_client_exec(tc, cmd);
-       else
+       else
                server_client_detach(tc, msgtype);
        return (CMD_RETURN_STOP);
 }
index b70ed6e..ff73a8c 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: screen.c,v 1.84 2023/12/27 20:17:13 nicm Exp $ */
+/* $OpenBSD: screen.c,v 1.85 2024/03/21 11:26:28 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -384,7 +384,7 @@ screen_resize_y(struct screen *s, u_int sy, int eat_empty, u_int *cy)
 
                /*
                 * Try to pull as much as possible out of scrolled history, if
-                * is is enabled.
+                * it is enabled.
                 */
                available = gd->hscrolled;
                if (gd->flags & GRID_HISTORY && available > 0) {
index 2dd9942..913f351 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: window-copy.c,v 1.345 2023/11/02 10:38:14 nicm Exp $ */
+/* $OpenBSD: window-copy.c,v 1.346 2024/03/21 11:26:28 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -795,16 +795,24 @@ window_copy_formats(struct window_mode_entry *wme, struct format_tree *ft)
        format_add(ft, "copy_cursor_x", "%d", data->cx);
        format_add(ft, "copy_cursor_y", "%d", data->cy);
 
-       format_add(ft, "selection_present", "%d", data->screen.sel != NULL);
        if (data->screen.sel != NULL) {
                format_add(ft, "selection_start_x", "%d", data->selx);
                format_add(ft, "selection_start_y", "%d", data->sely);
                format_add(ft, "selection_end_x", "%d", data->endselx);
                format_add(ft, "selection_end_y", "%d", data->endsely);
-               format_add(ft, "selection_active", "%d",
-                   data->cursordrag != CURSORDRAG_NONE);
-       } else
-               format_add(ft, "selection_active", "%d", 0);
+
+               if (data->cursordrag != CURSORDRAG_NONE)
+                       format_add(ft, "selection_active", "1");
+               else
+                       format_add(ft, "selection_active", "0");
+               if (data->endselx != data->selx && data->endsely != data->sely)
+                       format_add(ft, "selection_present", "1");
+               else
+                       format_add(ft, "selection_present", "0");
+       } else {
+               format_add(ft, "selection_active", "0");
+               format_add(ft, "selection_present", "0");
+       }
 
        format_add(ft, "search_present", "%d", data->searchmark != NULL);
        format_add_cb(ft, "search_match", window_copy_search_match_cb);