From d033b0f36d02a7a677b6bf0c86e0f70ab9da7a15 Mon Sep 17 00:00:00 2001 From: Jeevitha Kannan K S Date: Fri, 8 Nov 2024 00:39:18 +0530 Subject: [PATCH] feat: Add `--skip-confirmation` flag (#834) * feat: Add --skip-confirmation flag * add `--skip-confirmation` to the manpage --------- Co-authored-by: Adam Perkowski --- man/linutil.1 | 4 ++++ tui/src/main.rs | 13 ++++++++++++- tui/src/state.rs | 27 +++++++++++++++++++-------- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/man/linutil.1 b/man/linutil.1 index a85bee96..5150b351 100644 --- a/man/linutil.1 +++ b/man/linutil.1 @@ -32,6 +32,10 @@ Possible values: .br Defaults to \fIdefault\fR. +.TP +\fB\-y\fR, \fB\-\-skip\-confirmation\fR +Skip confirmation prompt before executing commands. + .TP \fB\-\-override\-validation\fR Show all available entries, disregarding compatibility checks. (\fBUNSAFE\fR) diff --git a/tui/src/main.rs b/tui/src/main.rs index 428e6b5b..d8f7d0d1 100644 --- a/tui/src/main.rs +++ b/tui/src/main.rs @@ -34,6 +34,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, @@ -45,7 +51,12 @@ struct Args { fn main() -> io::Result<()> { let args = Args::parse(); - let mut state = AppState::new(args.theme, args.override_validation, args.size_bypass); + let mut state = AppState::new( + args.theme, + args.override_validation, + args.size_bypass, + args.skip_confirmation, + ); stdout().execute(EnterAlternateScreen)?; enable_raw_mode()?; diff --git a/tui/src/state.rs b/tui/src/state.rs index 008d110b..a164e174 100644 --- a/tui/src/state.rs +++ b/tui/src/state.rs @@ -61,6 +61,7 @@ pub struct AppState { #[cfg(feature = "tips")] tip: String, size_bypass: bool, + skip_confirmation: bool, } pub enum Focus { @@ -85,7 +86,12 @@ enum SelectedItem { } impl AppState { - pub fn new(theme: Theme, override_validation: bool, size_bypass: bool) -> Self { + pub fn new( + theme: Theme, + override_validation: bool, + size_bypass: bool, + skip_confirmation: bool, + ) -> Self { let tabs = linutil_core::get_tabs(!override_validation); let root_id = tabs[0].tree.root().id(); @@ -103,6 +109,7 @@ impl AppState { #[cfg(feature = "tips")] tip: get_random_tip(), size_bypass, + skip_confirmation, }; state.update_items(); @@ -756,14 +763,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)); + } } SelectedItem::None => {} }