From 1b51633d4fe897dd34c3106cd2a220229c4762f5 Mon Sep 17 00:00:00 2001 From: Valerie Date: Tue, 16 Jul 2024 11:46:56 -0400 Subject: [PATCH] added search and quiet mode to 'list' command and wrote a completion function --- Cargo.toml | 2 +- bash_completion/remux | 19 +++++++++++++++++ src/command/share.rs | 47 ++++++++++++++++++++++++++----------------- src/main.rs | 4 ++-- 4 files changed, 50 insertions(+), 22 deletions(-) create mode 100644 bash_completion/remux diff --git a/Cargo.toml b/Cargo.toml index 05b7d7b..76ca8fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "remux" -version = "0.3.5" +version = "0.3.6" edition = "2021" authors = [ "Valerie Wolfe " ] description = "A friendly command shortener for tmux" diff --git a/bash_completion/remux b/bash_completion/remux new file mode 100644 index 0000000..a7b5e3d --- /dev/null +++ b/bash_completion/remux @@ -0,0 +1,19 @@ +_remux() { + local word + COMPREPLY=() + word="${COMP_WORDS[COMP_CWORD]}" + + case $COMP_CWORD in + 1) + COMPREPLY=( `compgen -W 'attach detach has help list new path switch title' -- "$word"` ) + ;; + 2) + COMPREPLY=( `compgen -W "$(remux l -q $word)"` ) + ;; + esac + + return 0 +} + +complete -F _remux remux + diff --git a/src/command/share.rs b/src/command/share.rs index edae1b3..3acec88 100644 --- a/src/command/share.rs +++ b/src/command/share.rs @@ -56,7 +56,7 @@ pub fn attach(state: &mut State) { state.nest_deinit(); } -pub fn context_action(state: &State) { +pub fn context_action(state: &mut State) { if !state.session { if let Some(repository) = &state.repository { let target = repository.name.clone(); @@ -72,7 +72,7 @@ pub fn context_action(state: &State) { } } // fallback behavior is list - list(&state); + list(state); } pub fn detach(state: &mut State) { @@ -114,10 +114,12 @@ pub fn has(state: &mut State) { exit( if success { 0 } else { 1 }); } -pub fn list(state: &State) { +pub fn list(state: &mut State) { // get session list let sessions = util::get_sessions().unwrap_or(Vec::new()); + let search = state.target(); + // handle empty case if sessions.len() == 0 { println!("no sessions"); @@ -129,25 +131,32 @@ pub fn list(state: &State) { let current_symbol = env_var(env::CURRENT_SYMBOL); // pretty print session list - println!("sessions:"); - for session in sessions.into_iter() { + if !state.flags.quiet { println!("sessions:"); } + for session in sessions { let name = session.name.unwrap_or("[untitled]".to_string()); - let id = session.id.unwrap(); - let attached = session.attached.unwrap_or(0) > 0; - let current = Some(name.clone()) == state.title; + if search.is_some() && !name.starts_with(search.as_ref().unwrap()) { continue; } - println!( - " {current} {name}{reset} ({bold}{blue}{id}{reset}) {bold}{green}{attach}{reset}", - // values - attach = if attached { attach_symbol.clone() } else { "".to_string() }, - current = if current { current_symbol.clone() } else { " ".to_string() }, - // formatting - bold = style::Bold, - blue = color::Fg(color::Blue), - green = color::Fg(color::LightGreen), - reset = style::Reset, - ); + if !state.flags.quiet { + let id = session.id.unwrap(); + + let attached = session.attached.unwrap_or(0) > 0; + let current = Some(name.clone()) == state.title; + + println!( + " {current} {name}{reset} ({bold}{blue}{id}{reset}) {bold}{green}{attach}{reset}", + // values + attach = if attached { attach_symbol.clone() } else { "".to_string() }, + current = if current { current_symbol.clone() } else { " ".to_string() }, + // formatting + bold = style::Bold, + blue = color::Fg(color::Blue), + green = color::Fg(color::LightGreen), + reset = style::Reset, + ); + } else { + print!("{name} "); + } } } diff --git a/src/main.rs b/src/main.rs index 9ff9e28..c9f29d2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -38,7 +38,7 @@ fn main() { Some("help") => help(&mut args), None - => command::share::context_action(&state), + => command::share::context_action(&mut state), Some("a" | "attach") => command::share::attach(&mut state), @@ -50,7 +50,7 @@ fn main() { => command::share::has(&mut state), Some("l" | "ls" | "list") - => command::share::list(&state), + => command::share::list(&mut state), Some("n" | "new") => command::share::new(&mut state),