From 4f9e2732d8c19bcb731f82d590436f5a3168ec8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Benencia?= 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/Lazymail') 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