Fix moving windows to nonexistent indexes when renumber-windows is
authornicm <nicm@openbsd.org>
Tue, 21 Apr 2015 21:24:49 +0000 (21:24 +0000)
committernicm <nicm@openbsd.org>
Tue, 21 Apr 2015 21:24:49 +0000 (21:24 +0000)
off. From Thomas Adam, reported by Daniel Levai and Theo Buehler.

usr.bin/tmux/cmd-move-window.c
usr.bin/tmux/server-fn.c

index c453f5a..dd80a64 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-move-window.c,v 1.18 2014/10/27 22:40:29 nicm Exp $ */
+/* $OpenBSD: cmd-move-window.c,v 1.19 2015/04/21 21:24:49 nicm Exp $ */
 
 /*
  * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -51,7 +51,7 @@ cmd_move_window_exec(struct cmd *self, struct cmd_q *cmdq)
        struct session  *src, *dst, *s;
        struct winlink  *wl;
        char            *cause;
-       int              idx, kflag, dflag;
+       int              idx, kflag, dflag, sflag;
 
        if (args_has(args, 'r')) {
                s = cmd_find_session(cmdq, args_get(args, 't'), 0);
@@ -71,6 +71,7 @@ cmd_move_window_exec(struct cmd *self, struct cmd_q *cmdq)
 
        kflag = args_has(self->args, 'k');
        dflag = args_has(self->args, 'd');
+       sflag = args_has(self->args, 's');
        if (server_link_window(src, wl, dst, idx, kflag, !dflag,
            &cause) != 0) {
                cmdq_error(cmdq, "can't link window: %s", cause);
@@ -79,6 +80,15 @@ cmd_move_window_exec(struct cmd *self, struct cmd_q *cmdq)
        }
        if (self->entry == &cmd_move_window_entry)
                server_unlink_window(src, wl);
+
+       /*
+        * Renumber the winlinks in the src session only, the destination
+        * session already has the correct winlink id to us, either
+        * automatically or specified by -s.
+        */
+       if (!sflag && options_get_number(&src->options, "renumber-windows"))
+               session_renumber_windows(src);
+
        recalculate_sizes();
 
        return (CMD_RETURN_NORMAL);
index 6d8e417..808e5f3 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: server-fn.c,v 1.81 2015/04/19 21:46:52 nicm Exp $ */
+/* $OpenBSD: server-fn.c,v 1.82 2015/04/21 21:24:49 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -351,7 +351,6 @@ server_unlink_window(struct session *s, struct winlink *wl)
                server_destroy_session_group(s);
        else
                server_redraw_session_group(s);
-       session_renumber_windows(s);
 }
 
 void