aboutsummaryrefslogtreecommitdiff
path: root/src/Lazymail/Keymap.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Lazymail/Keymap.hs')
-rw-r--r--src/Lazymail/Keymap.hs44
1 files changed, 38 insertions, 6 deletions
diff --git a/src/Lazymail/Keymap.hs b/src/Lazymail/Keymap.hs
index 1cef1b1..27dce60 100644
--- a/src/Lazymail/Keymap.hs
+++ b/src/Lazymail/Keymap.hs
@@ -1,16 +1,48 @@
+{- Lazymail default keymap.
+ -
+ - Copyright 2013 Raúl Benencia <rul@kalgan.cc>
+ -
+ - Licensed under the GNU GPL version 3 or higher
+ -}
+
module Lazymail.Keymap
( defaultGlobalKeymap
, defaultMaildirKeymap
, defaultIndexKeymap
, defaultEmailKeymap
, defaultComposeKeymap
+ , findHandler
) where
-import UI.NCurses(Event(..))
-import Lazymail.Types(LazymailCurses)
+import UI.NCurses(Event(..), Key(..))
+
+import Lazymail.Types(Keymap, LazymailState(..), Mode(..), LazymailConfig(..))
+import Lazymail.Handlers(advanceMode, previousMode, scrollUp, scrollDown)
-defaultGlobalKeymap = []
+defaultGlobalKeymap = [ ([EventCharacter '\n', EventSpecialKey KeyRightArrow], advanceMode)
+ , ([EventCharacter 'q', EventCharacter 'Q'], previousMode)
+ , ([EventSpecialKey KeyUpArrow, EventCharacter 'k'], scrollUp)
+ , ([EventSpecialKey KeyDownArrow, EventCharacter 'j'], scrollDown)
+ ]
defaultMaildirKeymap = []
-defaultIndexKeymap = []
-defaultEmailKeymap = []
-defaultComposeKeymap = [] \ No newline at end of file
+defaultIndexKeymap = []
+defaultEmailKeymap = []
+defaultComposeKeymap = []
+
+-- | Try to find a keymap for the current mode. If nothing is found, then
+-- try looking up in the global keymap.
+findHandler st cfg ev = case modeHandler (mode st) ev of
+ Nothing -> globalHandler ev
+ Just h -> Just h -- I think I saw a way of using an as-pattern in this case
+ where
+ modeHandler MaildirMode = lookupHandler $ maildirModeKeymap cfg
+ modeHandler IndexMode = lookupHandler $ indexModeKeymap cfg
+ modeHandler EmailMode = lookupHandler $ emailModeKeymap cfg
+ modeHandler ComposeMode = lookupHandler $ composeModeKeymap cfg
+
+ globalHandler = lookupHandler $ globalKeymap cfg
+
+ lookupHandler [] _ = Nothing
+ lookupHandler (km:kms) ev
+ | elem ev (fst km) = Just $ snd km
+ | otherwise = lookupHandler kms ev \ No newline at end of file
nihil fit ex nihilo