From 6c0846493e6920d49e78eba2f5ea3e4d98cc97ba Mon Sep 17 00:00:00 2001 From: Philipp Moers Date: Sun, 27 Oct 2024 00:43:53 +0200 Subject: [PATCH] Add command to set display mode --- src/commands/mod.rs | 1 + src/commands/set_display_mode.rs | 11 +++++++++++ src/constants/command_name.rs | 1 + src/types/command/impl_appcommand.rs | 1 + src/types/command/impl_appexecute.rs | 1 + src/types/command/impl_comment.rs | 1 + src/types/command/impl_completion.rs | 3 +++ src/types/command/impl_from_str.rs | 11 +++++++++++ src/types/command/mod.rs | 2 ++ 9 files changed, 32 insertions(+) create mode 100644 src/commands/set_display_mode.rs diff --git a/src/commands/mod.rs b/src/commands/mod.rs index c3d444ab9..790600eaa 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -34,6 +34,7 @@ pub mod select_fzf; pub mod select_glob; pub mod select_regex; pub mod select_string; +pub mod set_display_mode; pub mod set_mode; pub mod show_help; pub mod show_hidden; diff --git a/src/commands/set_display_mode.rs b/src/commands/set_display_mode.rs new file mode 100644 index 000000000..9ebea9d59 --- /dev/null +++ b/src/commands/set_display_mode.rs @@ -0,0 +1,11 @@ +use crate::error::AppResult; +use crate::types::option::display::DisplayMode; +use crate::types::state::AppState; + +use super::reload; + +pub fn set_display_mode(app_state: &mut AppState, mode: DisplayMode) -> AppResult { + app_state.config.display_options.mode = mode; + reload::soft_reload_curr_tab(app_state)?; + Ok(()) +} diff --git a/src/constants/command_name.rs b/src/constants/command_name.rs index 4c3eda47e..9708814c1 100644 --- a/src/constants/command_name.rs +++ b/src/constants/command_name.rs @@ -79,6 +79,7 @@ cmd_constants![ (CMD_TOGGLE_HIDDEN, "toggle_hidden"), (CMD_TOGGLE_VISUAL, "toggle_visual"), (CMD_SWITCH_LINE_NUMBERS, "line_nums"), + (CMD_SET_DISPLAY_MODE, "set_display_mode"), (CMD_SET_LINEMODE, "linemode"), (CMD_TOUCH_FILE, "touch"), (CMD_HELP, "help"), diff --git a/src/types/command/impl_appcommand.rs b/src/types/command/impl_appcommand.rs index 94f3c73d6..2c5b34dbd 100644 --- a/src/types/command/impl_appcommand.rs +++ b/src/types/command/impl_appcommand.rs @@ -102,6 +102,7 @@ impl AppCommand for Command { } => CMD_SUBPROCESS_CAPTURE, Self::StdOutPostProcess { .. } => CMD_STDOUT_POST_PROCESS, Self::SwitchLineNums(_) => CMD_SWITCH_LINE_NUMBERS, + Self::SetDisplayMode(_) => CMD_SET_DISPLAY_MODE, Self::SetLineMode(_) => CMD_SET_LINEMODE, Self::SignalSuspend => CMD_SIGNAL_SUSPEND, diff --git a/src/types/command/impl_appexecute.rs b/src/types/command/impl_appexecute.rs index 2fbc3b08b..9e94526fb 100644 --- a/src/types/command/impl_appexecute.rs +++ b/src/types/command/impl_appexecute.rs @@ -150,6 +150,7 @@ impl AppExecute for Command { sort_method, reverse, } => sort::set_sort(app_state, *sort_method, *reverse), + Self::SetDisplayMode(mode) => set_display_mode::set_display_mode(app_state, *mode), Self::SetLineMode(mode) => linemode::set_linemode(app_state, *mode), Self::SortReverse => sort::toggle_reverse(app_state), Self::SignalSuspend => signal::signal_suspend(backend), diff --git a/src/types/command/impl_comment.rs b/src/types/command/impl_comment.rs index 2f6c83472..8b850e6f7 100644 --- a/src/types/command/impl_comment.rs +++ b/src/types/command/impl_comment.rs @@ -9,6 +9,7 @@ impl CommandComment for Command { // These comments are displayed at the help page fn comment(&self) -> &'static str { match self { + Self::SetDisplayMode(_) => "Change the display mode", Self::SetLineMode(_) => "Show File's metadata in line", Self::Escape => "Escape from visual mode (cancel)", Self::BulkRename => "Bulk rename", diff --git a/src/types/command/impl_completion.rs b/src/types/command/impl_completion.rs index 85dbdf0a7..8e9dd24e2 100644 --- a/src/types/command/impl_completion.rs +++ b/src/types/command/impl_completion.rs @@ -45,6 +45,9 @@ impl CommandCompletion for Command { "insensitive", "sensitive", ]), + CMD_SET_DISPLAY_MODE => CompletionKind::Custom(vec![ + "default", "minimal", "hsplit", + ]), CMD_SET_LINEMODE => CompletionKind::Custom(vec![ "all", "group", "mtime", "none", "perm", "size", "user", ]), diff --git a/src/types/command/impl_from_str.rs b/src/types/command/impl_from_str.rs index 36cb28aab..be8073b92 100644 --- a/src/types/command/impl_from_str.rs +++ b/src/types/command/impl_from_str.rs @@ -8,6 +8,7 @@ use crate::commands::sub_process::SubprocessCallMode; use crate::error::{AppError, AppErrorKind}; use crate::tab::NewTabMode; use crate::types::io::FileOperationOptions; +use crate::types::option::display::DisplayMode; use crate::types::option::line_mode::{LineMode, LineNumberStyle}; use crate::types::option::search::CaseSensitivity; use crate::types::option::sort::SortMethod; @@ -551,6 +552,16 @@ impl std::str::FromStr for Command { } } } + } else if command == CMD_SET_DISPLAY_MODE { + match arg { + "default" => Ok(Self::SetDisplayMode(DisplayMode::Default)), + "minimal" => Ok(Self::SetDisplayMode(DisplayMode::Minimal)), + "hsplit" => Ok(Self::SetDisplayMode(DisplayMode::HSplit)), + _ => Err(AppError::new( + AppErrorKind::InvalidParameters, + format!("{}: Unknown option '{}'", command, arg), + )) + } } else if command == CMD_SET_LINEMODE { Ok(Self::SetLineMode(LineMode::from_string(arg)?)) } else if command == CMD_TAB_SWITCH { diff --git a/src/types/command/mod.rs b/src/types/command/mod.rs index 19ac8d7d4..3110b8320 100644 --- a/src/types/command/mod.rs +++ b/src/types/command/mod.rs @@ -16,6 +16,7 @@ use crate::commands::stdout::PostProcessor; use crate::commands::sub_process::SubprocessCallMode; use crate::tab::NewTabMode; use crate::types::io::FileOperationOptions; +use crate::types::option::display::DisplayMode; use crate::types::option::line_mode::{LineMode, LineNumberStyle}; use crate::types::option::search::CaseSensitivity; use crate::types::option::sort::SortMethod; @@ -73,6 +74,7 @@ pub enum Command { CursorMovePageMiddle, CursorMovePageEnd, + SetDisplayMode(DisplayMode), SetLineMode(LineMode), ParentCursorMoveUp {