summaryrefslogtreecommitdiffstats
path: root/src/minibuffer.rs
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2019-02-28 20:05:11 +0100
committerrabite <rabite@posteo.de>2019-02-28 20:08:36 +0100
commit9338f5e9126ff6bf7b43573eb5d4b1f5a795659b (patch)
treec4fa81731c23fe89cc8961a3f73fff4b04aaabc2 /src/minibuffer.rs
parent06817602a8559e8c214c7f68d804ee1d7d9ffd77 (diff)
fixed minibuffer
Diffstat (limited to 'src/minibuffer.rs')
-rw-r--r--src/minibuffer.rs72
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(())
+ }
}