diff --git a/src/list/state.rs b/src/list/state.rs index 117740c..53fed9a 100644 --- a/src/list/state.rs +++ b/src/list/state.rs @@ -43,7 +43,6 @@ pub struct ListState<'a> { filter: Filter, term_width: u16, term_height: u16, - separator_line: Vec, show_footer: bool, pub search_query: String, } @@ -77,7 +76,6 @@ impl<'a> ListState<'a> { // Set by `set_term_size` term_width: 0, term_height: 0, - separator_line: Vec::new(), show_footer: true, search_query: String::new(), }; @@ -97,14 +95,10 @@ impl<'a> ListState<'a> { } let header_height = 1; - // 2 separators, 1 progress bar, 2 footer message lines. - let footer_height = 5; + // 1 progress bar, 2 footer message lines. + let footer_height = 3; self.show_footer = height > header_height + footer_height; - if self.show_footer { - self.separator_line = "─".as_bytes().repeat(width as usize); - } - self.scroll_state.set_max_n_rows_to_display( height.saturating_sub(header_height + u16::from(self.show_footer) * footer_height) as usize, @@ -204,9 +198,6 @@ impl<'a> ListState<'a> { } if self.show_footer { - stdout.write_all(&self.separator_line)?; - next_ln(stdout)?; - progress_bar( &mut MaxLenWriter::new(stdout, self.term_width as usize), self.app_state.n_done(), @@ -215,9 +206,6 @@ impl<'a> ListState<'a> { )?; next_ln(stdout)?; - stdout.write_all(&self.separator_line)?; - next_ln(stdout)?; - let mut writer = MaxLenWriter::new(stdout, self.term_width as usize); if self.message.is_empty() { // Help footer message diff --git a/src/term.rs b/src/term.rs index ee8dbf8..489d658 100644 --- a/src/term.rs +++ b/src/term.rs @@ -5,7 +5,7 @@ use std::{ use crossterm::{ cursor::MoveTo, - style::{Attribute, Color, ResetColor, SetAttribute, SetForegroundColor}, + style::{Attribute, Color, SetAttribute, SetForegroundColor}, terminal::{Clear, ClearType}, Command, QueueableCommand, }; @@ -93,20 +93,19 @@ pub fn progress_bar<'a>( total: u16, line_width: u16, ) -> io::Result<()> { + debug_assert!(total < 1000); debug_assert!(progress <= total); const PREFIX: &[u8] = b"Progress: ["; const PREFIX_WIDTH: u16 = PREFIX.len() as u16; - // Leaving the last char empty (_) for `total` > 99. - const POSTFIX_WIDTH: u16 = "] xxx/xx exercises_".len() as u16; + const POSTFIX_WIDTH: u16 = "] xxx/xxx".len() as u16; const WRAPPER_WIDTH: u16 = PREFIX_WIDTH + POSTFIX_WIDTH; const MIN_LINE_WIDTH: u16 = WRAPPER_WIDTH + 4; if line_width < MIN_LINE_WIDTH { writer.write_ascii(b"Progress: ")?; // Integers are in ASCII. - writer.write_ascii(format!("{progress}/{total}").as_bytes())?; - return writer.write_ascii(b" exercises"); + return writer.write_ascii(format!("{progress}/{total}").as_bytes()); } let stdout = writer.stdout(); @@ -133,8 +132,9 @@ pub fn progress_bar<'a>( } } - stdout.queue(ResetColor)?; - write!(stdout, "] {progress:>3}/{total} exercises") + stdout.queue(SetForegroundColor(Color::Reset))?; + + write!(stdout, "] {progress:>3}/{total}") } pub fn clear_terminal(stdout: &mut StdoutLock) -> io::Result<()> {