rmux_core/target_find/
metadata.rs1use super::{CommandTargetMetadata, CommandTargetSpec, TargetFindFlags, TargetFindType};
2
3#[must_use]
5pub fn command_target_metadata(command_name: &str) -> Option<CommandTargetMetadata> {
6 use TargetFindFlags as Flags;
7 use TargetFindType as Type;
8
9 match command_name {
10 "break-pane" => Some(metadata(
11 Some(spec('s', Type::Pane, Flags::NONE)),
12 Some(spec('t', Type::Window, Flags::WINDOW_INDEX)),
13 )),
14 "capture-pane" | "kill-pane" | "paste-buffer" | "pipe-pane" | "resize-pane"
15 | "respawn-pane" | "select-pane" | "send-keys" | "split-window" => {
16 Some(metadata(None, Some(spec('t', Type::Pane, Flags::NONE))))
17 }
18 "display-menu" | "display-message" | "display-popup" | "if-shell" | "show-hooks"
19 | "show-options" | "run-shell" | "source-file" => {
20 Some(metadata(None, Some(spec('t', Type::Pane, Flags::CANFAIL))))
21 }
22 "join-pane" | "move-pane" | "swap-pane" => Some(metadata(
23 Some(spec('s', Type::Pane, Flags::DEFAULT_MARKED)),
24 Some(spec('t', Type::Pane, Flags::NONE)),
25 )),
26 "kill-window" | "last-pane" | "list-panes" | "next-layout" | "previous-layout"
27 | "rename-window" | "respawn-window" | "rotate-window" | "select-layout"
28 | "select-window" => Some(metadata(None, Some(spec('t', Type::Window, Flags::NONE)))),
29 "link-window" | "move-window" => Some(metadata(
30 Some(spec('s', Type::Window, Flags::NONE)),
31 Some(spec('t', Type::Window, Flags::WINDOW_INDEX)),
32 )),
33 "new-window" => Some(metadata(
34 None,
35 Some(spec('t', Type::Window, Flags::WINDOW_INDEX)),
36 )),
37 "swap-window" => Some(metadata(
38 Some(spec('s', Type::Window, Flags::DEFAULT_MARKED)),
39 Some(spec('t', Type::Window, Flags::NONE)),
40 )),
41 "attach-session" | "display-panes" | "has-session" | "kill-session" | "last-window"
42 | "list-windows" | "next-window" | "previous-window" | "rename-session" => {
43 Some(metadata(None, Some(spec('t', Type::Session, Flags::NONE))))
44 }
45 "set-hook" => Some(metadata(None, Some(spec('t', Type::Pane, Flags::CANFAIL)))),
46 "set-environment" | "show-environment" => Some(metadata(
47 None,
48 Some(spec('t', Type::Session, Flags::CANFAIL)),
49 )),
50 "switch-client" => Some(metadata(
51 None,
52 Some(spec('t', Type::Session, Flags::PREFER_UNATTACHED)),
53 )),
54 "set-option" => Some(metadata(
55 None,
56 Some(spec('t', Type::Session, Flags::CANFAIL)),
57 )),
58 _ => None,
59 }
60}
61
62const fn metadata(
63 source: Option<CommandTargetSpec>,
64 target: Option<CommandTargetSpec>,
65) -> CommandTargetMetadata {
66 CommandTargetMetadata { source, target }
67}
68
69const fn spec(flag: char, find_type: TargetFindType, flags: TargetFindFlags) -> CommandTargetSpec {
70 CommandTargetSpec {
71 flag,
72 find_type,
73 flags,
74 }
75}