use super::*;
pub static CMD_COPY_MODE_ENTRY: cmd_entry = cmd_entry {
name: "copy-mode",
alias: None,
args: args_parse::new("deHMs:t:uq", 0, 0, None),
usage: "[-deHMuq] [-s src-pane] [-t target-pane]",
source: cmd_entry_flag::new(b's', cmd_find_type::CMD_FIND_PANE, cmd_find_flags::empty()),
target: cmd_entry_flag::new(b't', cmd_find_type::CMD_FIND_PANE, cmd_find_flags::empty()),
flags: cmd_flag::CMD_AFTERHOOK,
exec: cmd_copy_mode_exec,
};
pub static CMD_CLOCK_MODE_ENTRY: cmd_entry = cmd_entry {
name: "clock-mode",
alias: None,
args: args_parse::new("t:", 0, 0, None),
usage: "[-t target-pane]",
target: cmd_entry_flag::new(b't', cmd_find_type::CMD_FIND_PANE, cmd_find_flags::empty()),
source: cmd_entry_flag::zeroed(),
flags: cmd_flag::CMD_AFTERHOOK,
exec: cmd_copy_mode_exec,
};
unsafe fn cmd_copy_mode_exec(self_: *mut cmd, item: *mut cmdq_item) -> cmd_retval {
unsafe {
let args = cmd_get_args(self_);
let event = cmdq_get_event(item);
let source = cmdq_get_source(item);
let target = cmdq_get_target(item);
let c = cmdq_get_client(item);
let mut s = null_mut();
let wp = (*target).wp;
if args_has(args, 'q') {
window_pane_reset_mode_all(wp);
return cmd_retval::CMD_RETURN_NORMAL;
}
if args_has(args, 'M') {
let wp = cmd_mouse_pane(&raw mut (*event).m, &raw mut s, null_mut());
if wp.is_none() {
return cmd_retval::CMD_RETURN_NORMAL;
}
if c.is_null() || (*c).session != s {
return cmd_retval::CMD_RETURN_NORMAL;
}
}
if std::ptr::eq(cmd_get_entry(self_), &CMD_CLOCK_MODE_ENTRY) {
window_pane_set_mode(
wp,
null_mut(),
&raw const WINDOW_CLOCK_MODE,
null_mut(),
null_mut(),
);
return cmd_retval::CMD_RETURN_NORMAL;
}
let swp = if args_has(args, 's') {
(*source).wp
} else {
wp
};
if window_pane_set_mode(wp, swp, &raw const WINDOW_COPY_MODE, null_mut(), args) == 0
&& args_has(args, 'M')
{
window_copy_start_drag(c, &raw mut (*event).m);
}
if args_has(args, 'u') {
window_copy_pageup(wp, 0);
}
if args_has(args, 'd') {
window_copy_pagedown(wp, 0, args_has(args, 'e'));
}
cmd_retval::CMD_RETURN_NORMAL
}
}