mirror of
https://github.com/FliegendeWurst/tmux-thumbs.git
synced 2024-11-22 12:54:59 +00:00
Check tmux version before pane zooming
This commit is contained in:
parent
86f08f42eb
commit
c4ce368904
@ -56,6 +56,7 @@ pub struct Swapper<'a> {
|
|||||||
thumbs_pane_id: Option<String>,
|
thumbs_pane_id: Option<String>,
|
||||||
content: Option<String>,
|
content: Option<String>,
|
||||||
signal: String,
|
signal: String,
|
||||||
|
version: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Swapper<'a> {
|
impl<'a> Swapper<'a> {
|
||||||
@ -70,6 +71,7 @@ impl<'a> Swapper<'a> {
|
|||||||
.duration_since(UNIX_EPOCH)
|
.duration_since(UNIX_EPOCH)
|
||||||
.expect("Time went backwards");
|
.expect("Time went backwards");
|
||||||
let signal = format!("thumbs-finished-{}", since_the_epoch.as_secs());
|
let signal = format!("thumbs-finished-{}", since_the_epoch.as_secs());
|
||||||
|
let version = f32::MAX;
|
||||||
|
|
||||||
Swapper {
|
Swapper {
|
||||||
executor,
|
executor,
|
||||||
@ -84,6 +86,24 @@ impl<'a> Swapper<'a> {
|
|||||||
thumbs_pane_id: None,
|
thumbs_pane_id: None,
|
||||||
content: None,
|
content: None,
|
||||||
signal,
|
signal,
|
||||||
|
version,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn retrieve_version(&mut self) {
|
||||||
|
let verions_command = vec!["tmux", "-V"];
|
||||||
|
|
||||||
|
let output = self
|
||||||
|
.executor
|
||||||
|
.execute(verions_command.iter().map(|arg| arg.to_string()).collect());
|
||||||
|
|
||||||
|
let regexp = Regex::new(r"\d{1,3}\.\d{1,3}").unwrap();
|
||||||
|
let mat = regexp.find(&output);
|
||||||
|
|
||||||
|
// If we are not able to parse the version, just assume f32::MAX. This cover tmux, compiled
|
||||||
|
// from the source code.
|
||||||
|
if let Some(version) = mat {
|
||||||
|
self.version = version.as_str().parse::<f32>().expect("Unable to parse tmux version");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,15 +210,19 @@ impl<'a> Swapper<'a> {
|
|||||||
"".to_string()
|
"".to_string()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// TODO: Confirm this 4.0 value
|
||||||
|
let zoom = if self.version >= 4.0 { "-Z" } else { "" };
|
||||||
|
|
||||||
// NOTE: For debugging add echo $PWD && sleep 5 after tee
|
// NOTE: For debugging add echo $PWD && sleep 5 after tee
|
||||||
let pane_command = format!(
|
let pane_command = format!(
|
||||||
"tmux capture-pane -t {} -p{} | {}/target/release/thumbs -f '%U:%H' -t {} {}; tmux swap-pane -t {} -Z; tmux wait-for -S {}",
|
"tmux capture-pane -t {} -p{} | {}/target/release/thumbs -f '%U:%H' -t {} {}; tmux swap-pane -t {} {}; tmux wait-for -S {}",
|
||||||
active_pane_id,
|
active_pane_id,
|
||||||
scroll_params,
|
scroll_params,
|
||||||
self.dir,
|
self.dir,
|
||||||
TMP_FILE,
|
TMP_FILE,
|
||||||
args.join(" "),
|
args.join(" "),
|
||||||
active_pane_id,
|
active_pane_id,
|
||||||
|
zoom,
|
||||||
self.signal
|
self.signal
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -221,6 +245,9 @@ impl<'a> Swapper<'a> {
|
|||||||
let active_pane_id = self.active_pane_id.as_mut().unwrap().clone();
|
let active_pane_id = self.active_pane_id.as_mut().unwrap().clone();
|
||||||
let thumbs_pane_id = self.thumbs_pane_id.as_mut().unwrap().clone();
|
let thumbs_pane_id = self.thumbs_pane_id.as_mut().unwrap().clone();
|
||||||
|
|
||||||
|
// TODO: Confirm this 4.0 value
|
||||||
|
let zoom = if self.version >= 4.0 { "-Z" } else { "" };
|
||||||
|
|
||||||
let swap_command = vec![
|
let swap_command = vec![
|
||||||
"tmux",
|
"tmux",
|
||||||
"swap-pane",
|
"swap-pane",
|
||||||
@ -229,9 +256,13 @@ impl<'a> Swapper<'a> {
|
|||||||
active_pane_id.as_str(),
|
active_pane_id.as_str(),
|
||||||
"-t",
|
"-t",
|
||||||
thumbs_pane_id.as_str(),
|
thumbs_pane_id.as_str(),
|
||||||
"-Z", // fix zoom
|
zoom,
|
||||||
];
|
];
|
||||||
let params = swap_command.iter().map(|arg| arg.to_string()).collect();
|
let params = swap_command
|
||||||
|
.iter()
|
||||||
|
.filter(|&s| !s.is_empty())
|
||||||
|
.map(|arg| arg.to_string())
|
||||||
|
.collect();
|
||||||
|
|
||||||
self.executor.execute(params);
|
self.executor.execute(params);
|
||||||
}
|
}
|
||||||
@ -402,6 +433,34 @@ mod tests {
|
|||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
swapper.version = 3.0;
|
||||||
|
swapper.capture_active_pane();
|
||||||
|
swapper.execute_thumbs();
|
||||||
|
swapper.swap_panes();
|
||||||
|
|
||||||
|
let expectation = vec!["tmux", "swap-pane", "-d", "-s", "%98", "-t", "%100", ""];
|
||||||
|
|
||||||
|
assert_eq!(executor.last_executed().unwrap(), expectation);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn swap_panes_zoom() {
|
||||||
|
let last_command_outputs = vec![
|
||||||
|
"".to_string(),
|
||||||
|
"%100".to_string(),
|
||||||
|
"".to_string(),
|
||||||
|
"%106:100:24:1:nope\n%98:100:24:1:active\n%107:100:24:1:nope\n".to_string(),
|
||||||
|
];
|
||||||
|
let mut executor = TestShell::new(last_command_outputs);
|
||||||
|
let mut swapper = Swapper::new(
|
||||||
|
Box::new(&mut executor),
|
||||||
|
"".to_string(),
|
||||||
|
"".to_string(),
|
||||||
|
"".to_string(),
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
|
||||||
|
swapper.version = 4.0; // Or the default MAX value.
|
||||||
swapper.capture_active_pane();
|
swapper.capture_active_pane();
|
||||||
swapper.execute_thumbs();
|
swapper.execute_thumbs();
|
||||||
swapper.swap_panes();
|
swapper.swap_panes();
|
||||||
@ -503,6 +562,7 @@ fn main() -> std::io::Result<()> {
|
|||||||
osc52,
|
osc52,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
swapper.retrieve_version();
|
||||||
swapper.capture_active_pane();
|
swapper.capture_active_pane();
|
||||||
swapper.execute_thumbs();
|
swapper.execute_thumbs();
|
||||||
swapper.swap_panes();
|
swapper.swap_panes();
|
||||||
@ -510,5 +570,6 @@ fn main() -> std::io::Result<()> {
|
|||||||
swapper.retrieve_content();
|
swapper.retrieve_content();
|
||||||
swapper.destroy_content();
|
swapper.destroy_content();
|
||||||
swapper.execute_command();
|
swapper.execute_command();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user