tmux_interface/commands/buffers/
set_buffer_macro.rs

1/// Set the contents of the specified buffer to data.
2///
3/// # Manual
4///
5/// tmux ^3.2:
6/// ```text
7/// set-buffer [-aw] [-b buffer-name] [-t target-client] [-n new-buffer-name] data
8/// (alias: setb)
9/// ```
10///
11/// tmux ^2.0:
12/// ```text
13/// set-buffer [-a] [-b buffer-name] [-n new-buffer-name] data
14/// (alias: setb)
15/// ```
16///
17/// tmux ^1.5:
18/// ```text
19/// set-buffer [-b buffer-index] data
20/// (alias: setb)
21/// ```
22///
23/// tmux ^0.8:
24/// ```text
25/// set-buffer [-b buffer-index] [-t target-session] data
26/// (alias: setb)
27/// ```
28#[macro_export]
29macro_rules! set_buffer {
30    // `[-a]`
31    (@cmd ($cmd:expr) -a, $($tail:tt)*) => {{
32        $crate::set_buffer!(@cmd ({
33            $cmd.append()
34        }) $($tail)*)
35    }};
36    // `[-w]`
37    (@cmd ($cmd:expr) -w, $($tail:tt)*) => {{
38        $crate::set_buffer!(@cmd ({
39            $cmd.send_to_clipboard()
40        }) $($tail)*)
41    }};
42    // `[-b buffer-name]`
43    // `[-b buffer-index]`
44    (@cmd ($cmd:expr) -b $buffer:expr, $($tail:tt)*) => {{
45        $crate::set_buffer!(@cmd ({
46            #[cfg(feature = "tmux_2_0")]
47            {
48                $cmd.buffer_name($buffer)
49            }
50            #[cfg(all(feature = "tmux_0_8", not(feature = "tmux_2_0")))]
51            {
52                $cmd.buffer_index($buffer)
53            }
54        }) $($tail)*)
55    }};
56    // `[-t target-client]`
57    (@cmd ($cmd:expr) -t $target_client:expr, $($tail:tt)*) => {{
58        $crate::set_buffer!(@cmd ({
59            $cmd.target_client($target_client)
60        }) $($tail)*)
61    }};
62    // `[-n new-buffer-name]`
63    (@cmd ($cmd:expr) -n $new_buffer_name:expr, $($tail:tt)*) => {{
64        $crate::set_buffer!(@cmd ({
65            $cmd.new_buffer_name($new_buffer_name)
66        }) $($tail)*)
67    }};
68    // `[-t target-session]`
69    (@cmd ($cmd:expr) -t $target_session:expr, $($tail:tt)*) => {{
70        $crate::set_buffer!(@cmd ({
71            $cmd.target_session($target_session)
72        }) $($tail)*)
73    }};
74    // `data`
75    (@cmd ($cmd:expr) $data:expr, $($tail:tt)*) => {{
76        $crate::set_buffer!(@cmd ({
77            $cmd.data($data)
78        }) $($tail)*)
79    }};
80    //(@cmd ($cmd:expr) -$unknown:tt, $($tail:tt)*) => {{
81        //::std::compile_error!("unknown flag, option or parameter: {}", $unknown);
82    //}};
83    (@cmd ($cmd:expr)) => {{
84        $cmd
85    }};
86    () => {{
87        $crate::SetBuffer::new()
88    }};
89    (($cmd:expr), $($tail:tt)*) => {{
90        $crate::set_buffer!(@cmd ($cmd) $($tail)*,)
91    }};
92    ($($tail:tt)*) => {{
93        $crate::set_buffer!(@cmd ({ $crate::SetBuffer::new() }) $($tail)*,)
94    }};
95}
96
97#[test]
98fn set_buffer_macro() {
99    use std::borrow::Cow;
100
101    // Set the contents of the specified buffer to data.
102    //
103    // # Manual
104    //
105    // tmux ^3.2:
106    // ```text
107    // set-buffer [-aw] [-b buffer-name] [-t target-client] [-n new-buffer-name] data
108    // (alias: setb)
109    // ```
110    //
111    //
112    // tmux ^2.0:
113    // ```text
114    // set-buffer [-a] [-b buffer-name] [-n new-buffer-name] data
115    // (alias: setb)
116    // ```
117    //
118    // tmux ^1.5:
119    // ```text
120    // set-buffer [-b buffer-index] data
121    // (alias: setb)
122    // ```
123    //
124    // tmux ^0.8:
125    // ```text
126    // set-buffer [-b buffer-index] [-t target-session] data
127    // (alias: setb)
128    // ```
129    let set_buffer = set_buffer!();
130    #[cfg(feature = "tmux_2_0")]
131    let set_buffer = set_buffer!((set_buffer), -a);
132    #[cfg(feature = "tmux_3_2")]
133    let set_buffer = set_buffer!((set_buffer), -w);
134    #[cfg(feature = "tmux_2_0")]
135    let set_buffer = set_buffer!((set_buffer), -b "1");
136    #[cfg(feature = "tmux_3_2")]
137    let set_buffer = set_buffer!((set_buffer), -t "2");
138    #[cfg(feature = "tmux_2_0")]
139    let set_buffer = set_buffer!((set_buffer), -n "3");
140    #[cfg(all(feature = "tmux_0_8", not(feature = "tmux_2_0")))]
141    let set_buffer = set_buffer!((set_buffer), -b "4");
142    #[cfg(all(feature = "tmux_0_8", not(feature = "tmux_1_5")))]
143    let set_buffer = set_buffer!((set_buffer), -t "5");
144    #[cfg(feature = "tmux_0_8")]
145    let set_buffer = set_buffer!((set_buffer), "6");
146
147    #[cfg(not(feature = "cmd_alias"))]
148    let cmd = "set-buffer";
149    #[cfg(feature = "cmd_alias")]
150    let cmd = "setb";
151
152    let mut s = Vec::new();
153    s.push(cmd);
154    #[cfg(feature = "tmux_2_0")]
155    s.push("-a");
156    #[cfg(feature = "tmux_3_2")]
157    s.push("-w");
158    #[cfg(feature = "tmux_2_0")]
159    s.extend_from_slice(&["-b", "1"]);
160    #[cfg(feature = "tmux_3_2")]
161    s.extend_from_slice(&["-t", "2"]);
162    #[cfg(feature = "tmux_2_0")]
163    s.extend_from_slice(&["-n", "3"]);
164    #[cfg(all(feature = "tmux_0_8", not(feature = "tmux_2_0")))]
165    s.extend_from_slice(&["-b", "4"]);
166    #[cfg(all(feature = "tmux_0_8", not(feature = "tmux_1_5")))]
167    s.extend_from_slice(&["-t", "5"]);
168    #[cfg(feature = "tmux_0_8")]
169    s.push("6");
170    let s: Vec<Cow<str>> = s.into_iter().map(|a| a.into()).collect();
171
172    let set_buffer = set_buffer.build().to_vec();
173
174    assert_eq!(set_buffer, s);
175}