3.4 KiB
Sequences
Sequences are used for sending multiple keystrokes in a single action, and can be used for things like unicode characters (even emojis! 🇨🇦), lorei epsum generators, triggering side effects (think lighting, speakers, microcontroller-optimized cryptocurrency miners, whatever).
Sending strings
The most basic sequence is send_string
. It can be used to send any standard
English alphabet character, and an assortment of other "standard" keyboard keys
(return, space, exclamation points, etc.)
from kmk.handlers.sequences import send_string
WOW = send_string("Wow, KMK is awesome!")
keyboard.keymap = [...WOW,...]
Unicode
Before trying to send Unicode sequences, make sure you set your UnicodeMode
.
You can set an initial value in your keymap by setting keyboard.unicode_mode
.
Keys are provided to change this mode at runtime - for example, KC.UC_MODE_LINUX
.
Unicode Modes:
On Linux, Unicode uses Ctrl-Shift-U
, which is supported by ibus
and GTK+3.
ibus
users will need to add IBUS_ENABLE_CTRL_SHIFT_U=1
to their environment
(~/profile
, ~/.bashrc
, ~/.zshrc
, or through your desktop environment's
configurator).
On Windows, WinCompose is required.
- Linux :
UnicodeMode.LINUX
orUnicodeMode.IBUS
- Mac:
UnicodeMode.MACOS
orUnicodeMode.OSX
orUnicodeMode.RALT
- Windows:
UnicodeMode.WINC
Unicode Examples
To send a simple unicode symbol
from kmk.handlers.sequences import unicode_string_sequence
FLIP = unicode_string_sequence('(ノಠ痊ಠ)ノ彡┻━┻')
keyboard.keymap = [...FLIP,...]
If you'd rather keep a lookup table of your sequences (perhaps to bind emojis to keys), that's supported too, through an obnoxiously long-winded method:
from kmk.handlers.sequences import compile_unicode_string_sequences as cuss
emoticons = cuss({
'BEER': r'🍺',
'HAND_WAVE': r'👋',
})
keymap = [...emoticons.BEER, emoticons.HAND_WAVE...]
The observant will notice dot-notation is supported here despite feeding in a dictionary - the return of
compile_unicode_string_sequences
is akmk.types.AttrDict
, which you can think of as a read-only view over a dictionary adding attribute-based (dot-notation) access.
Remember from the Leader Mode documentation that leader sequences simply bind to
keys, so extrapolating this example out a bit, you can bind emojis to leader
sequences matching some name or mnemonic representing the sequence you're
looking to send. If you ever wanted to type <Leader>fire
and see a fire emoji
on your screen, welcome home.
from kmk.handlers.sequences import compile_unicode_string_sequences as cuss
emoticons = cuss({
# Emojis
'BEER': r'🍺',
'BEER_TOAST': r'🍻',
'FACE_THINKING': r'🤔',
'FIRE': r'🔥',
'FLAG_CA': r'🇨🇦',
'FLAG_US': r'🇺🇸',
})
keyboard.leader_dictionary = {
'beer': emoticons.BEER,
'beers': emoticons.BEER_TOAST,
'fire': emoticons.FIRE,
'uhh': emoticons.FACE_THINKING,
'fca': emoticons.FLAG_CA,
'fus': emoticons.FLAG_US,
}
Finally, if you need to send arbitrary unicode codepoints in raw form, that's
supported too, through unicode_codepoint_sequence
.
from kmk.handlers.sequences import unicode_codepoint_sequence
TABLE_FLIP = unicode_codepoint_sequence([
"28", "30ce", "ca0", "75ca","ca0", "29",
"30ce", "5f61", "253b", "2501", "253b",
])
keyboard.keymap = [...TABLE_FLIP,...]