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
This commit is contained in:
Aram Drevekenin 2022-06-07 14:28:39 +02:00 committed by GitHub
parent 3e5312087b
commit 3be718371a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 676 additions and 39 deletions

View file

@ -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),

View file

@ -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

View file

@ -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>"),
])
}

View file

@ -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>"),
])
}

View file

@ -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"),
])
}

View file

@ -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,
}
),
]);
}

View file

@ -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."),
])
}

View file

@ -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);

View file

@ -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."),
])
}

View file

@ -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>
let green_color = palette_match!(palette.green);
let orange_color = palette_match!(palette.orange);
strings!(&[
Style::new().paint(" Tip: "),
Style::new().paint("Sync a tab and write keyboard input to all its panes with "),
Style::new().fg(orange_color).bold().paint("Ctrl"),
Style::new().paint(" + "),
Style::new().fg(green_color).bold().paint("<t>"),
Style::new().paint(" + "),
Style::new().fg(green_color).bold().paint("<s>"),
])
}
pub fn sync_tab_medium(palette: Palette) -> LinePart {
// Tip: Sync input to panes in a tab with Ctrl + <t> + <s>
let green_color = palette_match!(palette.green);
let orange_color = palette_match!(palette.orange);
strings!(&[
Style::new().paint(" Tip: "),
Style::new().paint("Sync input to panes in a tab with "),
Style::new().fg(orange_color).bold().paint("Ctrl"),
Style::new().paint(" + "),
Style::new().fg(green_color).bold().paint("<t>"),
Style::new().paint(" + "),
Style::new().fg(green_color).bold().paint("<s>"),
])
}
pub fn sync_tab_short(palette: Palette) -> LinePart {
// Sync input in a tab with Ctrl + <t> + <s>
let green_color = palette_match!(palette.green);
let orange_color = palette_match!(palette.orange);
strings!(&[
Style::new().paint(" Sync input in a tab with "),
Style::new().fg(orange_color).bold().paint("Ctrl"),
Style::new().paint(" + "),
Style::new().fg(green_color).bold().paint("<t>"),
Style::new().paint(" + "),
Style::new().fg(green_color).bold().paint("<s>"),
])
}

View file

@ -0,0 +1,56 @@
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 use_mouse_full(palette: Palette) -> LinePart {
// Tip: Use the mouse to switch pane focus, scroll through the pane
// scrollbuffer, switch or scroll through tabs
let green_color = palette_match!(palette.green);
strings!(&[
Style::new().paint(" Tip: "),
Style::new().fg(green_color).bold().paint("Use the mouse"),
Style::new().paint(" to switch pane focus, scroll through the pane scrollbuffer, switch or scroll through the tabs."),
])
}
pub fn use_mouse_medium(palette: Palette) -> LinePart {
// Tip: Use the mouse to switch panes/tabs or scroll through the pane
// scrollbuffer
let green_color = palette_match!(palette.green);
strings!(&[
Style::new().paint(" Tip: "),
Style::new().fg(green_color).bold().paint("Use the mouse"),
Style::new().paint(" to switch pane/tabs or scroll through the pane scrollbuffer."),
])
}
pub fn use_mouse_short(palette: Palette) -> LinePart {
// Tip: Use the mouse to switch panes/tabs or scroll
let green_color = palette_match!(palette.green);
strings!(&[
Style::new().fg(green_color).bold().paint(" Use the mouse"),
Style::new().paint(" to switch pane/tabs or scroll."),
])
}

View file

@ -0,0 +1,65 @@
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 zellij_setup_check_full(palette: Palette) -> LinePart {
// Tip: Having issues with Zellij? Try running "zellij setup --check"
let orange_color = palette_match!(palette.orange);
strings!(&[
Style::new().paint(" Tip: "),
Style::new().paint("Having issues with Zellij? Try running "),
Style::new()
.fg(orange_color)
.bold()
.paint("zellij setup --check"),
])
}
pub fn zellij_setup_check_medium(palette: Palette) -> LinePart {
// Tip: Run "zellij setup --check" to find issues
let orange_color = palette_match!(palette.orange);
strings!(&[
Style::new().paint(" Tip: "),
Style::new().paint("Run "),
Style::new()
.fg(orange_color)
.bold()
.paint("zellij setup --check"),
Style::new().paint(" to find issues"),
])
}
pub fn zellij_setup_check_short(palette: Palette) -> LinePart {
// Run "zellij setup --check" to find issues
let orange_color = palette_match!(palette.orange);
strings!(&[
Style::new().paint(" Run "),
Style::new()
.fg(orange_color)
.bold()
.paint("zellij setup --check"),
Style::new().paint(" to find issues"),
])
}

View file

@ -21,6 +21,14 @@ macro_rules! get_name_and_caching {
}};
}
macro_rules! populate_cache {
($cache:expr) => {{
for tip_name in TIPS.keys() {
$cache.caching(tip_name.clone()).unwrap();
}
}};
}
pub fn get_random_tip_name() -> String {
TIPS.keys()
.choose(&mut rand::thread_rng())
@ -38,13 +46,19 @@ pub fn get_cached_tip_name() -> String {
}
if local_cache.is_empty() {
get_name_and_caching!(local_cache);
populate_cache!(local_cache);
}
let quicknav_show_count = local_cache.get_cached_data().get("quicknav").unwrap_or(&0);
eprintln!("quicknav_show_count: {:?}", quicknav_show_count);
if quicknav_show_count <= &MAX_CACHE_HITS {
let _ = local_cache.caching("quicknav");
return String::from("quicknav");
}
let usable_tips = local_cache
.get_cached_data()
.iter()
.filter(|(_, &v)| v < MAX_CACHE_HITS)
.map(|(k, _)| k.to_string())
.collect::<Vec<String>>();

View file

@ -57,6 +57,10 @@ fn setup_remote_environment(channel: &mut ssh2::Channel, win_size: Size) {
}
fn stop_zellij(channel: &mut ssh2::Channel) {
// here we remove the status-bar-tips cache to make sure only the quicknav tip is loaded
channel
.write_all(b"find /tmp | grep status-bar-tips | xargs rm\n")
.unwrap();
channel.write_all(b"killall -KILL zellij\n").unwrap();
}