All Projects → TyberiusPrime → Keytokey

TyberiusPrime / Keytokey

Licence: mit
Rust keyboard firmware library

Programming Languages

rust
11053 projects

Labels

Projects that are alternatives of or similar to Keytokey

Myanmar Unicode Fonts
Fonts preview for list of Myanmar Unicode fonts
Stars: ✭ 14 (-74.07%)
Mutual labels:  unicode
Unidump
hexdump(1) for Unicode data
Stars: ✭ 31 (-42.59%)
Mutual labels:  unicode
Unicode Confusable
Unicode::Confusable.confusable? "ℜսᖯʏ", "Ruby"
Stars: ✭ 47 (-12.96%)
Mutual labels:  unicode
Unicode 9.0.0
JavaScript-compatible Unicode data. Arrays of code points, arrays of symbols, and regular expressions for Unicode v9.0.0’s categories, scripts, blocks, bidi, and other properties.
Stars: ✭ 15 (-72.22%)
Mutual labels:  unicode
Awesome Typography
✏︎ Curated list about digital typography 🔥
Stars: ✭ 947 (+1653.7%)
Mutual labels:  unicode
Unicode 8.0.0
JavaScript-compatible Unicode data. Arrays of code points, arrays of symbols, and regular expressions for Unicode v8.0.0’s categories, scripts, blocks, bidi, and other properties.
Stars: ✭ 38 (-29.63%)
Mutual labels:  unicode
Idutf8lib
Idiot's UTF-8 Library
Stars: ✭ 12 (-77.78%)
Mutual labels:  unicode
Sheenbidi
A sophisticated implementation of Unicode Bidirectional Algorithm
Stars: ✭ 52 (-3.7%)
Mutual labels:  unicode
Unicode 10.0.0
JavaScript-compatible Unicode data. Arrays of code points, arrays of symbols, and regular expressions for Unicode v10.0.0’s categories, scripts, blocks, bidi, and other properties.
Stars: ✭ 30 (-44.44%)
Mutual labels:  unicode
Phobos
The standard library of the D programming language
Stars: ✭ 1,038 (+1822.22%)
Mutual labels:  unicode
Pysamesame
This is a python version of samesame repo to generate homograph strings
Stars: ✭ 20 (-62.96%)
Mutual labels:  unicode
Tcodeedit
Lightweight and syntax hilighted UNICODE editor
Stars: ✭ 27 (-50%)
Mutual labels:  unicode
Unicode Tr51
Emoji data extracted from Unicode Technical Report #51.
Stars: ✭ 38 (-29.63%)
Mutual labels:  unicode
Utf8.h
📚 single header utf8 string functions for C and C++
Stars: ✭ 875 (+1520.37%)
Mutual labels:  unicode
Font Awesome Php
A PHP library for Font Awesome 4.7.
Stars: ✭ 47 (-12.96%)
Mutual labels:  unicode
Crx Jtrans
jTransliter - the roman to unicode transliter as Google chrome extension
Stars: ✭ 13 (-75.93%)
Mutual labels:  unicode
Unicode Bidirectional
A Javascript implementation of the Unicode 9.0.0 Bidirectional Algorithm
Stars: ✭ 35 (-35.19%)
Mutual labels:  unicode
Weird Json
A collection of strange encoded JSONs. For connoisseurs.
Stars: ✭ 53 (-1.85%)
Mutual labels:  unicode
Open Relay
Free and open source fonts from Kreative Software
Stars: ✭ 48 (-11.11%)
Mutual labels:  unicode
Icu
The new home of the ICU project source code.
Stars: ✭ 1,011 (+1772.22%)
Mutual labels:  unicode

KeyToKey

KeyToKey (K2K) is a Rust libary for building keyboard firmwares.

Basically, a keyboard firmware a) reads key-presses, b) translates them c) and outputs the results to a computer.

KeyToKey's role is in b - it takes a stream of events, such as key presses, releases and timeouts, and translates them using a series of handler trait objects into reports that can easily be converted to the format USB expects.

This is inspired by the QMK mechanical keyboard firmware, which probably is the most feature complete keyboard firmware to date. Alas it's C, and an amazing ball of ifdefs that usually needs more flash than the micros it's targeting offer.

The trait object oriented approach chosen here allows composition of arbitrarily complex keyboard layouts - and unit testing them without hardware.

To get started, maybe check out the reference firmware.

KeyToKey operates on key codes that are u32 representing unicode key points. (The USB keycodes are nested in the first 'private area' of the unicode code set, and the rest of the private area is free to be used by the keyboard implementor.)

A basic keyboard uses two handlers - a handlers::UnicodeKeyboard, which sends the OS-specific magic 'enter-an-arbitrary-unicode-keypoint' for any key code outside of the private areas, and a handlers::USBKeyboard which handles all the usual 'tell the computer which buttons are pressed' functionality including modifiers.

USBKeyboard does not limit the number of simultanious keys, but the downstream translation into USB might restrict to the usual 6 key rollover.

Basic features

  • works as a regular USB keyboard
  • arbirtrary unicode input in linux and windows

Advanced Features working

  • Layers (which can rewrite key codes, conditionally rewrite them based on shift status or send arbitrary strings, again dependeant on shift)
  • RewriteLayers (which can only rewrite key codes, but are much more memory efficient)
  • PressReleaseMacros (callbacks on key press / key release)
  • StickyMacros (Tap once to activate, again to deactivate){
  • OneShots (Press -> activate, deactivates after next any-not-one-shot key press - useful for modifiers or temporarily activated layers)
  • SpaceCadet (Do one thing on press-and-hold, a different thing on tap. For example a shift key that also outputs a '('))
  • Sequences (e.g. t e h -> the which don't intercept the keycodes, but then send a set of backspace presses, and then your action)

Advanced features planned

  • Leader sequences (e.g. hit leader h e a r t to enter a heart emoji, or an arbitrary string)
  • TapDance (count the number of taps on a key, pass the final count to a callback)
  • AutoShift - Short tap: lower case, longer tap: uppercase. Removes key repeat though.

K2K strives to seperate the triggers (when does something happen) from the actual actions. Currently actions may be arbitrary (USB) KeyCodes being registered, &str being send or callbacks (implemented via traits)

Other rust firmwares / keyboard libraries

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].