ztmux 3.7.20

A Rust port of tmux — the full terminal multiplexer, server and client
Documentation
// Copyright (c) 2012 Thomas Adam <thomas@xteddy.org>
//
// Permission to use, copy, modify, and distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
// IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
// OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

use crate::*;

pub static CMD_CHOOSE_TREE_ENTRY: cmd_entry = cmd_entry {
    name: "choose-tree",
    alias: None,

    args: args_parse::new("F:f:GK:NO:rst:wZ", 0, 1, Some(cmd_choose_tree_args_parse)),
    usage: "[-GNrswZ] [-F format] [-f filter] [-K key-format] [-O sort-order] [-t target-pane] [template]",

    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::empty(),
    exec: cmd_choose_tree_exec,
};

pub static CMD_CHOOSE_CLIENT_ENTRY: cmd_entry = cmd_entry {
    name: "choose-client",
    alias: None,

    args: args_parse::new("F:f:K:NO:rt:Z", 0, 1, Some(cmd_choose_tree_args_parse)),
    usage: "[-NrZ] [-F format] [-f filter] [-K key-format] [-O sort-order] [-t target-pane] [template]",

    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::empty(),
    exec: cmd_choose_tree_exec,
};

pub static CMD_CHOOSE_BUFFER_ENTRY: cmd_entry = cmd_entry {
    name: "choose-buffer",
    alias: None,

    args: args_parse::new("F:f:K:NO:rt:Z", 0, 1, Some(cmd_choose_tree_args_parse)),
    usage: "[-NrZ] [-F format] [-f filter] [-K key-format] [-O sort-order] [-t target-pane] [template]",

    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::empty(),
    exec: cmd_choose_tree_exec,
};

pub static CMD_CUSTOMIZE_MODE_ENTRY: cmd_entry = cmd_entry {
    name: "customize-mode",
    alias: None,

    args: args_parse::new("F:f:Nt:Z", 0, 0, None),
    usage: "[-NZ] [-F format] [-f filter] [-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::empty(),
    exec: cmd_choose_tree_exec,
};

/// C `vendor/tmux/cmd-choose-tree.c:101`: `static enum args_parse_type cmd_choose_tree_args_parse(__unused struct args *args, __unused u_int idx, __unused char **cause)`
fn cmd_choose_tree_args_parse(
    _args: *mut args,
    _idx: u32,
    _cause: *mut *mut u8,
) -> args_parse_type {
    args_parse_type::ARGS_PARSE_COMMANDS_OR_STRING
}

/// C `vendor/tmux/cmd-choose-tree.c:108`: `static enum cmd_retval cmd_choose_tree_exec(struct cmd *self, struct cmdq_item *item)`
unsafe fn cmd_choose_tree_exec(self_: *mut cmd, item: *mut cmdq_item) -> cmd_retval {
    unsafe {
        let args = cmd_get_args(self_);
        let target = cmdq_get_target(item);
        let wp = (*target).wp;

        let mode = if std::ptr::eq(cmd_get_entry(self_), &CMD_CHOOSE_BUFFER_ENTRY) {
            if paste_is_empty() {
                return cmd_retval::CMD_RETURN_NORMAL;
            }
            &raw const WINDOW_BUFFER_MODE
        } else if std::ptr::eq(cmd_get_entry(self_), &CMD_CHOOSE_CLIENT_ENTRY) {
            if server_client_how_many() == 0 {
                return cmd_retval::CMD_RETURN_NORMAL;
            }
            &raw const WINDOW_CLIENT_MODE
        } else if std::ptr::eq(cmd_get_entry(self_), &CMD_CUSTOMIZE_MODE_ENTRY) {
            &raw const WINDOW_CUSTOMIZE_MODE
        } else {
            &raw const WINDOW_TREE_MODE
        };

        window_pane_set_mode(wp, null_mut(), mode, target, args);
        cmd_retval::CMD_RETURN_NORMAL
    }
}