@@ -1,5 +1,3 @@
1−{-# LANGUAGE ScopedTypeVariables #-}
2−{-# LANGUAGE ForeignFunctionInterface #-}
3-- Copyright Corey O'Connor
1-- Copyright Corey O'Connor
4module Graphics.Vty.Input.Data where
2module Graphics.Vty.Input.Data where
@@ -27,7 +25,8 @@ data Event = EvKey Key [Modifier] | EvMouse Int Int Button [Modifier]
27data KClass = Valid Key [Modifier] | Invalid | Prefix | MisPfx Key [Modifier] [Char]
25data KClass = Valid Key [Modifier] | Invalid | Prefix | MisPfx Key [Modifier] [Char]
28 deriving(Show)
26 deriving(Show)
28+type ClassifyTable = [(String, (Key, [Modifier]))]
30−map_to_legacy_table :: [(String, Event)] -> [(String, (Key, [Modifier]))]
29+map_to_legacy_table :: [(String, Event)] -> ClassifyTable
31map_to_legacy_table = map f
30map_to_legacy_table = map f
32 where f (s, EvKey k mods) = (s, (k, mods))
31 where f (s, EvKey k mods) = (s, (k, mods))
33 f _ = error "no mapping for mouse or resize events"
32 f _ = error "no mapping for mouse or resize events"
@@ -46,7 +45,7 @@ caps_table =
46 , ("kRIT", EvKey KRight [MShift])
45 , ("kRIT", EvKey KRight [MShift])
49−nav_keys_0 :: [([Char], (Key, [Modifier]))]
48+nav_keys_0 :: ClassifyTable
50nav_keys_0 =
49nav_keys_0 =
51 [ k "G" KNP5
50 [ k "G" KNP5
52 , k "P" KPause
51 , k "P" KPause
@@ -61,7 +60,7 @@ nav_keys_0 =
61 where k c s = ("\ESC["++c,(s,[]))
60 where k c s = ("\ESC["++c,(s,[]))
63-- Support for arrows and KHome/KEnd
62-- Support for arrows and KHome/KEnd
64−nav_keys_1 :: [([Char], (Key, [Modifier]))]
63+nav_keys_1 :: ClassifyTable
65nav_keys_1 =
64nav_keys_1 =
66 [("\ESC[" ++ charCnt ++ show mc++c,(s,m))
65 [("\ESC[" ++ charCnt ++ show mc++c,(s,m))
67 | charCnt <- ["1;", ""], -- we can have a count or not
66 | charCnt <- ["1;", ""], -- we can have a count or not
@@ -70,36 +69,36 @@ nav_keys_1 =
70 (c,s) <- [("A", KUp), ("B", KDown), ("C", KRight), ("D", KLeft), ("H", KHome), ("F", KEnd)] -- directions and their codes
69 (c,s) <- [("A", KUp), ("B", KDown), ("C", KRight), ("D", KLeft), ("H", KHome), ("F", KEnd)] -- directions and their codes
73−nav_keys_2 :: [([Char], (Key, [Modifier]))]
72+nav_keys_2 :: ClassifyTable
74nav_keys_2 =
73nav_keys_2 =
75 let k n s = ("\ESC["++show n++"~",(s,[]))
74 let k n s = ("\ESC["++show n++"~",(s,[]))
76 in zipWith k [2::Int,3,5,6,1,4]
75 in zipWith k [2::Int,3,5,6,1,4]
77 [KIns,KDel,KPageUp,KPageDown,KHome,KEnd]
76 [KIns,KDel,KPageUp,KPageDown,KHome,KEnd]
79−nav_keys_3 :: [([Char], (Key, [Modifier]))]
78+nav_keys_3 :: ClassifyTable
80nav_keys_3 =
79nav_keys_3 =
81 let k n s = ("\ESC["++show n++";5~",(s,[MCtrl]))
80 let k n s = ("\ESC["++show n++";5~",(s,[MCtrl]))
82 in zipWith k [2::Int,3,5,6,1,4]
81 in zipWith k [2::Int,3,5,6,1,4]
83 [KIns,KDel,KPageUp,KPageDown,KHome,KEnd]
82 [KIns,KDel,KPageUp,KPageDown,KHome,KEnd]
85-- Support for simple characters.
84-- Support for simple characters.
86−simple_chars :: [([Char], (Key, [Modifier]))]
85+simple_chars :: ClassifyTable
87simple_chars = [ (x:[],(KASCII x,[])) | x <- map toEnum [0..255] ]
86simple_chars = [ (x:[],(KASCII x,[])) | x <- map toEnum [0..255] ]
89-- Support for function keys (should use terminfo)
88-- Support for function keys (should use terminfo)
90−function_keys_0 :: [([Char], (Key, [Modifier]))]
89+function_keys_0 :: ClassifyTable
91function_keys_0 = [ ("\ESC[["++[toEnum(64+i)],(KFun i,[])) | i <- [1..5] ]
90function_keys_0 = [ ("\ESC[["++[toEnum(64+i)],(KFun i,[])) | i <- [1..5] ]
93−function_keys_1 :: [([Char], (Key, [Modifier]))]
92+function_keys_1 :: ClassifyTable
94function_keys_1 =
93function_keys_1 =
95 let f ff nrs m = [ ("\ESC["++show n++"~",(KFun (n-(nrs!!0)+ff), m)) | n <- nrs ] in
94 let f ff nrs m = [ ("\ESC["++show n++"~",(KFun (n-(nrs!!0)+ff), m)) | n <- nrs ] in
96 concat [ f 6 [17..21] [], f 11 [23,24] [], f 1 [25,26] [MShift], f 3 [28,29] [MShift], f 5 [31..34] [MShift] ]
95 concat [ f 6 [17..21] [], f 11 [23,24] [], f 1 [25,26] [MShift], f 3 [28,29] [MShift], f 5 [31..34] [MShift] ]
98−function_keys_2 :: [([Char], (Key, [Modifier]))]
97+function_keys_2 :: ClassifyTable
99function_keys_2 = [ ('\ESC':[x],(KASCII x,[MMeta])) | x <- '\ESC':'\t':[' ' .. '\DEL'] ]
98function_keys_2 = [ ('\ESC':[x],(KASCII x,[MMeta])) | x <- '\ESC':'\t':[' ' .. '\DEL'] ]
101-- Ctrl+Char
100-- Ctrl+Char
102−ctrl_char_keys :: [([Char], (Key, [Modifier]))]
101+ctrl_char_keys :: ClassifyTable
103ctrl_char_keys =
102ctrl_char_keys =
104 [ ([toEnum x],(KASCII y,[MCtrl]))
103 [ ([toEnum x],(KASCII y,[MCtrl]))
105 | (x,y) <- zip ([0..31]) ('@':['a'..'z']++['['..'_']),
104 | (x,y) <- zip ([0..31]) ('@':['a'..'z']++['['..'_']),
@@ -107,12 +106,12 @@ ctrl_char_keys =
109-- Ctrl+Meta+Char
108-- Ctrl+Meta+Char
110−ctrl_meta_keys :: [([Char], (Key, [Modifier]))]
109+ctrl_meta_keys :: ClassifyTable
111ctrl_meta_keys =
110ctrl_meta_keys =
112 [ ('\ESC':[toEnum x],(KASCII y,[MMeta,MCtrl])) | (x,y) <- zip [0..31] ('@':['a'..'z']++['['..'_']) ]
111 [ ('\ESC':[toEnum x],(KASCII y,[MMeta,MCtrl])) | (x,y) <- zip [0..31] ('@':['a'..'z']++['['..'_']) ]
114-- Special support
113-- Special support
115−special_support_keys :: [([Char], (Key, [Modifier]))]
114+special_support_keys :: ClassifyTable
116special_support_keys =
115special_support_keys =
117 [ -- special support for ESC
116 [ -- special support for ESC
118 ("\ESC",(KEsc,[])) , ("\ESC\ESC",(KEsc,[MMeta]))
117 ("\ESC",(KEsc,[])) , ("\ESC\ESC",(KEsc,[MMeta]))
@@ -123,7 +122,7 @@ special_support_keys =
125-- | classify table for ANSI terminals
124-- | classify table for ANSI terminals
126−ansi_classify_table :: [[([Char], (Key, [Modifier]))]]
125+ansi_classify_table :: [ClassifyTable]
127ansi_classify_table =
126ansi_classify_table =
128 [ nav_keys_0
127 [ nav_keys_0
129 , nav_keys_1
128 , nav_keys_1