From 4f9e2732d8c19bcb731f82d590436f5a3168ec8d Mon Sep 17 00:00:00 2001
From: Raúl Benencia <rul@kalgan.cc>
Date: Thu, 5 Sep 2013 22:42:28 -0300
Subject: Working configurable keybindings

---
 src/Lazymail/Keymap.hs |  2 +-
 src/Lazymail/Screen.hs | 25 ++++++++-----------------
 2 files changed, 9 insertions(+), 18 deletions(-)

(limited to 'src')

diff --git a/src/Lazymail/Keymap.hs b/src/Lazymail/Keymap.hs
index 27dce60..c649faa 100644
--- a/src/Lazymail/Keymap.hs
+++ b/src/Lazymail/Keymap.hs
@@ -19,7 +19,7 @@ import UI.NCurses(Event(..), Key(..))
 import Lazymail.Types(Keymap, LazymailState(..), Mode(..), LazymailConfig(..))
 import Lazymail.Handlers(advanceMode, previousMode, scrollUp, scrollDown)
 
-defaultGlobalKeymap = [ ([EventCharacter '\n', EventSpecialKey KeyRightArrow], advanceMode)
+defaultGlobalKeymap = [ ([EventCharacter '\n', EventCharacter ' ', EventSpecialKey KeyRightArrow], advanceMode)
                       , ([EventCharacter 'q', EventCharacter 'Q'], previousMode)
                       , ([EventSpecialKey KeyUpArrow, EventCharacter 'k'], scrollUp)
                       , ([EventSpecialKey KeyDownArrow, EventCharacter 'j'], scrollDown)
diff --git a/src/Lazymail/Screen.hs b/src/Lazymail/Screen.hs
index 7bc980b..ba64cee 100644
--- a/src/Lazymail/Screen.hs
+++ b/src/Lazymail/Screen.hs
@@ -19,12 +19,13 @@ import System.Exit
 import UI.NCurses
 
 -- Local imports
+import Codec.Text.Rfc1342
 import Lazymail.Config
 import qualified Lazymail.Handlers as EH
+import Lazymail.Keymap(findHandler)
 import Lazymail.Maildir
 import Lazymail.Email(lookupField, getBody, getHeaders, lookupField')
 import Lazymail.Print
-import Codec.Text.Rfc1342
 import Lazymail.State
 import Lazymail.Types
 
@@ -217,30 +218,20 @@ drawStatusHelper IndexMode st =
 {- Status bar string for Email mode -}
 drawStatusHelper EmailMode st = ["mode: Email"]
 
-{- Handle an event
- - TODO: Handle the events in a cleaner way. -}
+{- Handle an event -}
 handleEvent :: LazymailCurses ()
 handleEvent = loop where
   loop = do
+    st <- get
+    cfg <- ask
     w <- liftCurses $ defaultWindow
     ev <- liftCurses $ getEvent w Nothing
-    st <- get
     case ev of
       Nothing  -> loop
       Just ev' ->
-        case ev' of
-          EventCharacter 'q'            -> EH.previousMode
-
-          EventSpecialKey KeyUpArrow    -> EH.scrollUp
-          EventCharacter 'k'            -> EH.scrollUp
-
-          EventSpecialKey KeyDownArrow  -> EH.scrollDown
-          EventCharacter 'j'            -> EH.scrollDown
-
-          EventCharacter '\n'           -> EH.advanceMode
-          EventSpecialKey KeyRightArrow -> EH.advanceMode
-
-          _ ->  loop
+        case findHandler st cfg ev' of
+          Nothing      -> loop
+          Just handler -> handler
 
 {- Reset the current row to the beginning -}
 resetCurrentRow = (=<<) put $ get >>= \st -> return $ st { currentRow = 0 }
-- 
cgit v1.2.3