luv

Workshop wiki

canvas.lisp

terminal/canvas.lisp

system luv/terminal/canvas · 5 definitions · on GitHub

Projection from luv's portable canvas key fact to Ghostty's W3C key fact.

in-package#:luv.terminal
defunghostty-writing-key
key
cond
memberkey'
:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z
key
memberkey'
:0:1:2:3:4:5:6:7:8:9
intern
formatnil"DIGIT-~A"key
"KEYWORD"
symbolpkey
cdr
assoc
symbol-namekey
'
"-".:minus
"=".:equal
"[".:bracket-left
"]".:bracket-right
"\\".:backslash
";".:semicolon
"'".:quote
"`".:backquote
",".:comma
".".:period
"/".:slash
:test#'string=
defuncanvas-key-name-to-ghostty-key
key
or
casekey
:return:enter
:control-left:control-left
:control-right:control-right
:shift-left:shift-left
:shift-right:shift-right
:alt-left:alt-left
:alt-right:alt-right
:super-left:meta-left
:super-right:meta-right
:menu:context-menu
:left:arrow-left
:right:arrow-right
:up:arrow-up
:down:arrow-down
:kp-plus:numpad-add
:kp-minus:numpad-subtract
:kp-multiply:numpad-multiply
:kp-divide:numpad-divide
:kp-period:numpad-decimal
:kp-enter:numpad-enter
:kp-equals:numpad-equal
:kp-comma:numpad-comma
:num-lock:num-lock
otherwise
cond
memberkey'
:backspace:caps-lock:delete:end:escape:help:home:insert:page-down:page-up:pause:print-screen:scroll-lock:space:tab:f1:f2:f3:f4:f5:f6:f7:f8:f9:f10:f11:f12:f13:f14:f15:f16:f17:f18:f19:f20:f21:f22:f23:f24
key
and
symbolpkey
let
name
symbol-namekey
and
=
lengthname
4
string=name"KP-":end13
digit-char-p
charname3
intern
formatnil"NUMPAD-~C"
char
symbol-namekey
3
"KEYWORD"
t:unidentified
defuncanvas-key-consumed-modifiers
event
let
character
luv:canvas-key-event-characterevent
unshifted
luv:canvas-key-event-unshifted-characterevent
modifiers
luv:canvas-key-event-modifiersevent
when
andcharacterunshifted
char/=characterunshifted
member:shiftmodifiers
'
:shift
defuncanvas-key-text
event
let
character
luv:canvas-key-event-characterevent
when
andcharacter
not
or
<
char-codecharacter
32
=
char-codecharacter
127
stringcharacter
defunsend-pty-device-canvas-key-event
deviceevent

Project portable canvas key event into device's mode-aware input queue.

check-typeeventluv:canvas-key-event
let
action
etypecaseevent
luv:canvas-key-press-event
if
luv:canvas-key-event-repeat-pevent
:repeat:press
unshifted
luv:canvas-key-event-unshifted-characterevent
send-pty-device-keydeviceaction
canvas-key-name-to-ghostty-key
luv:canvas-key-event-key-nameevent
:modifiers
luv:canvas-key-event-modifiersevent
:consumed-modifiers:text:unshifted-codepoint
andunshifted
char-codeunshifted