Go to file
Sammi De Guzman b5889fbc59 Update links for Multisteno 2022-08-22 02:20:02 -07:00
.github Bump JamesIves/github-pages-deploy-action from 3.7.1 to 4.3.4 (#17497) 2022-06-29 16:45:09 +10:00
.vscode remove Bracket Pair Colorizer recommendation (#14816) 2021-10-15 11:54:19 +11:00
builddefs Merge dnaq's HID protocol changes 2022-07-18 17:26:25 -07:00
data Promote label with newlines to lint error (#17347) 2022-06-10 11:44:23 +01:00
docs [Docs] Add Encoder requirements to PR Checklist doc (#17634) 2022-07-12 20:50:26 -07:00
drivers Change AW20216 SPI Mode from 0 to 3, to fix RGB LEDs on GMMK Pro (#17262) 2022-05-31 14:46:21 +10:00
keyboards Merge Multisteno firmware 2022-08-22 01:58:52 -07:00
layouts TKL Community Layout Additions (#17563) 2022-07-04 13:48:44 -07:00
lib Add line to multibuild output log showing the actual build target. (#17606) 2022-07-09 22:32:43 +10:00
platforms [Split] Ensure SOFT_SERIAL_PIN is defined if USE_I2C isn't defined (#17466) 2022-06-25 12:34:40 -07:00
quantum Merge dnaq's HID protocol changes 2022-07-18 17:26:25 -07:00
tests Apply EXPECT_REPORT and EXPECT_EMPTY_REPORT (#17311) 2022-06-05 20:06:05 +01:00
tmk_core convert plover hid descriptor to the HI macros 2022-06-15 20:18:13 +02:00
users [Userspace] Add support for additional Mechlovin Adelais PCB version to my userspace (#17547) 2022-07-03 14:25:09 -07:00
util MSYS2 install: use MinGW python-qmk package (#17302) 2022-07-02 15:08:05 +01:00
.clang-format Clang-format tweaks (#15906) 2022-02-11 20:00:34 -08:00
.editorconfig QMK CLI and JSON keymap support (#6176) 2019-07-15 12:14:27 -07:00
.gitattributes eol=lf, where appropriate (#15752) 2022-01-05 21:56:31 +00:00
.gitignore Add .orig to .gitignore (#17626) 2022-07-17 04:38:56 +10:00
.gitmodules Purge uGFX. (#14720) 2021-10-07 10:57:48 +11:00
Dockerfile move everything from qmkfm/base_container to qmkfm/qmk_cli (#14230) 2021-08-29 16:41:56 -07:00
Doxyfile Internal docs generation updates (#16411) 2022-02-21 15:47:44 +00:00
LICENSE add an explicit lisence file for github to pickup 2017-11-13 20:50:54 -05:00
Makefile Migrate more makefile utilities to builddefs sub-directory (#16002) 2022-02-10 09:45:51 -08:00
Vagrantfile move everything from qmkfm/base_container to qmkfm/qmk_cli (#14230) 2021-08-29 16:41:56 -07:00
doxygen-todo Remove SERIAL_LINK feature (#14727) 2021-10-07 12:32:05 +11:00
license_GPLv2.md Clarify the quantum license (#1042) 2017-03-28 15:20:36 -07:00
license_GPLv3.md Clarify the quantum license (#1042) 2017-03-28 15:20:36 -07:00
license_Modified_BSD.md Clarify the quantum license (#1042) 2017-03-28 15:20:36 -07:00
nose2.cfg Setup a python test framework 2019-09-07 07:58:41 -07:00
paths.mk Migrate more makefile utilities to builddefs sub-directory (#16002) 2022-02-10 09:45:51 -08:00
readme.md Update links for Multisteno 2022-08-22 02:20:02 -07:00
requirements-dev.txt Macros in JSON keymaps (#14374) 2021-11-22 11:11:35 -08:00
requirements.txt Quantum Painter (#10174) 2022-04-13 18:00:18 +10:00
setup.cfg Quantum Painter (#10174) 2022-04-13 18:00:18 +10:00
shell.nix Remove Nixpkgs-provided `poetry` from the environment (#17673) 2022-07-18 22:52:55 +03:00

readme.md

QMK Steno Firmware

This repository is a fork of the QMK firmware containing changes specific to hobbyist steno keyboards that are not currently merged into upstream QMK:

  • Support for protocols like Plover HID
  • New keyboards, such as Ecosteno
  • Optional behavior changes such as first-up chord send and chord repeat

See the QMK firmware repository and documentation for more information on QMK itself.

Keyboards Supported

Keyboard Source Binaries
Georgi gboards/georgi
Splitography splitography
The Uni (v2) the_uni/pro_micro StenoKeyboards
The Uni (v3) the_uni/usb_c StenoKeyboards
Ecosteno noll/ecosteno Nolltronics
Multisteno noll/multisteno Nolltronics

Steno Protocols

Serial (TX Bolt, Gemini PR)

The industry-standard TX Bolt and Gemini PR steno protocols are included in upstream QMK, and QMK's steno docs go into more detail on how to set that up, but in summary:

Add the following definitions to your keymap's rules.mk file:

VIRTSER_ENABLE = yes
STENO_ENABLE = yes

And use the constants with the STN_ prefix to specify what steno key each key on your board should send. For example, the base layer for the Uni looks as follows:

/* keymap.c */
#include "keymap_steno.h"

LAYOUT(
  STN_S1,  STN_TL,  STN_PL,  STN_HL,  STN_ST1,  STN_ST3,  STN_FR,  STN_PR,  STN_LR,  STN_TR,  STN_DR ,
  STN_S2,  STN_KL,  STN_WL,  STN_RL,  STN_ST2,  STN_ST4,  STN_RR,  STN_BR,  STN_GR,  STN_SR,  STN_ZR ,
                    STN_N1,  STN_A,   STN_O,    STN_E,    STN_U,   STN_N2,
),

Plover HID

The Plover HID protocol is an in-development protocol that relies on the standard HID protocol rather than USB serial, resulting in more customizability and a better user experience.

To use Plover HID, add the following definitions to your keymap's rules.mk:

STENO_ENABLE = no
PLOVER_HID_ENABLE = yes

The keycodes for Plover HID are the same as the TX Bolt constants for serial, but use the PLV_ prefix instead of STN_:

/* keymap.c */
#include "keymap_plover_hid.h"

LAYOUT(
  PLV_SL,  PLV_TL,  PLV_PL,  PLV_HL,  PLV_STR,  PLV_STR,  PLV_FR,  PLV_PR,  PLV_LR,  PLV_TR,  PLV_DR ,
  PLV_SL,  PLV_KL,  PLV_WL,  PLV_RL,  PLV_STR,  PLV_STR,  PLV_RR,  PLV_BR,  PLV_GR,  PLV_SR,  PLV_ZR ,
                    PLV_NUM, PLV_A,   PLV_O,    PLV_E,    PLV_U,   PLV_NUM,
),

Optional Features

Josh Grams has implemented some steno extensions to the QMK firmware, allowing for easier repetition of certain chords or outlines. These features can be enabled by defining constants in your keymap's config.h.

First-Up Send (STENO_1UP)

/* config.h */
#define STENO_1UP

This feature sends a stroke when you release the first key, allowing you to hold down common keys across several strokes. For example, you can fingerspell by holding down the common chord on the right-hand side, and tapping the letters on the left-hand side:

↓ -FPLT
↓ O  ↑ O       → /OFPLT
↓ S  ↑ S       → /S-FPLT
↓ P  ↑ P-FPLT  → /P-FPLT

Auto-Repeat (STENO_REPEAT)

/* config.h */
#define STENO_REPEAT

/* Maximum number of strokes in an outline to repeat */
#define MAX_REPEAT 8
/* Window of time within which a stroke is considered a repeat */
#define STENO_REPEAT_DELAY_MS 350
/* Percent multiplier for the speed of sending repeated strokes */
#define STENO_REPEAT_SPEED_PERCENT 400

This feature lets you double-tap a stroke to repeat it 4 times as fast as your double-tap (currently capped at 50 strokes per second):

↓ STPH  ↑ STPH  ↓ STPH   → /STPH/STPH/STPH/...
↑ STPH

You can also repeat sequences up to 8 strokes long. Write the full outline, then press and hold the first stroke again, for example:

↓ SUD   ↑ SUD   → /SUD
↓ -PB   ↑ PB    → /SUD/-PB
↓ HREU  ↑ HREU  → /SUD/-PB/HREU
↓ SUD           → /SUD/-PB/HREU/SUD/-PB/HREU/SUD/-PB/HREU/...
↑ SUD