Compare commits

...

11 commits

6 changed files with 49 additions and 18 deletions

View file

@ -14,7 +14,7 @@ path = "src/main.rs"
[dependencies] [dependencies]
pico-args = { version = "0.5.0", features = [ "combined-flags", "eq-separator" ] } pico-args = { version = "0.5.0", features = [ "combined-flags", "eq-separator" ] }
termion = "2.0.1" termion = "3.0.0"
tmux_interface = "0.3.2" tmux_interface = "0.3.2"
[profile.release] [profile.release]

View file

@ -1,6 +1,5 @@
//! globally available tmux commands. //! globally available tmux commands.
use std::{ use std::{
env::var,
ffi::OsString, ffi::OsString,
process::exit process::exit
}; };
@ -12,7 +11,12 @@ use tmux_interface::{
commands commands
}; };
use crate::{ error, flag, util }; use crate::{
env::{ self, env_var },
error,
flag,
util
};
pub fn attach(pargs: &mut Arguments) { pub fn attach(pargs: &mut Arguments) {
// don't allow unflagged nests // don't allow unflagged nests
@ -20,7 +24,7 @@ pub fn attach(pargs: &mut Arguments) {
// consume optional flags // consume optional flags
let read_only = pargs.contains(flag::READ_ONLY); let read_only = pargs.contains(flag::READ_ONLY);
let detach_other = pargs.contains(flag::DETACHED); let detach_other = pargs.contains(flag::DETACH);
let args = pargs.clone().finish(); let args = pargs.clone().finish();
let target: String; let target: String;
@ -119,12 +123,12 @@ pub fn list() {
} }
// get attached session symbol // get attached session symbol
let attach_symbol = var("REMUX_ATTACH_SYMBOL").unwrap_or("*".to_string()); let attach_symbol = env_var(env::ATTACH_SYMBOL);
// pretty print session list // pretty print session list
println!("sessions:"); println!("sessions:");
for session in sessions.into_iter() { for session in sessions.into_iter() {
let group = session.group.unwrap_or("[untitled]".to_string()); let group = session.name.unwrap_or("[untitled]".to_string());
let id = session.id.unwrap(); let id = session.id.unwrap();
let attached = session.attached.unwrap_or(0) > 0; let attached = session.attached.unwrap_or(0) > 0;
@ -145,9 +149,13 @@ pub fn new(pargs: &mut Arguments) {
// don't allow unflagged nesting // don't allow unflagged nesting
util::prevent_nest(); util::prevent_nest();
// get optional flag // get optional flags
let detached = pargs.contains(flag::DETACH);
let target_dir: Result<String, Error> = pargs.value_from_str(flag::TARGET); let target_dir: Result<String, Error> = pargs.value_from_str(flag::TARGET);
// get environment variables
let window_name = env_var(env::NEW_WINDOW_NAME);
// get target or fallback // get target or fallback
let args = pargs.clone().finish(); let args = pargs.clone().finish();
let title: String; let title: String;
@ -162,12 +170,20 @@ pub fn new(pargs: &mut Arguments) {
} }
let mut new = commands::NewSession::new(); let mut new = commands::NewSession::new();
new = new.group_name(title); new = new.session_name(title);
if let Some(command) = command { new.shell_command = Some(command.to_string_lossy()); } if let Some(command) = command { new.shell_command = Some(command.to_string_lossy()); }
if detached { new.detached = true; }
if let Ok(target_dir) = target_dir { new = new.start_directory(target_dir); } if let Ok(target_dir) = target_dir { new = new.start_directory(target_dir); }
Tmux::new() let mut tmux = Tmux::new().add_command(new);
.add_command(new)
.output().ok(); // rename window if var not empty
if !window_name.is_empty() {
let auto_name = commands::RenameWindow::new()
.new_name(window_name);
tmux = tmux.add_command(auto_name);
}
tmux.output().ok();
} }

13
src/env.rs Normal file
View file

@ -0,0 +1,13 @@
use std::env::var;
pub type EnvVar = (&'static str, &'static str);
pub static ATTACH_SYMBOL: EnvVar = ("REMUX_ATTACH_SYMBOL", "*");
pub static NEW_WINDOW_NAME: EnvVar = ("REMUX_NEW_WINDOW", "");
pub fn env_var(envvar: EnvVar) -> String {
var(envvar.0).unwrap_or(envvar.1.to_string())
}
pub fn tmux() -> bool { !var("TMUX").unwrap_or("".to_string()).is_empty() }

View file

@ -1,7 +1,7 @@
type Flag = [&'static str;2]; type Flag = [&'static str;2];
pub static DETACHED: Flag = ["-d", "--detached"]; pub static DETACH: Flag = ["-d", "--detach"];
pub static HELP: Flag = ["-h", "--help"]; pub static HELP: Flag = ["-h", "--help"];
pub static NEST: Flag = ["-n", "--nest"]; pub static NEST: Flag = ["-n", "--nest"];
pub static QUIET: Flag = ["-q", "--quiet"]; pub static QUIET: Flag = ["-q", "--quiet"];

View file

@ -6,6 +6,7 @@ use std::{
use pico_args::Arguments; use pico_args::Arguments;
mod command; mod command;
mod env;
mod error; mod error;
mod flag; mod flag;
mod help; mod help;

View file

@ -1,5 +1,5 @@
use std::{ use std::{
env::{ current_dir, var }, env::current_dir,
path::PathBuf, path::PathBuf,
process::exit process::exit
}; };
@ -11,7 +11,10 @@ use tmux_interface::{
variables::session::SessionsCtl variables::session::SessionsCtl
}; };
use crate::error; use crate::{
env,
error
};
/// return a Vec of all sessions or None /// return a Vec of all sessions or None
pub fn get_sessions() -> Option<Vec<Session>> { pub fn get_sessions() -> Option<Vec<Session>> {
@ -23,10 +26,9 @@ pub fn get_sessions() -> Option<Vec<Session>> {
/// show the tmux nest text if env var is not unset /// show the tmux nest text if env var is not unset
pub fn prevent_nest() { pub fn prevent_nest() {
let tmux = var("TMUX").ok(); if env::tmux() {
if tmux.is_some() && tmux.unwrap() != "" {
println!("Sessions should be nested with care; unset TMUX or use the '-n' flag to allow."); println!("Sessions should be nested with care; unset TMUX or use the '-n' flag to allow.");
exit(1); exit(6);
} }
} }
@ -35,7 +37,6 @@ pub fn session_exists<S: Into<String>>(target: S) -> bool {
let has_session = commands::HasSession::new() let has_session = commands::HasSession::new()
.target_session(target.into()); .target_session(target.into());
Tmux::new().add_command(has_session) Tmux::new().add_command(has_session)
.disable_echo()
.status() .status()
.unwrap() .unwrap()
.success() .success()