1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
use crate::commands::constants::*;
use crate::TmuxCommand;
use std::borrow::Cow;
pub type FindW<'a> = FindWindow<'a>;
/// Search for the fnmatch(3) pattern `match-string` in window names,
/// titles, and visible content (but not history)
///
/// # Manual
///
/// tmux ^3.0:
/// ```text
/// find-window [-rCNTZ] [-t target-pane] match-string
/// (alias: findw)
///
/// tmux ^2.6:
/// ```text
/// find-window [-CNT] [-t target-pane] match-string
/// (alias: findw)
///
/// tmux ^1.7:
/// ```text
/// find-window [-CNT] [-F format] [-t target-pane] match-string
/// (alias: findw)
///
/// tmux ^0.8:
/// ```text
/// find-window [-t target-pane] match-string
/// (alias: findw)
/// ```
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
pub struct FindWindow<'a> {
/// `[-r]` - regular expression
#[cfg(feature = "tmux_3_0")]
pub regex: bool,
/// `[-C]` - match only visible window contents
#[cfg(feature = "tmux_1_7")]
pub only_visible: bool,
/// `[-N]` - match only the window name
#[cfg(feature = "tmux_1_7")]
pub only_name: bool,
/// `[-T]` - match only the window title
#[cfg(feature = "tmux_1_7")]
pub only_title: bool,
/// `[-Z]` - zoom the pane
#[cfg(feature = "tmux_3_0")]
pub zoom: bool,
/// `[-t target-pane]` - target-pane
#[cfg(feature = "tmux_0_8")]
pub target_pane: Option<Cow<'a, str>>,
}
impl<'a> FindWindow<'a> {
pub fn new() -> Self {
Default::default()
}
/// `[-r]` - regular expression
#[cfg(feature = "tmux_3_0")]
pub fn regex(mut self) -> Self {
self.regex = true;
self
}
/// `[-C]` - match only visible window contents
#[cfg(feature = "tmux_1_7")]
pub fn only_visible(mut self) -> Self {
self.only_visible = true;
self
}
/// `[-N]` - match only the window name
#[cfg(feature = "tmux_1_7")]
pub fn only_name(mut self) -> Self {
self.only_name = true;
self
}
/// `[-T]` - match only the window title
#[cfg(feature = "tmux_1_7")]
pub fn only_title(mut self) -> Self {
self.only_title = true;
self
}
/// `[-Z]` - zoom the pane
#[cfg(feature = "tmux_3_0")]
pub fn zoom(mut self) -> Self {
self.zoom = true;
self
}
/// `[-t target-pane]` - target-pane
#[cfg(feature = "tmux_0_8")]
pub fn target_pane<S: Into<Cow<'a, str>>>(mut self, target_pane: S) -> Self {
self.target_pane = Some(target_pane.into());
self
}
pub fn build(self) -> TmuxCommand<'a> {
let mut cmd = TmuxCommand::new();
cmd.name(FIND_WINDOW);
// `[-r]` - regular expression
#[cfg(feature = "tmux_3_0")]
if self.regex {
cmd.push_flag(R_LOWERCASE_KEY);
}
// `[-C]` - match only visible window contents
#[cfg(feature = "tmux_1_7")]
if self.only_visible {
cmd.push_flag(C_UPPERCASE_KEY);
}
// `[-N]` - match only the window name
#[cfg(feature = "tmux_1_7")]
if self.only_name {
cmd.push_flag(N_UPPERCASE_KEY);
}
// `[-T]` - match only the window title
#[cfg(feature = "tmux_1_7")]
if self.only_title {
cmd.push_flag(T_UPPERCASE_KEY);
}
// `[-Z]` - zoom the pane
#[cfg(feature = "tmux_3_0")]
if self.zoom {
cmd.push_flag(Z_UPPERCASE_KEY);
}
// `[-t target-pane]` - target-pane
#[cfg(feature = "tmux_0_8")]
if let Some(target_pane) = self.target_pane {
cmd.push_option(T_LOWERCASE_KEY, target_pane);
}
cmd
}
}