diff --git a/tui/src/main.rs b/tui/src/main.rs index 801e3b1d..48e05c9f 100644 --- a/tui/src/main.rs +++ b/tui/src/main.rs @@ -30,6 +30,12 @@ struct Args { #[arg(default_value_t = Theme::Default)] #[arg(help = "Set the theme to use in the application")] theme: Theme, + #[arg( + short = 'y', + long, + help = "Skip confirmation prompt before executing commands" + )] + skip_confirmation: bool, #[arg(long, default_value_t = false)] #[clap(help = "Show all available options, disregarding compatibility checks (UNSAFE)")] override_validation: bool, @@ -38,7 +44,7 @@ struct Args { fn main() -> io::Result<()> { let args = Args::parse(); - let mut state = AppState::new(args.theme, args.override_validation); + let mut state = AppState::new(args.theme, args.override_validation, args.skip_confirmation); stdout().execute(EnterAlternateScreen)?; enable_raw_mode()?; diff --git a/tui/src/state.rs b/tui/src/state.rs index 4e398ee7..93f147fc 100644 --- a/tui/src/state.rs +++ b/tui/src/state.rs @@ -62,6 +62,7 @@ pub struct AppState { drawable: bool, #[cfg(feature = "tips")] tip: &'static str, + skip_confirmation: bool, } pub enum Focus { @@ -79,7 +80,7 @@ pub struct ListEntry { } impl AppState { - pub fn new(theme: Theme, override_validation: bool) -> Self { + pub fn new(theme: Theme, override_validation: bool, skip_confirmation: bool) -> Self { let (temp_dir, tabs) = linutil_core::get_tabs(!override_validation); let root_id = tabs[0].tree.root().id(); @@ -97,6 +98,7 @@ impl AppState { drawable: false, #[cfg(feature = "tips")] tip: get_random_tip(), + skip_confirmation, }; state.update_items(); @@ -681,14 +683,18 @@ impl AppState { } } - let cmd_names = self - .selected_commands - .iter() - .map(|node| node.name.as_str()) - .collect::>(); + if self.skip_confirmation { + self.handle_confirm_command(); + } else { + let cmd_names = self + .selected_commands + .iter() + .map(|node| node.name.as_str()) + .collect::>(); - let prompt = ConfirmPrompt::new(&cmd_names[..]); - self.focus = Focus::ConfirmationPrompt(Float::new(Box::new(prompt), 40, 40)); + let prompt = ConfirmPrompt::new(&cmd_names[..]); + self.focus = Focus::ConfirmationPrompt(Float::new(Box::new(prompt), 40, 40)); + } } else { self.go_to_selected_dir(); }