summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--README.md5
-rw-r--r--default-plugins/status-bar/src/first_line.rs138
-rw-r--r--default-plugins/status-bar/src/main.rs10
-rw-r--r--default-plugins/tab-bar/src/line.rs37
-rw-r--r--default-plugins/tab-bar/src/main.rs9
-rw-r--r--default-plugins/tab-bar/src/tab.rs20
-rw-r--r--example/config.yaml1
-rw-r--r--example/default.yaml1
-rw-r--r--src/cli.rs18
-rw-r--r--src/client/mod.rs6
-rw-r--r--src/common/input/config.rs16
-rw-r--r--src/common/input/handler.rs4
-rw-r--r--src/common/input/keybinds.rs6
-rw-r--r--src/common/input/mod.rs1
-rw-r--r--src/common/input/options.rs21
-rw-r--r--src/common/screen.rs14
-rw-r--r--src/server/mod.rs19
-rw-r--r--zellij-tile/src/data.rs6
19 files changed, 243 insertions, 90 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 19105b76c..3ca3c48d6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
* Add more functionality to unbinding the default keybindings (https://github.com/zellij-org/zellij/pull/468)
* Terminal compatibility: fix support for CSI subparameters (https://github.com/zellij-org/zellij/pull/469)
* Move the sync command to tab mode (https://github.com/zellij-org/zellij/pull/412)
+* Add support for requesting a simpler layout from plugins, move `clean` flag from `options` to `setup` (https://github.com/zellij-org/zellij/pull/479)
* Fix exit code of `dump-default-config` (https://github.com/zellij-org/zellij/pull/480)
* Feature: Switch tabs using `Alt + h/l` in normal mode if there are no panes in the direction (https://github.com/zellij-org/zellij/pull/471)
diff --git a/README.md b/README.md
index 3751e9acf..a1a41fe6b 100644
--- a/README.md
+++ b/README.md
@@ -36,6 +36,11 @@ cargo install zellij
Or you can download a prebuilt binary from our [Releases](https://github.com/zellij-org/zellij/releases).
+As the default plugins make use of characters that are mostly only found in [nerdfonts](https://www.nerdfonts.com/),
+you get the best experience either with installing nerdfonts, or telling the plugins that you request a ui, that
+does not rely on such characters with `zellij options --simplified-ui`, or putting `simplified_ui: true` in the
+config file.
+
## How do I hack on it? (Contributing)
* Clone the project
* Install cargo-make with `cargo install --force cargo-make`
diff --git a/default-plugins/status-bar/src/first_line.rs b/default-plugins/status-bar/src/first_line.rs
index f679e8637..37175e3fa 100644
--- a/default-plugins/status-bar/src/first_line.rs
+++ b/default-plugins/status-bar/src/first_line.rs
@@ -2,7 +2,7 @@ use ansi_term::ANSIStrings;
use zellij_tile::prelude::*;
use crate::color_elements;
-use crate::{ColoredElements, LinePart, ARROW_SEPARATOR};
+use crate::{ColoredElements, LinePart};
struct CtrlKeyShortcut {
mode: CtrlKeyMode,
@@ -63,13 +63,18 @@ impl CtrlKeyShortcut {
}
}
-fn unselected_mode_shortcut(letter: char, text: &str, palette: ColoredElements) -> LinePart {
- let prefix_separator = palette.unselected_prefix_separator.paint(ARROW_SEPARATOR);
+fn unselected_mode_shortcut(
+ letter: char,
+ text: &str,
+ palette: ColoredElements,
+ separator: &str,
+) -> LinePart {
+ let prefix_separator = palette.unselected_prefix_separator.paint(separator);
let char_left_separator = palette.unselected_char_left_separator.paint(" <");
let char_shortcut = palette.unselected_char_shortcut.paint(letter.to_string());
let char_right_separator = palette.unselected_char_right_separator.paint(">");
let styled_text = palette.unselected_styled_text.paint(format!("{} ", text));
- let suffix_separator = palette.unselected_suffix_separator.paint(ARROW_SEPARATOR);
+ let suffix_separator = palette.unselected_suffix_separator.paint(separator);
LinePart {
part: ANSIStrings(&[
prefix_separator,
@@ -84,13 +89,18 @@ fn unselected_mode_shortcut(letter: char, text: &str, palette: ColoredElements)
}
}
-fn selected_mode_shortcut(letter: char, text: &str, palette: ColoredElements) -> LinePart {
- let prefix_separator = palette.selected_prefix_separator.paint(ARROW_SEPARATOR);
+fn selected_mode_shortcut(
+ letter: char,
+ text: &str,
+ palette: ColoredElements,
+ separator: &str,
+) -> LinePart {
+ let prefix_separator = palette.selected_prefix_separator.paint(separator);
let char_left_separator = palette.selected_char_left_separator.paint(" <".to_string());
let char_shortcut = palette.selected_char_shortcut.paint(format!("{}", letter));
let char_right_separator = palette.selected_char_right_separator.paint(">".to_string());
let styled_text = palette.selected_styled_text.paint(format!("{} ", text));
- let suffix_separator = palette.selected_suffix_separator.paint(ARROW_SEPARATOR);
+ let suffix_separator = palette.selected_suffix_separator.paint(separator);
LinePart {
part: ANSIStrings(&[
prefix_separator,
@@ -105,69 +115,89 @@ fn selected_mode_shortcut(letter: char, text: &str, palette: ColoredElements) ->
}
}
-fn disabled_mode_shortcut(text: &str, palette: ColoredElements) -> LinePart {
- let prefix_separator = palette.disabled_prefix_separator.paint(ARROW_SEPARATOR);
+fn disabled_mode_shortcut(text: &str, palette: ColoredElements, separator: &str) -> LinePart {
+ let prefix_separator = palette.disabled_prefix_separator.paint(separator);
let styled_text = palette.disabled_styled_text.paint(format!("{} ", text));
- let suffix_separator = palette.disabled_suffix_separator.paint(ARROW_SEPARATOR);
+ let suffix_separator = palette.disabled_suffix_separator.paint(separator);
LinePart {
part: format!("{}{}{}", prefix_separator, styled_text, suffix_separator),
len: text.chars().count() + 2 + 1, // 2 for the arrows, 1 for the padding in the end
}
}
-fn selected_mode_shortcut_single_letter(letter: char, palette: ColoredElements) -> LinePart {
+fn selected_mode_shortcut_single_letter(
+ letter: char,
+ palette: ColoredElements,
+ separator: &str,
+) -> LinePart {
let char_shortcut_text = format!(" {} ", letter);
let len = char_shortcut_text.chars().count() + 4; // 2 for the arrows, 2 for the padding
let prefix_separator = palette
.selected_single_letter_prefix_separator
- .paint(ARROW_SEPARATOR);
+ .paint(separator);
let char_shortcut = palette
.selected_single_letter_char_shortcut
.paint(char_shortcut_text);
let suffix_separator = palette
.selected_single_letter_suffix_separator
- .paint(ARROW_SEPARATOR);
+ .paint(separator);
LinePart {
part: ANSIStrings(&[prefix_separator, char_shortcut, suffix_separator]).to_string(),
len,
}
}
-fn unselected_mode_shortcut_single_letter(letter: char, palette: ColoredElements) -> LinePart {
+fn unselected_mode_shortcut_single_letter(
+ letter: char,
+ palette: ColoredElements,
+ separator: &str,
+) -> LinePart {
let char_shortcut_text = format!(" {} ", letter);
let len = char_shortcut_text.chars().count() + 4; // 2 for the arrows, 2 for the padding
let prefix_separator = palette
.unselected_single_letter_prefix_separator
- .paint(ARROW_SEPARATOR);
+ .paint(separator);
let char_shortcut = palette
.unselected_single_letter_char_shortcut
.paint(char_shortcut_text);
let suffix_separator = palette
.unselected_single_letter_suffix_separator
- .paint(ARROW_SEPARATOR);
+ .paint(separator);
LinePart {
part: ANSIStrings(&[prefix_separator, char_shortcut, suffix_separator]).to_string(),
len,
}
}
-fn full_ctrl_key(key: &CtrlKeyShortcut, palette: ColoredElements) -> LinePart {
+fn full_ctrl_key(key: &CtrlKeyShortcut, palette: ColoredElements, separator: &str) -> LinePart {
let full_text = key.full_text();
let letter_shortcut = key.letter_shortcut();
match key.mode {
- CtrlKeyMode::Unselected => {
- unselected_mode_shortcut(letter_shortcut, &format!(" {}", full_text), palette)
- }
- CtrlKeyMode::Selected => {
- selected_mode_shortcut(letter_shortcut, &format!(" {}", full_text), palette)
- }
- CtrlKeyMode::Disabled => {
- disabled_mode_shortcut(&format!(" <{}> {}", letter_shortcut, full_text), palette)
- }
+ CtrlKeyMode::Unselected => unselected_mode_shortcut(
+ letter_shortcut,
+ &format!(" {}", full_text),
+ palette,
+ separator,
+ ),
+ CtrlKeyMode::Selected => selected_mode_shortcut(
+ letter_shortcut,
+ &format!(" {}", full_text),
+ palette,
+ separator,
+ ),
+ CtrlKeyMode::Disabled => disabled_mode_shortcut(
+ &format!(" <{}> {}", letter_shortcut, full_text),
+ palette,
+ separator,
+ ),
}
}
-fn shortened_ctrl_key(key: &CtrlKeyShortcut, palette: ColoredElements) -> LinePart {
+fn shortened_ctrl_key(
+ key: &CtrlKeyShortcut,
+ palette: ColoredElements,
+ separator: &str,
+) -> LinePart {
let shortened_text = key.shortened_text();
let letter_shortcut = key.letter_shortcut();
let shortened_text = match key.action {
@@ -176,33 +206,47 @@ fn shortened_ctrl_key(key: &CtrlKeyShortcut, palette: ColoredElements) -> LinePa
};
match key.mode {
CtrlKeyMode::Unselected => {
- unselected_mode_shortcut(letter_shortcut, &shortened_text, palette)
+ unselected_mode_shortcut(letter_shortcut, &shortened_text, palette, separator)
+ }
+ CtrlKeyMode::Selected => {
+ selected_mode_shortcut(letter_shortcut, &shortened_text, palette, separator)
}
- CtrlKeyMode::Selected => selected_mode_shortcut(letter_shortcut, &shortened_text, palette),
- CtrlKeyMode::Disabled => disabled_mode_shortcut(
- &format!(" <{}>{}", letter_shortcut, shortened_text),
- palette,
- ),
CtrlKeyMode::Disabled => disabled_mode_shortcut(
&format!(" <{}>{}", letter_shortcut, shortened_text),
palette,
+ separator,
),
}
}
-fn single_letter_ctrl_key(key: &CtrlKeyShortcut, palette: ColoredElements) -> LinePart {
+fn single_letter_ctrl_key(
+ key: &CtrlKeyShortcut,
+ palette: ColoredElements,
+ separator: &str,
+) -> LinePart {
let letter_shortcut = key.letter_shortcut();
match key.mode {
- CtrlKeyMode::Unselected => unselected_mode_shortcut_single_letter(letter_shortcut, palette),
- CtrlKeyMode::Selected => selected_mode_shortcut_single_letter(letter_shortcut, palette),
- CtrlKeyMode::Disabled => disabled_mode_shortcut(&format!(" {}", letter_shortcut), palette),
+ CtrlKeyMode::Unselected => {
+ unselected_mode_shortcut_single_letter(letter_shortcut, palette, separator)
+ }
+ CtrlKeyMode::Selected => {
+ selected_mode_shortcut_single_letter(letter_shortcut, palette, separator)
+ }
+ CtrlKeyMode::Disabled => {
+ disabled_mode_shortcut(&format!(" {}", letter_shortcut), palette, separator)
+ }
}
}
-fn key_indicators(max_len: usize, keys: &[CtrlKeyShortcut], palette: ColoredElements) -> LinePart {
+fn key_indicators(
+ max_len: usize,
+ keys: &[CtrlKeyShortcut],
+ palette: ColoredElements,
+ separator: &str,
+) -> LinePart {
let mut line_part = LinePart::default();
for ctrl_key in keys {
- let key = full_ctrl_key(ctrl_key, palette);
+ let key = full_ctrl_key(ctrl_key, palette, separator);
line_part.part = format!("{}{}", line_part.part, key.part);
line_part.len += key.len;
}
@@ -211,7 +255,7 @@ fn key_indicators(max_len: usize, keys: &[CtrlKeyShortcut], palette: ColoredElem
}
line_part = LinePart::default();
for ctrl_key in keys {
- let key = shortened_ctrl_key(ctrl_key, palette);
+ let key = shortened_ctrl_key(ctrl_key, palette, separator);
line_part.part = format!("{}{}", line_part.part, key.part);
line_part.len += key.len;
}
@@ -220,7 +264,7 @@ fn key_indicators(max_len: usize, keys: &[CtrlKeyShortcut], palette: ColoredElem
}
line_part = LinePart::default();
for ctrl_key in keys {
- let key = single_letter_ctrl_key(ctrl_key, palette);
+ let key = single_letter_ctrl_key(ctrl_key, palette, separator);
line_part.part = format!("{}{}", line_part.part, key.part);
line_part.len += key.len;
}
@@ -231,17 +275,17 @@ fn key_indicators(max_len: usize, keys: &[CtrlKeyShortcut], palette: ColoredElem
line_part
}
-pub fn superkey(palette: ColoredElements) -> LinePart {
+pub fn superkey(palette: ColoredElements, separator: &str) -> LinePart {
let prefix_text = " Ctrl +";
let prefix = palette.superkey_prefix.paint(prefix_text);
- let suffix_separator = palette.superkey_suffix_separator.paint(ARROW_SEPARATOR);
+ let suffix_separator = palette.superkey_suffix_separator.paint(separator);
LinePart {
part: ANSIStrings(&[prefix, suffix_separator]).to_string(),
len: prefix_text.chars().count(),
}
}
-pub fn ctrl_keys(help: &ModeInfo, max_len: usize) -> LinePart {
+pub fn ctrl_keys(help: &ModeInfo, max_len: usize, separator: &str) -> LinePart {
let colored_elements = color_elements(help.palette);
match &help.mode {
InputMode::Locked => key_indicators(
@@ -255,6 +299,7 @@ pub fn ctrl_keys(help: &ModeInfo, max_len: usize) -> LinePart {
CtrlKeyShortcut::new(CtrlKeyMode::Disabled, CtrlKeyAction::Quit),
],
colored_elements,
+ separator,
),
InputMode::Resize => key_indicators(
max_len,
@@ -267,6 +312,7 @@ pub fn ctrl_keys(help: &ModeInfo, max_len: usize) -> LinePart {
CtrlKeyShortcut::new(CtrlKeyMode::Unselected, CtrlKeyAction::Quit),
],
colored_elements,
+ separator,
),
InputMode::Pane => key_indicators(
max_len,
@@ -279,6 +325,7 @@ pub fn ctrl_keys(help: &ModeInfo, max_len: usize) -> LinePart {
CtrlKeyShortcut::new(CtrlKeyMode::Unselected, CtrlKeyAction::Quit),
],
colored_elements,
+ separator,
),
InputMode::Tab | InputMode::RenameTab => key_indicators(
max_len,
@@ -291,6 +338,7 @@ pub fn ctrl_keys(help: &ModeInfo, max_len: usize) -> LinePart {
CtrlKeyShortcut::new(CtrlKeyMode::Unselected, CtrlKeyAction::Quit),
],
colored_elements,
+ separator,
),
InputMode::Scroll => key_indicators(
max_len,
@@ -303,6 +351,7 @@ pub fn ctrl_keys(help: &ModeInfo, max_len: usize) -> LinePart {
CtrlKeyShortcut::new(CtrlKeyMode::Unselected, CtrlKeyAction::Quit),
],
colored_elements,
+ separator,
),
InputMode::Normal => key_indicators(
max_len,
@@ -315,6 +364,7 @@ pub fn ctrl_keys(help: &ModeInfo, max_len: usize) -> LinePart {
CtrlKeyShortcut::new(CtrlKeyMode::Unselected, CtrlKeyAction::Quit),
],
colored_elements,
+ separator,
),
}
}
diff --git a/default-plugins/status-bar/src/main.rs b/default-plugins/status-bar/src/main.rs
index e1a79d49a..bb56c279a 100644
--- a/default-plugins/status-bar/src/main.rs
+++ b/default-plugins/status-bar/src/main.rs
@@ -140,9 +140,15 @@ impl ZellijPlugin for State {
}
fn render(&mut self, _rows: usize, cols: usize) {
+ let separator = if !self.mode_info.capabilities.arrow_fonts {
+ ARROW_SEPARATOR
+ } else {
+ &""
+ };
+
let colored_elements = color_elements(self.mode_info.palette);
- let superkey = superkey(colored_elements);
- let ctrl_keys = ctrl_keys(&self.mode_info, cols - superkey.len);
+ let superkey = superkey(colored_elements, separator);
+ let ctrl_keys = ctrl_keys(&self.mode_info, cols - superkey.len, separator);
let first_line = format!("{}{}", superkey, ctrl_keys);
let second_line = keybinds(&self.mode_info, cols);
diff --git a/default-plugins/tab-bar/src/line.rs b/default-plugins/tab-bar/src/line.rs
index 89a7aa1b3..574edb78d 100644
--- a/default-plugins/tab-bar/src/line.rs
+++ b/default-plugins/tab-bar/src/line.rs
@@ -48,7 +48,7 @@ fn populate_tabs_in_tab_line(
}
}
-fn left_more_message(tab_count_to_the_left: usize, palette: Palette) -> LinePart {
+fn left_more_message(tab_count_to_the_left: usize, palette: Palette, separator: &str) -> LinePart {
if tab_count_to_the_left == 0 {
return LinePart {
part: String::new(),
@@ -62,11 +62,11 @@ fn left_more_message(tab_count_to_the_left: usize, palette: Palette) -> LinePart
};
// 238
let more_text_len = more_text.chars().count() + 2; // 2 for the arrows
- let left_separator = style!(palette.bg, palette.orange).paint(ARROW_SEPARATOR);
+ let left_separator = style!(palette.bg, palette.orange).paint(separator);
let more_styled_text = style!(palette.black, palette.orange)
.bold()
.paint(more_text);
- let right_separator = style!(palette.orange, palette.bg).paint(ARROW_SEPARATOR);
+ let right_separator = style!(palette.orange, palette.bg).paint(separator);
let more_styled_text = format!(
"{}",
ANSIStrings(&[left_separator, more_styled_text, right_separator,])
@@ -77,7 +77,11 @@ fn left_more_message(tab_count_to_the_left: usize, palette: Palette) -> LinePart
}
}
-fn right_more_message(tab_count_to_the_right: usize, palette: Palette) -> LinePart {
+fn right_more_message(
+ tab_count_to_the_right: usize,
+ palette: Palette,
+ separator: &str,
+) -> LinePart {
if tab_count_to_the_right == 0 {
return LinePart {
part: String::new(),
@@ -90,11 +94,11 @@ fn right_more_message(tab_count_to_the_right: usize, palette: Palette) -> LinePa
" +many → ".to_string()
};
let more_text_len = more_text.chars().count() + 1; // 2 for the arrow
- let left_separator = style!(palette.bg, palette.orange).paint(ARROW_SEPARATOR);
+ let left_separator = style!(palette.bg, palette.orange).paint(separator);
let more_styled_text = style!(palette.black, palette.orange)
.bold()
.paint(more_text);
- let right_separator = style!(palette.orange, palette.bg).paint(ARROW_SEPARATOR);
+ let right_separator = style!(palette.orange, palette.bg).paint(separator);
let more_styled_text = format!(
"{}",
ANSIStrings(&[left_separator, more_styled_text, right_separator,])
@@ -111,14 +115,15 @@ fn add_previous_tabs_msg(
title_bar: &mut Vec<LinePart>,
cols: usize,
palette: Palette,
+ separator: &str,
) {
while get_current_title_len(&tabs_to_render)
- + left_more_message(tabs_before_active.len(), palette).len
+ + left_more_message(tabs_before_active.len(), palette, separator).len
>= cols
{
tabs_before_active.push(tabs_to_render.remove(0));
}
- let left_more_message = left_more_message(tabs_before_active.len(), palette);
+ let left_more_message = left_more_message(tabs_before_active.len(), palette, separator);
title_bar.push(left_more_message);
}
@@ -127,14 +132,15 @@ fn add_next_tabs_msg(
title_bar: &mut Vec<LinePart>,
cols: usize,
palette: Palette,
+ separator: &str,
) {
while get_current_title_len(&title_bar)
- + right_more_message(tabs_after_active.len(), palette).len
+ + right_more_message(tabs_after_active.len(), palette, separator).len
>= cols
{
tabs_after_active.insert(0, title_bar.pop().unwrap());
}
- let right_more_message = right_more_message(tabs_after_active.len(), palette);
+ let right_more_message = right_more_message(tabs_after_active.len(), palette, separator);
title_bar.push(right_more_message);
}
@@ -148,11 +154,20 @@ fn tab_line_prefix(palette: Palette) -> LinePart {
}
}
+pub fn tab_separator(capabilities: PluginCapabilities) -> &'static str {
+ if !capabilities.arrow_fonts {
+ ARROW_SEPARATOR
+ } else {
+ &""
+ }
+}
+
pub fn tab_line(
mut all_tabs: Vec<LinePart>,
active_tab_index: usize,
cols: usize,
palette: Palette,
+ capabilities: PluginCapabilities,
) -> Vec<LinePart> {
let mut tabs_to_render: Vec<LinePart> = vec![];
let mut tabs_after_active = all_tabs.split_off(active_tab_index);
@@ -180,6 +195,7 @@ pub fn tab_line(
&mut tab_line,
cols - prefix.len,
palette,
+ tab_separator(capabilities),
);
}
tab_line.append(&mut tabs_to_render);
@@ -189,6 +205,7 @@ pub fn tab_line(
&mut tab_line,
cols - prefix.len,
palette,
+ tab_separator(capabilities),
);
}
tab_line.insert(0, prefix);
diff --git a/default-plugins/tab-bar/src/main.rs b/default-plugins/tab-bar/src/main.rs
index c62770137..00ff4bd96 100644
--- a/default-plugins/tab-bar/src/main.rs
+++ b/default-plugins/tab-bar/src/main.rs
@@ -60,10 +60,17 @@ impl ZellijPlugin for State {
t.position,
t.is_sync_panes_active,
self.mode_info.palette,
+ self.mode_info.capabilities,
);
all_tabs.push(tab);
}
- let tab_line = tab_line(all_tabs, active_tab_index, cols, self.mode_info.palette);
+ let tab_line = tab_line(
+ all_tabs,
+ active_tab_index,
+ cols,
+ self.mode_info.palette,
+ self.mode_info.capabilities,
+ );
let mut s = String::new();
for bar_part in tab_line {
s = format!("{}{}", s, bar_part.part);
diff --git a/default-plugins/tab-bar/src/tab.rs b/default-plugins/tab-bar/src/tab.rs
index 7c1fe6b32..85e2c378d 100644
--- a/default-plugins/tab-bar/src/tab.rs
+++ b/default-plugins/tab-bar/src/tab.rs
@@ -1,15 +1,15 @@
-use crate::{LinePart, ARROW_SEPARATOR};
+use crate::{line::tab_separator, LinePart};
use ansi_term::ANSIStrings;
use zellij_tile::prelude::*;
use zellij_tile_utils::style;
-pub fn active_tab(text: String, palette: Palette) -> LinePart {
- let left_separator = style!(palette.bg, palette.green).paint(ARROW_SEPARATOR);
+pub fn active_tab(text: String, palette: Palette, separator: &str) -> LinePart {
+ let left_separator = style!(palette.bg, palette.green).paint(separator);
let tab_text_len = text.chars().count() + 4; // 2 for left and right separators, 2 for the text padding
let tab_styled_text = style!(palette.black, palette.green)
.bold()
.paint(format!(" {} ", text));
- let right_separator = style!(palette.green, palette.bg).paint(ARROW_SEPARATOR);
+ let right_separator = style!(palette.green, palette.bg).paint(separator);
let tab_styled_text = format!(
"{}",
ANSIStrings(&[left_separator, tab_styled_text, right_separator,])
@@ -20,13 +20,13 @@ pub fn active_tab(text: String, palette: Palette) -> LinePart {
}
}
-pub fn non_active_tab(text: String, palette: Palette) -> LinePart {
- let left_separator = style!(palette.bg, palette.fg).paint(ARROW_SEPARATOR);
+pub fn non_active_tab(text: String, palette: Palette, separator: &str) -> LinePart {
+ let left_separator = style!(palette.bg, palette.fg).paint(separator);
let tab_text_len = text.chars().count() + 4; // 2 for left and right separators, 2 for the padding
let tab_styled_text = style!(palette.black, palette.fg)
.bold()
.paint(f