From 539d404868f6af21dc444a804d9d987743578f8b Mon Sep 17 00:00:00 2001 From: mattn Date: Wed, 25 Jun 2014 10:16:35 +0900 Subject: [PATCH] Refactor workaround code --- input.go | 49 ++++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/input.go b/input.go index e80b7ba..a2c255a 100644 --- a/input.go +++ b/input.go @@ -48,30 +48,33 @@ func (i *Input) Loop() { // It would be nice if termbox differentiated this for us, but // we workaround it by waiting (juuuuse a few milliseconds) for // extra key events. If no extra events arrive, it should be Esc - - // Smells like Esc or Alt. mod == nil checks for the presense - // of a previous timer - if hasModifierMaps && ev.Ch == 0 && ev.Key == 27 && mod == nil { - tmp := ev - i.mutex.Lock() - mod = time.AfterFunc(50*time.Millisecond, func() { - i.mutex.Lock() - mod = nil - i.mutex.Unlock() - i.handleKeyEvent(tmp) - }) - i.mutex.Unlock() - } else { - // it doesn't look like this is Esc or Alt. If we have a previous - // timer, stop it because this is probably Alt+ this new key - i.mutex.Lock() - if mod != nil { - mod.Stop() - mod = nil - ev.Mod |= ModAlt - } - i.mutex.Unlock() + if !hasModifierMaps { i.handleKeyEvent(ev) + } else { + // Smells like Esc or Alt. mod == nil checks for the presense + // of a previous timer + if ev.Ch == 0 && ev.Key == 27 && mod == nil { + tmp := ev + i.mutex.Lock() + mod = time.AfterFunc(50*time.Millisecond, func() { + i.mutex.Lock() + mod = nil + i.mutex.Unlock() + i.handleKeyEvent(tmp) + }) + i.mutex.Unlock() + } else { + // it doesn't look like this is Esc or Alt. If we have a previous + // timer, stop it because this is probably Alt+ this new key + i.mutex.Lock() + if mod != nil { + mod.Stop() + mod = nil + ev.Mod |= ModAlt + } + i.mutex.Unlock() + i.handleKeyEvent(ev) + } } } }