Set mouse_x and mouse_y on the status line, GitHub issue 2913.
authornicm <nicm@openbsd.org>
Tue, 5 Oct 2021 17:23:13 +0000 (17:23 +0000)
committernicm <nicm@openbsd.org>
Tue, 5 Oct 2021 17:23:13 +0000 (17:23 +0000)
usr.bin/tmux/format.c

index 74ed8b0..30e5e0a 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: format.c,v 1.295 2021/10/05 12:45:02 nicm Exp $ */
+/* $OpenBSD: format.c,v 1.296 2021/10/05 17:23:13 nicm Exp $ */
 
 /*
  * Copyright (c) 2011 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -1614,11 +1614,16 @@ format_cb_mouse_x(struct format_tree *ft)
        struct window_pane      *wp;
        u_int                    x, y;
 
-       if (ft->m.valid) {
-               wp = cmd_mouse_pane(&ft->m, NULL, NULL);
-               if (wp != NULL && cmd_mouse_at(wp, &ft->m, &x, &y, 0) == 0)
-                       return (format_printf("%u", x));
+       if (!ft->m.valid)
                return (NULL);
+       wp = cmd_mouse_pane(&ft->m, NULL, NULL);
+       if (wp != NULL && cmd_mouse_at(wp, &ft->m, &x, &y, 0) == 0)
+               return (format_printf("%u", x));
+       if (ft->c != NULL && (ft->c->tty.flags & TTY_STARTED)) {
+               if (ft->m.statusat == 0 && ft->m.y < ft->m.statuslines)
+                       return (format_printf("%u", ft->m.x));
+               if (ft->m.statusat > 0 && ft->m.y >= ft->m.statusat)
+                       return (format_printf("%u", ft->m.x));
        }
        return (NULL);
 }
@@ -1628,13 +1633,18 @@ static void *
 format_cb_mouse_y(struct format_tree *ft)
 {
        struct window_pane      *wp;
-       u_int                    x, y;
+       u_int                    x, y, top;
 
-       if (ft->m.valid) {
-               wp = cmd_mouse_pane(&ft->m, NULL, NULL);
-               if (wp != NULL && cmd_mouse_at(wp, &ft->m, &x, &y, 0) == 0)
-                       return (format_printf("%u", y));
+       if (!ft->m.valid)
                return (NULL);
+       wp = cmd_mouse_pane(&ft->m, NULL, NULL);
+       if (wp != NULL && cmd_mouse_at(wp, &ft->m, &x, &y, 0) == 0)
+               return (format_printf("%u", y));
+       if (ft->c != NULL && (ft->c->tty.flags & TTY_STARTED)) {
+               if (ft->m.statusat == 0 && ft->m.y < ft->m.statuslines)
+                       return (format_printf("%u", ft->m.y));
+               if (ft->m.statusat > 0 && ft->m.y >= ft->m.statusat)
+                       return (format_printf("%u", ft->m.y - ft->m.statusat));
        }
        return (NULL);
 }