Refactored buffer module.
This commit is contained in:
parent
55e9003f8c
commit
8112ecadb2
2 changed files with 11 additions and 21 deletions
|
@ -14,27 +14,25 @@ pub struct Buffer {
|
|||
content: String,
|
||||
// Used for error messages.
|
||||
message: Option<&'static str>,
|
||||
pub altered: bool,
|
||||
pub visible: bool,
|
||||
}
|
||||
|
||||
impl Buffer {
|
||||
pub fn new() -> Buffer {
|
||||
Buffer {
|
||||
content: String::new(),
|
||||
altered: false,
|
||||
message: None,
|
||||
visible: false,
|
||||
}
|
||||
}
|
||||
|
||||
// Return reference to buffer content.
|
||||
pub fn read(&mut self) -> &String {
|
||||
self.altered = false;
|
||||
&self.content
|
||||
}
|
||||
|
||||
// Append char to buffer.
|
||||
pub fn push(&mut self, value: char) {
|
||||
self.altered = true;
|
||||
// Reset error message.
|
||||
self.message = None;
|
||||
self.content.push(value);
|
||||
|
@ -44,9 +42,7 @@ impl Buffer {
|
|||
pub fn strip_char(&mut self) {
|
||||
// Reset error message.
|
||||
self.message = None;
|
||||
if self.content.pop().is_some() {
|
||||
self.altered = true;
|
||||
}
|
||||
self.content.pop();
|
||||
}
|
||||
|
||||
// Remove last word.
|
||||
|
@ -58,7 +54,6 @@ impl Buffer {
|
|||
|
||||
if let Some((index, _)) = iter.last() {
|
||||
self.content.truncate(index);
|
||||
self.altered = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -68,7 +63,6 @@ impl Buffer {
|
|||
|
||||
// Clear input.
|
||||
pub fn clear(&mut self) {
|
||||
self.altered = true;
|
||||
self.content.clear();
|
||||
}
|
||||
|
||||
|
@ -124,6 +118,5 @@ impl Buffer {
|
|||
msg: &'static str,
|
||||
) {
|
||||
self.message = Some(msg);
|
||||
self.altered = true;
|
||||
}
|
||||
}
|
||||
|
|
19
src/lib.rs
19
src/lib.rs
|
@ -43,9 +43,6 @@ pub fn run(
|
|||
let stdout = std::io::stdout();
|
||||
let mut stdout = stdout.lock().into_raw_mode()?;
|
||||
|
||||
// Are we in insert mode?
|
||||
let mut insert_mode = false;
|
||||
|
||||
// Register signals.
|
||||
let mut signals = Signals::new(&[
|
||||
SIGTSTP,
|
||||
|
@ -147,7 +144,7 @@ pub fn run(
|
|||
style::Faint,
|
||||
// Switch menu bars. Use a compressed version or none at
|
||||
// all if necessary.
|
||||
match insert_mode {
|
||||
match buffer.visible {
|
||||
true if layout.can_hold(MENUBAR_INS) => MENUBAR_INS,
|
||||
false if layout.can_hold(MENUBAR) => MENUBAR,
|
||||
false if layout.can_hold(MENUBAR_SHORT) => MENUBAR_SHORT,
|
||||
|
@ -200,7 +197,7 @@ pub fn run(
|
|||
}
|
||||
|
||||
// Update buffer whenever the cursor should be visible.
|
||||
if insert_mode || buffer.altered {
|
||||
if buffer.visible {
|
||||
buffer.draw(&mut stdout, &mut layout)?;
|
||||
stdout.flush()?;
|
||||
}
|
||||
|
@ -219,21 +216,21 @@ pub fn run(
|
|||
layout.set_roster_width(alarm_roster.width());
|
||||
}
|
||||
buffer.clear();
|
||||
insert_mode = false;
|
||||
buffer.visible = false;
|
||||
layout.force_redraw = true;
|
||||
}
|
||||
},
|
||||
// Escape and ^U clear input buffer.
|
||||
Key::Esc | Key::Ctrl('u') => {
|
||||
buffer.reset();
|
||||
insert_mode = false;
|
||||
buffer.visible = false;
|
||||
layout.force_redraw = true;
|
||||
},
|
||||
// ^W removes last word.
|
||||
Key::Ctrl('w') => {
|
||||
buffer.strip_word();
|
||||
if buffer.is_empty() {
|
||||
insert_mode = false;
|
||||
buffer.visible = false;
|
||||
layout.force_redraw = true;
|
||||
}
|
||||
},
|
||||
|
@ -242,12 +239,12 @@ pub fn run(
|
|||
// Delete last char in buffer.
|
||||
buffer.strip_char();
|
||||
if buffer.is_empty() {
|
||||
insert_mode = false;
|
||||
buffer.visible = false;
|
||||
layout.force_redraw = true;
|
||||
}
|
||||
},
|
||||
// Forward every char if in insert mode.
|
||||
Key::Char(c) if insert_mode => {
|
||||
Key::Char(c) if buffer.visible => {
|
||||
buffer.push(c);
|
||||
},
|
||||
// Reset clock on 'r'.
|
||||
|
@ -294,7 +291,7 @@ pub fn run(
|
|||
Key::Char(c) => {
|
||||
if c.is_ascii_digit() {
|
||||
buffer.push(c);
|
||||
insert_mode = true;
|
||||
buffer.visible = true;
|
||||
layout.force_redraw = true;
|
||||
} else if !buffer.is_empty() && c == ':' {
|
||||
buffer.push(':');
|
||||
|
|
Loading…
Reference in a new issue