4 * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
15 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
16 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 #include <sys/types.h>
24 * Enter copy or clock mode.
27 static enum cmd_retval
cmd_copy_mode_exec(struct cmd
*, struct cmdq_item
*);
29 const struct cmd_entry cmd_copy_mode_entry
= {
33 .args
= { "eHMs:t:uq", 0, 0, NULL
},
34 .usage
= "[-eHMuq] [-s src-pane] " CMD_TARGET_PANE_USAGE
,
36 .source
= { 's', CMD_FIND_PANE
, 0 },
37 .target
= { 't', CMD_FIND_PANE
, 0 },
39 .flags
= CMD_AFTERHOOK
,
40 .exec
= cmd_copy_mode_exec
43 const struct cmd_entry cmd_clock_mode_entry
= {
47 .args
= { "t:", 0, 0, NULL
},
48 .usage
= CMD_TARGET_PANE_USAGE
,
50 .target
= { 't', CMD_FIND_PANE
, 0 },
52 .flags
= CMD_AFTERHOOK
,
53 .exec
= cmd_copy_mode_exec
56 static enum cmd_retval
57 cmd_copy_mode_exec(struct cmd
*self
, struct cmdq_item
*item
)
59 struct args
*args
= cmd_get_args(self
);
60 struct key_event
*event
= cmdq_get_event(item
);
61 struct cmd_find_state
*source
= cmdq_get_source(item
);
62 struct cmd_find_state
*target
= cmdq_get_target(item
);
63 struct client
*c
= cmdq_get_client(item
);
65 struct window_pane
*wp
= target
->wp
, *swp
;
67 if (args_has(args
, 'q')) {
68 window_pane_reset_mode_all(wp
);
69 return (CMD_RETURN_NORMAL
);
72 if (args_has(args
, 'M')) {
73 if ((wp
= cmd_mouse_pane(&event
->m
, &s
, NULL
)) == NULL
)
74 return (CMD_RETURN_NORMAL
);
75 if (c
== NULL
|| c
->session
!= s
)
76 return (CMD_RETURN_NORMAL
);
79 if (cmd_get_entry(self
) == &cmd_clock_mode_entry
) {
80 window_pane_set_mode(wp
, NULL
, &window_clock_mode
, NULL
, NULL
);
81 return (CMD_RETURN_NORMAL
);
84 if (args_has(args
, 's'))
88 if (!window_pane_set_mode(wp
, swp
, &window_copy_mode
, NULL
, args
)) {
89 if (args_has(args
, 'M'))
90 window_copy_start_drag(c
, &event
->m
);
92 if (args_has(args
, 'u'))
93 window_copy_pageup(wp
, 0);
95 return (CMD_RETURN_NORMAL
);