diff --git a/Cargo.toml b/Cargo.toml index bf01359..7927234 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "remux" -version = "0.1.0" +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 20aa071..cd46081 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; @@ -10,17 +13,28 @@ mod util; use help::help; fn main() { + // collect args let mut args = Arguments::from_env(); + // consume flags if args.contains(["-h", "--help"]) { help(&mut args); 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), @@ -44,5 +58,9 @@ fn main() { _ => error::no_subcommand(subcommand.unwrap()) } + + 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); } }