aboutsummaryrefslogtreecommitdiffstats
path: root/default-plugins/tab-bar/src/tab.rs
diff options
context:
space:
mode:
authordenis <denismaximov98@gmail.com>2021-04-22 11:45:29 +0300
committerdenis <denismaximov98@gmail.com>2021-04-22 11:45:29 +0300
commit8d98ca7da0bc278a832e4e7de23ff63a84deb529 (patch)
treee7fdfaa6c1ae25e7737dbb36bd1dbcb94d62ab47 /default-plugins/tab-bar/src/tab.rs
parentwip: fixing the first arrow (diff)
parentfix(cargo): reduce crate size by 4.8MB using `cargo diet`, to 77kB (diff)
downloadsl0ppij-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.rs67
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)
+ }
+}