Better screen support

This commit is contained in:
Tony Garnock-Jones 2014-12-17 11:13:17 -05:00
parent 6df2f11d3a
commit f10d1ac0f0
1 changed files with 44 additions and 36 deletions

View File

@ -87,9 +87,7 @@
[_ (simple-key (unknown-escape-sequence lexeme))])] [_ (simple-key (unknown-escape-sequence lexeme))])]
[_ (error 'analyze-vt-bracket-key "Unexpected input sequence from lexer: ~v" lexeme)])) [_ (error 'analyze-vt-bracket-key "Unexpected input sequence from lexer: ~v" lexeme)]))
(define (analyze-vt-O-key lexeme) (define (analyze-vt-O-mainchar lexeme mainchar)
(match lexeme
[(pregexp "\eO(.)" (list _ mainchar))
(match mainchar (match mainchar
["a" (C- 'up)] ["a" (C- 'up)]
["b" (C- 'down)] ["b" (C- 'down)]
@ -120,10 +118,20 @@
["B" (simple-key 'down)] ;; kcud1 ["B" (simple-key 'down)] ;; kcud1
["C" (simple-key 'right)] ;; kcuf1 ["C" (simple-key 'right)] ;; kcuf1
["D" (simple-key 'left)] ;; kcub1 ["D" (simple-key 'left)] ;; kcub1
["E" (simple-key 'begin)] ;; in screen
["F" (simple-key 'end)] ;; kend ["F" (simple-key 'end)] ;; kend
["H" (simple-key 'home)] ;; khome ["H" (simple-key 'home)] ;; khome
["M" (C- #\M)] ;; keypad enter (rxvt) ["M" (add-modifier 'control (simple-key #\M))] ;; keypad enter (rxvt)
[_ (simple-key (unknown-escape-sequence lexeme))])] [_ (simple-key (unknown-escape-sequence lexeme))]))
(define (analyze-vt-O-key lexeme)
(match lexeme
[(pregexp "\eO(.)(.)" (list _ v-plus-one-str mainchar))
;; screen generates shifting escapes for the keypad like this
(decode-shifting-number (string->number v-plus-one-str)
(analyze-vt-O-mainchar lexeme mainchar))]
[(pregexp "\eO(.)" (list _ mainchar))
(analyze-vt-O-mainchar lexeme mainchar)]
[other (simple-key (unknown-escape-sequence lexeme))])) [other (simple-key (unknown-escape-sequence lexeme))]))
(define lex-lcd-input (define lex-lcd-input
@ -136,8 +144,8 @@
[#\uff (M- 'backspace)] [#\uff (M- 'backspace)]
[(:: "\e[" (:? (:+ numeric) (:* #\; (:+ numeric))) any-char) [(:: "\e[" (:? (:+ numeric) (:* #\; (:+ numeric))) any-char)
(analyze-vt-bracket-key lexeme)] (analyze-vt-bracket-key lexeme)]
[(:: "\eO" any-char) [(:: "\eO" any-char) (analyze-vt-O-key lexeme)]
(analyze-vt-O-key lexeme)] [(:: "\eO" numeric any-char) (analyze-vt-O-key lexeme)]
)) ))
(module+ main (module+ main