diff options
author | Aram Drevekenin <aram@poor.dev> | 2022-06-07 14:28:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-07 14:28:39 +0200 |
commit | 3be718371af9029822e2aeb3f52b5dde1b7397d1 (patch) | |
tree | 017147ebe5418a67570b9e7ea3d9ba3bf990cd83 /default-plugins | |
parent | 3e5312087b762a7dc4988162f8691e8c79a9bdc2 (diff) |
feat(ui): add status bar tips (#1462)
* feat(ui): add more tips to status bar
* fix(e2e): clear status-bar-tips cache for each test
* style(fmt): rustfmt
Diffstat (limited to 'default-plugins')
-rw-r--r-- | default-plugins/status-bar/src/main.rs | 26 | ||||
-rw-r--r-- | default-plugins/status-bar/src/tip/consts.rs | 2 | ||||
-rw-r--r-- | default-plugins/status-bar/src/tip/data/compact_layout.rs | 87 | ||||
-rw-r--r-- | default-plugins/status-bar/src/tip/data/edit_scrollbuffer.rs | 78 | ||||
-rw-r--r-- | default-plugins/status-bar/src/tip/data/floating_panes_mouse.rs | 69 | ||||
-rw-r--r-- | default-plugins/status-bar/src/tip/data/mod.rs | 92 | ||||
-rw-r--r-- | default-plugins/status-bar/src/tip/data/move_focus_hjkl_tab_switch.rs | 64 | ||||
-rw-r--r-- | default-plugins/status-bar/src/tip/data/quicknav.rs (renamed from default-plugins/status-bar/src/tip/data.rs) | 22 | ||||
-rw-r--r-- | default-plugins/status-bar/src/tip/data/send_mouse_click_to_terminal.rs | 63 | ||||
-rw-r--r-- | default-plugins/status-bar/src/tip/data/sync_tab.rs | 69 | ||||
-rw-r--r-- | default-plugins/status-bar/src/tip/data/use_mouse.rs | 56 | ||||
-rw-r--r-- | default-plugins/status-bar/src/tip/data/zellij_setup_check.rs | 65 | ||||
-rw-r--r-- | default-plugins/status-bar/src/tip/utils.rs | 18 |
13 files changed, 672 insertions, 39 deletions
diff --git a/default-plugins/status-bar/src/main.rs b/default-plugins/status-bar/src/main.rs index 7257556bc..4a53fed8a 100644 --- a/default-plugins/status-bar/src/main.rs +++ b/default-plugins/status-bar/src/main.rs @@ -151,19 +151,14 @@ fn color_elements(palette: Palette, different_color_alternates: bool) -> Colored unselected_single_letter_char_shortcut: style!(palette.red, palette.fg).bold().dimmed(), unselected_single_letter_suffix_separator: style!(palette.fg, background), - unselected_alternate_single_letter_prefix_separator: style!( - palette.fg, - alternate_background_color - ), + unselected_alternate_single_letter_prefix_separator: style!(background, palette.fg), unselected_alternate_single_letter_char_shortcut: style!( palette.red, alternate_background_color ) - .bold(), - unselected_alternate_single_letter_suffix_separator: style!( - palette.fg, - alternate_background_color - ), + .bold() + .dimmed(), + unselected_alternate_single_letter_suffix_separator: style!(palette.fg, background), superkey_prefix: style!(foreground, background).bold(), superkey_suffix_separator: style!(background, background), @@ -209,19 +204,14 @@ fn color_elements(palette: Palette, different_color_alternates: bool) -> Colored unselected_single_letter_char_shortcut: style!(palette.red, palette.fg).bold(), unselected_single_letter_suffix_separator: style!(palette.fg, background), - unselected_alternate_single_letter_prefix_separator: style!( - palette.fg, - alternate_background_color - ), + unselected_alternate_single_letter_prefix_separator: style!(background, palette.fg), unselected_alternate_single_letter_char_shortcut: style!( palette.red, alternate_background_color ) - .bold(), - unselected_alternate_single_letter_suffix_separator: style!( - palette.fg, - alternate_background_color - ), + .bold() + .dimmed(), + unselected_alternate_single_letter_suffix_separator: style!(palette.fg, background), superkey_prefix: style!(background, palette.fg).bold(), superkey_suffix_separator: style!(palette.fg, background), diff --git a/default-plugins/status-bar/src/tip/consts.rs b/default-plugins/status-bar/src/tip/consts.rs index 62bbeaa9c..1af302471 100644 --- a/default-plugins/status-bar/src/tip/consts.rs +++ b/default-plugins/status-bar/src/tip/consts.rs @@ -1,2 +1,2 @@ pub const DEFAULT_CACHE_FILE_PATH: &str = "/tmp/status-bar-tips.cache"; -pub const MAX_CACHE_HITS: usize = 10; +pub const MAX_CACHE_HITS: usize = 20; // this should be 10, but right now there's a bug where the plugin load function is called twice, and sot he cache is hit twice diff --git a/default-plugins/status-bar/src/tip/data/compact_layout.rs b/default-plugins/status-bar/src/tip/data/compact_layout.rs new file mode 100644 index 000000000..1632a836e --- /dev/null +++ b/default-plugins/status-bar/src/tip/data/compact_layout.rs @@ -0,0 +1,87 @@ +use ansi_term::{ + unstyled_len, ANSIString, ANSIStrings, + Color::{Fixed, RGB}, + Style, +}; + +use crate::LinePart; +use zellij_tile::prelude::*; +use zellij_tile_utils::palette_match; + +macro_rules! strings { + ($ANSIStrings:expr) => {{ + let strings: &[ANSIString<'static>] = $ANSIStrings; + + let ansi_strings = ANSIStrings(strings); + + LinePart { + part: format!("{}", ansi_strings), + len: unstyled_len(&ansi_strings), + } + }}; +} + +pub fn compact_layout_full(palette: Palette) -> LinePart { + // Tip: UI taking up too much space? Start Zellij with + // zellij -l compact or remove pane frames with Ctrl + <p> + <z> + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + + strings!(&[ + Style::new().paint(" Tip: "), + Style::new().paint("UI taking up too much space? Start Zellij with "), + Style::new() + .fg(green_color) + .bold() + .paint("zellij -l compact"), + Style::new().paint(" or remove pane frames with "), + Style::new().fg(orange_color).bold().paint("Ctrl"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<p>"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<z>"), + ]) +} + +pub fn compact_layout_medium(palette: Palette) -> LinePart { + // Tip: To save screen space, start Zellij with + // zellij -l compact or remove pane frames with Ctrl + <p> + <z> + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + + strings!(&[ + Style::new().paint(" Tip: "), + Style::new().paint("To save screen space, start Zellij with "), + Style::new() + .fg(green_color) + .bold() + .paint("zellij -l compact"), + Style::new().paint(" or remove frames with "), + Style::new().fg(orange_color).bold().paint("Ctrl"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<p>"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<z>"), + ]) +} + +pub fn compact_layout_short(palette: Palette) -> LinePart { + // Save screen space, start Zellij with + // zellij -l compact or remove pane frames with Ctrl + <p> + <z> + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + + strings!(&[ + Style::new().paint(" Save screen space, start with: "), + Style::new() + .fg(green_color) + .bold() + .paint("zellij -l compact"), + Style::new().paint(" or remove frames with "), + Style::new().fg(orange_color).bold().paint("Ctrl"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<p>"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<z>"), + ]) +} diff --git a/default-plugins/status-bar/src/tip/data/edit_scrollbuffer.rs b/default-plugins/status-bar/src/tip/data/edit_scrollbuffer.rs new file mode 100644 index 000000000..3807f55db --- /dev/null +++ b/default-plugins/status-bar/src/tip/data/edit_scrollbuffer.rs @@ -0,0 +1,78 @@ +use ansi_term::{ + unstyled_len, ANSIString, ANSIStrings, + Color::{Fixed, RGB}, + Style, +}; + +use crate::LinePart; +use zellij_tile::prelude::*; +use zellij_tile_utils::palette_match; + +macro_rules! strings { + ($ANSIStrings:expr) => {{ + let strings: &[ANSIString<'static>] = $ANSIStrings; + + let ansi_strings = ANSIStrings(strings); + + LinePart { + part: format!("{}", ansi_strings), + len: unstyled_len(&ansi_strings), + } + }}; +} + +pub fn edit_scrollbuffer_full(palette: Palette) -> LinePart { + // Tip: Search through the scrollbuffer using your default $EDITOR with + // Ctrl + <s> + <e> + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + + strings!(&[ + Style::new().paint(" Tip: "), + Style::new().paint("Search through the scrollbuffer using your default "), + Style::new().fg(green_color).bold().paint("$EDITOR"), + Style::new().paint(" with "), + Style::new().fg(orange_color).bold().paint("Ctrl"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<s>"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<e>"), + ]) +} + +pub fn edit_scrollbuffer_medium(palette: Palette) -> LinePart { + // Tip: Search the scrollbuffer using your $EDITOR with + // Ctrl + <s> + <e> + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + + strings!(&[ + Style::new().paint(" Tip: "), + Style::new().paint("Search the scrollbuffer using your "), + Style::new().fg(green_color).bold().paint("$EDITOR"), + Style::new().paint(" with "), + Style::new().fg(orange_color).bold().paint("Ctrl"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<s>"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<e>"), + ]) +} + +pub fn edit_scrollbuffer_short(palette: Palette) -> LinePart { + // Search using $EDITOR with + // Ctrl + <s> + <e> + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + + strings!(&[ + Style::new().paint(" Search using "), + Style::new().fg(green_color).bold().paint("$EDITOR"), + Style::new().paint(" with "), + Style::new().fg(orange_color).bold().paint("Ctrl"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<s>"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<e>"), + ]) +} 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 new file mode 100644 index 000000000..64594987b --- /dev/null +++ b/default-plugins/status-bar/src/tip/data/floating_panes_mouse.rs @@ -0,0 +1,69 @@ +use ansi_term::{ + unstyled_len, ANSIString, ANSIStrings, + Color::{Fixed, RGB}, + Style, +}; + +use crate::LinePart; +use zellij_tile::prelude::*; +use zellij_tile_utils::palette_match; + +macro_rules! strings { + ($ANSIStrings:expr) => {{ + let strings: &[ANSIString<'static>] = $ANSIStrings; + + let ansi_strings = ANSIStrings(strings); + + LinePart { + part: format!("{}", ansi_strings), + len: unstyled_len(&ansi_strings), + } + }}; +} + +pub fn floating_panes_mouse_full(palette: Palette) -> LinePart { + // Tip: Toggle floating panes with Ctrl + <p> + <w> and move them with keyboard or mouse + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + + strings!(&[ + Style::new().paint(" Tip: "), + Style::new().paint("Toggle floating panes with "), + Style::new().fg(orange_color).bold().paint("Ctrl"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<p>"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<w>"), + Style::new().paint(" and move them with keyboard or mouse"), + ]) +} + +pub fn floating_panes_mouse_medium(palette: Palette) -> LinePart { + // Tip: Toggle floating panes with Ctrl + <p> + <w> + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + strings!(&[ + Style::new().paint(" Tip: "), + Style::new().paint("Toggle floating panes with "), + Style::new().fg(orange_color).bold().paint("Ctrl"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<p>"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<w>"), + ]) +} + +pub fn floating_panes_mouse_short(palette: Palette) -> LinePart { + // Ctrl + <p> + <w> => floating panes + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + + strings!(&[ + Style::new().fg(orange_color).bold().paint(" Ctrl"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<p>"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<w>"), + Style::new().paint(" => floating panes"), + ]) +} diff --git a/default-plugins/status-bar/src/tip/data/mod.rs b/default-plugins/status-bar/src/tip/data/mod.rs new file mode 100644 index 000000000..1354b1ab4 --- /dev/null +++ b/default-plugins/status-bar/src/tip/data/mod.rs @@ -0,0 +1,92 @@ +use std::collections::HashMap; + +use lazy_static::lazy_static; + +use crate::tip::TipBody; + +mod compact_layout; +mod edit_scrollbuffer; +mod floating_panes_mouse; +mod move_focus_hjkl_tab_switch; +mod quicknav; +mod send_mouse_click_to_terminal; +mod sync_tab; +mod use_mouse; +mod zellij_setup_check; + +lazy_static! { + pub static ref TIPS: HashMap<&'static str, TipBody> = HashMap::from([ + ( + "quicknav", + TipBody { + short: quicknav::quicknav_short, + medium: quicknav::quicknav_medium, + full: quicknav::quicknav_full, + } + ), + ( + "floating_panes_mouse", + TipBody { + short: floating_panes_mouse::floating_panes_mouse_short, + medium: floating_panes_mouse::floating_panes_mouse_medium, + full: floating_panes_mouse::floating_panes_mouse_full, + } + ), + ( + "send_mouse_clicks_to_terminal", + TipBody { + short: send_mouse_click_to_terminal::mouse_click_to_terminal_short, + medium: send_mouse_click_to_terminal::mouse_click_to_terminal_medium, + full: send_mouse_click_to_terminal::mouse_click_to_terminal_full, + } + ), + ( + "move_focus_hjkl_tab_switch", + TipBody { + short: move_focus_hjkl_tab_switch::move_focus_hjkl_tab_switch_short, + medium: move_focus_hjkl_tab_switch::move_focus_hjkl_tab_switch_medium, + full: move_focus_hjkl_tab_switch::move_focus_hjkl_tab_switch_full, + } + ), + ( + "zellij_setup_check", + TipBody { + short: zellij_setup_check::zellij_setup_check_short, + medium: zellij_setup_check::zellij_setup_check_medium, + full: zellij_setup_check::zellij_setup_check_full, + } + ), + ( + "use_mouse", + TipBody { + short: use_mouse::use_mouse_short, + medium: use_mouse::use_mouse_medium, + full: use_mouse::use_mouse_full, + } + ), + ( + "sync_tab", + TipBody { + short: sync_tab::sync_tab_short, + medium: sync_tab::sync_tab_medium, + full: sync_tab::sync_tab_full, + } + ), + ( + "edit_scrollbuffer", + TipBody { + short: edit_scrollbuffer::edit_scrollbuffer_short, + medium: edit_scrollbuffer::edit_scrollbuffer_medium, + full: edit_scrollbuffer::edit_scrollbuffer_full, + } + ), + ( + "compact_layout", + TipBody { + short: compact_layout::compact_layout_short, + medium: compact_layout::compact_layout_medium, + full: compact_layout::compact_layout_full, + } + ), + ]); +} diff --git a/default-plugins/status-bar/src/tip/data/move_focus_hjkl_tab_switch.rs b/default-plugins/status-bar/src/tip/data/move_focus_hjkl_tab_switch.rs new file mode 100644 index 000000000..8e9f678c6 --- /dev/null +++ b/default-plugins/status-bar/src/tip/data/move_focus_hjkl_tab_switch.rs @@ -0,0 +1,64 @@ +use ansi_term::{ + unstyled_len, ANSIString, ANSIStrings, + Color::{Fixed, RGB}, + Style, +}; + +use crate::LinePart; +use zellij_tile::prelude::*; +use zellij_tile_utils::palette_match; + +macro_rules! strings { + ($ANSIStrings:expr) => {{ + let strings: &[ANSIString<'static>] = $ANSIStrings; + + let ansi_strings = ANSIStrings(strings); + + LinePart { + part: format!("{}", ansi_strings), + len: unstyled_len(&ansi_strings), + } + }}; +} + +pub fn move_focus_hjkl_tab_switch_full(palette: Palette) -> LinePart { + // Tip: When changing focus with Alt + <←↓↑→> moving off screen left/right focuses the next tab. + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + + strings!(&[ + Style::new().paint(" Tip: "), + Style::new().paint("When changing focus with "), + Style::new().fg(orange_color).bold().paint("Alt"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<←↓↑→>"), + Style::new().paint(" moving off screen left/right focuses the next tab."), + ]) +} + +pub fn move_focus_hjkl_tab_switch_medium(palette: Palette) -> LinePart { + // Tip: Changing focus with Alt + <←↓↑→> off screen focuses the next tab. + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + strings!(&[ + Style::new().paint(" Tip: "), + Style::new().paint("Changing focus with "), + Style::new().fg(orange_color).bold().paint("Alt"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<←↓↑→>"), + Style::new().paint(" off screen focuses the next tab."), + ]) +} + +pub fn move_focus_hjkl_tab_switch_short(palette: Palette) -> LinePart { + // Alt + <←↓↑→> off screen edge focuses next tab. + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + + strings!(&[ + Style::new().fg(orange_color).bold().paint(" Alt"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<←↓↑→>"), + Style::new().paint(" off screen edge focuses next tab."), + ]) +} diff --git a/default-plugins/status-bar/src/tip/data.rs b/default-plugins/status-bar/src/tip/data/quicknav.rs index d8dba13d8..21d46fe8f 100644 --- a/default-plugins/status-bar/src/tip/data.rs +++ b/default-plugins/status-bar/src/tip/data/quicknav.rs @@ -1,13 +1,10 @@ -use std::collections::HashMap; - use ansi_term::{ unstyled_len, ANSIString, ANSIStrings, Color::{Fixed, RGB}, Style, }; -use lazy_static::lazy_static; -use crate::{tip::TipBody, LinePart}; +use crate::LinePart; use zellij_tile::prelude::*; use zellij_tile_utils::palette_match; @@ -24,18 +21,7 @@ macro_rules! strings { }}; } -lazy_static! { - pub static ref TIPS: HashMap<&'static str, TipBody> = HashMap::from([( - "quicknav", - TipBody { - short: quicknav_short, - medium: quicknav_medium, - full: quicknav_full, - } - )]); -} - -fn quicknav_full(palette: Palette) -> LinePart { +pub fn quicknav_full(palette: Palette) -> LinePart { let green_color = palette_match!(palette.green); let orange_color = palette_match!(palette.orange); @@ -58,7 +44,7 @@ fn quicknav_full(palette: Palette) -> LinePart { ]) } -fn quicknav_medium(palette: Palette) -> LinePart { +pub fn quicknav_medium(palette: Palette) -> LinePart { let green_color = palette_match!(palette.green); let orange_color = palette_match!(palette.orange); @@ -81,7 +67,7 @@ fn quicknav_medium(palette: Palette) -> LinePart { ]) } -fn quicknav_short(palette: Palette) -> LinePart { +pub fn quicknav_short(palette: Palette) -> LinePart { let green_color = palette_match!(palette.green); let orange_color = palette_match!(palette.orange); diff --git a/default-plugins/status-bar/src/tip/data/send_mouse_click_to_terminal.rs b/default-plugins/status-bar/src/tip/data/send_mouse_click_to_terminal.rs new file mode 100644 index 000000000..a4f7ee60a --- /dev/null +++ b/default-plugins/status-bar/src/tip/data/send_mouse_click_to_terminal.rs @@ -0,0 +1,63 @@ +use ansi_term::{ + unstyled_len, ANSIString, ANSIStrings, + Color::{Fixed, RGB}, + Style, +}; + +use crate::LinePart; +use zellij_tile::prelude::*; +use zellij_tile_utils::palette_match; + +macro_rules! strings { + ($ANSIStrings:expr) => {{ + let strings: &[ANSIString<'static>] = $ANSIStrings; + + let ansi_strings = ANSIStrings(strings); + + LinePart { + part: format!("{}", ansi_strings), + len: unstyled_len(&ansi_strings), + } + }}; +} + +pub fn mouse_click_to_terminal_full(palette: Palette) -> LinePart { + // Tip: SHIFT + <mouse-click> bypasses Zellij and sends the mouse click directly to the terminal + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + + strings!(&[ + Style::new().paint(" Tip: "), + Style::new().fg(orange_color).bold().paint("SHIFT"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<mouse-click>"), + Style::new().paint(" bypasses Zellij and sends the mouse click directly to the terminal."), + ]) +} + +pub fn mouse_click_to_terminal_medium(palette: Palette) -> LinePart { + // Tip: SHIFT + <mouse-click> sends the click directly to the terminal + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + strings!(&[ + Style::new().paint(" Tip: "), + Style::new().fg(orange_color).bold().paint("SHIFT"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<mouse-click>"), + Style::new().paint(" sends the click directly to the terminal."), + ]) +} + +pub fn mouse_click_to_terminal_short(palette: Palette) -> LinePart { + // Tip: SHIFT + <mouse-click> => sends click to terminal. + let green_color = palette_match!(palette.green); + let orange_color = palette_match!(palette.orange); + + strings!(&[ + Style::new().paint(" Tip: "), + Style::new().fg(orange_color).bold().paint("SHIFT"), + Style::new().paint(" + "), + Style::new().fg(green_color).bold().paint("<mouse-click>"), + Style::new().paint(" => sends click to terminal."), + ]) +} diff --git a/default-plugins/status-bar/src/tip/data/sync_tab.rs b/default-plugins/status-bar/src/tip/data/sync_tab.rs new file mode 100644 index 000000000..27d0ae7f0 --- /dev/null +++ b/default-plugins/status-bar/src/tip/data/sync_tab.rs @@ -0,0 +1,69 @@ +use ansi_term::{ + unstyled_len, ANSIString, ANSIStrings, + Color::{Fixed, RGB}, + Style, +}; + +use crate::LinePart; +use zellij_tile::prelude::*; +use zellij_tile_utils::palette_match; + +macro_rules! strings { + ($ANSIStrings:expr) => {{ + let strings: &[ANSIString<'static>] = $ANSIStrings; + + let ansi_strings = ANSIStrings(strings); + + LinePart { + part: format!("{}", ansi_strings), + len: unstyled_len(&ansi_strings), + } + }}; +} + +pub fn sync_tab_full(palette: Palette) -> LinePart { + // Tip: Sync a tab and write keyboard input to all panes with Ctrl + <t> + <s> |