The branch, hooks has been updated
       via  5abfa3ebc3e4e02484ea044a5cc7b2b163e39964 (commit)
      from  047fa29dd04623c1ebc892aa7db426839e26ecdd (commit)

- Log -----------------------------------------------------------------
commit 5abfa3ebc3e4e02484ea044a5cc7b2b163e39964
Author: Thomas Adam <tho...@xteddy.org>
Commit: Thomas Adam <tho...@xteddy.org>

    movew:  Use prepare flags and introduce RENUM flag
    
    move-window uses -t to mean two different things, depending on whether
    winlinks are being renumbered or not.
    
    Therefore, introduce CMD_PREP_SESSION_RENUM_T, to help with this.
---
 cmd-move-window.c |   40 ++++++++++++++++------------------------
 cmd.c             |    8 ++++++++
 tmux.h            |    3 ++-
 3 files changed, 26 insertions(+), 25 deletions(-)

diff --git a/cmd-move-window.c b/cmd-move-window.c
index 75a4c0c..fb29298 100644
--- a/cmd-move-window.c
+++ b/cmd-move-window.c
@@ -32,7 +32,7 @@ const struct cmd_entry cmd_move_window_entry = {
        "move-window", "movew",
        "dkrs:t:", 0, 0,
        "[-dkr] " CMD_SRCDST_WINDOW_USAGE,
-       0,
+       CMD_PREP_WINDOW_S|CMD_PREP_SESSION_RENUM_T|CMD_PREP_INDEX_T,
        cmd_move_window_exec
 };
 
@@ -40,7 +40,7 @@ const struct cmd_entry cmd_link_window_entry = {
        "link-window", "linkw",
        "dks:t:", 0, 0,
        "[-dk] " CMD_SRCDST_WINDOW_USAGE,
-       0,
+       CMD_PREP_WINDOW_S|CMD_PREP_INDEX_T,
        cmd_move_window_exec
 };
 
@@ -48,37 +48,29 @@ enum cmd_retval
 cmd_move_window_exec(struct cmd *self, struct cmd_q *cmdq)
 {
        struct args     *args = self->args;
-       struct session  *src, *dst, *s;
-       struct winlink  *wl;
+       struct session  *src = cmdq->state.sflag.s;
+       struct session  *dst = cmdq->state.tflag.s;
+       struct winlink  *wl = cmdq->state.sflag.wl;
        char            *cause;
-       int              idx, kflag, dflag;
-
-       if ((wl = cmd_find_window(cmdq, args_get(args, 's'), &src)) == NULL)
-               return (CMD_RETURN_ERROR);
-       if ((idx = cmd_find_index(cmdq, args_get(args, 't'), &dst)) == -2)
-               return (CMD_RETURN_ERROR);
+       int              idx = cmdq->state.tflag.idx, kflag, dflag;
 
        kflag = args_has(self->args, 'k');
        dflag = args_has(self->args, 'd');
-       if (server_link_window(src, wl, dst, idx, kflag, !dflag,
-           &cause) != 0) {
+
+       if (args_has(args, 'r')) {
+               session_renumber_windows(dst);
+               recalculate_sizes();
+
+               return (CMD_RETURN_NORMAL);
+       }
+
+       if (server_link_window(src, wl, dst, idx, kflag, !dflag, &cause) != 0) {
                cmdq_error(cmdq, "can't link window: %s", cause);
                free(cause);
                return (CMD_RETURN_ERROR);
        }
-       if (self->entry == &cmd_move_window_entry) {
-               if (args_has(args, 'r')) {
-                       s = cmd_find_session(cmdq, args_get(args, 't'), 0);
-                       if (s == NULL)
-                               return (CMD_RETURN_ERROR);
-
-                       session_renumber_windows(s);
-                       recalculate_sizes();
-
-                       return (CMD_RETURN_NORMAL);
-               }
+       if (self->entry == &cmd_move_window_entry)
                server_unlink_window(src, wl);
-       }
        recalculate_sizes();
 
        return (CMD_RETURN_NORMAL);
diff --git a/cmd.c b/cmd.c
index f59b018..14850dc 100644
--- a/cmd.c
+++ b/cmd.c
@@ -411,6 +411,14 @@ cmd_set_state_tflag(struct cmd *cmd, struct cmd_q *cmdq)
                        }
                }
                break;
+       case CMD_PREP_SESSION_RENUM_T|CMD_PREP_INDEX_T:
+               state->tflag.s = cmd_find_session(cmdq, tflag, prefer);
+               if (state->tflag.s == NULL) {
+                       state->tflag.idx = cmd_find_index(cmdq, tflag, 
&state->tflag.s);
+                       if (state->tflag.idx == -2)
+                               return (-1);
+               }
+               break;
        case CMD_PREP_SESSION_T:
                state->tflag.s = cmd_find_session(cmdq, tflag, prefer);
                if (state->tflag.s == NULL)
diff --git a/tmux.h b/tmux.h
index 03098e7..47b3665 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1465,12 +1465,13 @@ struct cmd_entry {
 #define CMD_PREP_INDEX_S 0x1000
 #define CMD_PREP_CANFAIL 0x2000
 #define CMD_PREP_PREFERUNATTACHED 0x4000
+#define CMD_PREP_SESSION_RENUM_T 0x8000
        int              flags;
 
        enum cmd_retval  (*exec)(struct cmd *, struct cmd_q *);
 };
 #define CMD_PREP_ALL_T (CMD_PREP_SESSION_T|CMD_PREP_WINDOW_T|CMD_PREP_PANE_T| \
-    CMD_PREP_INDEX_T)
+    CMD_PREP_INDEX_T|CMD_PREP_SESSION_RENUM_T)
 #define CMD_PREP_ALL_S (CMD_PREP_SESSION_S|CMD_PREP_WINDOW_S|CMD_PREP_PANE_S| \
     CMD_PREP_INDEX_S)
 


-----------------------------------------------------------------------

Summary of changes:
 cmd-move-window.c |   40 ++++++++++++++++------------------------
 cmd.c             |    8 ++++++++
 tmux.h            |    3 ++-
 3 files changed, 26 insertions(+), 25 deletions(-)


hooks/post-receive
-- 
tmux

------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
_______________________________________________
tmux-cvs mailing list
tmux-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to