kanata design
2025/1/7
kanata design
Obligatory diagram
main
- read args
- read config
- start event loops
event loop
- read key events
- send events to processing loop on channel
processing loop
- check for events on mpsc
- if event: send event to layout
- tick() the keyberon layout, send any events needed
- if no event: sleep for 1ms
- separate monotonic time checks, because can't rely on sleep to be fine-grained or accurate
- send
ServerMessage
s to the TCP server
TCP server
- listen for
ClientMessage
s and act on them - recv
ServerMessage
s from processing loop and forward to all connected clients
layout
- uses keyberon
- indices of
kanata_keyberon::layout::Event::{Press, Release}(x,y)
:x = 0 or 1 (0 is for physical key presses, 1 is for fake keys) y = OS code of key used as an index
OS-specific code
Most of the OS specific code is in oskbd/
and keys/
. There's a bit of it in kanata/
since the event loops to receive OS events are different.
链接到当前文件 0
没有文件链接到当前文件