15494e770Schristos /* $OpenBSD$ */ 2698d5317Sjmmv 3698d5317Sjmmv /* 4ed4e6cd4Schristos * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> 5698d5317Sjmmv * 6698d5317Sjmmv * Permission to use, copy, modify, and distribute this software for any 7698d5317Sjmmv * purpose with or without fee is hereby granted, provided that the above 8698d5317Sjmmv * copyright notice and this permission notice appear in all copies. 9698d5317Sjmmv * 10698d5317Sjmmv * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11698d5317Sjmmv * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12698d5317Sjmmv * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13698d5317Sjmmv * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14698d5317Sjmmv * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER 15698d5317Sjmmv * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING 16698d5317Sjmmv * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17698d5317Sjmmv */ 18698d5317Sjmmv 19698d5317Sjmmv #include <sys/types.h> 20698d5317Sjmmv 21698d5317Sjmmv #include "tmux.h" 22698d5317Sjmmv 23698d5317Sjmmv /* 245494e770Schristos * Enter copy or clock mode. 25698d5317Sjmmv */ 26698d5317Sjmmv 274e179ddaSchristos static enum cmd_retval cmd_copy_mode_exec(struct cmd *, struct cmdq_item *); 28698d5317Sjmmv 29698d5317Sjmmv const struct cmd_entry cmd_copy_mode_entry = { 30ed4e6cd4Schristos .name = "copy-mode", 31ed4e6cd4Schristos .alias = NULL, 32ed4e6cd4Schristos 33*f8cf1a91Swiz .args = { "deHMs:t:uq", 0, 0, NULL }, 34*f8cf1a91Swiz .usage = "[-deHMuq] [-s src-pane] " CMD_TARGET_PANE_USAGE, 35ed4e6cd4Schristos 369fb66d81Schristos .source = { 's', CMD_FIND_PANE, 0 }, 37c9ad075bSchristos .target = { 't', CMD_FIND_PANE, 0 }, 38ed4e6cd4Schristos 394e179ddaSchristos .flags = CMD_AFTERHOOK, 40ed4e6cd4Schristos .exec = cmd_copy_mode_exec 41698d5317Sjmmv }; 42698d5317Sjmmv 435494e770Schristos const struct cmd_entry cmd_clock_mode_entry = { 44ed4e6cd4Schristos .name = "clock-mode", 45ed4e6cd4Schristos .alias = NULL, 46ed4e6cd4Schristos 476db26757Swiz .args = { "t:", 0, 0, NULL }, 48ed4e6cd4Schristos .usage = CMD_TARGET_PANE_USAGE, 49ed4e6cd4Schristos 50c9ad075bSchristos .target = { 't', CMD_FIND_PANE, 0 }, 51ed4e6cd4Schristos 524e179ddaSchristos .flags = CMD_AFTERHOOK, 53ed4e6cd4Schristos .exec = cmd_copy_mode_exec 545494e770Schristos }; 55698d5317Sjmmv 564e179ddaSchristos static enum cmd_retval 574e179ddaSchristos cmd_copy_mode_exec(struct cmd *self, struct cmdq_item *item) 58698d5317Sjmmv { 599fb66d81Schristos struct args *args = cmd_get_args(self); 609fb66d81Schristos struct key_event *event = cmdq_get_event(item); 619fb66d81Schristos struct cmd_find_state *source = cmdq_get_source(item); 629fb66d81Schristos struct cmd_find_state *target = cmdq_get_target(item); 639fb66d81Schristos struct client *c = cmdq_get_client(item); 645494e770Schristos struct session *s; 659fb66d81Schristos struct window_pane *wp = target->wp, *swp; 66698d5317Sjmmv 67aa83ff61Schristos if (args_has(args, 'q')) { 68aa83ff61Schristos window_pane_reset_mode_all(wp); 69aa83ff61Schristos return (CMD_RETURN_NORMAL); 70aa83ff61Schristos } 71aa83ff61Schristos 725494e770Schristos if (args_has(args, 'M')) { 739fb66d81Schristos if ((wp = cmd_mouse_pane(&event->m, &s, NULL)) == NULL) 745494e770Schristos return (CMD_RETURN_NORMAL); 755494e770Schristos if (c == NULL || c->session != s) 765494e770Schristos return (CMD_RETURN_NORMAL); 77ed4e6cd4Schristos } 78698d5317Sjmmv 799fb66d81Schristos if (cmd_get_entry(self) == &cmd_clock_mode_entry) { 809fb66d81Schristos window_pane_set_mode(wp, NULL, &window_clock_mode, NULL, NULL); 815494e770Schristos return (CMD_RETURN_NORMAL); 825494e770Schristos } 835494e770Schristos 849fb66d81Schristos if (args_has(args, 's')) 859fb66d81Schristos swp = source->wp; 869fb66d81Schristos else 879fb66d81Schristos swp = wp; 889fb66d81Schristos if (!window_pane_set_mode(wp, swp, &window_copy_mode, NULL, args)) { 89ef36e747Schristos if (args_has(args, 'M')) 909fb66d81Schristos window_copy_start_drag(c, &event->m); 916483eba0Schristos } 929fb66d81Schristos if (args_has(args, 'u')) 934e179ddaSchristos window_copy_pageup(wp, 0); 94*f8cf1a91Swiz if (args_has(args, 'd')) 95*f8cf1a91Swiz window_copy_pagedown(wp, 0, args_has(args, 'e')); 96698d5317Sjmmv 97928fc495Schristos return (CMD_RETURN_NORMAL); 98698d5317Sjmmv } 99