From aae9c9c807d5990fb3cdc6fcb3fd0bb8c3c3c7f2 Mon Sep 17 00:00:00 2001 From: Paulo Coelho <9609090+prscoelho@users.noreply.github.com> Date: Sun, 12 Sep 2021 19:29:07 +0100 Subject: Calculate width with unicode-width in tab-bar and utils (#709) * fix(tab-bar): calculate string width using unicode-width * fix(utils): calculate ansi_len using unicode-width --- default-plugins/tab-bar/Cargo.toml | 1 + default-plugins/tab-bar/src/line.rs | 7 ++++--- default-plugins/tab-bar/src/tab.rs | 5 +++-- 3 files changed, 8 insertions(+), 5 deletions(-) (limited to 'default-plugins') diff --git a/default-plugins/tab-bar/Cargo.toml b/default-plugins/tab-bar/Cargo.toml index dd91bdb5c..7fd6593dd 100644 --- a/default-plugins/tab-bar/Cargo.toml +++ b/default-plugins/tab-bar/Cargo.toml @@ -8,5 +8,6 @@ license = "MIT" [dependencies] colored = "2" ansi_term = "0.12" +unicode-width = "0.1.8" zellij-tile = { path = "../../zellij-tile" } zellij-tile-utils = { path = "../../zellij-tile-utils" } \ No newline at end of file diff --git a/default-plugins/tab-bar/src/line.rs b/default-plugins/tab-bar/src/line.rs index be5623ff9..af78b0fcf 100644 --- a/default-plugins/tab-bar/src/line.rs +++ b/default-plugins/tab-bar/src/line.rs @@ -1,4 +1,5 @@ use ansi_term::ANSIStrings; +use unicode_width::UnicodeWidthStr; use crate::{LinePart, ARROW_SEPARATOR}; use zellij_tile::prelude::*; @@ -100,7 +101,7 @@ fn left_more_message(tab_count_to_the_left: usize, palette: Palette, separator: }; // 238 // chars length plus separator length on both sides - let more_text_len = more_text.chars().count() + 2 * separator.chars().count(); + let more_text_len = more_text.width() + 2 * separator.width(); let left_separator = style!(palette.cyan, palette.orange).paint(separator); let more_styled_text = style!(palette.black, palette.orange) .bold() @@ -130,7 +131,7 @@ fn right_more_message( " +many → ".to_string() }; // chars length plus separator length on both sides - let more_text_len = more_text.chars().count() + 2 * separator.chars().count(); + let more_text_len = more_text.width() + 2 * separator.width(); let left_separator = style!(palette.cyan, palette.orange).paint(separator); let more_styled_text = style!(palette.black, palette.orange) .bold() @@ -159,7 +160,7 @@ fn tab_line_prefix(session_name: Option<&str>, palette: Palette, cols: usize) -> }]; if let Some(name) = session_name { let name_part = format!("({}) ", name); - let name_part_len = name_part.chars().count(); + let name_part_len = name_part.width(); let name_part_styled_text = style!(palette.white, palette.cyan).bold().paint(name_part); if cols.saturating_sub(prefix_text_len) >= name_part_len { parts.push(LinePart { diff --git a/default-plugins/tab-bar/src/tab.rs b/default-plugins/tab-bar/src/tab.rs index dfa5ab776..fdb498553 100644 --- a/default-plugins/tab-bar/src/tab.rs +++ b/default-plugins/tab-bar/src/tab.rs @@ -1,11 +1,12 @@ use crate::{line::tab_separator, LinePart}; use ansi_term::ANSIStrings; +use unicode_width::UnicodeWidthStr; use zellij_tile::prelude::*; use zellij_tile_utils::style; pub fn active_tab(text: String, palette: Palette, separator: &str) -> LinePart { let left_separator = style!(palette.cyan, palette.green).paint(separator); - let tab_text_len = text.chars().count() + 2 + separator.chars().count() * 2; // 2 for left and right separators, 2 for the text padding + let tab_text_len = text.width() + 2 + separator.width() * 2; // 2 for left and right separators, 2 for the text padding let tab_styled_text = style!(palette.black, palette.green) .bold() .paint(format!(" {} ", text)); @@ -22,7 +23,7 @@ pub fn active_tab(text: String, palette: Palette, separator: &str) -> LinePart { pub fn non_active_tab(text: String, palette: Palette, separator: &str) -> LinePart { let left_separator = style!(palette.cyan, palette.fg).paint(separator); - let tab_text_len = text.chars().count() + 2 + separator.chars().count() * 2; // 2 for left and right separators, 2 for the text padding + let tab_text_len = text.width() + 2 + separator.width() * 2; // 2 for left and right separators, 2 for the text padding let tab_styled_text = style!(palette.black, palette.fg) .bold() .paint(format!(" {} ", text)); -- cgit v1.2.3