-
-
Notifications
You must be signed in to change notification settings - Fork 51
Expand file tree
/
Copy pathKeys.hs
More file actions
84 lines (74 loc) · 2.47 KB
/
Copy pathKeys.hs
File metadata and controls
84 lines (74 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
module Termonad.Keys where
import Termonad.Prelude
import qualified Data.Map.Strict as Map
import Data.Set (Set)
import qualified Data.Set as Set
import GI.Gdk
( EventKey
, ModifierType(..)
, getEventKeyHardwareKeycode
, getEventKeyIsModifier
, getEventKeyKeyval
, getEventKeyLength
, getEventKeyState
, getEventKeyString
, getEventKeyType
)
import Termonad.Types
( Key(..)
, TMState
, TMState'(tmStateConfig)
, TMWindowId
, TMConfig(keys)
, toKey
)
showKeys :: EventKey -> IO Bool
showKeys eventKey = do
eventType <- getEventKeyType eventKey
maybeString <- getEventKeyString eventKey
modifiers <- getEventKeyState eventKey
len <- getEventKeyLength eventKey
keyval <- getEventKeyKeyval eventKey
isMod <- getEventKeyIsModifier eventKey
keycode <- getEventKeyHardwareKeycode eventKey
putStrLn "key press event:"
putStrLn $ " type = " <> show eventType
putStrLn $ " str = " <> show maybeString
putStrLn $ " mods = " <> show modifiers
putStrLn $ " isMod = " <> show isMod
putStrLn $ " len = " <> show len
putStrLn $ " keyval = " <> show keyval
putStrLn $ " keycode = " <> show keycode
putStrLn ""
pure True
removeStrangeModifiers :: Key -> Key
removeStrangeModifiers Key{keyVal, keyMods} =
let reservedModifiers :: Set ModifierType
reservedModifiers =
[ ModifierTypeModifierReserved13Mask
, ModifierTypeModifierReserved14Mask
, ModifierTypeModifierReserved15Mask
, ModifierTypeModifierReserved16Mask
, ModifierTypeModifierReserved17Mask
, ModifierTypeModifierReserved18Mask
, ModifierTypeModifierReserved19Mask
, ModifierTypeModifierReserved20Mask
, ModifierTypeModifierReserved21Mask
, ModifierTypeModifierReserved22Mask
, ModifierTypeModifierReserved23Mask
, ModifierTypeModifierReserved24Mask
, ModifierTypeModifierReserved25Mask
, ModifierTypeModifierReserved29Mask
]
in Key keyVal (Set.difference keyMods reservedModifiers)
handleKeyPress :: TMState -> TMWindowId -> EventKey -> IO Bool
handleKeyPress terState tmWindowId eventKey = do
-- void $ showKeys eventKey
keyval <- getEventKeyKeyval eventKey
modifiers <- getEventKeyState eventKey
let oldKey = toKey keyval (Set.fromList modifiers)
newKey = removeStrangeModifiers oldKey
maybeAction <- Map.lookup newKey . keys . tmStateConfig <$> readMVar terState
case maybeAction of
Just action -> action terState tmWindowId
Nothing -> pure False