summaryrefslogtreecommitdiffstats
path: root/src/key_command/impl_from_str.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/key_command/impl_from_str.rs')
-rw-r--r--src/key_command/impl_from_str.rs26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/key_command/impl_from_str.rs b/src/key_command/impl_from_str.rs
index 325003f..79a7164 100644
--- a/src/key_command/impl_from_str.rs
+++ b/src/key_command/impl_from_str.rs
@@ -3,6 +3,8 @@ use std::path;
use crate::commands::case_sensitivity::SetType;
use crate::commands::quit::QuitAction;
use crate::commands::select::SelectOption;
+use crate::commands::stdout::PostProcessor;
+use crate::commands::sub_process::SubprocessCallMode;
use crate::config::clean::app::display::line_mode::LineMode;
use crate::config::clean::app::display::line_number::LineNumberStyle;
use crate::config::clean::app::display::new_tab::NewTabMode;
@@ -470,11 +472,22 @@ impl std::str::FromStr for Command {
format!("{}: {}", arg, e),
)),
}
- } else if command == CMD_SUBPROCESS_FOREGROUND || command == CMD_SUBPROCESS_BACKGROUND {
+ } else if command == CMD_SUBPROCESS_INTERACTIVE
+ || command == CMD_SUBPROCESS_SPAWN
+ || command == CMD_SUBPROCESS_CAPTURE
+ {
match shell_words::split(arg) {
Ok(s) if !s.is_empty() => Ok(Self::SubProcess {
words: s,
- spawn: command == "spawn",
+ mode: match command {
+ CMD_SUBPROCESS_CAPTURE => SubprocessCallMode::Capture,
+ CMD_SUBPROCESS_SPAWN => SubprocessCallMode::Spawn,
+ CMD_SUBPROCESS_INTERACTIVE => SubprocessCallMode::Interactive,
+ c => Err(AppError::new(
+ AppErrorKind::InternalError,
+ format!("Joshuto internal error: command {} unexpected in sub-process handling", c),
+ ))?
+ }
}),
Ok(_) => Err(AppError::new(
AppErrorKind::InvalidParameters,
@@ -485,6 +498,15 @@ impl std::str::FromStr for Command {
format!("{}: {}", arg, e),
)),
}
+ } else if command == CMD_STDOUT_POST_PROCESS {
+ if let Some(processor) = PostProcessor::from_str(arg) {
+ Ok(Self::StdOutPostProcess { processor })
+ } else {
+ Err(AppError::new(
+ AppErrorKind::InvalidParameters,
+ format!("{} is not a valid argument for stdout post-processing", arg),
+ ))
+ }
} else if command == CMD_SORT {
match arg {
"reverse" => Ok(Self::SortReverse),