aboutsummaryrefslogtreecommitdiffstats
path: root/default-plugins
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2023-08-24 18:11:53 +0200
committerGitHub <noreply@github.com>2023-08-24 18:11:53 +0200
commit09d09759b594dc538a0e629d1778fe5107f344ac (patch)
treed185ecfa16eafdcdf42b187d1c85cee26cb71328 /default-plugins
parentdocs(changelog): session manager (diff)
downloadsl0ppij-09d09759b594dc538a0e629d1778fe5107f344ac.tar.gz
sl0ppij-09d09759b594dc538a0e629d1778fe5107f344ac.tar.xz
sl0ppij-09d09759b594dc538a0e629d1778fe5107f344ac.zip
fix(ux): various ui/ux fixes (#2722)
* force plugin render on permission request response * clear warnings * Revert "feat(ui): new status bar mode (#2619)" This reverts commit 27763d26ab83dd9f81c69c75601cbf6075f13790. * adjust status bar help * fix colors in session manager and shortcut in status-bar * adjust keybindings
Diffstat (limited to 'default-plugins')
-rw-r--r--default-plugins/compact-bar/src/main.rs2
-rw-r--r--default-plugins/session-manager/src/ui/components.rs4
-rw-r--r--default-plugins/status-bar/src/first_line.rs367
-rw-r--r--default-plugins/status-bar/src/main.rs86
-rw-r--r--default-plugins/status-bar/src/second_line.rs106
-rw-r--r--default-plugins/status-bar/src/tip/data/compact_layout.rs2
-rw-r--r--default-plugins/status-bar/src/tip/data/edit_scrollbuffer.rs2
-rw-r--r--default-plugins/status-bar/src/tip/data/floating_panes_mouse.rs2
-rw-r--r--default-plugins/status-bar/src/tip/data/quicknav.rs2
-rw-r--r--default-plugins/status-bar/src/tip/data/sync_tab.rs2
-rw-r--r--default-plugins/strider/src/main.rs2
-rw-r--r--default-plugins/tab-bar/src/main.rs2
12 files changed, 150 insertions, 429 deletions
diff --git a/default-plugins/compact-bar/src/main.rs b/default-plugins/compact-bar/src/main.rs
index 18c9f12b..a7a19bd0 100644
--- a/default-plugins/compact-bar/src/main.rs
+++ b/default-plugins/compact-bar/src/main.rs
@@ -31,7 +31,7 @@ static ARROW_SEPARATOR: &str = "";
register_plugin!(State);
impl ZellijPlugin for State {
- fn load(&mut self, configuration: BTreeMap<String, String>) {
+ fn load(&mut self, _configuration: BTreeMap<String, String>) {
set_selectable(false);
subscribe(&[
EventType::TabUpdate,
diff --git a/default-plugins/session-manager/src/ui/components.rs b/default-plugins/session-manager/src/ui/components.rs
index 6b606589..72aa2181 100644
--- a/default-plugins/session-manager/src/ui/components.rs
+++ b/default-plugins/session-manager/src/ui/components.rs
@@ -294,7 +294,7 @@ impl LineToRender {
}
pub fn make_selected(&mut self) {
self.is_selected = true;
- match self.colors.palette.gray {
+ match self.colors.palette.bg {
PaletteColor::EightBit(byte) => {
self.line = format!(
"\u{1b}[48;5;{byte}m\u{1b}[K\r\u{1b}[48;5;{byte}m{}",
@@ -303,7 +303,7 @@ impl LineToRender {
},
PaletteColor::Rgb((r, g, b)) => {
self.line = format!(
- "\u{1b}[48;2;{};{};{}m\u{1b}[K\r\u{1b}[48;5;{};{};{}m{}",
+ "\u{1b}[48;2;{};{};{}m\u{1b}[K\r\u{1b}[48;2;{};{};{}m{}",
r, g, b, r, g, b, self.line
);
},
diff --git a/default-plugins/status-bar/src/first_line.rs b/default-plugins/status-bar/src/first_line.rs
index 183aa64f..23a6d586 100644
--- a/default-plugins/status-bar/src/first_line.rs
+++ b/default-plugins/status-bar/src/first_line.rs
@@ -8,14 +8,13 @@ use crate::{
};
use crate::{ColoredElements, LinePart};
-#[derive(Debug, Clone, Copy)]
struct KeyShortcut {
mode: KeyMode,
- pub action: KeyAction,
+ action: KeyAction,
key: Option<Key>,
}
-#[derive(Debug, Clone, Copy, PartialEq)]
+#[derive(PartialEq)]
enum KeyAction {
Lock,
Pane,
@@ -28,7 +27,6 @@ enum KeyAction {
Tmux,
}
-#[derive(Debug, Clone, Copy)]
enum KeyMode {
Unselected,
UnselectedAlternate,
@@ -36,20 +34,6 @@ enum KeyMode {
Disabled,
}
-fn letter_shortcut(key: &Key, with_prefix: bool) -> String {
- if with_prefix {
- format!("{}", key)
- } else {
- match key {
- Key::F(c) => format!("{}", c),
- Key::Ctrl(c) => format!("{}", c),
- Key::Char(_) => format!("{}", key),
- Key::Alt(c) => format!("{}", c),
- _ => String::from("??"),
- }
- }
-}
-
impl KeyShortcut {
pub fn new(mode: KeyMode, action: KeyAction, key: Option<Key>) -> Self {
KeyShortcut { mode, action, key }
@@ -73,7 +57,17 @@ impl KeyShortcut {
Some(k) => k,
None => return String::from("?"),
};
- letter_shortcut(&key, with_prefix)
+ if with_prefix {
+ format!("{}", key)
+ } else {
+ match key {
+ Key::F(c) => format!("{}", c),
+ Key::Ctrl(c) => format!("{}", c),
+ Key::Char(_) => format!("{}", key),
+ Key::Alt(c) => format!("{}", c),
+ _ => String::from("??"),
+ }
+ }
}
}
@@ -202,58 +196,6 @@ fn short_mode_shortcut(
}
}
-fn short_key_indicators(
- max_len: usize,
- keys: &[KeyShortcut],
- palette: ColoredElements,
- separator: &str,
- mode_info: &ModeInfo,
- no_super: bool,
-) -> LinePart {
- let mut line_part = if no_super {
- LinePart::default()
- } else {
- superkey(palette, separator, mode_info)
- };
- let shared_super = if no_super { true } else { line_part.len > 0 };
- for ctrl_key in keys {
- let line_empty = line_part.len == 0;
- let key = short_mode_shortcut(ctrl_key, palette, separator, shared_super, line_empty);
- line_part.part = format!("{}{}", line_part.part, key.part);
- line_part.len += key.len;
- }
- if line_part.len < max_len {
- return line_part;
- }
-
- // Shortened doesn't fit, print nothing
- line_part = LinePart::default();
- line_part
-}
-
-fn full_key_indicators(
- keys: &[KeyShortcut],
- palette: ColoredElements,
- separator: &str,
- mode_info: &ModeInfo,
- no_super: bool,
-) -> LinePart {
- // Print full-width hints
- let mut line_part = if no_super {
- LinePart::default()
- } else {
- superkey(palette, separator, mode_info)
- };
- let shared_super = if no_super { true } else { line_part.len > 0 };
- for ctrl_key in keys {
- let line_empty = line_part.len == 0;
- let key = long_mode_shortcut(ctrl_key, palette, separator, shared_super, line_empty);
- line_part.part = format!("{}{}", line_part.part, key.part);
- line_part.len += key.len;
- }
- line_part
-}
-
fn key_indicators(
max_len: usize,
keys: &[KeyShortcut],
@@ -460,111 +402,6 @@ pub fn superkey(palette: ColoredElements, separator: &str, mode_info: &ModeInfo)
}
}
-fn standby_mode_shortcut_key(help: &ModeInfo) -> Key {
- let binds = &help.get_mode_keybinds();
- match help.mode {
- InputMode::Locked => to_char(action_key(
- binds,
- &[Action::SwitchToMode(InputMode::Normal)],
- )),
- _ => to_char(action_key(
- binds,
- &[Action::SwitchToMode(InputMode::Locked)],
- )),
- }
- .unwrap_or(Key::Char('?'))
-}
-
-fn standby_mode_ui_indication(
- has_shared_super: bool,
- standby_mode: &InputMode,
- standby_mode_shortcut_key: Key,
- colored_elements: ColoredElements,
- separator: &str,
-) -> LinePart {
- let mut line_part = LinePart::default();
- let standby_mode_shortcut = standby_mode_single_letter_selected(
- has_shared_super,
- standby_mode_shortcut_key,
- colored_elements,
- separator,
- );
- // standby mode text hint
- let key_shortcut = KeyShortcut::new(
- KeyMode::Unselected,
- input_mode_to_key_action(&standby_mode),
- None,
- );
- let styled_text = colored_elements
- .unselected
- .styled_text
- .paint(format!(" {} ", key_shortcut.full_text()));
- let suffix_separator = colored_elements
- .unselected
- .suffix_separator
- .paint(separator);
- let standby_mode_text = LinePart {
- part: ANSIStrings(&[styled_text, suffix_separator]).to_string(),
- len: key_shortcut.full_text().chars().count() + separator.chars().count() + 2, // 2 padding
- };
- line_part.part = format!("{}{}", line_part.part, standby_mode_shortcut.part);
- line_part.len += standby_mode_shortcut.len;
- line_part.part = format!("{}{}", line_part.part, standby_mode_text.part);
- line_part.len += standby_mode_text.len;
- line_part
-}
-
-fn standby_mode_single_letter_unselected(
- has_shared_super: bool,
- shortcut_key: Key,
- palette: ColoredElements,
- separator: &str,
-) -> LinePart {
- let prefix_separator = palette.unselected.prefix_separator.paint(separator);
- let char_shortcut = palette.unselected.char_shortcut.paint(format!(
- " {} ",
- letter_shortcut(&shortcut_key, has_shared_super)
- ));
- let suffix_separator = palette.unselected.suffix_separator.paint(separator);
- let len = prefix_separator.chars().count()
- + char_shortcut.chars().count()
- + suffix_separator.chars().count();
- LinePart {
- part: ANSIStrings(&[prefix_separator, char_shortcut, suffix_separator]).to_string(),
- len,
- }
-}
-
-fn standby_mode_single_letter_selected(
- has_shared_super: bool,
- shortcut_key: Key,
- palette: ColoredElements,
- separator: &str,
-) -> LinePart {
- let prefix_separator = palette
- .selected_standby_shortcut
- .prefix_separator
- .paint(separator);
- let char_shortcut = palette
- .selected_standby_shortcut
- .char_shortcut
- .paint(format!(
- " {} ",
- letter_shortcut(&shortcut_key, has_shared_super)
- ));
- let suffix_separator = palette
- .selected_standby_shortcut
- .suffix_separator
- .paint(separator);
- let len = prefix_separator.chars().count()
- + char_shortcut.chars().count()
- + suffix_separator.chars().count();
- LinePart {
- part: ANSIStrings(&[prefix_separator, char_shortcut, suffix_separator]).to_string(),
- len,
- }
-}
-
pub fn to_char(kv: Vec<Key>) -> Option<Key> {
let key = kv
.iter()
@@ -582,19 +419,6 @@ pub fn to_char(kv: Vec<Key>) -> Option<Key> {
key.cloned()
}
-fn input_mode_to_key_action(input_mode: &InputMode) -> KeyAction {
- match input_mode {
- InputMode::Normal | InputMode::Prompt | InputMode::Tmux => KeyAction::Lock,
- InputMode::Locked => KeyAction::Lock,
- InputMode::Pane | InputMode::RenamePane => KeyAction::Pane,
- InputMode::Tab | InputMode::RenameTab => KeyAction::Tab,
- InputMode::Resize => KeyAction::Resize,
- InputMode::Move => KeyAction::Move,
- InputMode::Scroll | InputMode::Search | InputMode::EnterSearch => KeyAction::Search,
- InputMode::Session => KeyAction::Session,
- }
-}
-
/// Get the [`KeyShortcut`] for a specific [`InputMode`].
///
/// Iterates over the contents of `shortcuts` to find the [`KeyShortcut`] with the [`KeyAction`]
@@ -625,8 +449,7 @@ fn get_key_shortcut_for_mode<'a>(
None
}
-pub fn first_line_supermode(
- standby_mode: &InputMode,
+pub fn first_line(
help: &ModeInfo,
tab_info: Option<&TabInfo>,
max_len: usize,
@@ -634,129 +457,9 @@ pub fn first_line_supermode(
) -> LinePart {
let supports_arrow_fonts = !help.capabilities.arrow_fonts;
let colored_elements = color_elements(help.style.colors, !supports_arrow_fonts);
-
- let standby_mode_shortcut_key = standby_mode_shortcut_key(&help);
-
- let mut line = superkey(colored_elements, separator, help);
- let has_shared_super = line.len == 0;
- let max_len_without_superkey = max_len.saturating_sub(line.len);
- let mut append_to_line = |line_part_to_append: LinePart| {
- line.part = format!("{}{}", line.part, line_part_to_append.part);
- line.len += line_part_to_append.len;
- };
- match help.mode {
- InputMode::Locked => {
- let standby_mode_shortcut = standby_mode_single_letter_unselected(
- has_shared_super,
- standby_mode_shortcut_key,
- colored_elements,
- separator,
- );
- append_to_line(standby_mode_shortcut);
- line
- },
- _ => {
- let mut default_keys = generate_default_keys(help);
- default_keys.remove(0); // remove locked mode which is not relevant to the supermode ui
-
- if let Some(position) = default_keys
- .iter()
- .position(|d| d.action == input_mode_to_key_action(standby_mode))
- {
- let standby_mode_ui_ribbon = standby_mode_ui_indication(
- has_shared_super,
- &standby_mode,
- standby_mode_shortcut_key,
- colored_elements,
- separator,
- );
- let first_keybinds: Vec<KeyShortcut> =
- default_keys.iter().cloned().take(position).collect();
- let second_keybinds: Vec<KeyShortcut> =
- default_keys.iter().cloned().skip(position + 1).collect();
- let first_key_indicators =
- full_key_indicators(&first_keybinds, colored_elements, separator, help, true);
- let second_key_indicators =
- full_key_indicators(&second_keybinds, colored_elements, separator, help, true);
-
- if first_key_indicators.len + standby_mode_ui_ribbon.len + second_key_indicators.len
- < max_len_without_superkey
- {
- append_to_line(first_key_indicators);
- append_to_line(standby_mode_ui_ribbon);
- append_to_line(second_key_indicators);
- } else {
- let length_of_each_half =
- max_len_without_superkey.saturating_sub(standby_mode_ui_ribbon.len) / 2;
- let first_key_indicators = short_key_indicators(
- length_of_each_half,
- &first_keybinds,
- colored_elements,
- separator,
- help,
- true,
- );
- let second_key_indicators = short_key_indicators(
- length_of_each_half,
- &second_keybinds,
- colored_elements,
- separator,
- help,
- true,
- );
- append_to_line(first_key_indicators);
- append_to_line(standby_mode_ui_ribbon);
- append_to_line(second_key_indicators);
- }
- if line.len < max_len {
- if let Some(tab_info) = tab_info {
- let remaining_space = max_len.saturating_sub(line.len);
- line.append(&swap_layout_status_and_padding(
- &tab_info,
- remaining_space,
- separator,
- colored_elements,
- help,
- ));
- }
- }
- }
- line
- },
- }
-}
-
-fn swap_layout_status_and_padding(
- tab_info: &TabInfo,
- mut remaining_space: usize,
- separator: &str,
- colored_elements: ColoredElements,
- help: &ModeInfo,
-) -> LinePart {
- let mut line = LinePart::default();
- if let Some(swap_layout_status) = swap_layout_status(
- remaining_space,
- &tab_info.active_swap_layout_name,
- tab_info.is_swap_layout_dirty,
- help,
- colored_elements,
- &help.style.colors,
- separator,
- ) {
- remaining_space -= swap_layout_status.len;
- for _ in 0..remaining_space {
- line.part
- .push_str(&ANSIStrings(&[colored_elements.superkey_prefix.paint(" ")]).to_string());
- line.len += 1;
- }
- line.append(&swap_layout_status);
- }
- line
-}
-
-fn generate_default_keys(help: &ModeInfo) -> Vec<KeyShortcut> {
let binds = &help.get_mode_keybinds();
- vec![
+ // Unselect all by default
+ let mut default_keys = vec![
KeyShortcut::new(
KeyMode::Unselected,
KeyAction::Lock,
@@ -809,20 +512,7 @@ fn generate_default_keys(help: &ModeInfo) -> Vec<KeyShortcut> {
KeyAction::Quit,
to_char(action_key(binds, &[Action::Quit])),
),
- ]
-}
-
-pub fn first_line(
- help: &ModeInfo,
- tab_info: Option<&TabInfo>,
- max_len: usize,
- separator: &str,
-) -> LinePart {
- let supports_arrow_fonts = !help.capabilities.arrow_fonts;
- let colored_elements = color_elements(help.style.colors, !supports_arrow_fonts);
- let binds = &help.get_mode_keybinds();
- // Unselect all by default
- let mut default_keys = generate_default_keys(help); // TODO: check that this still works
+ ];
if let Some(key_shortcut) = get_key_shortcut_for_mode(&mut default_keys, &help.mode) {
key_shortcut.mode = KeyMode::Selected;
@@ -849,14 +539,25 @@ pub fn first_line(
key_indicators(max_len, &default_keys, colored_elements, separator, help);
if key_indicators.len < max_len {
if let Some(tab_info) = tab_info {
- let remaining_space = max_len - key_indicators.len;
- key_indicators.append(&swap_layout_status_and_padding(
- &tab_info,
+ let mut remaining_space = max_len - key_indicators.len;
+ if let Some(swap_layout_status) = swap_layout_status(
remaining_space,
- separator,
- colored_elements,
+ &tab_info.active_swap_layout_name,
+ tab_info.is_swap_layout_dirty,
help,
- ));
+ colored_elements,
+ &help.style.colors,
+ separator,
+ ) {
+ remaining_space -= swap_layout_status.len;
+ for _ in 0..remaining_space {
+ key_indicators.part.push_str(
+ &ANSIStrings(&[colored_elements.superkey_prefix.paint(" ")]).to_string(),
+ );
+ key_indicators.len += 1;
+ }
+ key_indicators.append(&swap_layout_status);
+ }
}
}
key_indicators
diff --git a/default-plugins/status-bar/src/main.rs b/default-plugins/status-bar/src/main.rs
index d768b35e..2910d678 100644
--- a/default-plugins/status-bar/src/main.rs
+++ b/default-plugins/status-bar/src/main.rs
@@ -14,9 +14,10 @@ use zellij_tile::prelude::actions::Action;
use zellij_tile::prelude::*;
use zellij_tile_utils::{palette_match, style};
-use first_line::{first_line, first_line_supermode};
+use first_line::first_line;
use second_line::{
- floating_panes_are_visible, fullscreen_panes_to_hide, keybinds, system_clipboard_error,
+ floating_panes_are_visible, fullscreen_panes_to_hide, keybinds,
+ locked_floating_panes_are_visible, locked_fullscreen_panes_to_hide, system_clipboard_error,
text_copied_hint,
};
use tip::utils::get_cached_tip_name;
@@ -34,10 +35,6 @@ struct State {
mode_info: ModeInfo,
text_copy_destination: Option<CopyDestination>,
display_system_clipboard_failure: bool,
-
- supermode: bool,
- standby_mode: InputMode,
- current_mode: InputMode,
}
register_plugin!(State);
@@ -64,7 +61,6 @@ impl Display for LinePart {
#[derive(Clone, Copy)]
pub struct ColoredElements {
pub selected: SegmentStyle,
- pub selected_standby_shortcut: SegmentStyle,
pub unselected: SegmentStyle,
pub unselected_alternate: SegmentStyle,
pub disabled: SegmentStyle,
@@ -114,14 +110,6 @@ fn color_elements(palette: Palette, different_color_alternates: bool) -> Colored
styled_text: style!(background, palette.green).bold(),
suffix_separator: style!(palette.green, background).bold(),
},
- selected_standby_shortcut: SegmentStyle {
- prefix_separator: style!(background, palette.green),
- char_left_separator: style!(background, palette.green).bold(),
- char_shortcut: style!(palette.red, palette.green).bold(),
- char_right_separator: style!(background, palette.green).bold(),
- styled_text: style!(background, palette.green).bold(),
- suffix_separator: style!(palette.green, palette.fg).bold(),
- },
unselected: SegmentStyle {
prefix_separator: style!(background, palette.fg),
char_left_separator: style!(background, palette.fg).bold(),
@@ -158,14 +146,6 @@ fn color_elements(palette: Palette, different_color_alternates: bool) -> Colored
styled_text: style!(background, palette.green).bold(),
suffix_separator: style!(palette.green, background).bold(),
},
- selected_standby_shortcut: SegmentStyle {
- prefix_separator: style!(background, palette.green),
- char_left_separator: style!(background, palette.green).bold(),
- char_shortcut: style!(palette.red, palette.green).bold(),
- char_right_separator: style!(background, palette.green).bold(),
- styled_text: style!(background, palette.green).bold(),
- suffix_separator: style!(palette.green, palette.fg).bold(),
- },
unselected: SegmentStyle {
prefix_separator: style!(background, palette.fg),
char_left_separator: style!(background, palette.fg).bold(),
@@ -197,7 +177,7 @@ fn color_elements(palette: Palette, different_color_alternates: bool) -> Colored
}
impl ZellijPlugin for State {
- fn load(&mut self, configuration: BTreeMap<String, String>) {
+ fn load(&mut self, _configuration: BTreeMap<String, String>) {
// TODO: Should be able to choose whether to use the cache through config.
self.tip_name = get_cached_tip_name();
set_selectable(false);
@@ -208,47 +188,12 @@ impl ZellijPlugin for State {
EventType::InputReceived,
EventType::SystemClipboardFailure,
]);
- self.supermode = configuration
- .get("supermode")
- .and_then(|s| s.trim().parse().ok())
- .unwrap_or(false);
- self.standby_mode = InputMode::Pane;
- if self.supermode {
- switch_to_input_mode(&InputMode::Locked); // supermode should start locked (TODO: only
- // once per app load, let's not do this on
- // each tab loading)
- }
}
fn update(&mut self, event: Event) -> bool {
let mut should_render = false;
match event {
Event::ModeUpdate(mode_info) => {
- if self.supermode {
- // supermode is a "sticky" mode that is not Normal or Locked
- // using this configuration, we default to Locked mode in order to avoid key
- // collisions with terminal applications
- // whenever the user switches away from locked mode, we make sure to place them
- // in the standby mode
- // whenever the user switches to a mode that is not locked or normal, we set
- // that mode as the standby mode
- // whenever the user switches away from the standby mode, we palce them in
- // normal mode
- if mode_info.mode == InputMode::Normal && self.current_mode == InputMode::Locked
- {
- switch_to_input_mode(&self.standby_mode);
- } else if mode_info.mode == InputMode::Normal
- && self.current_mode == self.standby_mode
- {
- switch_to_input_mode(&InputMode::Locked);
- } else if mode_info.mode != InputMode::Locked
- && mode_info.mode != InputMode::Normal
- {
- self.standby_mode = mode_info.mode;
- }
- self.current_mode = mode_info.mode;
- }
-
if self.mode_info != mode_info {
should_render = true;
}
@@ -300,17 +245,7 @@ impl ZellijPlugin for State {
};
let active_tab = self.tabs.iter().find(|t| t.active);
- let first_line = if self.supermode {
- first_line_supermode(
- &self.standby_mode,
- &self.mode_info,
- active_tab,
- cols,
- separator,
- )
- } else {
- first_line(&self.mode_info, active_tab, cols, separator)
- };
+ let first_line = first_line(&self.mode_info, active_tab, cols, separator);
let second_line = self.second_line(cols);
let background = match self.mode_info.style.colors.theme_hue {
@@ -362,7 +297,11 @@ impl State {
} else if let Some(active_tab) = active_tab {
if active_tab.is_fullscreen_active {
match self.mode_info.mode {
- InputMode::Normal | InputMode::Locked => fullscreen_panes_to_hide(
+ InputMode::Normal => fullscreen_panes_to_hide(
+ &self.mode_info.style.colors,
+ active_tab.panes_to_hide,
+ ),
+ InputMode::Locked => locked_fullscreen_panes_to_hide(
&self.mode_info.style.colors,
active_tab.panes_to_hide,
),
@@ -370,8 +309,9 @@ impl State {
}
} else if active_tab.are_floating_panes_visible {
match self.mode_info.mode {
- InputMode::Normal | InputMode::Locked => {
- floating_panes_are_visible(&self.mode_info)
+ InputMode::Normal => floating_panes_are_visible(&self.mode_info),
+ InputMode::Locked => {
+ locked_floating_panes_are_visible(&self.mode_info.style.colors)
},
_ => keybinds(&self.mode_info, &self.tip_name, cols),
}
diff --git a/default-plugins/status-bar/src/second_line.rs b/default-plugins/status-bar/src/second_line.rs
index e3923174..4376616a 100644
--- a/default-plugins/status-bar/src/second_line.rs
+++ b/default-plugins/status-bar/src/second_line.rs
@@ -45,6 +45,20 @@ fn full_length_shortcut(
}
}
+fn locked_interface_indication(palette: Palette) -> LinePart {
+ let locked_text = " -- INTERFACE LOCKED -- ";
+ let locked_text_len = locked_text.chars().count();
+ let text_color = palette_match!(match palette.theme_hue {
+ ThemeHue::Dark => palette.white,
+ ThemeHue::Light => palette.black,
+ });
+ let locked_styled_text = Style::new().fg(text_color).bold().paint(locked_text);
+ LinePart {
+ part: locked_styled_text.to_string(),
+ len: locked_text_len,
+ }
+}
+
fn add_shortcut(help: &ModeInfo, linepart: &LinePart, text: &str, keys: Vec<Key>) -> LinePart {
let shortcut = if linepart.len == 0 {
full_length_shortcut(true, keys, text, help.style.colors)
@@ -166,12 +180,7 @@ fn get_keys_and_hints(mi: &ModeInfo) -> Vec<(String, String, Vec<Key>)> {
(s("Rename"), s("Rename"),
action_key(&km, &[A::SwitchToMode(IM::RenameTab), A::TabNameInput(vec![0])])),
(s("Sync"), s("Sync"), action_key(&km, &[A::ToggleActiveSyncTab, TO_NORMAL])),
- (s("Break pane to new tab"), s("Break"), action_key(&km, &[A::BreakPane, TO_NORMAL])),
- (s("Break pane to next/prev tab"), s("Break next/prev"),
- action_key_group(&km, &[
- &[A::BreakPaneLeft, TO_NORMAL],
- &[A::BreakPaneRight, TO_NORMAL]
- ])),
+ (s("Toggle"), s("Toggle"), action_key(&km, &[A::ToggleTab])),
(s("Select pane"), s("Select"), to_normal_key),
]} else if mi.mode == IM::Resize { vec![
(s("Increase/Decrease size"), s("Increase/Decrease"),
@@ -231,6 +240,7 @@ fn get_keys_and_hints(mi: &ModeInfo) -> Vec<(String, String, Vec<Key>)> {
action_key(&km, &[A::SearchToggleOption(SOpt::WholeWord)])),
]} else if mi.mode == IM::Session { vec![
(s("Detach"), s("Detach"), action_key(&km, &[Action::Detach])),
+ (s("Session Manager"), s("Manager"), action_key(&km, &[A::LaunchOrFocusPlugin(Default::default(), true), TO_NORMAL])), // not entirely accurate
(s("Select pane"), s("Select"), to_normal_key),
]} else if mi.mode == IM::Tmux { vec![
(s("Move focus"), s("Move"), action_key_group(&km, &[
@@ -255,7 +265,8 @@ fn get_keys_and_hints(mi: &ModeInfo) -> Vec<(String, String, Vec<Key>)> {
fn full_shortcut_list(help: &ModeInfo, tip: TipFn) -> LinePart {
match help.mode {
- InputMode::Normal | InputMode::Locked => tip(help),
+ InputMode::Normal => tip(help),
+ InputMode::Locked => locked_interface_indication(help.style.colors),
_ => full_shortcut_list_nonstandard_mode(help),
}
}
@@ -272,7 +283,8 @@ fn shortened_shortcut_list_nonstandard_mode(help: &ModeInfo) -> LinePart {
fn shortened_shortcut_list(help: &ModeInfo, tip: TipFn) -> LinePart {
match help.mode {
- InputMode::Normal | InputMode::Locked => tip(help),
+ InputMode::Normal => tip(help),
+ InputMode::Locked => locked_interface_indication(help.style.colors),
_ => shortened_shortcut_list_nonstandard_mode(help),
}
}
@@ -295,7 +307,7 @@ fn best_effort_shortcut_list_nonstandard_mode(help: &ModeInfo, max_len: usize) -
fn best_effort_shortcut_list(help: &ModeInfo, tip: TipFn, max_len: usize) -> LinePart {
match help.mode {
- InputMode::Normal | InputMode::Locked => {
+ InputMode::Normal => {
let line_part = tip(help);
if line_part.len <= max_len {
line_part
@@ -303,6 +315,14 @@ fn best_effort_shortcut_list(help: &ModeInfo, tip: TipFn, max_len: usize) -> Lin
LinePart::default()
}
},
+ InputMode::Locked => {
+ let line_part = locked_interface_indication(help.style.colors);
+ if line_part.len <= max_len {
+ line_part
+ } else {
+ LinePart::default()
+ }
+ },
_ => best_effort_shortcut_list_nonstandard_mode(help, max_len),
}
}
@@ -447,6 +467,68 @@ pub fn floating_panes_are_visible(mode_info: &ModeInfo) -> LinePart {
}
}
+pub fn locked_fullscreen_panes_to_hide(palette: &Palette, panes_to_hide: usize) -> LinePart {
+ let text_color = palette_match!(match palette.theme_hue {
+ ThemeHue::Dark => palette.white,
+ ThemeHue::Light => palette.black,
+ });
+ let green_color = palette_match!(palette.green);
+ let orange_color = palette_match!(palette.orange);
+ let locked_text = " -- INTERFACE LOCKED -- ";
+ let shortcut_left_separator = Style::new().fg(text_color).bold().paint(" (");
+ let shortcut_right_separator = Style::new().fg(text_color).bold().paint("): ");
+ let fullscreen = "FULLSCREEN";
+ let puls = "+ ";
+ let panes = panes_to_hide.to_string();
+ let hide = " hidden panes";
+ let len = locked_text.chars().count()
+ + fullscreen.chars().count()
+ + puls.chars().count()
+ + panes.chars().count()
+ + hide.chars().count()
+ + 5; // 3 for ():'s around shortcut, 2 for the space
+ LinePart {
+ part: format!(
+ "{}{}{}{}{}{}{}",
+ Style::new().fg(text_color).bold().paint(locked_text),
+ shortcut_left_separator,
+ Style::new().fg(orange_color).bold().paint(fullscreen),
+ shortcut_right_separator,
+ Style::new().fg(text_color).bold().paint(puls),
+ Style::new().fg(green_color).bold().paint(panes),
+ Style::new().fg(text_color).bold().paint(hide)
+ ),
+ len,
+ }
+}
+
+pub fn locked_floating_panes_are_visible(palette: &Palette) -> LinePart {
+ let white_color = match palette.white {
+ PaletteColor::Rgb((r, g, b)) => RGB(r, g, b),
+ PaletteColor::EightBit(color) => Fixed(color),
+ };
+ let orange_color = match palette.orange {
+ PaletteColor::Rgb((r, g, b)) => RGB(r, g, b),
+ PaletteColor::EightBit(color) => Fixed(color),
+ };
+ let shortcut_left_separator = Style::new().fg(white_color).bold().paint(" (");
+ let shortcut_right_separator = Style::new().fg(white_color).bold().paint(")");
+ let locked_text = " -- INTERFACE LOCKED -- ";
+ let floating_panes = "FLOATING PANES VISIBLE";
+
+ let len = locked_text.chars().count() + floating_panes.chars().count();
+ LinePart {
+ part: format!(
+ "{}{}{}{}",
+ Style::new().fg(white_color).bold().paint(locked_text),
+ shortcut_left_separator,
+ Style::new().fg(orange_color).bold().paint(floating_panes),
+ shortcut_right_separator,
+ ),
+ len,
+ }
+}
+
#[cfg(test)]
/// Unit tests.
///
@@ -581,6 +663,7 @@ mod tests {
assert_eq!(ret, " / Ctrl + <a|b|c> Foobar");
}
+ //pub fn keybinds(help: &ModeInfo, tip_name: &str, max_width: usize) -> LinePart {
#[test]
// Note how it leaves out elements that don't exist!
@@ -665,9 +748,6 @@ mod tests {
let ret = keybinds(&mode_info, "quicknav", 500);
let ret = unstyle(ret);
- assert_eq!(
- ret,
- " <BACKSPACE> New / Ctrl + <a|ENTER|1|SPACE> Change Focus / <ESC> Close / <END> Toggle Fullscreen"
- );
+ assert_eq!(ret, " <BACKSPACE> New / Ctrl + <a|ENTER|1|SPACE> Change Focus / <ESC> Close / <END> Toggle Fullscreen");
}
}
diff --git a/default-plugins/status-bar/src/tip/data/compact_layout.rs b/default-plugins/status-bar/src/tip/data/compact_layout.rs
index 13ee18bd..77dec8a6 100644
--- a/default-plugins/status-bar/src/tip/data/compact_layout.rs
+++ b/default-plugins/status-bar/src/tip/data/compact_layout.rs
@@ -77,7 +77,7 @@ pub fn compact_layout_short(help: &ModeInfo) -> LinePart {
fn add_keybinds(help: &ModeInfo) -> Vec<ANSIString> {
let to_pane = action_key(
- &help.get_keybinds_for_mode(InputMode::Normal),
+ &help.get_mode_keybinds(),
&[Action::SwitchToMode(InputMode::Pane)],
);
let pane_frames = action_key(
diff --git a/default-plugins/status-bar/src/tip/data/edit_scrollbuffer.rs b/default-plugins/status-bar/src/tip/data/edit_scrollbuffer.rs
index 9ff210ed..ebd944b7 100644
--- a/default-plugins/status-bar/src/tip/data/edit_scrollbuffer.rs
+++ b/default-plugins/status-bar/src/tip/data/edit_scrollbuffer.rs
@@ -67,7 +67,7 @@ pub fn edit_scrollbuffer_short(help: &ModeInfo) -> LinePart {
fn add_keybinds(help: &ModeInfo) -> Vec<ANSIString> {
let to_pane = action_key(
- &help.get_keybinds_for_mode(InputMode::Normal),
+ &help.get_mode_keybinds(),
&[Action::SwitchToMode(InputMode::Scroll)],
);
let edit_buffer = action_key(
diff --git a/default-plugins/status-bar/src/tip/data/floating_panes_mouse.rs b/default-plugins/status-bar/src/tip/data/floating_panes_mouse.rs
index 17439c4b..4bf4a143 100644
--- a/default-plugins/status-bar/src/tip/data/floating_panes_mouse.rs
+++ b/default-plugins/status-bar/src/tip/data/floating_panes_mouse.rs
@@ -46,7 +46,7 @@ pub fn floating_panes_mouse_short(help: &ModeInfo) -> LinePart {
fn add_keybinds(help: &ModeInfo) -> Vec<ANSIString> {
let to_pane = action_key(
- &help.get_keybinds_for_mode(InputMode::Normal),
+ &help.get_mode_keybinds(),
&[Action::SwitchToMode(InputMode::Pane)],
);
let floating_toggle = action_key(
diff --git a/default-plugins/status-bar/src/tip/data/quicknav.rs b/default-plugins/status-bar/src/tip/data/quicknav.rs
index fe118f2c..318fe702 100644
--- a/default-plugins/status-bar/src/tip/data/quicknav.rs
+++ b/default-plugins/status-bar/src/tip/data/quicknav.rs
@@ -61,7 +61,7 @@ struct Keygroups<'a> {
}
fn add_keybinds(help: &ModeInfo) -> Keygroups {
- let normal_keymap = help.get_keybinds_for_mode(InputMode::Normal);
+ let normal_keymap = help.get_mode_keybinds();
let new_pane_keys = action_key(&normal_keymap, &[Action::NewPane(None, None)]);
let new_pane = if new_pane_keys.is_empty() {
vec![Style::new().bold().paint("UNBOUND")]
diff --git a/default-plugins/status-bar/src/tip/data/sync_tab.rs b/default-plugins/status-bar/src/tip/data/sync_tab.rs
index 71a4ed50..486e2aa2 100644
--- a/default-plugins/status-bar/src/tip/data/sync_tab.rs
+++ b/default-plugins/status-bar/src/tip/data/sync_tab.rs
@@ -45,7 +45,7 @@ pub fn sync_tab_short(help: &ModeInfo) -> LinePart {
fn add_keybinds(help: &ModeInfo) -> Vec<ANSIString> {
let to_tab = action_key(
- &help.get_keybinds_for_mode(InputMode::Normal),
+ &help.get_mode_keybinds(),
&[Action::SwitchToMode(InputMode::Tab)],
);
let sync_tabs = action_key(
diff --git a/default-plugins/strider/src/main.rs b/default-plugins/strider/src/main.rs
index 3d4c94a9..598bf61d 100644
--- a/default-plugins/strider/src/main.rs
+++ b/default-plugins/strider/src/main.rs
@@ -19,7 +19,7 @@ register_worker!(
);
impl ZellijPlugin for State {
- fn load(&mut self, configuration: BTreeMap<String, String>) {
+ fn load(&mut self, _configuration: BTreeMap<String, String>) {
refresh_directory(self);
self.search_state.loading = true;
subscribe(&[
diff --git a/default-plugins/tab-bar/src/main.rs b/default-plugins/tab-bar/src/main.rs
index fc67ef91..20855825 100644
--- a/default-plugins/tab-bar/src/main.rs
+++ b/default-plugins/tab-bar/src/main.rs
@@ -31,7 +31,7 @@ static ARROW_SEPARATOR: &str = "";
register_plugin!(State);
impl ZellijPlugin for State {
- fn load(&mut self, configuration: BTreeMap<String, String>) {
+ fn load(&mut self, _configuration: BTreeMap<String, String>) {
set_selectable(false);
subscribe(&[
EventType::TabUpdate,