aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManna Harbour <51143715+manna-harbour@users.noreply.github.com>2019-06-26 17:33:12 +1000
committerDrashna Jaelre <drashna@live.com>2019-06-26 00:33:12 -0700
commit4be1dfcee48daeb77e966b08ad9ca51e02253acf (patch)
treec4f4f8ab7554167af6509d643200fb8ce7e9040b
parent3483c51f62640c83d35a0b4c4636a5939f2c3898 (diff)
downloadqmk_firmware-4be1dfcee48daeb77e966b08ad9ca51e02253acf.tar.gz
qmk_firmware-4be1dfcee48daeb77e966b08ad9ca51e02253acf.zip
[Keymap] miryoku layout (#6171)
* First release * add "#pragma once" to config.h and related docs * generate config.h with change from miryoku.org
-rw-r--r--keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c17
-rw-r--r--layouts/community/ergodox/manna-harbour_miryoku/keymap.c21
-rw-r--r--layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c17
l---------users/manna-harbour_miryoku/README.org1
-rw-r--r--users/manna-harbour_miryoku/config.h13
-rw-r--r--users/manna-harbour_miryoku/manna-harbour_miryoku.c56
-rw-r--r--users/manna-harbour_miryoku/miryoku.org609
-rw-r--r--users/manna-harbour_miryoku/rules.mk5
8 files changed, 739 insertions, 0 deletions
diff --git a/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c b/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
new file mode 100644
index 000000000..56d4de25a
--- /dev/null
+++ b/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
@@ -0,0 +1,17 @@
1
2// generated from users/manna-harbour_miryoku/miryoku.org
3
4#define LAYOUT_miryoku( \
5 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \
6 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \
7 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \
8 N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
9) \
10LAYOUT( \
11KC_NO, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, KC_NO, \
12KC_NO, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, KC_NO, \
13KC_NO, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, KC_NO, \
14 K32, K33, K34, K35, K36, K37 \
15)
16
17#include "manna-harbour_miryoku.c"
diff --git a/layouts/community/ergodox/manna-harbour_miryoku/keymap.c b/layouts/community/ergodox/manna-harbour_miryoku/keymap.c
new file mode 100644
index 000000000..86547df98
--- /dev/null
+++ b/layouts/community/ergodox/manna-harbour_miryoku/keymap.c
@@ -0,0 +1,21 @@
1
2// generated from users/manna-harbour_miryoku/miryoku.org
3
4#define LAYOUT_miryoku(\
5K00, K01, K02, K03, K04, K05, K06, K07, K08, K09,\
6K10, K11, K12, K13, K14, K15, K16, K17, K18, K19,\
7K20, K21, K22, K23, K24, K25, K26, K27, K28, K29,\
8N30, N31, K32, K33, K34, K35, K36, K37, N38, N39\
9)\
10LAYOUT_ergodox_pretty( \
11KC_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, \
12KC_NO, K00, K01, K02, K03, K04, KC_NO, KC_NO, K05, K06, K07, K08, K09, KC_NO, \
13KC_NO, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, KC_NO, \
14KC_NO, K20, K21, K22, K23, K24, KC_NO, KC_NO, K25, K26, K27, K28, K29, KC_NO, \
15KC_NO, KC_NO, KC_NO, KC_NO, K32, K37, KC_NO, KC_NO, KC_NO, KC_NO, \
16 KC_NO, KC_NO, KC_NO, KC_NO, \
17 KC_NO, KC_NO, \
18 K33, K34, KC_NO, KC_NO, K35, K36 \
19)
20
21#include "manna-harbour_miryoku.c"
diff --git a/layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c b/layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c
new file mode 100644
index 000000000..b1341d41f
--- /dev/null
+++ b/layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c
@@ -0,0 +1,17 @@
1
2// generated from users/manna-harbour_miryoku/miryoku.org
3
4#define LAYOUT_miryoku(\
5K00, K01, K02, K03, K04, K05, K06, K07, K08, K09,\
6K10, K11, K12, K13, K14, K15, K16, K17, K18, K19,\
7K20, K21, K22, K23, K24, K25, K26, K27, K28, K29,\
8N30, N31, K32, K33, K34, K35, K36, K37, N38, N39\
9)\
10LAYOUT_ortho_4x12(\
11KC_NO, K01, K02, K03, K04, KC_NO, KC_NO, K05, K06, K07, K08, KC_NO,\
12K00, K11, K12, K13, K14, KC_NO, KC_NO, K15, K16, K17, K18, K09,\
13K10, K21, K22, K23, K24, KC_NO, KC_NO, K25, K26, K27, K28, K19,\
14K20, KC_NO, KC_NO, K32, K33, K34, K35, K36, K37, KC_NO, KC_NO, K29\
15)
16
17#include "manna-harbour_miryoku.c"
diff --git a/users/manna-harbour_miryoku/README.org b/users/manna-harbour_miryoku/README.org
new file mode 120000
index 000000000..b6caaade1
--- /dev/null
+++ b/users/manna-harbour_miryoku/README.org
@@ -0,0 +1 @@
miryoku.org \ No newline at end of file
diff --git a/users/manna-harbour_miryoku/config.h b/users/manna-harbour_miryoku/config.h
new file mode 100644
index 000000000..c3c513d06
--- /dev/null
+++ b/users/manna-harbour_miryoku/config.h
@@ -0,0 +1,13 @@
1
2// generated from users/manna-harbour_miryoku/miryoku.org
3
4#pragma once
5
6// Prevent normal rollover on alphas from accidentally triggering mods.
7#define IGNORE_MOD_TAP_INTERRUPT
8
9// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
10#define TAPPING_FORCE_HOLD
11
12// Recommended for heavy chording.
13#define QMK_KEYS_PER_SCAN 4
diff --git a/users/manna-harbour_miryoku/manna-harbour_miryoku.c b/users/manna-harbour_miryoku/manna-harbour_miryoku.c
new file mode 100644
index 000000000..bb4770afc
--- /dev/null
+++ b/users/manna-harbour_miryoku/manna-harbour_miryoku.c
@@ -0,0 +1,56 @@
1
2// generated from users/manna-harbour_miryoku/miryoku.org
3
4#include QMK_KEYBOARD_H
5
6#define KC_NP KC_NO // key is not present
7#define KC_NA KC_NO // present but not available for use
8#define KC_NU KC_NO // available but not used
9#define KC_RST RESET
10
11enum layers { BASE, MEDR, NAVR, MOUR, NSSL, NSL, FUNL };
12
13const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
14 [BASE] = LAYOUT_miryoku(
15 KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT,
16 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),
17 KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH,
18 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
19 ),
20 [NAVR] = LAYOUT_miryoku(
21 KC_RST, KC_NA, KC_NA, KC_NA, KC_NA, KC_AGIN, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE,
22 KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
23 KC_NA, KC_NA, KC_NA, KC_NA, KC_NA, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
24 KC_NP, KC_NP, KC_NA, KC_NA, KC_NA, KC_ENT, KC_BSPC, KC_DEL, KC_NP, KC_NP
25 ),
26 [MOUR] = LAYOUT_miryoku(
27 KC_RST, KC_NA, KC_NA, KC_NA, KC_NA, KC_NU, KC_NU, KC_NU, KC_NU, KC_NU,
28 KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA, KC_NU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R,
29 KC_NA, KC_NA, KC_NA, KC_NA, KC_NA, KC_NU, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R,
30 KC_NP, KC_NP, KC_NA, KC_NA, KC_NA, KC_BTN3, KC_BTN1, KC_BTN2, KC_NP, KC_NP
31 ),
32 [MEDR] = LAYOUT_miryoku(
33 KC_RST, KC_NA, KC_NA, KC_NA, KC_NA, KC_NU, KC_NU, KC_NU, KC_NU, KC_NU,
34 KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA, KC_NU, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT,
35 KC_NA, KC_NA, KC_NA, KC_NA, KC_NA, KC_NU, KC_NU, KC_NU, KC_NU, KC_NU,
36 KC_NP, KC_NP, KC_NA, KC_NA, KC_NA, KC_MSTP, KC_MPLY, KC_MUTE, KC_NP, KC_NP
37 ),
38 [FUNL] = LAYOUT_miryoku(
39 KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, KC_NA, KC_NA, KC_NA, KC_NA, KC_RST,
40 KC_F11, KC_F4, KC_F5, KC_F6, KC_SLCK, KC_NA, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
41 KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUS, KC_NA, KC_NA, KC_NA, KC_NA, KC_NA,
42 KC_NP, KC_NP, KC_APP, KC_SPC, KC_TAB, KC_NA, KC_NA, KC_NA, KC_NP, KC_NP
43 ),
44 [NSL] = LAYOUT_miryoku(
45 KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, KC_NA, KC_NA, KC_NA, KC_NA, KC_RST,
46 KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, KC_NA, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
47 KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, KC_NA, KC_NA, KC_NA, KC_NA, KC_NA,
48 KC_NP, KC_NP, KC_DOT, KC_0, KC_MINS, KC_NA, KC_NA, KC_NA, KC_NP, KC_NP
49 ),
50 [NSSL] = LAYOUT_miryoku(
51 KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, KC_NA, KC_NA, KC_NA, KC_NA, KC_RST,
52 KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, KC_NA, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
53 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, KC_NA, KC_NA, KC_NA, KC_NA, KC_NA,
54 KC_NP, KC_NP, KC_GT, KC_RPRN, KC_UNDS, KC_NA, KC_NA, KC_NA, KC_NP, KC_NP
55 )
56};
diff --git a/users/manna-harbour_miryoku/miryoku.org b/users/manna-harbour_miryoku/miryoku.org
new file mode 100644
index 000000000..556f95f60
--- /dev/null
+++ b/users/manna-harbour_miryoku/miryoku.org
@@ -0,0 +1,609 @@
1#+Title: miryoku.org
2
3The miryoku layout is an ergonomic, minimal, orthogonal layout for ergo or ortho
4keyboards, implemented as part of the QMK firmware. The layout is maintained in
5emacs org-mode tables and converted to QMK keymap data structures using embedded
6python scripts. The layout is mapped onto keyboards with different physical
7layouts as a subset without code duplication using the QMK userland feature and
8C macros. Versions of the layout can also be seen outside of the QMK source at
9[[https://github.com/manna-harbour/miryoku/]].
10
11* Contents
12
13- [[#layout][Layout]]
14- [[#code-generation][Code Generation]]
15- [[#subset-mapping][Subset Mapping]]
16
17
18* Layout
19:PROPERTIES:
20:CUSTOM_ID: layout
21:END:
22
23** Info
24
25*** General Principles
26
27 - Use layers instead of reaching.
28 - Use both hands instead of contortions.
29 - Use the home positions as much as possible.
30 - Make full use of the thumbs.
31 - Avoid unnecessary complication.
32
33
34*** Specifics
35
36 - 5 columns, 3 rows, 3 thumb keys, 2 hands.
37 - Can be used on almost any split or non-split ergo or ortho keyboard.
38 - Includes all keys found on a US layout TKL keyboard, plus media keys and
39 mouse emulation.
40 - Home row is the middle row, home thumb key is the middle thumb key.
41 - Maximum 1-u movement from home position for fingers and thumbs, and only
42 along one axis (except for the inner index finger column which is
43 deprioritised compared with the home columns).
44 - Dual-function modifiers on home row, mirrored on both hands.
45 - Dual-function layer change on thumbs.
46 - Layers are designed orthogonally with a single purpose per hand and are
47 accessed by holding a thumb key on the opposite hand.
48 - Holding layer change and modifiers on one hand combined with a single key
49 press on the other hand can produce any combination of modifiers and
50 single keys without any finger contortions.
51 - Single function mods are also defined on layers on the same hand as the
52 layer change thumb key so layer change and mods can be held in any order
53 or simultaneously without race conditions.
54 - As mods are only enabled on the opposite hand, auto-repeat is available on
55 the home row on layers for use with cursor and mouse keys.
56 - Tap-hold auto-repeat is disabled to enable faster tap-hold switching on
57 thumbs but thumb tap keys are mirrored onto some layers for use with
58 auto-repeat.
59
60
61** Layers
62
63The layers are maintained in tables, with the thumb keys on the bottom row. NP
64indicates the key is not present and is used to fill in the table around the
65thumb keys. The grid arrangement of the tables does not imply a particular
66physical layout.
67
68Basic keycodes are entered without the KC_ prefix. Symbols can be entered as-is
69(excepting '"' (DQUO) and '|' (PIPE)). Empty cells are unused.
70
71The base layer has both halves of the layout joined for convenience. Other
72layers are specified as a single hand.
73
74*** Base (BASE)
75
76
77The base layer is maintained as separate tap and hold tables and are combined
78into the corresponding tap-hold keycodes for mods and layer change. RST and
79mods will be available on sub layers on the same hand as the layer change thumb
80key. Unknown names are considered to be layer names.
81
82Base layer alphas are Colemak DHm. Thumb keys are backspace, enter, delete on
83the right and space, tab, escape on the left. Dot, comma and apostrophe are
84included for prose, dot and slash for file and directory names.
85
86#+NAME: tap
87| Q | W | F | P | B | J | L | U | Y | ' |
88| A | R | S | T | G | M | N | E | I | O |
89| Z | X | C | D | V | K | H | , | . | / |
90| NP | NP | ESC | SPC | TAB | ENT | BSPC | DEL | NP | NP |
91
92#+NAME: hold
93| RST | | | | | | | | | RST |
94| LGUI | LALT | LCTL | LSFT | | | LSFT | LCTL | LALT | LGUI |
95| | | | | | | | | | |
96| NP | NP | MEDR | NAVR | MOUR | NSSL | NSL | FUNL | NP | NP |
97
98
99*** Navigation (NAVR)
100
101Primary right-hand layer (left home thumb) is navigation and editing. Cursor
102keys are on the home position, line and page movement below, clipboard above,
103caps and insert on the inner column. Thumb keys are duplicated from the base
104layer to avoid having to layer change mid edit and to enable auto-repeat.
105
106#+NAME: navr
107| AGIN | UNDO | CUT | COPY | PSTE |
108| CAPS | LEFT | DOWN | UP | RGHT |
109| INS | HOME | PGDN | PGUP | END |
110| ENT | BSPC | DEL | NP | NP |
111
112
113*** Mouse (MOUR)
114
115Secondary RH layer is mouse emulation. Mouse movement mirrors cursor navigation
116on home and wheel mirrors line / page movement below. Buttons are on the
117thumbs. Mouse movement, click, and drag with modifiers can be performed from
118the home position. Unused keys are available for other related functions.
119
120#+NAME: mour
121| | | | | |
122| | MS_L | MS_D | MS_U | MS_R |
123| | WH_L | WH_D | WH_U | WH_R |
124| BTN3 | BTN1 | BTN2 | NP | NP |
125
126
127*** Media (MEDR)
128
129Tertiary RH layer is media control, with volume up / down and next / prev
130mirroring the navigation keys. Pause, stop and mute are on thumbs. Unused keys
131are available for other related functions.
132
133#+NAME: medr
134| | | | | |
135| | MPRV | VOLD | VOLU | MNXT |
136| | | | | |
137| MSTP | MPLY | MUTE | NP | NP |
138
139
140*** Numerals and Symbols (NSL)
141
142Primary left-hand layer (right home thumb) is numerals and symbols. Numerals
143are in the standard numpad locations with symbols in the remaining positions.
144Dot is duplicated from the base layer for convenience.
145
146#+NAME: nsl
147| [ | 7 | 8 | 9 | ] |
148| ; | 4 | 5 | 6 | = |
149| ` | 1 | 2 | 3 | \ |
150| NP | NP | . | 0 | - |
151
152
153*** Shifted Numerals and Symbols (NSSL)
154
155Secondary LH layer has shifted symbols in the same locations to reduce chording
156when using mods with shifted symbols. Automatically generated from unshifted
157table.
158
159
160*** Function and System (FUNL)
161
162Tertiary LH layer has function keys mirroring the numerals on the primary layer
163with extras on the pinkie column, plus system keys on the inner column. App
164(menu) is on the tertiary thumb key and other thumb keys are duplicated from the
165base layer to enable auto-repeat.
166
167
168#+NAME: funl
169| F12 | F7 | F8 | F9 | PSCR |
170| F11 | F4 | F5 | F6 | SLCK |
171| F10 | F1 | F2 | F3 | PAUS |
172| NP | NP | APP | SPC | TAB |
173
174
175*** COMMENT Templates
176
177#+NAME: tem
178| <l4> | <l4> | <l4> | <l4> | <l4> | <l4> | <l4> | <l4> | <l4> | <l4> |
179|------+------+------+------+------+------+------+------+------+------|
180| | | | | | | | | | |
181| | | | | | | | | | |
182| | | | | | | | | | |
183| NP | NP | | | | | | | NP | NP |
184
185
186Duplicate base layer tap keys on thumbs rather than trans to enable auto-repeat.
187
188#+NAME: temr
189| <l4> | <l4> | <l4> | <l4> | <l4> |
190|------+------+------+------+------|
191| | | | | |
192| | | | | |
193| | | | | |
194| ENT | BSPC | DEL | NP | NP |
195
196#+NAME: teml
197| <l4> | <l4> | <l4> | <l4> | <l4> |
198|------+------+------+------+------|
199| | | | | |
200| | | | | |
201| | | | | |
202| NP | NP | ESC | SPC | TAB |
203
204
205* Code Generation
206:PROPERTIES:
207:CUSTOM_ID: code-generation
208:END:
209
210** Table Conversion Scripts
211
212*** table-layout-taphold
213
214Produce base layer from separate tap and hold tables.
215
216#+NAME: table-layout-taphold
217#+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
218width = 19
219mods_dict = dict.fromkeys(mods_list)
220symbol_names_dict = {}
221for symbol, name, shifted_symbol, shifted_name in symbol_names_table:
222 symbol_names_dict[symbol] = name
223 symbol_names_dict[shifted_symbol] = shifted_name
224results = ' [BASE] = LAYOUT_miryoku(\n'
225for tap_row, hold_row in map(None, tap_table, hold_table):
226 results += ' '
227 for tap, hold in map(None, tap_row, hold_row):
228 if tap == '':
229 code = 'NU'
230 elif tap in symbol_names_dict:
231 code = symbol_names_dict[tap]
232 else:
233 code = tap
234 code = 'KC_' + str(code)
235 if hold in mods_dict:
236 code = str(hold) + '_T(' + code + ')'
237 elif hold != '' and hold != 'NP' and hold != 'RST':
238 code = 'LT(' + str(hold) + ', ' + code + ')'
239 results += (code + ', ').ljust(width)
240 results = results.rstrip(' ') + '\n'
241results = results.rstrip('\n, ') + '\n )'
242return results
243#+END_SRC
244
245#+RESULTS: table-layout-taphold
246: [BASE] = LAYOUT_miryoku(
247: KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT,
248: 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),
249: KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH,
250: 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
251: )
252
253
254*** table-layout-half
255
256Produce sub layers given layer name and corresponding table for single hand and
257incorporating mods and reset from base layer. Layer names must end with R or L.
258A layer with shifted symbols can also be generated.
259
260#+NAME: table-layout-half
261#+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
262width = 9
263mods_dict = dict.fromkeys(mods_list)
264symbol_names_dict = {}
265shifted_symbol_names_dict = {}
266for symbol, name, shifted_symbol, shifted_name in symbol_names_table:
267 symbol_names_dict[symbol] = name
268 symbol_names_dict[shifted_symbol] = shifted_name
269 shifted_symbol_names_dict[symbol] = shifted_name
270length = len(half_table[0])
271mode = layer_name[-1:].lower()
272results = ' [' + layer_name + '] = LAYOUT_miryoku(\n'
273for half_row, hold_row in map(None, half_table, hold_table):
274 results += ' '
275 hold_row_l, hold_row_r = hold_row[:length], hold_row[length:]
276 for lr, hold_row_lr in ('l', hold_row_l), ('r', hold_row_r):
277 if lr == mode:
278 for half in half_row:
279 if half == '':
280 code = 'NU'
281 elif shift == "true" and half in shifted_symbol_names_dict:
282 code = shifted_symbol_names_dict[half]
283 elif half in symbol_names_dict:
284 code = symbol_names_dict[half]
285 else:
286 code = half
287 results += ('KC_' + str(code) + ', ').ljust(width)
288 else:
289 for hold in hold_row_lr:
290 if hold == '' or hold != 'NP' and hold != 'RST' and hold not in mods_dict:
291 code = 'NA'
292 else:
293 code = hold
294 results += ('KC_' + str(code) + ', ').ljust(width)
295 results = results.rstrip(' ') + '\n'
296results = results.rstrip('\n, ') + '\n )'
297return results
298#+END_SRC
299
300#+RESULTS: table-layout-half
301: [NSL] = LAYOUT_miryoku(
302: KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, KC_NA, KC_NA, KC_NA, KC_NA, KC_RST,
303: KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, KC_NA, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
304: KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, KC_NA, KC_NA, KC_NA, KC_NA, KC_NA,
305: KC_NP, KC_NP, KC_DOT, KC_0, KC_MINS, KC_NA, KC_NA, KC_NA, KC_NP, KC_NP
306: )
307
308
309*** table-enums
310
311Produce layer enums from layer names in hold table.
312
313#+NAME: table-enums
314#+BEGIN_SRC python :var hold_table=hold :var mods_list=mods :tangle no
315mods_dict = dict.fromkeys(mods_list)
316results = 'enum layers { BASE, '
317for hold_row in hold_table:
318 for hold in hold_row:
319 if hold not in mods_dict and hold != '' and hold != 'NP' and hold != 'RST':
320 results += hold + ', '
321results = results.rstrip(', ') + ' };'
322return results
323#+END_SRC
324
325#+RESULTS: table-enums
326: enum layers { BASE, MEDR, NAVR, MOUR, NSSL, NSL, FUNL };
327
328
329** Data
330
331*** symbol-names
332
333Symbol, name, and shifted symbol mappings for use in tables.
334
335#+NAME: symbol-names
336| ` | GRV | ~ | TILD |
337| - | MINS | _ | UNDS |
338| = | EQL | + | PLUS |
339| [ | LBRC | { | LCBR |
340| ] | RBRC | } | RCBR |
341| \ | BSLS | PIPE | PIPE |
342| ; | SCLN | : | COLN |
343| ' | QUOT | DQUO | DQUO |
344| , | COMM | < | LT |
345| . | DOT | > | GT |
346| / | SLSH | ? | QUES |
347| 1 | 1 | ! | EXLM |
348| 2 | 2 | @ | AT |
349| 3 | 3 | # | HASH |
350| 4 | 4 | $ | DLR |
351| 5 | 5 | % | PERC |
352| 6 | 6 | ^ | CIRC |
353| 7 | 7 | & | AMPR |
354| 8 | 8 | * | ASTR |
355| 9 | 9 | ( | LPRN |
356| 0 | 0 | ) | RPRN |
357
358
359*** mods
360
361Modifiers usable in hold table. Need to have the same name for KC_ and _T versions.
362
363#+NAME: mods
364- LSFT
365- LCTL
366- LALT
367- LGUI
368- LAGR
369
370
371** Other
372
373*** header
374
375Header for tangled src files.
376
377#+NAME: header
378#+BEGIN_SRC C :tangle no
379generated from users/manna-harbour_miryoku/miryoku.org
380#+END_SRC
381
382
383* Subset Mapping
384:PROPERTIES:
385:CUSTOM_ID: subset-mapping
386:END:
387
388** Userspace
389
390The keymap and configuration are shared between keyboards. The keymap is
391defined for LAYOUT_miryoku which is 10x4, with the outer 2 positions on the
392bottom row unused and the rest of the bottom row are the thumb keys.
393
394
395*** manna-harbour_miryoku.c
396
397Contains the keymap. Included from keymap.c
398
399[[./manna-harbour_miryoku.c][users/manna-harbour_miryoku/manna-harbour_miryoku.c]]
400#+BEGIN_SRC C :noweb yes :tangle manna-harbour_miryoku.c
401
402// <<header>>
403
404#include QMK_KEYBOARD_H
405
406#define KC_NP KC_NO // key is not present
407#define KC_NA KC_NO // present but not available for use
408#define KC_NU KC_NO // available but not used
409#define KC_RST RESET
410
411<<table-enums()>>
412
413const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
414<<table-layout-taphold()>>,
415<<table-layout-half(layer_name="NAVR", half_table=navr)>>,
416<<table-layout-half(layer_name="MOUR", half_table=mour)>>,
417<<table-layout-half(layer_name="MEDR", half_table=medr)>>,
418<<table-layout-half(layer_name="FUNL", half_table=funl)>>,
419<<table-layout-half(layer_name="NSL", half_table=nsl)>>,
420<<table-layout-half(layer_name="NSSL", half_table=nsl, shift="true")>>
421};
422#+END_SRC
423
424
425*** config.h
426
427Config options. Automatically included.
428
429[[./config.h][users/manna-harbour_miryoku/config.h]]
430#+BEGIN_SRC C :noweb yes :tangle config.h
431
432// <<header>>
433
434#pragma once
435
436// Prevent normal rollover on alphas from accidentally triggering mods.
437#define IGNORE_MOD_TAP_INTERRUPT
438
439// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
440#define TAPPING_FORCE_HOLD
441
442// Recommended for heavy chording.
443#define QMK_KEYS_PER_SCAN 4
444
445#+END_SRC
446
447
448*** rules.mk
449
450Build options. Automatically included.
451
452[[./rules.mk][users/manna-harbour_miryoku/rules.mk]]
453#+BEGIN_SRC makefile :noweb yes :tangle rules.mk
454
455# <<header>>
456
457MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
458EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
459
460#+END_SRC
461
462
463** Layouts
464
465To use the keymap on a keyboard supporting the layouts feature, LAYOUT_miryoku
466is defined as a macro mapping onto the layout's own LAYOUT macro, leaving the
467unused keys as KC_NO. The userspace keymap is then included.
468
469*** ergodox
470
471For the ergodox layout, the main 5x3 alphas are used as usual. The primary and
472secondary thumb keys are the inner and outer 2u thumb keys and the tertiary
473thumb key is the innermost key of the partial bottom row. The remaining keys
474are unused.
475
476[[../../layouts/community/ergodox/manna-harbour_miryoku/keymap.c][layouts/community/ergodox/manna-harbour_miryoku/keymap.c]]
477#+BEGIN_SRC C :noweb yes :tangle ../../layouts/community/ergodox/manna-harbour_miryoku/keymap.c
478
479// <<header>>
480
481#define LAYOUT_miryoku(\
482K00, K01, K02, K03, K04, K05, K06, K07, K08, K09,\
483K10, K11, K12, K13, K14, K15, K16, K17, K18, K19,\
484K20, K21, K22, K23, K24, K25, K26, K27, K28, K29,\
485N30, N31, K32, K33, K34, K35, K36, K37, N38, N39\
486)\
487LAYOUT_ergodox_pretty( \
488KC_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, \
489KC_NO, K00, K01, K02, K03, K04, KC_NO, KC_NO, K05, K06, K07, K08, K09, KC_NO, \
490KC_NO, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, KC_NO, \
491KC_NO, K20, K21, K22, K23, K24, KC_NO, KC_NO, K25, K26, K27, K28, K29, KC_NO, \
492KC_NO, KC_NO, KC_NO, KC_NO, K32, K37, KC_NO, KC_NO, KC_NO, KC_NO, \
493 KC_NO, KC_NO, KC_NO, KC_NO, \
494 KC_NO, KC_NO, \
495 K33, K34, KC_NO, KC_NO, K35, K36 \
496)
497
498#include "manna-harbour_miryoku.c"
499
500#+END_SRC
501
502To build for any keyboard using the this layout (ergodone, ergodox_ez,
503ergodox_infinity, hotdox) e.g. the ergodox_ez,
504
505#+BEGIN_SRC sh :tangle no
506cd ../.. && make ergodox_ez:manna-harbour_miryoku:teensy
507#+END_SRC
508
509
510
511*** ortho_4x12
512
513For the ortho_4x12 layout, the right half as is as follows: The rightmost column
514bottom 3 rows is the pinkie column. The middle 4 columns top 3 rows are for the
515remaining fingers. The bottom row left 3 columns are the thumb keys. The
516remaining keys are unused.
517
518[[../../layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c][layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c]]
519#+BEGIN_SRC C :noweb yes :tangle ../../layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c
520
521// <<header>>
522
523#define LAYOUT_miryoku(\
524K00, K01, K02, K03, K04, K05, K06, K07, K08, K09,\
525K10, K11, K12, K13, K14, K15, K16, K17, K18, K19,\
526K20, K21, K22, K23, K24, K25, K26, K27, K28, K29,\
527N30, N31, K32, K33, K34, K35, K36, K37, N38, N39\
528)\
529LAYOUT_ortho_4x12(\
530KC_NO, K01, K02, K03, K04, KC_NO, KC_NO, K05, K06, K07, K08, KC_NO,\
531K00, K11, K12, K13, K14, KC_NO, KC_NO, K15, K16, K17, K18, K09,\
532K10, K21, K22, K23, K24, KC_NO, KC_NO, K25, K26, K27, K28, K19,\
533K20, KC_NO, KC_NO, K32, K33, K34, K35, K36, K37, KC_NO, KC_NO, K29\
534)
535
536#include "manna-harbour_miryoku.c"
537
538#+END_SRC
539
540To build for any keyboard using this layout (4x4, nori, chimera_ls, contra,
541divergetm2, jj40, lets_split, lets_split_eh, meira, niu_mini, planck, telophase,
542vitamins_included, zinc, zlant, ortho48, kbd4x, levinson, wavelet, plaid)
543e.g. the levinson,
544
545#+BEGIN_SRC sh :tangle no
546make keebio/levinson:manna-harbour_miryoku:avrdude
547#+END_SRC
548
549
550** Keyboards
551
552To use the keymap on a keyboard which does not support the layouts feature,
553LAYOUT_miryoku is defined as a macro mapping onto the keyboard's own LAYOUT
554macro, leaving the unused keys as KC_NO. The userspace keymap is then included.
555
556
557*** crkbd
558
559The outer columns are unused.
560
561[[../../keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c][keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c]]
562#+BEGIN_SRC C :noweb yes :tangle ../../keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
563
564// <<header>>
565
566#define LAYOUT_miryoku( \
567 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \
568 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \
569 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \
570 N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
571) \
572LAYOUT( \
573KC_NO, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, KC_NO, \
574KC_NO, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, KC_NO, \
575KC_NO, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, KC_NO, \
576 K32, K33, K34, K35, K36, K37 \
577)
578
579#include "manna-harbour_miryoku.c"
580
581#+END_SRC
582
583To build for this keyboard,
584
585#+BEGIN_SRC sh :tangle no
586cd ../.. && make crkbd:manna-harbour_miryoku:avrdude
587#+END_SRC
588
589
590* Related Documentation
591
592** QMK
593
594- https://qmk.fm/
595- https://docs.qmk.fm/#/getting_started_introduction
596- https://docs.qmk.fm/#/hardware_keyboard_guidelines
597- https://docs.qmk.fm/#/config_options
598- https://docs.qmk.fm/#/keycodes
599- https://docs.qmk.fm/#/feature_advanced_keycodes
600- https://docs.qmk.fm/#/feature_layouts
601- https://docs.qmk.fm/#/feature_userspace
602- https://docs.qmk.fm/#/getting_started_make_guide
603
604
605** Org Mode
606
607- https://orgmode.org/
608- https://orgmode.org/manual/Tables.html
609- https://orgmode.org/manual/Working-with-Source-Code.html
diff --git a/users/manna-harbour_miryoku/rules.mk b/users/manna-harbour_miryoku/rules.mk
new file mode 100644
index 000000000..baff1431f
--- /dev/null
+++ b/users/manna-harbour_miryoku/rules.mk
@@ -0,0 +1,5 @@
1
2# generated from users/manna-harbour_miryoku/miryoku.org
3
4MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
5EXTRAKEY_ENABLE = yes # Audio control and System control(+450)