1*af11b61dSnicm /* $OpenBSD: cmd-choose-tree.c,v 1.52 2024/10/04 19:16:13 nicm Exp $ */ 2e001d847Snicm 3e001d847Snicm /* 4e001d847Snicm * Copyright (c) 2012 Thomas Adam <thomas@xteddy.org> 5e001d847Snicm * 6e001d847Snicm * Permission to use, copy, modify, and distribute this software for any 7e001d847Snicm * purpose with or without fee is hereby granted, provided that the above 8e001d847Snicm * copyright notice and this permission notice appear in all copies. 9e001d847Snicm * 10e001d847Snicm * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11e001d847Snicm * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12e001d847Snicm * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13e001d847Snicm * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14e001d847Snicm * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER 15e001d847Snicm * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING 16e001d847Snicm * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17e001d847Snicm */ 18e001d847Snicm 19e001d847Snicm #include <sys/types.h> 20e001d847Snicm 21e001d847Snicm #include "tmux.h" 22e001d847Snicm 23e001d847Snicm /* 24a42faf7dSnicm * Enter a mode. 25e001d847Snicm */ 26e001d847Snicm 27d8b32369Snicm static enum args_parse_type cmd_choose_tree_args_parse(struct args *args, 28d8b32369Snicm u_int idx, char **cause); 29d8b32369Snicm static enum cmd_retval cmd_choose_tree_exec(struct cmd *, 30d8b32369Snicm struct cmdq_item *); 31e001d847Snicm 32e001d847Snicm const struct cmd_entry cmd_choose_tree_entry = { 33c057646bSnicm .name = "choose-tree", 34c057646bSnicm .alias = NULL, 35c057646bSnicm 36*af11b61dSnicm .args = { "F:f:GK:NO:rst:wyZ", 0, 1, cmd_choose_tree_args_parse }, 37438eed14Snicm .usage = "[-GNrswZ] [-F format] [-f filter] [-K key-format] " 38438eed14Snicm "[-O sort-order] " CMD_TARGET_PANE_USAGE " [template]", 39c057646bSnicm 40a42faf7dSnicm .target = { 't', CMD_FIND_PANE, 0 }, 418d471e80Snicm 428d471e80Snicm .flags = 0, 43c057646bSnicm .exec = cmd_choose_tree_exec 44e001d847Snicm }; 45e001d847Snicm 46a42faf7dSnicm const struct cmd_entry cmd_choose_client_entry = { 47a42faf7dSnicm .name = "choose-client", 48c057646bSnicm .alias = NULL, 49c057646bSnicm 50*af11b61dSnicm .args = { "F:f:K:NO:rt:yZ", 0, 1, cmd_choose_tree_args_parse }, 51438eed14Snicm .usage = "[-NrZ] [-F format] [-f filter] [-K key-format] " 52438eed14Snicm "[-O sort-order] " CMD_TARGET_PANE_USAGE " [template]", 53c057646bSnicm 54a42faf7dSnicm .target = { 't', CMD_FIND_PANE, 0 }, 558d471e80Snicm 568d471e80Snicm .flags = 0, 57c057646bSnicm .exec = cmd_choose_tree_exec 58e001d847Snicm }; 59e001d847Snicm 60a42faf7dSnicm const struct cmd_entry cmd_choose_buffer_entry = { 61a42faf7dSnicm .name = "choose-buffer", 62c057646bSnicm .alias = NULL, 63c057646bSnicm 64*af11b61dSnicm .args = { "F:f:K:NO:rt:yZ", 0, 1, cmd_choose_tree_args_parse }, 65438eed14Snicm .usage = "[-NrZ] [-F format] [-f filter] [-K key-format] " 66438eed14Snicm "[-O sort-order] " CMD_TARGET_PANE_USAGE " [template]", 67c057646bSnicm 68a42faf7dSnicm .target = { 't', CMD_FIND_PANE, 0 }, 698d471e80Snicm 708d471e80Snicm .flags = 0, 71c057646bSnicm .exec = cmd_choose_tree_exec 72e001d847Snicm }; 73e001d847Snicm 7467c16a7cSnicm const struct cmd_entry cmd_customize_mode_entry = { 7567c16a7cSnicm .name = "customize-mode", 7667c16a7cSnicm .alias = NULL, 7767c16a7cSnicm 78*af11b61dSnicm .args = { "F:f:Nt:yZ", 0, 0, NULL }, 7967c16a7cSnicm .usage = "[-NZ] [-F format] [-f filter] " CMD_TARGET_PANE_USAGE, 8067c16a7cSnicm 8167c16a7cSnicm .target = { 't', CMD_FIND_PANE, 0 }, 8267c16a7cSnicm 8367c16a7cSnicm .flags = 0, 8467c16a7cSnicm .exec = cmd_choose_tree_exec 8567c16a7cSnicm }; 8667c16a7cSnicm 87d8b32369Snicm static enum args_parse_type 88d8b32369Snicm cmd_choose_tree_args_parse(__unused struct args *args, __unused u_int idx, 89d8b32369Snicm __unused char **cause) 90d8b32369Snicm { 91d8b32369Snicm return (ARGS_PARSE_COMMANDS_OR_STRING); 92d8b32369Snicm } 93d8b32369Snicm 94dc1f0f5fSnicm static enum cmd_retval 9568e0a7f2Snicm cmd_choose_tree_exec(struct cmd *self, struct cmdq_item *item) 96e001d847Snicm { 9790d7ba38Snicm struct args *args = cmd_get_args(self); 98040343aeSnicm struct cmd_find_state *target = cmdq_get_target(item); 99040343aeSnicm struct window_pane *wp = target->wp; 100a42faf7dSnicm const struct window_mode *mode; 101e001d847Snicm 10290d7ba38Snicm if (cmd_get_entry(self) == &cmd_choose_buffer_entry) { 103e5d942bbSnicm if (paste_is_empty()) 104a224d0d3Snicm return (CMD_RETURN_NORMAL); 105a42faf7dSnicm mode = &window_buffer_mode; 10690d7ba38Snicm } else if (cmd_get_entry(self) == &cmd_choose_client_entry) { 107a42faf7dSnicm if (server_client_how_many() == 0) 108a42faf7dSnicm return (CMD_RETURN_NORMAL); 109a42faf7dSnicm mode = &window_client_mode; 11067c16a7cSnicm } else if (cmd_get_entry(self) == &cmd_customize_mode_entry) 11167c16a7cSnicm mode = &window_customize_mode; 11267c16a7cSnicm else 113a42faf7dSnicm mode = &window_tree_mode; 114e001d847Snicm 115040343aeSnicm window_pane_set_mode(wp, NULL, mode, target, args); 116a224d0d3Snicm return (CMD_RETURN_NORMAL); 117e001d847Snicm } 118