summaryrefslogtreecommitdiffstats
path: root/default-plugins/tab-bar/src/line.rs
diff options
context:
space:
mode:
Diffstat (limited to 'default-plugins/tab-bar/src/line.rs')
-rw-r--r--default-plugins/tab-bar/src/line.rs32
1 files changed, 29 insertions, 3 deletions
diff --git a/default-plugins/tab-bar/src/line.rs b/default-plugins/tab-bar/src/line.rs
index 8341f142f..1022cda46 100644
--- a/default-plugins/tab-bar/src/line.rs
+++ b/default-plugins/tab-bar/src/line.rs
@@ -26,8 +26,24 @@ fn populate_tabs_in_tab_line(
loop {
let left_count = tabs_before_active.len();
let right_count = tabs_after_active.len();
- let collapsed_left = left_more_message(left_count, palette, tab_separator(capabilities));
- let collapsed_right = right_more_message(right_count, palette, tab_separator(capabilities));
+
+ // left_more_tab_index is first tab to the left of the leftmost visible tab
+ let left_more_tab_index = left_count.saturating_sub(1);
+ let collapsed_left = left_more_message(
+ left_count,
+ palette,
+ tab_separator(capabilities),
+ left_more_tab_index,
+ );
+
+ // right_more_tab_index is the first tab to the right of the rightmost visible tab
+ let right_more_tab_index = left_count + tabs_to_render.len();
+ let collapsed_right = right_more_message(
+ right_count,
+ palette,
+ tab_separator(capabilities),
+ right_more_tab_index,
+ );
let total_size = collapsed_left.len + middle_size + collapsed_right.len;
@@ -90,7 +106,12 @@ fn populate_tabs_in_tab_line(
}
}
-fn left_more_message(tab_count_to_the_left: usize, palette: Palette, separator: &str) -> LinePart {
+fn left_more_message(
+ tab_count_to_the_left: usize,
+ palette: Palette,
+ separator: &str,
+ tab_index: usize,
+) -> LinePart {
if tab_count_to_the_left == 0 {
return LinePart::default();
}
@@ -114,6 +135,7 @@ fn left_more_message(tab_count_to_the_left: usize, palette: Palette, separator:
LinePart {
part: more_styled_text,
len: more_text_len,
+ tab_index: Some(tab_index),
}
}
@@ -121,6 +143,7 @@ fn right_more_message(
tab_count_to_the_right: usize,
palette: Palette,
separator: &str,
+ tab_index: usize,
) -> LinePart {
if tab_count_to_the_right == 0 {
return LinePart::default();
@@ -144,6 +167,7 @@ fn right_more_message(
LinePart {
part: more_styled_text,
len: more_text_len,
+ tab_index: Some(tab_index),
}
}
@@ -163,6 +187,7 @@ fn tab_line_prefix(session_name: Option<&str>, palette: Palette, cols: usize) ->
let mut parts = vec![LinePart {
part: prefix_styled_text.to_string(),
len: prefix_text_len,
+ tab_index: None,
}];
if let Some(name) = session_name {
let name_part = format!("({}) ", name);
@@ -176,6 +201,7 @@ fn tab_line_prefix(session_name: Option<&str>, palette: Palette, cols: usize) ->
parts.push(LinePart {
part: name_part_styled_text.to_string(),
len: name_part_len,
+ tab_index: None,
})
}
}