diff options
| author | denis <denismaximov98@gmail.com> | 2021-04-22 11:45:29 +0300 |
|---|---|---|
| committer | denis <denismaximov98@gmail.com> | 2021-04-22 11:45:29 +0300 |
| commit | 8d98ca7da0bc278a832e4e7de23ff63a84deb529 (patch) | |
| tree | e7fdfaa6c1ae25e7737dbb36bd1dbcb94d62ab47 /default-plugins/tab-bar/src/tab.rs | |
| parent | wip: fixing the first arrow (diff) | |
| parent | fix(cargo): reduce crate size by 4.8MB using `cargo diet`, to 77kB (diff) | |
| download | sl0ppij-8d98ca7da0bc278a832e4e7de23ff63a84deb529.tar.gz sl0ppij-8d98ca7da0bc278a832e4e7de23ff63a84deb529.tar.xz sl0ppij-8d98ca7da0bc278a832e4e7de23ff63a84deb529.zip | |
wip: merge main in
Diffstat (limited to 'default-plugins/tab-bar/src/tab.rs')
| -rw-r--r-- | default-plugins/tab-bar/src/tab.rs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/default-plugins/tab-bar/src/tab.rs b/default-plugins/tab-bar/src/tab.rs new file mode 100644 index 00000000..375d8c46 --- /dev/null +++ b/default-plugins/tab-bar/src/tab.rs @@ -0,0 +1,67 @@ +use crate::colors::{BLACK, BRIGHT_GRAY, GRAY, GREEN}; +use crate::{LinePart, ARROW_SEPARATOR}; +use ansi_term::{ANSIStrings, Color::RGB, Style}; +use zellij_tile::data::Palette; + +pub fn active_tab(text: String, palette: Palette) -> LinePart { + let left_separator = Style::new() + .fg(RGB(palette.black.0, palette.black.1, palette.black.2)) + .on(RGB(palette.green.0, palette.green.1, palette.green.2)) + .paint(ARROW_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::new() + .fg(RGB(palette.black.0, palette.black.1, palette.black.2)) + .on(RGB(palette.green.0, palette.green.1, palette.green.2)) + .bold() + .paint(format!(" {} ", text)); + let right_separator = Style::new() + .fg(RGB(palette.green.0, palette.green.1, palette.green.2)) + .on(RGB(palette.bg.0, palette.bg.1, palette.bg.2)) + .paint(ARROW_SEPARATOR); + let tab_styled_text = format!( + "{}", + ANSIStrings(&[left_separator, tab_styled_text, right_separator,]) + ); + LinePart { + part: tab_styled_text, + len: tab_text_len, + } +} + +pub fn non_active_tab(text: String, palette: Palette) -> LinePart { + let left_separator = Style::new() + .fg(RGB(palette.fg.0, palette.fg.1, palette.fg.2)) + .on(RGB(palette.bg.0, palette.bg.1, palette.bg.2)) + .paint(ARROW_SEPARATOR); + let tab_text_len = text.chars().count() + 4; // 2 for left and right separators, 2 for the padding + let tab_styled_text = Style::new() + .fg(RGB(palette.fg.0, palette.fg.1, palette.fg.2)) + .on(RGB(palette.bg.0, palette.bg.1, palette.bg.2)) + .bold() + .paint(format!(" {} ", text)); + let right_separator = Style::new() + .fg(RGB(palette.fg.0, palette.fg.1, palette.fg.2)) + .on(RGB(palette.bg.0, palette.bg.1, palette.bg.2)) + .paint(ARROW_SEPARATOR); + let tab_styled_text = format!( + "{}", + ANSIStrings(&[left_separator, tab_styled_text, right_separator,]) + ); + LinePart { + part: tab_styled_text, + len: tab_text_len, + } +} + +pub fn tab_style(text: String, is_active_tab: bool, position: usize, palette: Palette) -> LinePart { + let tab_text = if text.is_empty() { + format!("Tab #{}", position + 1) + } else { + text + }; + if is_active_tab { + active_tab(tab_text, palette) + } else { + non_active_tab(tab_text, palette) + } +} |
