diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-04-01 02:42:48 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-04-01 02:42:48 -0500 |
commit | 2c129f6533e319774be67ea4828190ee8213180a (patch) | |
tree | 05d0c31412b2704288bcc08750e0fe535a8ee59c /src | |
parent | b7646b2d791cf10bd604aaee830fe22598b7d10d (diff) | |
download | rust-term-2c129f6533e319774be67ea4828190ee8213180a.tar.gz rust-term-2c129f6533e319774be67ea4828190ee8213180a.zip |
refactor
Diffstat (limited to 'src')
-rw-r--r-- | src/term.rs | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/src/term.rs b/src/term.rs index bb29025..02a1306 100644 --- a/src/term.rs +++ b/src/term.rs @@ -90,7 +90,7 @@ pub fn Reader () -> Reader { impl Reader { pub fn read (&mut self) -> Option<Keypress> { if str::len(self.buf) > 0 { - return Some(KeyCharacter(str::shift_char(&mut self.buf))); + return Some(self.next_key()); } let first = util::timed_read(-1); @@ -101,26 +101,44 @@ impl Reader { let mut buf = str::from_char(*first.get_ref()); loop { if !self.escapes.has_prefix(buf) { - return match self.escapes.find(buf) { - &Some(k) => { Some(k) } - &None => { - str::push_str(&mut self.buf, buf); - let next = str::shift_char(&mut self.buf); - Some(KeyCharacter(next)) + /* XXX i think this is a borrow check bug, should look into + * it at some point */ + //return match self.escapes.find(buf) { + // &Some(k) => { Some(k) } + // &None => { + // self.unget(buf); + // self.read() + // } + //} + { + let k = self.escapes.find(buf); + if k.is_some() { + return *k; } } + self.unget(buf); + return self.read(); } match util::timed_read(1000000) { Some(next) => { str::push_char(&mut buf, next) } None => { - str::push_str(&mut self.buf, buf); - let next = str::shift_char(&mut self.buf); - return Some(KeyCharacter(next)); + self.unget(buf); + return self.read(); } } } } + + fn unget (&mut self, buf: &str) { + str::push_str(&mut self.buf, buf); + } + + fn next_key (&mut self) -> Keypress { + fail_unless!(str::len(self.buf) > 0); + let next = str::shift_char(&mut self.buf); + return KeyCharacter(next); + } } // XXX this whole thing needs to be able to deal with caps that don't exist |