aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Jankowski <daniel.jankowski@rub.de>2024-02-04 11:37:39 +0100
committerDaniel Jankowski <daniel.jankowski@rub.de>2024-02-04 11:37:39 +0100
commit69804f87be1f9e12234ea1a745c819c4d2aa8c57 (patch)
tree3d81a51a2200620cda486d8e6e2a95a87a117abb /src
parentfeat: add separator for tabs (diff)
downloadsl0pstatus-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.rs21
-rw-r--r--src/widgets/tabs.rs10
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;
}
}
}