Preserve marked pane when renumbering windows.
authornicm <nicm@openbsd.org>
Mon, 17 Oct 2022 10:59:42 +0000 (10:59 +0000)
committernicm <nicm@openbsd.org>
Mon, 17 Oct 2022 10:59:42 +0000 (10:59 +0000)
usr.bin/tmux/session.c

index 4b1b546..ade3011 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: session.c,v 1.92 2022/02/22 13:31:18 nicm Exp $ */
+/* $OpenBSD: session.c,v 1.93 2022/10/17 10:59:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -710,7 +710,7 @@ session_renumber_windows(struct session *s)
        struct winlink          *wl, *wl1, *wl_new;
        struct winlinks          old_wins;
        struct winlink_stack     old_lastw;
-       int                      new_idx, new_curw_idx;
+       int                      new_idx, new_curw_idx, marked_idx = -1;
 
        /* Save and replace old window list. */
        memcpy(&old_wins, &s->windows, sizeof old_wins);
@@ -727,6 +727,8 @@ session_renumber_windows(struct session *s)
                winlink_set_window(wl_new, wl->window);
                wl_new->flags |= wl->flags & WINLINK_ALERTFLAGS;
 
+               if (wl == marked_pane.wl)
+                       marked_idx = wl_new->idx;
                if (wl == s->curw)
                        new_curw_idx = wl_new->idx;
 
@@ -743,6 +745,11 @@ session_renumber_windows(struct session *s)
        }
 
        /* Set the current window. */
+       if (marked_idx != -1) {
+               marked_pane.wl = winlink_find_by_index(&s->windows, marked_idx);
+               if (marked_pane.wl == NULL)
+                       server_clear_marked();
+       }
        s->curw = winlink_find_by_index(&s->windows, new_curw_idx);
 
        /* Free the old winlinks (reducing window references too). */