mirror of
https://github.com/openstenoproject/qmk
synced 2024-11-22 08:24:41 +00:00
[Keymap] miryoku layout (#6171)
* First release * add "#pragma once" to config.h and related docs * generate config.h with change from miryoku.org
This commit is contained in:
parent
3483c51f62
commit
4be1dfcee4
8 changed files with 739 additions and 0 deletions
17
keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
Normal file
17
keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
Normal file
|
@ -0,0 +1,17 @@
|
|||
|
||||
// generated from users/manna-harbour_miryoku/miryoku.org
|
||||
|
||||
#define LAYOUT_miryoku( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \
|
||||
N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
|
||||
) \
|
||||
LAYOUT( \
|
||||
KC_NO, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, KC_NO, \
|
||||
KC_NO, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, KC_NO, \
|
||||
KC_NO, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, KC_NO, \
|
||||
K32, K33, K34, K35, K36, K37 \
|
||||
)
|
||||
|
||||
#include "manna-harbour_miryoku.c"
|
21
layouts/community/ergodox/manna-harbour_miryoku/keymap.c
Normal file
21
layouts/community/ergodox/manna-harbour_miryoku/keymap.c
Normal file
|
@ -0,0 +1,21 @@
|
|||
|
||||
// generated from users/manna-harbour_miryoku/miryoku.org
|
||||
|
||||
#define LAYOUT_miryoku(\
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09,\
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19,\
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29,\
|
||||
N30, N31, K32, K33, K34, K35, K36, K37, N38, N39\
|
||||
)\
|
||||
LAYOUT_ergodox_pretty( \
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||
KC_NO, K00, K01, K02, K03, K04, KC_NO, KC_NO, K05, K06, K07, K08, K09, KC_NO, \
|
||||
KC_NO, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, KC_NO, \
|
||||
KC_NO, K20, K21, K22, K23, K24, KC_NO, KC_NO, K25, K26, K27, K28, K29, KC_NO, \
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, K32, K37, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||
KC_NO, KC_NO, \
|
||||
K33, K34, KC_NO, KC_NO, K35, K36 \
|
||||
)
|
||||
|
||||
#include "manna-harbour_miryoku.c"
|
17
layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c
Normal file
17
layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c
Normal file
|
@ -0,0 +1,17 @@
|
|||
|
||||
// generated from users/manna-harbour_miryoku/miryoku.org
|
||||
|
||||
#define LAYOUT_miryoku(\
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09,\
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19,\
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29,\
|
||||
N30, N31, K32, K33, K34, K35, K36, K37, N38, N39\
|
||||
)\
|
||||
LAYOUT_ortho_4x12(\
|
||||
KC_NO, K01, K02, K03, K04, KC_NO, KC_NO, K05, K06, K07, K08, KC_NO,\
|
||||
K00, K11, K12, K13, K14, KC_NO, KC_NO, K15, K16, K17, K18, K09,\
|
||||
K10, K21, K22, K23, K24, KC_NO, KC_NO, K25, K26, K27, K28, K19,\
|
||||
K20, KC_NO, KC_NO, K32, K33, K34, K35, K36, K37, KC_NO, KC_NO, K29\
|
||||
)
|
||||
|
||||
#include "manna-harbour_miryoku.c"
|
1
users/manna-harbour_miryoku/README.org
Symbolic link
1
users/manna-harbour_miryoku/README.org
Symbolic link
|
@ -0,0 +1 @@
|
|||
miryoku.org
|
13
users/manna-harbour_miryoku/config.h
Normal file
13
users/manna-harbour_miryoku/config.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
|
||||
// generated from users/manna-harbour_miryoku/miryoku.org
|
||||
|
||||
#pragma once
|
||||
|
||||
// Prevent normal rollover on alphas from accidentally triggering mods.
|
||||
#define IGNORE_MOD_TAP_INTERRUPT
|
||||
|
||||
// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
|
||||
#define TAPPING_FORCE_HOLD
|
||||
|
||||
// Recommended for heavy chording.
|
||||
#define QMK_KEYS_PER_SCAN 4
|
56
users/manna-harbour_miryoku/manna-harbour_miryoku.c
Normal file
56
users/manna-harbour_miryoku/manna-harbour_miryoku.c
Normal file
|
@ -0,0 +1,56 @@
|
|||
|
||||
// generated from users/manna-harbour_miryoku/miryoku.org
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#define KC_NP KC_NO // key is not present
|
||||
#define KC_NA KC_NO // present but not available for use
|
||||
#define KC_NU KC_NO // available but not used
|
||||
#define KC_RST RESET
|
||||
|
||||
enum layers { BASE, MEDR, NAVR, MOUR, NSSL, NSL, FUNL };
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[BASE] = LAYOUT_miryoku(
|
||||
KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT,
|
||||
LGUI_T(KC_A), LALT_T(KC_R), LCTL_T(KC_S), LSFT_T(KC_T), KC_G, KC_M, LSFT_T(KC_N), LCTL_T(KC_E), LALT_T(KC_I), LGUI_T(KC_O),
|
||||
KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH,
|
||||
KC_NP, KC_NP, LT(MEDR, KC_ESC), LT(NAVR, KC_SPC), LT(MOUR, KC_TAB), LT(NSSL, KC_ENT), LT(NSL, KC_BSPC), LT(FUNL, KC_DEL), KC_NP, KC_NP
|
||||
),
|
||||
[NAVR] = LAYOUT_miryoku(
|
||||
KC_RST, KC_NA, KC_NA, KC_NA, KC_NA, KC_AGIN, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE,
|
||||
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
|
||||
KC_NA, KC_NA, KC_NA, KC_NA, KC_NA, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
|
||||
KC_NP, KC_NP, KC_NA, KC_NA, KC_NA, KC_ENT, KC_BSPC, KC_DEL, KC_NP, KC_NP
|
||||
),
|
||||
[MOUR] = LAYOUT_miryoku(
|
||||
KC_RST, KC_NA, KC_NA, KC_NA, KC_NA, KC_NU, KC_NU, KC_NU, KC_NU, KC_NU,
|
||||
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA, KC_NU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R,
|
||||
KC_NA, KC_NA, KC_NA, KC_NA, KC_NA, KC_NU, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R,
|
||||
KC_NP, KC_NP, KC_NA, KC_NA, KC_NA, KC_BTN3, KC_BTN1, KC_BTN2, KC_NP, KC_NP
|
||||
),
|
||||
[MEDR] = LAYOUT_miryoku(
|
||||
KC_RST, KC_NA, KC_NA, KC_NA, KC_NA, KC_NU, KC_NU, KC_NU, KC_NU, KC_NU,
|
||||
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA, KC_NU, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT,
|
||||
KC_NA, KC_NA, KC_NA, KC_NA, KC_NA, KC_NU, KC_NU, KC_NU, KC_NU, KC_NU,
|
||||
KC_NP, KC_NP, KC_NA, KC_NA, KC_NA, KC_MSTP, KC_MPLY, KC_MUTE, KC_NP, KC_NP
|
||||
),
|
||||
[FUNL] = LAYOUT_miryoku(
|
||||
KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, KC_NA, KC_NA, KC_NA, KC_NA, KC_RST,
|
||||
KC_F11, KC_F4, KC_F5, KC_F6, KC_SLCK, KC_NA, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
|
||||
KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUS, KC_NA, KC_NA, KC_NA, KC_NA, KC_NA,
|
||||
KC_NP, KC_NP, KC_APP, KC_SPC, KC_TAB, KC_NA, KC_NA, KC_NA, KC_NP, KC_NP
|
||||
),
|
||||
[NSL] = LAYOUT_miryoku(
|
||||
KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, KC_NA, KC_NA, KC_NA, KC_NA, KC_RST,
|
||||
KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, KC_NA, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, KC_NA, KC_NA, KC_NA, KC_NA, KC_NA,
|
||||
KC_NP, KC_NP, KC_DOT, KC_0, KC_MINS, KC_NA, KC_NA, KC_NA, KC_NP, KC_NP
|
||||
),
|
||||
[NSSL] = LAYOUT_miryoku(
|
||||
KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, KC_NA, KC_NA, KC_NA, KC_NA, KC_RST,
|
||||
KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, KC_NA, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, KC_NA, KC_NA, KC_NA, KC_NA, KC_NA,
|
||||
KC_NP, KC_NP, KC_GT, KC_RPRN, KC_UNDS, KC_NA, KC_NA, KC_NA, KC_NP, KC_NP
|
||||
)
|
||||
};
|
609
users/manna-harbour_miryoku/miryoku.org
Normal file
609
users/manna-harbour_miryoku/miryoku.org
Normal file
|
@ -0,0 +1,609 @@
|
|||
#+Title: miryoku.org
|
||||
|
||||
The miryoku layout is an ergonomic, minimal, orthogonal layout for ergo or ortho
|
||||
keyboards, implemented as part of the QMK firmware. The layout is maintained in
|
||||
emacs org-mode tables and converted to QMK keymap data structures using embedded
|
||||
python scripts. The layout is mapped onto keyboards with different physical
|
||||
layouts as a subset without code duplication using the QMK userland feature and
|
||||
C macros. Versions of the layout can also be seen outside of the QMK source at
|
||||
[[https://github.com/manna-harbour/miryoku/]].
|
||||
|
||||
* Contents
|
||||
|
||||
- [[#layout][Layout]]
|
||||
- [[#code-generation][Code Generation]]
|
||||
- [[#subset-mapping][Subset Mapping]]
|
||||
|
||||
|
||||
* Layout
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: layout
|
||||
:END:
|
||||
|
||||
** Info
|
||||
|
||||
*** General Principles
|
||||
|
||||
- Use layers instead of reaching.
|
||||
- Use both hands instead of contortions.
|
||||
- Use the home positions as much as possible.
|
||||
- Make full use of the thumbs.
|
||||
- Avoid unnecessary complication.
|
||||
|
||||
|
||||
*** Specifics
|
||||
|
||||
- 5 columns, 3 rows, 3 thumb keys, 2 hands.
|
||||
- Can be used on almost any split or non-split ergo or ortho keyboard.
|
||||
- Includes all keys found on a US layout TKL keyboard, plus media keys and
|
||||
mouse emulation.
|
||||
- Home row is the middle row, home thumb key is the middle thumb key.
|
||||
- Maximum 1-u movement from home position for fingers and thumbs, and only
|
||||
along one axis (except for the inner index finger column which is
|
||||
deprioritised compared with the home columns).
|
||||
- Dual-function modifiers on home row, mirrored on both hands.
|
||||
- Dual-function layer change on thumbs.
|
||||
- Layers are designed orthogonally with a single purpose per hand and are
|
||||
accessed by holding a thumb key on the opposite hand.
|
||||
- Holding layer change and modifiers on one hand combined with a single key
|
||||
press on the other hand can produce any combination of modifiers and
|
||||
single keys without any finger contortions.
|
||||
- Single function mods are also defined on layers on the same hand as the
|
||||
layer change thumb key so layer change and mods can be held in any order
|
||||
or simultaneously without race conditions.
|
||||
- As mods are only enabled on the opposite hand, auto-repeat is available on
|
||||
the home row on layers for use with cursor and mouse keys.
|
||||
- Tap-hold auto-repeat is disabled to enable faster tap-hold switching on
|
||||
thumbs but thumb tap keys are mirrored onto some layers for use with
|
||||
auto-repeat.
|
||||
|
||||
|
||||
** Layers
|
||||
|
||||
The layers are maintained in tables, with the thumb keys on the bottom row. NP
|
||||
indicates the key is not present and is used to fill in the table around the
|
||||
thumb keys. The grid arrangement of the tables does not imply a particular
|
||||
physical layout.
|
||||
|
||||
Basic keycodes are entered without the KC_ prefix. Symbols can be entered as-is
|
||||
(excepting '"' (DQUO) and '|' (PIPE)). Empty cells are unused.
|
||||
|
||||
The base layer has both halves of the layout joined for convenience. Other
|
||||
layers are specified as a single hand.
|
||||
|
||||
*** Base (BASE)
|
||||
|
||||
|
||||
The base layer is maintained as separate tap and hold tables and are combined
|
||||
into the corresponding tap-hold keycodes for mods and layer change. RST and
|
||||
mods will be available on sub layers on the same hand as the layer change thumb
|
||||
key. Unknown names are considered to be layer names.
|
||||
|
||||
Base layer alphas are Colemak DHm. Thumb keys are backspace, enter, delete on
|
||||
the right and space, tab, escape on the left. Dot, comma and apostrophe are
|
||||
included for prose, dot and slash for file and directory names.
|
||||
|
||||
#+NAME: tap
|
||||
| Q | W | F | P | B | J | L | U | Y | ' |
|
||||
| A | R | S | T | G | M | N | E | I | O |
|
||||
| Z | X | C | D | V | K | H | , | . | / |
|
||||
| NP | NP | ESC | SPC | TAB | ENT | BSPC | DEL | NP | NP |
|
||||
|
||||
#+NAME: hold
|
||||
| RST | | | | | | | | | RST |
|
||||
| LGUI | LALT | LCTL | LSFT | | | LSFT | LCTL | LALT | LGUI |
|
||||
| | | | | | | | | | |
|
||||
| NP | NP | MEDR | NAVR | MOUR | NSSL | NSL | FUNL | NP | NP |
|
||||
|
||||
|
||||
*** Navigation (NAVR)
|
||||
|
||||
Primary right-hand layer (left home thumb) is navigation and editing. Cursor
|
||||
keys are on the home position, line and page movement below, clipboard above,
|
||||
caps and insert on the inner column. Thumb keys are duplicated from the base
|
||||
layer to avoid having to layer change mid edit and to enable auto-repeat.
|
||||
|
||||
#+NAME: navr
|
||||
| AGIN | UNDO | CUT | COPY | PSTE |
|
||||
| CAPS | LEFT | DOWN | UP | RGHT |
|
||||
| INS | HOME | PGDN | PGUP | END |
|
||||
| ENT | BSPC | DEL | NP | NP |
|
||||
|
||||
|
||||
*** Mouse (MOUR)
|
||||
|
||||
Secondary RH layer is mouse emulation. Mouse movement mirrors cursor navigation
|
||||
on home and wheel mirrors line / page movement below. Buttons are on the
|
||||
thumbs. Mouse movement, click, and drag with modifiers can be performed from
|
||||
the home position. Unused keys are available for other related functions.
|
||||
|
||||
#+NAME: mour
|
||||
| | | | | |
|
||||
| | MS_L | MS_D | MS_U | MS_R |
|
||||
| | WH_L | WH_D | WH_U | WH_R |
|
||||
| BTN3 | BTN1 | BTN2 | NP | NP |
|
||||
|
||||
|
||||
*** Media (MEDR)
|
||||
|
||||
Tertiary RH layer is media control, with volume up / down and next / prev
|
||||
mirroring the navigation keys. Pause, stop and mute are on thumbs. Unused keys
|
||||
are available for other related functions.
|
||||
|
||||
#+NAME: medr
|
||||
| | | | | |
|
||||
| | MPRV | VOLD | VOLU | MNXT |
|
||||
| | | | | |
|
||||
| MSTP | MPLY | MUTE | NP | NP |
|
||||
|
||||
|
||||
*** Numerals and Symbols (NSL)
|
||||
|
||||
Primary left-hand layer (right home thumb) is numerals and symbols. Numerals
|
||||
are in the standard numpad locations with symbols in the remaining positions.
|
||||
Dot is duplicated from the base layer for convenience.
|
||||
|
||||
#+NAME: nsl
|
||||
| [ | 7 | 8 | 9 | ] |
|
||||
| ; | 4 | 5 | 6 | = |
|
||||
| ` | 1 | 2 | 3 | \ |
|
||||
| NP | NP | . | 0 | - |
|
||||
|
||||
|
||||
*** Shifted Numerals and Symbols (NSSL)
|
||||
|
||||
Secondary LH layer has shifted symbols in the same locations to reduce chording
|
||||
when using mods with shifted symbols. Automatically generated from unshifted
|
||||
table.
|
||||
|
||||
|
||||
*** Function and System (FUNL)
|
||||
|
||||
Tertiary LH layer has function keys mirroring the numerals on the primary layer
|
||||
with extras on the pinkie column, plus system keys on the inner column. App
|
||||
(menu) is on the tertiary thumb key and other thumb keys are duplicated from the
|
||||
base layer to enable auto-repeat.
|
||||
|
||||
|
||||
#+NAME: funl
|
||||
| F12 | F7 | F8 | F9 | PSCR |
|
||||
| F11 | F4 | F5 | F6 | SLCK |
|
||||
| F10 | F1 | F2 | F3 | PAUS |
|
||||
| NP | NP | APP | SPC | TAB |
|
||||
|
||||
|
||||
*** COMMENT Templates
|
||||
|
||||
#+NAME: tem
|
||||
| <l4> | <l4> | <l4> | <l4> | <l4> | <l4> | <l4> | <l4> | <l4> | <l4> |
|
||||
|------+------+------+------+------+------+------+------+------+------|
|
||||
| | | | | | | | | | |
|
||||
| | | | | | | | | | |
|
||||
| | | | | | | | | | |
|
||||
| NP | NP | | | | | | | NP | NP |
|
||||
|
||||
|
||||
Duplicate base layer tap keys on thumbs rather than trans to enable auto-repeat.
|
||||
|
||||
#+NAME: temr
|
||||
| <l4> | <l4> | <l4> | <l4> | <l4> |
|
||||
|------+------+------+------+------|
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
| ENT | BSPC | DEL | NP | NP |
|
||||
|
||||
#+NAME: teml
|
||||
| <l4> | <l4> | <l4> | <l4> | <l4> |
|
||||
|------+------+------+------+------|
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
| NP | NP | ESC | SPC | TAB |
|
||||
|
||||
|
||||
* Code Generation
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: code-generation
|
||||
:END:
|
||||
|
||||
** Table Conversion Scripts
|
||||
|
||||
*** table-layout-taphold
|
||||
|
||||
Produce base layer from separate tap and hold tables.
|
||||
|
||||
#+NAME: table-layout-taphold
|
||||
#+BEGIN_SRC python :var tap_table=tap :var hold_table=hold :var symbol_names_table=symbol-names :var mods_list=mods :tangle no :results verbatim
|
||||
width = 19
|
||||
mods_dict = dict.fromkeys(mods_list)
|
||||
symbol_names_dict = {}
|
||||
for symbol, name, shifted_symbol, shifted_name in symbol_names_table:
|
||||
symbol_names_dict[symbol] = name
|
||||
symbol_names_dict[shifted_symbol] = shifted_name
|
||||
results = ' [BASE] = LAYOUT_miryoku(\n'
|
||||
for tap_row, hold_row in map(None, tap_table, hold_table):
|
||||
results += ' '
|
||||
for tap, hold in map(None, tap_row, hold_row):
|
||||
if tap == '':
|
||||
code = 'NU'
|
||||
elif tap in symbol_names_dict:
|
||||
code = symbol_names_dict[tap]
|
||||
else:
|
||||
code = tap
|
||||
code = 'KC_' + str(code)
|
||||
if hold in mods_dict:
|
||||
code = str(hold) + '_T(' + code + ')'
|
||||
elif hold != '' and hold != 'NP' and hold != 'RST':
|
||||
code = 'LT(' + str(hold) + ', ' + code + ')'
|
||||
results += (code + ', ').ljust(width)
|
||||
results = results.rstrip(' ') + '\n'
|
||||
results = results.rstrip('\n, ') + '\n )'
|
||||
return results
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS: table-layout-taphold
|
||||
: [BASE] = LAYOUT_miryoku(
|
||||
: KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT,
|
||||
: LGUI_T(KC_A), LALT_T(KC_R), LCTL_T(KC_S), LSFT_T(KC_T), KC_G, KC_M, LSFT_T(KC_N), LCTL_T(KC_E), LALT_T(KC_I), LGUI_T(KC_O),
|
||||
: KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH,
|
||||
: KC_NP, KC_NP, LT(MEDR, KC_ESC), LT(NAVR, KC_SPC), LT(MOUR, KC_TAB), LT(NSSL, KC_ENT), LT(NSL, KC_BSPC), LT(FUNL, KC_DEL), KC_NP, KC_NP
|
||||
: )
|
||||
|
||||
|
||||
*** table-layout-half
|
||||
|
||||
Produce sub layers given layer name and corresponding table for single hand and
|
||||
incorporating mods and reset from base layer. Layer names must end with R or L.
|
||||
A layer with shifted symbols can also be generated.
|
||||
|
||||
#+NAME: table-layout-half
|
||||
#+BEGIN_SRC python :var hold_table=hold :var layer_name="NSL" :var half_table=nsl :var symbol_names_table=symbol-names :var mods_list=mods :var shift="false" :tangle no :results verbatim
|
||||
width = 9
|
||||
mods_dict = dict.fromkeys(mods_list)
|
||||
symbol_names_dict = {}
|
||||
shifted_symbol_names_dict = {}
|
||||
for symbol, name, shifted_symbol, shifted_name in symbol_names_table:
|
||||
symbol_names_dict[symbol] = name
|
||||
symbol_names_dict[shifted_symbol] = shifted_name
|
||||
shifted_symbol_names_dict[symbol] = shifted_name
|
||||
length = len(half_table[0])
|
||||
mode = layer_name[-1:].lower()
|
||||
results = ' [' + layer_name + '] = LAYOUT_miryoku(\n'
|
||||
for half_row, hold_row in map(None, half_table, hold_table):
|
||||
results += ' '
|
||||
hold_row_l, hold_row_r = hold_row[:length], hold_row[length:]
|
||||
for lr, hold_row_lr in ('l', hold_row_l), ('r', hold_row_r):
|
||||
if lr == mode:
|
||||
for half in half_row:
|
||||
if half == '':
|
||||
code = 'NU'
|
||||
elif shift == "true" and half in shifted_symbol_names_dict:
|
||||
code = shifted_symbol_names_dict[half]
|
||||
elif half in symbol_names_dict:
|
||||
code = symbol_names_dict[half]
|
||||
else:
|
||||
code = half
|
||||
results += ('KC_' + str(code) + ', ').ljust(width)
|
||||
else:
|
||||
for hold in hold_row_lr:
|
||||
if hold == '' or hold != 'NP' and hold != 'RST' and hold not in mods_dict:
|
||||
code = 'NA'
|
||||
else:
|
||||
code = hold
|
||||
results += ('KC_' + str(code) + ', ').ljust(width)
|
||||
results = results.rstrip(' ') + '\n'
|
||||
results = results.rstrip('\n, ') + '\n )'
|
||||
return results
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS: table-layout-half
|
||||
: [NSL] = LAYOUT_miryoku(
|
||||
: KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, KC_NA, KC_NA, KC_NA, KC_NA, KC_RST,
|
||||
: KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, KC_NA, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
|
||||
: KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, KC_NA, KC_NA, KC_NA, KC_NA, KC_NA,
|
||||
: KC_NP, KC_NP, KC_DOT, KC_0, KC_MINS, KC_NA, KC_NA, KC_NA, KC_NP, KC_NP
|
||||
: )
|
||||
|
||||
|
||||
*** table-enums
|
||||
|
||||
Produce layer enums from layer names in hold table.
|
||||
|
||||
#+NAME: table-enums
|
||||
#+BEGIN_SRC python :var hold_table=hold :var mods_list=mods :tangle no
|
||||
mods_dict = dict.fromkeys(mods_list)
|
||||
results = 'enum layers { BASE, '
|
||||
for hold_row in hold_table:
|
||||
for hold in hold_row:
|
||||
if hold not in mods_dict and hold != '' and hold != 'NP' and hold != 'RST':
|
||||
results += hold + ', '
|
||||
results = results.rstrip(', ') + ' };'
|
||||
return results
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS: table-enums
|
||||
: enum layers { BASE, MEDR, NAVR, MOUR, NSSL, NSL, FUNL };
|
||||
|
||||
|
||||
** Data
|
||||
|
||||
*** symbol-names
|
||||
|
||||
Symbol, name, and shifted symbol mappings for use in tables.
|
||||
|
||||
#+NAME: symbol-names
|
||||
| ` | GRV | ~ | TILD |
|
||||
| - | MINS | _ | UNDS |
|
||||
| = | EQL | + | PLUS |
|
||||
| [ | LBRC | { | LCBR |
|
||||
| ] | RBRC | } | RCBR |
|
||||
| \ | BSLS | PIPE | PIPE |
|
||||
| ; | SCLN | : | COLN |
|
||||
| ' | QUOT | DQUO | DQUO |
|
||||
| , | COMM | < | LT |
|
||||
| . | DOT | > | GT |
|
||||
| / | SLSH | ? | QUES |
|
||||
| 1 | 1 | ! | EXLM |
|
||||
| 2 | 2 | @ | AT |
|
||||
| 3 | 3 | # | HASH |
|
||||
| 4 | 4 | $ | DLR |
|
||||
| 5 | 5 | % | PERC |
|
||||
| 6 | 6 | ^ | CIRC |
|
||||
| 7 | 7 | & | AMPR |
|
||||
| 8 | 8 | * | ASTR |
|
||||
| 9 | 9 | ( | LPRN |
|
||||
| 0 | 0 | ) | RPRN |
|
||||
|
||||
|
||||
*** mods
|
||||
|
||||
Modifiers usable in hold table. Need to have the same name for KC_ and _T versions.
|
||||
|
||||
#+NAME: mods
|
||||
- LSFT
|
||||
- LCTL
|
||||
- LALT
|
||||
- LGUI
|
||||
- LAGR
|
||||
|
||||
|
||||
** Other
|
||||
|
||||
*** header
|
||||
|
||||
Header for tangled src files.
|
||||
|
||||
#+NAME: header
|
||||
#+BEGIN_SRC C :tangle no
|
||||
generated from users/manna-harbour_miryoku/miryoku.org
|
||||
#+END_SRC
|
||||
|
||||
|
||||
* Subset Mapping
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: subset-mapping
|
||||
:END:
|
||||
|
||||
** Userspace
|
||||
|
||||
The keymap and configuration are shared between keyboards. The keymap is
|
||||
defined for LAYOUT_miryoku which is 10x4, with the outer 2 positions on the
|
||||
bottom row unused and the rest of the bottom row are the thumb keys.
|
||||
|
||||
|
||||
*** manna-harbour_miryoku.c
|
||||
|
||||
Contains the keymap. Included from keymap.c
|
||||
|
||||
[[./manna-harbour_miryoku.c][users/manna-harbour_miryoku/manna-harbour_miryoku.c]]
|
||||
#+BEGIN_SRC C :noweb yes :tangle manna-harbour_miryoku.c
|
||||
|
||||
// <<header>>
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#define KC_NP KC_NO // key is not present
|
||||
#define KC_NA KC_NO // present but not available for use
|
||||
#define KC_NU KC_NO // available but not used
|
||||
#define KC_RST RESET
|
||||
|
||||
<<table-enums()>>
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
<<table-layout-taphold()>>,
|
||||
<<table-layout-half(layer_name="NAVR", half_table=navr)>>,
|
||||
<<table-layout-half(layer_name="MOUR", half_table=mour)>>,
|
||||
<<table-layout-half(layer_name="MEDR", half_table=medr)>>,
|
||||
<<table-layout-half(layer_name="FUNL", half_table=funl)>>,
|
||||
<<table-layout-half(layer_name="NSL", half_table=nsl)>>,
|
||||
<<table-layout-half(layer_name="NSSL", half_table=nsl, shift="true")>>
|
||||
};
|
||||
#+END_SRC
|
||||
|
||||
|
||||
*** config.h
|
||||
|
||||
Config options. Automatically included.
|
||||
|
||||
[[./config.h][users/manna-harbour_miryoku/config.h]]
|
||||
#+BEGIN_SRC C :noweb yes :tangle config.h
|
||||
|
||||
// <<header>>
|
||||
|
||||
#pragma once
|
||||
|
||||
// Prevent normal rollover on alphas from accidentally triggering mods.
|
||||
#define IGNORE_MOD_TAP_INTERRUPT
|
||||
|
||||
// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
|
||||
#define TAPPING_FORCE_HOLD
|
||||
|
||||
// Recommended for heavy chording.
|
||||
#define QMK_KEYS_PER_SCAN 4
|
||||
|
||||
#+END_SRC
|
||||
|
||||
|
||||
*** rules.mk
|
||||
|
||||
Build options. Automatically included.
|
||||
|
||||
[[./rules.mk][users/manna-harbour_miryoku/rules.mk]]
|
||||
#+BEGIN_SRC makefile :noweb yes :tangle rules.mk
|
||||
|
||||
# <<header>>
|
||||
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
|
||||
#+END_SRC
|
||||
|
||||
|
||||
** Layouts
|
||||
|
||||
To use the keymap on a keyboard supporting the layouts feature, LAYOUT_miryoku
|
||||
is defined as a macro mapping onto the layout's own LAYOUT macro, leaving the
|
||||
unused keys as KC_NO. The userspace keymap is then included.
|
||||
|
||||
*** ergodox
|
||||
|
||||
For the ergodox layout, the main 5x3 alphas are used as usual. The primary and
|
||||
secondary thumb keys are the inner and outer 2u thumb keys and the tertiary
|
||||
thumb key is the innermost key of the partial bottom row. The remaining keys
|
||||
are unused.
|
||||
|
||||
[[../../layouts/community/ergodox/manna-harbour_miryoku/keymap.c][layouts/community/ergodox/manna-harbour_miryoku/keymap.c]]
|
||||
#+BEGIN_SRC C :noweb yes :tangle ../../layouts/community/ergodox/manna-harbour_miryoku/keymap.c
|
||||
|
||||
// <<header>>
|
||||
|
||||
#define LAYOUT_miryoku(\
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09,\
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19,\
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29,\
|
||||
N30, N31, K32, K33, K34, K35, K36, K37, N38, N39\
|
||||
)\
|
||||
LAYOUT_ergodox_pretty( \
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||
KC_NO, K00, K01, K02, K03, K04, KC_NO, KC_NO, K05, K06, K07, K08, K09, KC_NO, \
|
||||
KC_NO, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, KC_NO, \
|
||||
KC_NO, K20, K21, K22, K23, K24, KC_NO, KC_NO, K25, K26, K27, K28, K29, KC_NO, \
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, K32, K37, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||
KC_NO, KC_NO, \
|
||||
K33, K34, KC_NO, KC_NO, K35, K36 \
|
||||
)
|
||||
|
||||
#include "manna-harbour_miryoku.c"
|
||||
|
||||
#+END_SRC
|
||||
|
||||
To build for any keyboard using the this layout (ergodone, ergodox_ez,
|
||||
ergodox_infinity, hotdox) e.g. the ergodox_ez,
|
||||
|
||||
#+BEGIN_SRC sh :tangle no
|
||||
cd ../.. && make ergodox_ez:manna-harbour_miryoku:teensy
|
||||
#+END_SRC
|
||||
|
||||
|
||||
|
||||
*** ortho_4x12
|
||||
|
||||
For the ortho_4x12 layout, the right half as is as follows: The rightmost column
|
||||
bottom 3 rows is the pinkie column. The middle 4 columns top 3 rows are for the
|
||||
remaining fingers. The bottom row left 3 columns are the thumb keys. The
|
||||
remaining keys are unused.
|
||||
|
||||
[[../../layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c][layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c]]
|
||||
#+BEGIN_SRC C :noweb yes :tangle ../../layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c
|
||||
|
||||
// <<header>>
|
||||
|
||||
#define LAYOUT_miryoku(\
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09,\
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19,\
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29,\
|
||||
N30, N31, K32, K33, K34, K35, K36, K37, N38, N39\
|
||||
)\
|
||||
LAYOUT_ortho_4x12(\
|
||||
KC_NO, K01, K02, K03, K04, KC_NO, KC_NO, K05, K06, K07, K08, KC_NO,\
|
||||
K00, K11, K12, K13, K14, KC_NO, KC_NO, K15, K16, K17, K18, K09,\
|
||||
K10, K21, K22, K23, K24, KC_NO, KC_NO, K25, K26, K27, K28, K19,\
|
||||
K20, KC_NO, KC_NO, K32, K33, K34, K35, K36, K37, KC_NO, KC_NO, K29\
|
||||
)
|
||||
|
||||
#include "manna-harbour_miryoku.c"
|
||||
|
||||
#+END_SRC
|
||||
|
||||
To build for any keyboard using this layout (4x4, nori, chimera_ls, contra,
|
||||
divergetm2, jj40, lets_split, lets_split_eh, meira, niu_mini, planck, telophase,
|
||||
vitamins_included, zinc, zlant, ortho48, kbd4x, levinson, wavelet, plaid)
|
||||
e.g. the levinson,
|
||||
|
||||
#+BEGIN_SRC sh :tangle no
|
||||
make keebio/levinson:manna-harbour_miryoku:avrdude
|
||||
#+END_SRC
|
||||
|
||||
|
||||
** Keyboards
|
||||
|
||||
To use the keymap on a keyboard which does not support the layouts feature,
|
||||
LAYOUT_miryoku is defined as a macro mapping onto the keyboard's own LAYOUT
|
||||
macro, leaving the unused keys as KC_NO. The userspace keymap is then included.
|
||||
|
||||
|
||||
*** crkbd
|
||||
|
||||
The outer columns are unused.
|
||||
|
||||
[[../../keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c][keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c]]
|
||||
#+BEGIN_SRC C :noweb yes :tangle ../../keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
|
||||
|
||||
// <<header>>
|
||||
|
||||
#define LAYOUT_miryoku( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \
|
||||
N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
|
||||
) \
|
||||
LAYOUT( \
|
||||
KC_NO, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, KC_NO, \
|
||||
KC_NO, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, KC_NO, \
|
||||
KC_NO, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, KC_NO, \
|
||||
K32, K33, K34, K35, K36, K37 \
|
||||
)
|
||||
|
||||
#include "manna-harbour_miryoku.c"
|
||||
|
||||
#+END_SRC
|
||||
|
||||
To build for this keyboard,
|
||||
|
||||
#+BEGIN_SRC sh :tangle no
|
||||
cd ../.. && make crkbd:manna-harbour_miryoku:avrdude
|
||||
#+END_SRC
|
||||
|
||||
|
||||
* Related Documentation
|
||||
|
||||
** QMK
|
||||
|
||||
- https://qmk.fm/
|
||||
- https://docs.qmk.fm/#/getting_started_introduction
|
||||
- https://docs.qmk.fm/#/hardware_keyboard_guidelines
|
||||
- https://docs.qmk.fm/#/config_options
|
||||
- https://docs.qmk.fm/#/keycodes
|
||||
- https://docs.qmk.fm/#/feature_advanced_keycodes
|
||||
- https://docs.qmk.fm/#/feature_layouts
|
||||
- https://docs.qmk.fm/#/feature_userspace
|
||||
- https://docs.qmk.fm/#/getting_started_make_guide
|
||||
|
||||
|
||||
** Org Mode
|
||||
|
||||
- https://orgmode.org/
|
||||
- https://orgmode.org/manual/Tables.html
|
||||
- https://orgmode.org/manual/Working-with-Source-Code.html
|
5
users/manna-harbour_miryoku/rules.mk
Normal file
5
users/manna-harbour_miryoku/rules.mk
Normal file
|
@ -0,0 +1,5 @@
|
|||
|
||||
# generated from users/manna-harbour_miryoku/miryoku.org
|
||||
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
Loading…
Reference in a new issue