diff options
| author | Daniel Jankowski <daniel.jankowski@rub.de> | 2024-02-04 11:37:39 +0100 |
|---|---|---|
| committer | Daniel Jankowski <daniel.jankowski@rub.de> | 2024-02-04 11:37:39 +0100 |
| commit | 69804f87be1f9e12234ea1a745c819c4d2aa8c57 (patch) | |
| tree | 3d81a51a2200620cda486d8e6e2a95a87a117abb /src | |
| parent | feat: add separator for tabs (diff) | |
| download | sl0pstatus-69804f87be1f9e12234ea1a745c819c4d2aa8c57.tar.gz sl0pstatus-69804f87be1f9e12234ea1a745c819c4d2aa8c57.tar.xz sl0pstatus-69804f87be1f9e12234ea1a745c819c4d2aa8c57.zip | |
fix: char count for multi-cell chars
fixes #37
Diffstat (limited to 'src')
| -rw-r--r-- | src/config.rs | 21 | ||||
| -rw-r--r-- | src/widgets/tabs.rs | 10 |
2 files changed, 16 insertions, 15 deletions
diff --git a/src/config.rs b/src/config.rs index 736edbb..2853a95 100644 --- a/src/config.rs +++ b/src/config.rs @@ -130,7 +130,7 @@ impl ModuleConfig { ) }); - let widget_spacer = strip_ansi_escapes::strip_str(self.get_spacer( + let widget_spacer_len = console::measure_text_width(&self.get_spacer( &" ".repeat(left_len), &output_right, state.cols, @@ -146,7 +146,7 @@ impl ModuleConfig { widget_string_right, widget_map, &state, - left_len + widget_spacer.len(), + left_len + widget_spacer_len, ); } @@ -177,21 +177,26 @@ impl ModuleConfig { }; let pos = match rendered_output.find(match_name) { - Some(pos) => pos, + Some(_pos) => { + let pref = rendered_output.split(match_name).collect::<Vec<&str>>()[0]; + console::measure_text_width(pref) + } None => continue, }; - let wid_res = strip_ansi_escapes::strip_str(wid.process(wid_name, state)); + let wid_res = wid.process(wid_name, state); rendered_output = rendered_output.replace(match_name, &wid_res); - if click_pos < pos + offset || click_pos > pos + offset + wid_res.len() { + if click_pos < pos + offset + || click_pos > pos + offset + console::measure_text_width(&wid_res) + { continue; } wid.process_click(state, click_pos - pos + offset); } - rendered_output.len() + console::measure_text_width(&rendered_output) } pub fn render_bar( @@ -246,8 +251,8 @@ impl ModuleConfig { } fn get_spacer(&self, output_left: &str, output_right: &str, cols: usize) -> String { - let text_count = strip_ansi_escapes::strip_str(output_left).chars().count() - + strip_ansi_escapes::strip_str(output_right).chars().count(); + let text_count = + console::measure_text_width(output_left) + console::measure_text_width(output_right); // verify we are able to count the difference, since zellij sometimes drops a col // count of 0 on tab creation diff --git a/src/widgets/tabs.rs b/src/widgets/tabs.rs index 5e36378..4769d31 100644 --- a/src/widgets/tabs.rs +++ b/src/widgets/tabs.rs @@ -86,8 +86,6 @@ impl Widget for TabsWidget { } fn process_click(&self, state: &ZellijState, pos: usize) { - let mut output = "".to_owned(); - let mut offset = 0; let mut index = 1; let mut counter = 0; @@ -103,18 +101,16 @@ impl Widget for TabsWidget { } } - let content = strip_ansi_escapes::strip_str(rendered_content); + let content_len = console::measure_text_width(&rendered_content); - if pos > offset && pos < offset + content.chars().count() { + if pos > offset && pos < offset + content_len { switch_tab_to(index); break; } index += 1; - offset += content.chars().count(); - - output = format!("{}{}", output, content); + offset += content_len; } } } |
