packages feed

matterhorn-31000.0.0: src/Events/MessageSelect.hs

module Events.MessageSelect where

import Prelude ()
import Prelude.Compat

import Data.Monoid ((<>))
import qualified Data.Text as T
import qualified Graphics.Vty as Vty
import Lens.Micro.Platform

import Types
import State

messagesPerPageOperation :: Int
messagesPerPageOperation = 10

onEventMessageSelect :: Vty.Event -> MH ()
onEventMessageSelect e | Just kb <- lookupKeybinding e messageSelectKeybindings =
  kbAction kb
onEventMessageSelect _ = return ()

onEventMessageSelectDeleteConfirm :: Vty.Event -> MH ()
onEventMessageSelectDeleteConfirm (Vty.EvKey (Vty.KChar 'y') []) = do
    deleteSelectedMessage
    csMode .= Main
onEventMessageSelectDeleteConfirm _ =
    csMode .= Main

messageSelectKeybindings :: [Keybinding]
messageSelectKeybindings =
    [ KB "Cancel message selection"
         (Vty.EvKey Vty.KEsc []) $ csMode .= Main

    , KB "Cancel message selection"
         (Vty.EvKey (Vty.KChar 'c') [Vty.MCtrl]) $
         csMode .= Main

    , KB "Select the previous message"
         (Vty.EvKey (Vty.KChar 'k') []) $
         messageSelectUp

    , KB "Select the previous message"
         (Vty.EvKey Vty.KUp []) $
         messageSelectUp

    , KB (T.pack $ "Move the cursor up by " <> show messagesPerPageOperation <> " messages")
         (Vty.EvKey Vty.KPageUp []) $
         messageSelectUpBy messagesPerPageOperation

    , KB "Select the next message"
         (Vty.EvKey (Vty.KChar 'j') []) $
         messageSelectDown

    , KB "Select the next message"
         (Vty.EvKey Vty.KDown []) $
         messageSelectDown

    , KB (T.pack $ "Move the cursor down by " <> show messagesPerPageOperation <> " messages")
         (Vty.EvKey Vty.KPageDown []) $
         messageSelectDownBy messagesPerPageOperation

    , KB "Open all URLs in the selected message"
         (Vty.EvKey (Vty.KChar 'o') []) $
         openSelectedMessageURLs

    , KB "Begin composing a reply to the selected message"
         (Vty.EvKey (Vty.KChar 'r') []) $
         beginReplyCompose

    , KB "Begin editing the selected message"
         (Vty.EvKey (Vty.KChar 'e') []) $
         beginUpdateMessage

    , KB "Delete the selected message (with confirmation)"
         (Vty.EvKey (Vty.KChar 'd') []) $
         beginConfirmDeleteSelectedMessage

    , KB "Copy a verbatim section to the clipboard"
         (Vty.EvKey (Vty.KChar 'y') []) $
         copyVerbatimToClipboard

    , KB "Flag the selected message"
         (Vty.EvKey (Vty.KChar 'f') []) $
         flagSelectedMessage

    ]