diff --git a/Cargo.toml b/Cargo.toml index e89a113..7927234 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "remux" -version = "0.1.1" +version = "0.1.2" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/error.rs b/src/error.rs index f2a1c37..e51d68a 100644 --- a/src/error.rs +++ b/src/error.rs @@ -30,8 +30,15 @@ pub fn missing_target() { exit(4); } +/// non-terminal environment prevention; code 5 pub fn not_terminal() { println!("remux: not running from a terminal"); exit(5); } +/// tried to nest while not in a session; code 6 +pub fn not_nesting() { + println!("remux: cannot use nesting flag outside a TMUX session"); + exit(6); +} + diff --git a/src/main.rs b/src/main.rs index cc2ef7c..4757ee0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,7 @@ -use std::io::{ stdout, IsTerminal }; +use std::{ + env::{ set_var, var }, + io::{ stdout, IsTerminal } +}; use pico_args::Arguments; @@ -12,9 +15,10 @@ use help::{ help, version }; static VERSION: &str = env!("CARGO_PKG_VERSION"); fn main() { + // collect args let mut args = Arguments::from_env(); - + // consume flags if args.contains(["-h", "--help"]) { help(&mut args); return; @@ -25,10 +29,20 @@ fn main() { return; } + let nesting = args.contains(["-n", "--nest"]); + let tmux_var = var("TMUX").ok(); + if nesting { + if tmux_var.is_none() { + error::not_nesting(); + } + set_var("TMUX", ""); + } + if !stdout().is_terminal() { error::not_terminal(); } let subcommand = args.subcommand().unwrap(); + // invoke subcommand function match subcommand.as_deref() { Some("h" | "help") => help(&mut args), @@ -52,5 +66,10 @@ fn main() { _ => error::no_subcommand(subcommand.unwrap()) } + + // re-set TMUX var if we unset it for nest mode + if nesting { + set_var("TMUX", tmux_var.unwrap()); + } } diff --git a/src/util.rs b/src/util.rs index 69fccbb..fa84c30 100644 --- a/src/util.rs +++ b/src/util.rs @@ -22,7 +22,7 @@ pub fn get_sessions() -> Option> { pub fn prevent_nest() { let tmux = var("TMUX").ok(); if tmux.is_some() && tmux.unwrap() != "" { - println!("Sessions should be nested with care; unset TMUX to allow."); + println!("Sessions should be nested with care; unset TMUX or use the '-n' flag to allow."); exit(1); } }