From 85f7b7af036a8f3b847de6d5e7667b9e937219cc Mon Sep 17 00:00:00 2001 From: shy Date: Sun, 11 Apr 2021 18:09:26 +0200 Subject: [PATCH] Modify clock style when paused. --- src/buffer.rs | 11 ++++----- src/clock.rs | 64 +++++++++++++++++++++++++++------------------------ src/lib.rs | 41 +++++++++++---------------------- 3 files changed, 53 insertions(+), 63 deletions(-) diff --git a/src/buffer.rs b/src/buffer.rs index e0cef85..007d675 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -94,12 +94,11 @@ impl Buffer { // Write error message if present and return. if let Some(msg) = self.message { write!(stdout, - "{}{}{}{}{}{}", + "{}{}{}{}{}{}{}", cursor::Hide, - cursor::Goto( - layout.buffer.col + (PROMPT.len() as u16), - layout.buffer.line), - clear::UntilNewline, + cursor::Goto( layout.buffer.col, layout.buffer.line), + clear::CurrentLine, + PROMPT, color::Fg(color::LightRed), &msg, color::Fg(color::Reset))?; @@ -110,7 +109,7 @@ impl Buffer { write!(stdout, "{}{}{}{}{}", cursor::Goto(layout.buffer.col, layout.buffer.line), - clear::UntilNewline, + clear::CurrentLine, PROMPT, cursor::Show, &self.content)?; diff --git a/src/clock.rs b/src/clock.rs index 223a582..3489ca2 100644 --- a/src/clock.rs +++ b/src/clock.rs @@ -1,12 +1,11 @@ use std::time; use std::io::Write; -use termion::{color, cursor}; +use termion::{color, cursor, style}; use termion::raw::RawTerminal; use crate::consts::COLOR; use crate::consts::digits::*; use crate::layout::{Layout, Position}; - pub struct Clock { pub start: time::Instant, pub elapsed: u32, @@ -149,12 +148,12 @@ impl Clock { pos: &Position, plain: bool, ) { + if self.paused { + write!(stdout, "{}", style::Faint).unwrap(); + } + if let Some(c) = self.color_index { - write!(stdout, - "{}{}", - cursor::Goto(pos.col, pos.line), - color::Fg(COLOR[c])) - .unwrap(); + write!(stdout, "{}", color::Fg(COLOR[c])).unwrap(); } for l in 0..DIGIT_HEIGHT { @@ -179,10 +178,10 @@ impl Clock { } } - if self.color_index != None { + if self.paused || self.color_index != None { write!(stdout, "{}{}", - cursor::Goto(pos.col + DIGIT_WIDTH + 1, pos.line + DIGIT_HEIGHT), + style::NoFaint, color::Fg(color::Reset)) .unwrap(); } @@ -196,27 +195,32 @@ impl Clock { ) { let dot = if plain {'█'} else {'■'}; - match self.color_index { - Some(c) => { - write!(stdout, - "{}{}{}{}{}{}", - cursor::Goto(pos.col, pos.line + 1), - color::Fg(COLOR[c]), - dot, - cursor::Goto(pos.col, pos.line + 3), - dot, - color::Fg(color::Reset)) - .unwrap(); - } - None => { - write!(stdout, - "{}{}{}{}", - cursor::Goto(pos.col, pos.line + 1), - dot, - cursor::Goto(pos.col, pos.line + 3), - dot) - .unwrap(); - } + if self.paused { + write!(stdout, "{}", style::Faint).unwrap(); + } + + if let Some(c) = self.color_index { + write!(stdout, + "{}{}{}{}{}{}", + cursor::Goto(pos.col, pos.line + 1), + color::Fg(COLOR[c]), + dot, + cursor::Goto(pos.col, pos.line + 3), + dot, + color::Fg(color::Reset)) + .unwrap(); + } else { + write!(stdout, + "{}{}{}{}", + cursor::Goto(pos.col, pos.line + 1), + dot, + cursor::Goto(pos.col, pos.line + 3), + dot) + .unwrap(); + } + + if self.paused { + write!(stdout, "{}", style::NoFaint).unwrap(); } } } diff --git a/src/lib.rs b/src/lib.rs index b92db3b..e684956 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -49,9 +49,6 @@ pub fn run( let mut countdown = Countdown::new(); let mut buffer = Buffer::new(); - // State variables. - // Request redraw of menu. - let mut update_menu = false; // Are we in insert mode? let mut insert_mode = false; @@ -159,22 +156,9 @@ pub fn run( // Clear the window and redraw menu bar, alarm roster and buffer if // requested. if layout.force_redraw { - write!(stdout, "{}", clear::All)?; - - // Redraw list of alarms. - alarm_roster.draw(&mut stdout, &mut layout); - - // Redraw buffer. - buffer.draw(&mut stdout, &mut layout)?; - - // Schedule menu redraw. - update_menu = true; - } - - if update_menu { - update_menu = false; + // Write menu at the top. write!(stdout, - "{}{}{}{}", + "{}{}{}{}{}", cursor::Goto(1, 1), style::Faint, // Switch menu bars. Use a compressed version or none at @@ -185,7 +169,14 @@ pub fn run( false if layout.can_hold(MENUBAR_SHORT) => MENUBAR_SHORT, _ => "", }, - style::Reset)?; + clear::AfterCursor, + style::NoFaint)?; + + // Redraw list of alarms. + alarm_roster.draw(&mut stdout, &mut layout); + + // Redraw buffer. + buffer.draw(&mut stdout, &mut layout)?; } clock.draw(&mut stdout, &layout); @@ -221,7 +212,7 @@ pub fn run( stdout.flush()?; } - // Update buffer whenever the cursor is visible. + // Update buffer whenever the cursor should be visible. if insert_mode || buffer.altered { buffer.draw(&mut stdout, &mut layout)?; stdout.flush()?; @@ -239,25 +230,22 @@ pub fn run( } else { // Input buffer processed without error. layout.set_roster_width(alarm_roster.width()); - layout.force_redraw = true; } buffer.clear(); insert_mode = false; - update_menu = true; + layout.force_redraw = true; } }, // Escape ^W, and ^U clear input buffer. Key::Esc | Key::Ctrl('u') => { buffer.reset(); insert_mode = false; - update_menu = true; layout.force_redraw = true; }, // ^W removes last word. Key::Ctrl('w') => { if !buffer.strip_word() { insert_mode = false; - update_menu = true; layout.force_redraw = true; } }, @@ -266,7 +254,6 @@ pub fn run( // Delete last char in buffer. if buffer.strip_char() && buffer.is_empty() { insert_mode = false; - update_menu = true; layout.force_redraw = true; } }, @@ -284,6 +271,7 @@ pub fn run( // (Un-)Pause on space. Key::Char(' ') => { clock.toggle(); + layout.force_redraw = true; }, // Clear clock color on 'c'. Key::Char('c') => { @@ -318,7 +306,6 @@ pub fn run( if c.is_ascii_digit() { buffer.push(c); insert_mode = true; - update_menu = true; layout.force_redraw = true; } else if !buffer.is_empty() && c == ':' { buffer.push(':'); @@ -455,7 +442,7 @@ fn suspend(mut stdout: &mut RawTerminal) write!(stdout, "{}{}{}", cursor::Goto(1,1), - clear::All, + clear::AfterCursor, cursor::Show)?; stdout.flush()?; stdout.suspend_raw_mode()