1*8d471e80Snicm /* $OpenBSD: cmd-move-window.c,v 1.24 2015/12/14 00:31:54 nicm Exp $ */ 2311827fbSnicm 3311827fbSnicm /* 4311827fbSnicm * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net> 5311827fbSnicm * 6311827fbSnicm * Permission to use, copy, modify, and distribute this software for any 7311827fbSnicm * purpose with or without fee is hereby granted, provided that the above 8311827fbSnicm * copyright notice and this permission notice appear in all copies. 9311827fbSnicm * 10311827fbSnicm * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11311827fbSnicm * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12311827fbSnicm * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13311827fbSnicm * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14311827fbSnicm * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER 15311827fbSnicm * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING 16311827fbSnicm * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17311827fbSnicm */ 18311827fbSnicm 19311827fbSnicm #include <sys/types.h> 20311827fbSnicm 21311827fbSnicm #include <stdlib.h> 22311827fbSnicm 23311827fbSnicm #include "tmux.h" 24311827fbSnicm 25311827fbSnicm /* 26311827fbSnicm * Move a window. 27311827fbSnicm */ 28311827fbSnicm 29175d36ccSnicm enum cmd_retval cmd_move_window_exec(struct cmd *, struct cmd_q *); 30311827fbSnicm 31311827fbSnicm const struct cmd_entry cmd_move_window_entry = { 32c057646bSnicm .name = "move-window", 33c057646bSnicm .alias = "movew", 34c057646bSnicm 35c057646bSnicm .args = { "adkrs:t:", 0, 0 }, 36c057646bSnicm .usage = "[-dkr] " CMD_SRCDST_WINDOW_USAGE, 37c057646bSnicm 38*8d471e80Snicm .sflag = CMD_WINDOW, 39*8d471e80Snicm .tflag = CMD_MOVEW_R, 40*8d471e80Snicm 41*8d471e80Snicm .flags = 0, 42c057646bSnicm .exec = cmd_move_window_exec 43311827fbSnicm }; 44311827fbSnicm 45abb3f5acSnicm const struct cmd_entry cmd_link_window_entry = { 46c057646bSnicm .name = "link-window", 47c057646bSnicm .alias = "linkw", 48c057646bSnicm 49c057646bSnicm .args = { "adks:t:", 0, 0 }, 50c057646bSnicm .usage = "[-dk] " CMD_SRCDST_WINDOW_USAGE, 51c057646bSnicm 52*8d471e80Snicm .sflag = CMD_WINDOW, 53*8d471e80Snicm .tflag = CMD_WINDOW_INDEX, 54*8d471e80Snicm 55*8d471e80Snicm .flags = 0, 56c057646bSnicm .exec = cmd_move_window_exec 57abb3f5acSnicm }; 58abb3f5acSnicm 59a224d0d3Snicm enum cmd_retval 60175d36ccSnicm cmd_move_window_exec(struct cmd *self, struct cmd_q *cmdq) 61311827fbSnicm { 62ca7befccSnicm struct args *args = self->args; 633447b427Snicm struct session *src = cmdq->state.sflag.s; 643447b427Snicm struct session *dst = cmdq->state.tflag.s; 653447b427Snicm struct winlink *wl = cmdq->state.sflag.wl; 66311827fbSnicm char *cause; 673447b427Snicm int idx = cmdq->state.tflag.idx, kflag, dflag, sflag; 683447b427Snicm 693447b427Snicm kflag = args_has(self->args, 'k'); 703447b427Snicm dflag = args_has(self->args, 'd'); 71311827fbSnicm 72559d6335Snicm if (args_has(args, 'r')) { 733447b427Snicm session_renumber_windows(dst); 7453c15224Snicm recalculate_sizes(); 7553c15224Snicm 76a224d0d3Snicm return (CMD_RETURN_NORMAL); 7753c15224Snicm } 7853c15224Snicm 79ca7befccSnicm kflag = args_has(self->args, 'k'); 80ca7befccSnicm dflag = args_has(self->args, 'd'); 816df8b7e5Snicm sflag = args_has(self->args, 's'); 82fe1fa7a5Snicm 83fe1fa7a5Snicm if (args_has(self->args, 'a')) { 843447b427Snicm if ((idx = winlink_shuffle_up(dst, dst->curw)) == -1) 85fe1fa7a5Snicm return (CMD_RETURN_ERROR); 86fe1fa7a5Snicm } 87fe1fa7a5Snicm 88abb3f5acSnicm if (server_link_window(src, wl, dst, idx, kflag, !dflag, 89abb3f5acSnicm &cause) != 0) { 90abb3f5acSnicm cmdq_error(cmdq, "can't link window: %s", cause); 917d053cf9Snicm free(cause); 92a224d0d3Snicm return (CMD_RETURN_ERROR); 93311827fbSnicm } 94abb3f5acSnicm if (self->entry == &cmd_move_window_entry) 9521ced74dSnicm server_unlink_window(src, wl); 966df8b7e5Snicm 976df8b7e5Snicm /* 986df8b7e5Snicm * Renumber the winlinks in the src session only, the destination 996df8b7e5Snicm * session already has the correct winlink id to us, either 1006df8b7e5Snicm * automatically or specified by -s. 1016df8b7e5Snicm */ 102d89252e5Snicm if (!sflag && options_get_number(src->options, "renumber-windows")) 1036df8b7e5Snicm session_renumber_windows(src); 1046df8b7e5Snicm 105311827fbSnicm recalculate_sizes(); 106311827fbSnicm 107a224d0d3Snicm return (CMD_RETURN_NORMAL); 108311827fbSnicm } 109