diff options
author | rabite <rabite@posteo.de> | 2019-02-28 20:05:11 +0100 |
---|---|---|
committer | rabite <rabite@posteo.de> | 2019-02-28 20:08:36 +0100 |
commit | 9338f5e9126ff6bf7b43573eb5d4b1f5a795659b (patch) | |
tree | c4fa81731c23fe89cc8961a3f73fff4b04aaabc2 /src/minibuffer.rs | |
parent | 06817602a8559e8c214c7f68d804ee1d7d9ffd77 (diff) |
fixed minibuffer
Diffstat (limited to 'src/minibuffer.rs')
-rw-r--r-- | src/minibuffer.rs | 72 |
1 files changed, 40 insertions, 32 deletions
diff --git a/src/minibuffer.rs b/src/minibuffer.rs index f48d84c..2533014 100644 --- a/src/minibuffer.rs +++ b/src/minibuffer.rs @@ -1,12 +1,10 @@ use termion::event::Key; -use termion::input::TermRead; - -use std::io::{stdin, stdout, Write}; +use std::io::{stdout, Write}; use crate::coordinates::{Coordinates}; use crate::widget::Widget; -use crate::window::{send_event, Events}; -use crate::fail::HResult; +use crate::fail::{HResult, HError}; +use crate::term; pub struct MiniBuffer { coordinates: Coordinates, @@ -38,38 +36,34 @@ impl MiniBuffer { self.done = false; self.position = 0; - send_event(Events::ExclusiveInput(true))?; + write!(stdout(), "{}", termion::cursor::Show)?; - self.draw()?; - write!(stdout(), "{}{}", - termion::cursor::Show, - termion::cursor::Save)?; - stdout().flush()?; + self.popup()?; - for event in stdin().events() { - let event = event?; - self.on_event(event); - if self.done { - break - } - self.draw()?; + // for event in stdin().events() { + // let event = event?; + // self.on_event(event); + // if self.done { + // break + // } + // self.draw()?; - write!(stdout(), "{}", termion::cursor::Restore)?; - if self.position != 0 { - write!(stdout(), - "{}", - termion::cursor::Right(self.position as u16))?; - } - stdout().flush()?; - } - - self.done = false; - - send_event(Events::ExclusiveInput(false))?; + // write!(stdout(), "{}", termion::cursor::Restore)?; + // if self.position != 0 { + // write!(stdout(), + // "{}", + // termion::cursor::Right(self.position as u16))?; + // } + // stdout().flush()?; + // } Ok(self.input.clone()) } + + pub fn input_finnished(&mut self) -> HResult<()> { + return Err(HError::PopupFinnished) + } } pub fn find_bins(comp_name: &str) -> Vec<String> { @@ -147,12 +141,12 @@ impl Widget for MiniBuffer { fn on_key(&mut self, key: Key) -> HResult<()> { match key { - Key::Esc | Key::Ctrl('c') => { self.input.clear(); self.done = true; }, + Key::Esc | Key::Ctrl('c') => { self.input_finnished()?; }, Key::Char('\n') => { if self.input != "" { self.history.push(self.input.clone()); } - self.done = true; + self.input_finnished()?; } Key::Char('\t') => { if !self.input.ends_with(" ") { @@ -209,4 +203,18 @@ impl Widget for MiniBuffer { } Ok(()) } + + fn after_draw(&self) -> HResult<()> { + let cursor_pos = self.query.len() + + ": ".len() + + self.position + + 1; + + let ysize = term::ysize(); + + + write!(stdout(), "{}", term::goto_xy(cursor_pos as u16, ysize))?; + stdout().flush()?; + Ok(()) + } } |