module Yi.UI.Vty.Conversions
( colorToAttr
, fromVtyEvent
, fromVtyKey
, fromVtyMod
) where
import Data.List (nub, sort)
import qualified Graphics.Vty as Vty
import qualified Yi.Event
import qualified Yi.Style
fromVtyEvent :: Vty.Event -> Yi.Event.Event
fromVtyEvent (Vty.EvKey Vty.KBackTab mods) =
Yi.Event.Event Yi.Event.KTab (sort $ nub $ Yi.Event.MShift : map fromVtyMod mods)
fromVtyEvent (Vty.EvKey k mods) =
Yi.Event.Event (fromVtyKey k) (sort $ map fromVtyMod mods)
fromVtyEvent _ = error "fromVtyEvent: unsupported event encountered."
fromVtyKey :: Vty.Key -> Yi.Event.Key
fromVtyKey (Vty.KEsc ) = Yi.Event.KEsc
fromVtyKey (Vty.KFun x ) = Yi.Event.KFun x
fromVtyKey (Vty.KPrtScr ) = Yi.Event.KPrtScr
fromVtyKey (Vty.KPause ) = Yi.Event.KPause
fromVtyKey (Vty.KChar '\t') = Yi.Event.KTab
fromVtyKey (Vty.KChar c ) = Yi.Event.KASCII c
fromVtyKey (Vty.KBS ) = Yi.Event.KBS
fromVtyKey (Vty.KIns ) = Yi.Event.KIns
fromVtyKey (Vty.KHome ) = Yi.Event.KHome
fromVtyKey (Vty.KPageUp ) = Yi.Event.KPageUp
fromVtyKey (Vty.KDel ) = Yi.Event.KDel
fromVtyKey (Vty.KEnd ) = Yi.Event.KEnd
fromVtyKey (Vty.KPageDown ) = Yi.Event.KPageDown
fromVtyKey (Vty.KCenter ) = Yi.Event.KNP5
fromVtyKey (Vty.KUp ) = Yi.Event.KUp
fromVtyKey (Vty.KMenu ) = Yi.Event.KMenu
fromVtyKey (Vty.KLeft ) = Yi.Event.KLeft
fromVtyKey (Vty.KDown ) = Yi.Event.KDown
fromVtyKey (Vty.KRight ) = Yi.Event.KRight
fromVtyKey (Vty.KEnter ) = Yi.Event.KEnter
fromVtyKey (Vty.KBackTab ) = error "This should be handled in fromVtyEvent"
fromVtyKey (Vty.KBegin ) = error "Yi.UI.Vty.fromVtyKey: can't handle KBegin"
fromVtyKey _ = error "Unhandled key in fromVtyKey"
fromVtyMod :: Vty.Modifier -> Yi.Event.Modifier
fromVtyMod Vty.MShift = Yi.Event.MShift
fromVtyMod Vty.MCtrl = Yi.Event.MCtrl
fromVtyMod Vty.MMeta = Yi.Event.MMeta
fromVtyMod Vty.MAlt = Yi.Event.MMeta
colorToAttr :: (Vty.Color -> Vty.Attr -> Vty.Attr)
-> Yi.Style.Color -> Vty.Attr -> Vty.Attr
colorToAttr set c =
case c of
Yi.Style.RGB 0 0 0 -> set Vty.black
Yi.Style.RGB 128 128 128 -> set Vty.brightBlack
Yi.Style.RGB 139 0 0 -> set Vty.red
Yi.Style.RGB 255 0 0 -> set Vty.brightRed
Yi.Style.RGB 0 100 0 -> set Vty.green
Yi.Style.RGB 0 128 0 -> set Vty.brightGreen
Yi.Style.RGB 165 42 42 -> set Vty.yellow
Yi.Style.RGB 255 255 0 -> set Vty.brightYellow
Yi.Style.RGB 0 0 139 -> set Vty.blue
Yi.Style.RGB 0 0 255 -> set Vty.brightBlue
Yi.Style.RGB 128 0 128 -> set Vty.magenta
Yi.Style.RGB 255 0 255 -> set Vty.brightMagenta
Yi.Style.RGB 0 139 139 -> set Vty.cyan
Yi.Style.RGB 0 255 255 -> set Vty.brightCyan
Yi.Style.RGB 165 165 165 -> set Vty.white
Yi.Style.RGB 255 255 255 -> set Vty.brightWhite
Yi.Style.Default -> id
Yi.Style.RGB r g b -> set (Vty.rgbColor r g b)