forked from soegaard/remacs
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathkey-event-key.rkt
40 lines (36 loc) · 1.17 KB
/
key-event-key.rkt
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
#lang racket
(require racket/gui/base)
(provide key-event->key-symbol ignored-key-event?)
(define (ignored-key-event? event)
(define k (send event get-key-code))
(match k
[(or 'release 'control 'shift 'rcontrol 'rshift)
#t]
[_ #f]))
(define (key-event->key-symbol event)
(define k (send event get-key-code))
(define base-key
(match k
[#\return "CR"]
[#\backspace "BACKSPACE"]
[(? char? k) (string k)]
['escape "Esc"]
['left "Left"]
['right "Right"]
['up "Up"]
['down "Down"]
[_ (error 'missing (~v k))]))
(define complex-key
(for/fold ([com-key base-key])
([func-S (list (cons (send event get-meta-down) "M")
;(cons (send event get-shift-down) "S")
(cons (send event get-control-down) "C")
(cons (send event get-alt-down) "A"))])
(cond
[(car func-S) (string-append (cdr func-S) "-" com-key)]
[else com-key])))
(define final-string
(cond
[(> (string-length complex-key) 1) (string-append "<" complex-key ">")]
[else complex-key]))
(string->symbol final-string))