From 7af6e583d7d6893f67745e23017eba436f8ed826 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Benencia?= Date: Thu, 5 Sep 2013 21:41:20 -0300 Subject: towards configurable keybindings --- src/Lazymail/Keymap.hs | 44 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) (limited to 'src/Lazymail/Keymap.hs') 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 + - + - 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 -- cgit v1.2.3