@@ -1,14 +1,14 @@
1+-- | Input mappings for ANSI/VT100/VT50 terminals that is missing from terminfo.
3+-- Or that are sent regardless of terminfo by terminal emulators. EG: Terminal emulators will often
4+-- use VT50 input bytes regardless of declared terminal type. This provides compatibility with
5+-- programs that don't follow terminfo.
1−module Graphics.Vty.Input.Terminfo.XTerm7Bit where
6+module Graphics.Vty.Input.Terminfo.ANSIVT where
3import Graphics.Vty.Input.Events
8import Graphics.Vty.Input.Events
5import Data.List (isInfixOf, isPrefixOf)
10import Data.List (isInfixOf, isPrefixOf)
7−-- | The built in input augmentation for XTerm supports any TERM starting with xterm except those
9−supports :: String -> Bool
10−supports termName = "xterm" `isPrefixOf` termName && not ("8bit" `isInfixOf` termName)
12-- | Encoding for navigation keys.
12-- | Encoding for navigation keys.
14-- TODO: This is not the same as the input bytes pulled from teh caps table.
14-- TODO: This is not the same as the input bytes pulled from teh caps table.
@@ -26,7 +26,7 @@ navKeys0 =
27 where k c s = ("\ESC["++c,EvKey s [])
27 where k c s = ("\ESC["++c,EvKey s [])
29−-- | VT 100 (?) encoding for shift, meta and ctrl plus arrows/home/end
29+-- | encoding for shift, meta and ctrl plus arrows/home/end
30navKeys1 :: ClassifyTable
30navKeys1 :: ClassifyTable
32 [("\ESC[" ++ charCnt ++ show mc++c,EvKey s m)
32 [("\ESC[" ++ charCnt ++ show mc++c,EvKey s m)
@@ -36,21 +36,21 @@ navKeys1 =
36 (c,s) <- [("A", KUp), ("B", KDown), ("C", KRight), ("D", KLeft), ("H", KHome), ("F", KEnd)] -- directions and their codes
36 (c,s) <- [("A", KUp), ("B", KDown), ("C", KRight), ("D", KLeft), ("H", KHome), ("F", KEnd)] -- directions and their codes
39−-- | VT 100 (?) encoding for ins, del, pageup, pagedown, home, end
39+-- | encoding for ins, del, pageup, pagedown, home, end
40navKeys2 :: ClassifyTable
40navKeys2 :: ClassifyTable
42 let k n s = ("\ESC["++show n++"~",EvKey s [])
42 let k n s = ("\ESC["++show n++"~",EvKey s [])
43 in zipWith k [2::Int,3,5,6,1,4]
43 in zipWith k [2::Int,3,5,6,1,4]
44 [KIns,KDel,KPageUp,KPageDown,KHome,KEnd]
44 [KIns,KDel,KPageUp,KPageDown,KHome,KEnd]
46−-- | VT 100 (?) encoding for ctrl + ins, del, pageup, pagedown, home, end
46+-- | encoding for ctrl + ins, del, pageup, pagedown, home, end
47navKeys3 :: ClassifyTable
47navKeys3 :: ClassifyTable
49 let k n s = ("\ESC["++show n++";5~",EvKey s [MCtrl])
49 let k n s = ("\ESC["++show n++";5~",EvKey s [MCtrl])
50 in zipWith k [2::Int,3,5,6,1,4]
50 in zipWith k [2::Int,3,5,6,1,4]
51 [KIns,KDel,KPageUp,KPageDown,KHome,KEnd]
51 [KIns,KDel,KPageUp,KPageDown,KHome,KEnd]
53−-- | VT 100 (?) encoding for shift plus function keys
53+-- | encoding for shift plus function keys
55-- TODO: I suspect this should be generated by interpretting the terminals use of meta mode:
55-- TODO: I suspect this should be generated by interpretting the terminals use of meta mode:
56-- "If the terminal has a ``meta key'' which acts as a shift key, setting the 8th bit of any
56-- "If the terminal has a ``meta key'' which acts as a shift key, setting the 8th bit of any
@@ -64,7 +64,7 @@ functionKeys1 =
64 let f ff nrs m = [ ("\ESC["++show n++"~",EvKey (KFun $ n-(nrs!!0)+ff) m) | n <- nrs ] in
64 let f ff nrs m = [ ("\ESC["++show n++"~",EvKey (KFun $ n-(nrs!!0)+ff) m) | n <- nrs ] in
65 concat [f 1 [25,26] [MShift], f 3 [28,29] [MShift], f 5 [31..34] [MShift] ]
65 concat [f 1 [25,26] [MShift], f 3 [28,29] [MShift], f 5 [31..34] [MShift] ]
67−-- | VT 100 (?) encoding for meta plus char
67+-- | encoding for meta plus char
69-- TODO: resolve -
69-- TODO: resolve -
@@ -79,9 +79,8 @@ functionKeys2 = [ ('\ESC':[x],EvKey (KChar x) [MMeta])
79 , x /= '['
79 , x /= '['
82−-- | classify table for ANSI terminals
83−tables :: [ClassifyTable]
82+classifyTable :: [ClassifyTable]
84−tables =
83+classifyTable =
85 [ navKeys0
84 [ navKeys0
86 , navKeys1
85 , navKeys1
87 , navKeys2
86 , navKeys2