aboutsummaryrefslogtreecommitdiffstats
path: root/src/widgets/mode.rs
diff options
context:
space:
mode:
authorDaniel Jankowski <daniel.jankowski@rub.de>2024-02-04 11:59:28 +0100
committerDaniel Jankowski <daniel.jankowski@rub.de>2024-02-04 11:59:28 +0100
commit0f838ac8a4d6434e9b400d8c781532d9498df14c (patch)
tree0055da9a0fa06cde9b215dfd85944d8f054909f9 /src/widgets/mode.rs
parentfix: char count for multi-cell chars (diff)
downloadsl0pstatus-0f838ac8a4d6434e9b400d8c781532d9498df14c.tar.gz
sl0pstatus-0f838ac8a4d6434e9b400d8c781532d9498df14c.tar.xz
sl0pstatus-0f838ac8a4d6434e9b400d8c781532d9498df14c.zip
feat: configure default mode ref for unspecified mode
fixes #36
Diffstat (limited to 'src/widgets/mode.rs')
-rw-r--r--src/widgets/mode.rs78
1 files changed, 63 insertions, 15 deletions
diff --git a/src/widgets/mode.rs b/src/widgets/mode.rs
index 97d1239..a452c53 100644
--- a/src/widgets/mode.rs
+++ b/src/widgets/mode.rs
@@ -2,7 +2,7 @@ use std::collections::BTreeMap;
use zellij_tile::prelude::InputMode;
-use crate::{render::FormattedPart, config::ZellijState};
+use crate::{config::ZellijState, render::FormattedPart};
use super::widget::Widget;
@@ -22,6 +22,7 @@ pub struct ModeWidget {
move_format: Vec<FormattedPart>,
prompt_format: Vec<FormattedPart>,
tmux_format: Vec<FormattedPart>,
+ default_to_mode: Option<String>,
}
impl ModeWidget {
@@ -33,69 +34,71 @@ impl ModeWidget {
let locked_format = match config.get("mode_locked") {
Some(form) => FormattedPart::multiple_from_format_string(form),
- None => normal_format.clone(),
+ None => vec![],
};
let resize_format = match config.get("mode_resize") {
Some(form) => FormattedPart::multiple_from_format_string(form),
- None => normal_format.clone(),
+ None => vec![],
};
let pane_format = match config.get("mode_pane") {
Some(form) => FormattedPart::multiple_from_format_string(form),
- None => normal_format.clone(),
+ None => vec![],
};
let tab_format = match config.get("mode_tab") {
Some(form) => FormattedPart::multiple_from_format_string(form),
- None => normal_format.clone(),
+ None => vec![],
};
let scroll_format = match config.get("mode_scroll") {
Some(form) => FormattedPart::multiple_from_format_string(form),
- None => normal_format.clone(),
+ None => vec![],
};
let enter_search_format = match config.get("mode_enter_search") {
Some(form) => FormattedPart::multiple_from_format_string(form),
- None => normal_format.clone(),
+ None => vec![],
};
let search_format = match config.get("mode_search") {
Some(form) => FormattedPart::multiple_from_format_string(form),
- None => normal_format.clone(),
+ None => vec![],
};
let rename_tab_format = match config.get("mode_rename_tab") {
Some(form) => FormattedPart::multiple_from_format_string(form),
- None => normal_format.clone(),
+ None => vec![],
};
let rename_pane_format = match config.get("mode_rename_pane") {
Some(form) => FormattedPart::multiple_from_format_string(form),
- None => normal_format.clone(),
+ None => vec![],
};
let session_format = match config.get("mode_session") {
Some(form) => FormattedPart::multiple_from_format_string(form),
- None => normal_format.clone(),
+ None => vec![],
};
let move_format = match config.get("mode_move") {
Some(form) => FormattedPart::multiple_from_format_string(form),
- None => normal_format.clone(),
+ None => vec![],
};
let prompt_format = match config.get("mode_prompt") {
Some(form) => FormattedPart::multiple_from_format_string(form),
- None => normal_format.clone(),
+ None => vec![],
};
let tmux_format = match config.get("mode_tmux") {
Some(form) => FormattedPart::multiple_from_format_string(form),
- None => normal_format.clone(),
+ None => vec![],
};
+ let default_to_mode = config.get("mode_default_to_mode").map(|s| s.to_string());
+
Self {
normal_format,
locked_format,
@@ -111,6 +114,7 @@ impl ModeWidget {
move_format,
prompt_format,
tmux_format,
+ default_to_mode,
}
}
}
@@ -139,7 +143,7 @@ impl Widget for ModeWidget {
}
impl ModeWidget {
- fn select_format(&self, mode: InputMode) -> &Vec<FormattedPart> {
+ fn get_format_by_mode(&self, mode: InputMode) -> &Vec<FormattedPart> {
match mode {
InputMode::Normal => &self.normal_format,
InputMode::Locked => &self.locked_format,
@@ -157,4 +161,48 @@ impl ModeWidget {
InputMode::Tmux => &self.tmux_format,
}
}
+
+ fn select_format(&self, mode: InputMode) -> &Vec<FormattedPart> {
+ let output = self.get_format_by_mode(mode);
+
+ if output.is_empty() {
+ return match self.default_to_mode {
+ Some(ref mode) => match map_string_to_mode(mode) {
+ Some(mode) => {
+ let out = self.get_format_by_mode(mode);
+
+ if out.is_empty() {
+ return &self.normal_format;
+ }
+
+ return out;
+ }
+ None => &self.normal_format,
+ },
+ None => &self.normal_format,
+ };
+ }
+
+ output
+ }
+}
+
+fn map_string_to_mode(s: &str) -> Option<InputMode> {
+ match s {
+ "normal" => Some(InputMode::Normal),
+ "locked" => Some(InputMode::Locked),
+ "resize" => Some(InputMode::Resize),
+ "pane" => Some(InputMode::Pane),
+ "tab" => Some(InputMode::Tab),
+ "scroll" => Some(InputMode::Scroll),
+ "enter_search" => Some(InputMode::EnterSearch),
+ "search" => Some(InputMode::Search),
+ "rename_tab" => Some(InputMode::RenameTab),
+ "rename_pane" => Some(InputMode::RenamePane),
+ "session" => Some(InputMode::Session),
+ "move" => Some(InputMode::Move),
+ "prompt" => Some(InputMode::Prompt),
+ "tmux" => Some(InputMode::Tmux),
+ _ => None,
+ }
}