0 | module NCurses.Core.SpecialKey
4 | import Data.List.Elem
9 | %foreign libncurses "keypad"
10 | prim__keypad : AnyPtr -> Int -> PrimIO ()
12 | %foreign libhelper "keyF0"
13 | prim__keyF0 : PrimIO Int
15 | %foreign libhelper "keyF1"
16 | prim__keyF1 : PrimIO Int
18 | %foreign libhelper "keyF2"
19 | prim__keyF2 : PrimIO Int
21 | %foreign libhelper "keyF3"
22 | prim__keyF3 : PrimIO Int
24 | %foreign libhelper "keyF4"
25 | prim__keyF4 : PrimIO Int
27 | %foreign libhelper "keyF5"
28 | prim__keyF5 : PrimIO Int
30 | %foreign libhelper "keyF6"
31 | prim__keyF6 : PrimIO Int
33 | %foreign libhelper "keyF7"
34 | prim__keyF7 : PrimIO Int
36 | %foreign libhelper "keyF8"
37 | prim__keyF8 : PrimIO Int
39 | %foreign libhelper "keyF9"
40 | prim__keyF9 : PrimIO Int
42 | %foreign libhelper "keyF10"
43 | prim__keyF10 : PrimIO Int
45 | %foreign libhelper "keyF11"
46 | prim__keyF11 : PrimIO Int
48 | %foreign libhelper "keyF12"
49 | prim__keyF12 : PrimIO Int
51 | %foreign libhelper "keyUp"
52 | prim__keyUp : PrimIO Int
54 | %foreign libhelper "keyDown"
55 | prim__keyDown : PrimIO Int
57 | %foreign libhelper "keyLeft"
58 | prim__keyLeft : PrimIO Int
60 | %foreign libhelper "keyRight"
61 | prim__keyRight : PrimIO Int
63 | %foreign libhelper "keyBackspace"
64 | prim__keyBackspace : PrimIO Int
109 | allKeysCover : (k : Key) -> Elem k SpecialKey.allKeys
110 | allKeysCover F0 = %search
111 | allKeysCover F1 = %search
112 | allKeysCover F2 = %search
113 | allKeysCover F3 = %search
114 | allKeysCover F4 = %search
115 | allKeysCover F5 = %search
116 | allKeysCover F6 = %search
117 | allKeysCover F7 = %search
118 | allKeysCover F8 = %search
119 | allKeysCover F9 = %search
120 | allKeysCover F10 = %search
121 | allKeysCover F11 = %search
122 | allKeysCover F12 = %search
123 | allKeysCover Up = %search
124 | allKeysCover Down = %search
125 | allKeysCover Left = %search
126 | allKeysCover Right = %search
127 | allKeysCover Backspace = %search
135 | fnKeyChar : HasIO io => Key -> io Char
136 | fnKeyChar F0 = cast <$> (primIO prim__keyF0)
137 | fnKeyChar F1 = cast <$> (primIO prim__keyF1)
138 | fnKeyChar F2 = cast <$> (primIO prim__keyF2)
139 | fnKeyChar F3 = cast <$> (primIO prim__keyF3)
140 | fnKeyChar F4 = cast <$> (primIO prim__keyF4)
141 | fnKeyChar F5 = cast <$> (primIO prim__keyF5)
142 | fnKeyChar F6 = cast <$> (primIO prim__keyF6)
143 | fnKeyChar F7 = cast <$> (primIO prim__keyF7)
144 | fnKeyChar F8 = cast <$> (primIO prim__keyF8)
145 | fnKeyChar F9 = cast <$> (primIO prim__keyF9)
146 | fnKeyChar F10 = cast <$> (primIO prim__keyF10)
147 | fnKeyChar F11 = cast <$> (primIO prim__keyF11)
148 | fnKeyChar F12 = cast <$> (primIO prim__keyF12)
149 | fnKeyChar Up = cast <$> (primIO prim__keyUp)
150 | fnKeyChar Down = cast <$> (primIO prim__keyDown)
151 | fnKeyChar Left = cast <$> (primIO prim__keyLeft)
152 | fnKeyChar Right = cast <$> (primIO prim__keyRight)
153 | fnKeyChar Backspace = cast <$> (primIO prim__keyBackspace)
155 | fnKeyPairing : HasIO io => Key -> (io Char, Key)
156 | fnKeyPairing k = (fnKeyChar k, k)
160 | keyMap' : HasIO io => (List (io Char, Key))
161 | keyMap' = (fnKeyPairing {io}) <$> allKeys
163 | keyMapCovers : HasIO io => Builtin.snd <$> SpecialKey.keyMap' {io} = SpecialKey.allKeys
164 | keyMapCovers = Refl
169 | keyMap : HasIO io => io (List (Char, Key))
170 | keyMap = traverse (\(ch, k) => [ (ch', k) | ch' <- ch ]) (keyMap' {io})
172 | lookup' : HasIO io => Eq a => a -> List (io a, b) -> io (Maybe b)
173 | lookup' x [] = pure Nothing
174 | lookup' x ((y, z) :: xs) = do
180 | fromChar : HasIO io => Char -> io (Either Char Key)
181 | fromChar ch = maybeToEither ch <$> lookup' ch keyMap'
189 | keypad' : HasIO io => Window -> (enable : Bool) -> io ()
190 | keypad' (Win win) enable = primIO $
prim__keypad win (boolToInt enable)
198 | keypad : HasIO io => (enable : Bool) -> io ()
199 | keypad enable = keypad' !stdWindow enable