summaryrefslogtreecommitdiffstats
path: root/src/tmux.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tmux.rs')
-rw-r--r--src/tmux.rs80
1 files changed, 15 insertions, 65 deletions
diff --git a/src/tmux.rs b/src/tmux.rs
index 88f521f..e1fa3a6 100644
--- a/src/tmux.rs
+++ b/src/tmux.rs
@@ -2,32 +2,27 @@ use std::process::Command;
use crate::Session;
+use clap::Args;
pub use error::Error;
mod error;
-#[derive(Debug)]
+#[derive(Debug, Clone, Args)]
+#[group(skip)]
pub struct Tmux {
- socket_name: String,
+ /// tmux socket-name, equivelent to `tmux -L <socket-name>`
+ #[arg(short = 'L', long = "tmux_socket", default_value = "ssh")]
+ pub socket: String,
}
impl Tmux {
const SESSION_FORMAT: &str = r##"Session(name: "#S", state: #{?session_last_attached,Attached(#{session_last_attached}),Created(#{session_created})})"##;
- pub fn new(socket_name: String) -> Self {
- Self { socket_name }
- }
-
- pub fn list(&self, name: Option<String>) -> Result<Vec<Session>, Error> {
- let filter = name
- .map(|s| vec!["-f".into(), format!("#{{==:#S,{s}}}")])
- .unwrap_or_default();
-
+ pub fn list(&self) -> Result<Vec<Session>, Error> {
let stdout = Command::new("tmux")
.arg("-L")
- .arg(&self.socket_name)
+ .arg(&self.socket)
.arg("list-sessions")
- .args(filter)
.arg("-F")
.arg(Self::SESSION_FORMAT)
.output()?
@@ -46,31 +41,13 @@ impl Tmux {
Ok(sessions)
}
-
- pub fn host(&self) -> Result<Session, Error> {
- let stdout = Command::new("tmux")
- .arg("-L")
- .arg(&self.socket_name)
- .arg("display")
- .arg("-p")
- .arg("#h")
- .output()?
- .stdout;
-
- let name = std::str::from_utf8(&stdout)?.trim().into();
-
- Ok(Session {
- state: crate::State::LocalHost,
- name,
- })
- }
}
#[cfg(test)]
mod tests {
use super::*;
- const SOCKET_NAME: &str = "test";
+ const SOCKET: &str = "test";
#[test]
fn test_tmux_list() -> Result<(), Error> {
@@ -79,52 +56,25 @@ mod tests {
for name in names.iter().cloned() {
Command::new("tmux")
.arg("-L")
- .arg(SOCKET_NAME)
+ .arg(SOCKET)
.arg("new-session")
.arg("-ds")
.arg(name)
.status()?;
}
- let tmux = Tmux::new(SOCKET_NAME.to_owned());
- let sessions: Vec<_> = tmux.list(None)?.into_iter().map(|s| s.name).collect();
-
- Command::new("tmux")
- .arg("-L")
- .arg(SOCKET_NAME)
- .arg("kill-server")
- .status()?;
-
- assert_eq!(names, sessions);
-
- Ok(())
- }
-
- #[test]
- fn test_tmux_host() -> Result<(), Error> {
- Command::new("tmux")
- .arg("-L")
- .arg(SOCKET_NAME)
- .arg("new-session")
- .arg("-d")
- .status()?;
-
- let name = hostname::get()?.to_string_lossy().into();
- let expected_session = Session {
- state: crate::State::LocalHost,
- name,
+ let tmux = Tmux {
+ socket: SOCKET.to_owned(),
};
-
- let tmux = Tmux::new(SOCKET_NAME.to_owned());
- let session = tmux.host()?;
+ let sessions: Vec<_> = tmux.list()?.into_iter().map(|s| s.name).collect();
Command::new("tmux")
.arg("-L")
- .arg(SOCKET_NAME)
+ .arg(SOCKET)
.arg("kill-server")
.status()?;
- assert_eq!(expected_session, session);
+ assert_eq!(names, sessions);
Ok(())
}