fix(tab-bar): don't crash at small widths

This commit is contained in:
Brooks J Rady 2021-08-28 21:41:14 +01:00
parent 4af159574c
commit e54dfab40f
2 changed files with 12 additions and 11 deletions

View file

@ -48,10 +48,7 @@ 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) -> LinePart {
if tab_count_to_the_left == 0 { if tab_count_to_the_left == 0 {
return LinePart { return LinePart::default();
part: String::new(),
len: 0,
};
} }
let more_text = if tab_count_to_the_left < 10000 { let more_text = if tab_count_to_the_left < 10000 {
format!(" ← +{} ", tab_count_to_the_left) format!(" ← +{} ", tab_count_to_the_left)
@ -81,10 +78,7 @@ fn right_more_message(
separator: &str, separator: &str,
) -> LinePart { ) -> LinePart {
if tab_count_to_the_right == 0 { if tab_count_to_the_right == 0 {
return LinePart { return LinePart::default();
part: String::new(),
len: 0,
};
}; };
let more_text = if tab_count_to_the_right < 10000 { let more_text = if tab_count_to_the_right < 10000 {
format!(" +{}", tab_count_to_the_right) format!(" +{}", tab_count_to_the_right)
@ -118,11 +112,15 @@ fn add_previous_tabs_msg(
while get_current_title_len(tabs_to_render) while get_current_title_len(tabs_to_render)
+ left_more_message(tabs_before_active.len(), palette, separator).len + left_more_message(tabs_before_active.len(), palette, separator).len
>= cols >= cols
&& !tabs_to_render.is_empty()
{ {
tabs_before_active.push(tabs_to_render.remove(0)); tabs_before_active.push(tabs_to_render.remove(0));
} }
let left_more_message = left_more_message(tabs_before_active.len(), palette, separator); let left_more_message = left_more_message(tabs_before_active.len(), palette, separator);
if left_more_message.len <= cols {
title_bar.push(left_more_message); title_bar.push(left_more_message);
}
} }
fn add_next_tabs_msg( fn add_next_tabs_msg(
@ -135,11 +133,14 @@ fn add_next_tabs_msg(
while get_current_title_len(title_bar) while get_current_title_len(title_bar)
+ right_more_message(tabs_after_active.len(), palette, separator).len + right_more_message(tabs_after_active.len(), palette, separator).len
>= cols >= cols
&& !title_bar.is_empty()
{ {
tabs_after_active.insert(0, title_bar.pop().unwrap()); tabs_after_active.insert(0, title_bar.pop().unwrap());
} }
let right_more_message = right_more_message(tabs_after_active.len(), palette, separator); let right_more_message = right_more_message(tabs_after_active.len(), palette, separator);
if right_more_message.len < cols {
title_bar.push(right_more_message); title_bar.push(right_more_message);
}
} }
fn tab_line_prefix(session_name: Option<&str>, palette: Palette, cols: usize) -> Vec<LinePart> { fn tab_line_prefix(session_name: Option<&str>, palette: Palette, cols: usize) -> Vec<LinePart> {

View file

@ -6,7 +6,7 @@ use zellij_tile::prelude::*;
use crate::line::tab_line; use crate::line::tab_line;
use crate::tab::tab_style; use crate::tab::tab_style;
#[derive(Debug)] #[derive(Debug, Default)]
pub struct LinePart { pub struct LinePart {
part: String, part: String,
len: usize, len: usize,