aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2017-04-12 12:45:45 -0400
committerGitHub <noreply@github.com>2017-04-12 12:45:45 -0400
commit30ad505dd0aa49e8fb092760663be575de1a73bd (patch)
treee6248b797ccf6b23de34f89e080d11717b5aba88
parent0de2597f7cf6483457fb50efb9edd28d2f0cc26d (diff)
parentbcf70c0203e003d3f9c47d11bd2d57f7a3cd3bf8 (diff)
downloadqmk_firmware-30ad505dd0aa49e8fb092760663be575de1a73bd.tar.gz
qmk_firmware-30ad505dd0aa49e8fb092760663be575de1a73bd.zip
Merge pull request #1213 from nstickney/master
ErgoDox Familiar layout
-rw-r--r--keyboards/ergodox/config.h2
-rw-r--r--keyboards/ergodox/keymaps/familiar/README.md69
-rw-r--r--keyboards/ergodox/keymaps/familiar/familiar.pngbin0 -> 149846 bytes
-rw-r--r--keyboards/ergodox/keymaps/familiar/keymap.c267
4 files changed, 337 insertions, 1 deletions
diff --git a/keyboards/ergodox/config.h b/keyboards/ergodox/config.h
index 361859832..994a8c643 100644
--- a/keyboards/ergodox/config.h
+++ b/keyboards/ergodox/config.h
@@ -34,4 +34,4 @@
34#endif 34#endif
35 35
36 36
37#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */ \ No newline at end of file 37#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */
diff --git a/keyboards/ergodox/keymaps/familiar/README.md b/keyboards/ergodox/keymaps/familiar/README.md
new file mode 100644
index 000000000..e4336d9b5
--- /dev/null
+++ b/keyboards/ergodox/keymaps/familiar/README.md
@@ -0,0 +1,69 @@
1# ErgoDox Familiar Layout
2Familiar layout for those who regularly switch back and forth from ErgoDox to regular QWERTY.
3
4[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](../../../../license_GPLv3.md../../../../license_GPLv3.md) [![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg)](https://github.com/RichardLitt/standard-readme)
5
6## Table of Contents
7
8- [Background](#background)
9- [Install](#install)
10- [Usage](#usage)
11 - [Layers](#layers)
12- [Contribute](#contribute)
13 - [Issues](#issues)
14- [License](#license)
15
16## Background
17
18This layout is built to be as familiar as possible for users coming directly from a default (QWERTY US) keyboard, while gaining as much advantage as possible from the ErgoDox and QMK featureset. I use an ErgoDoxEZ at home, but I don't have a regular office (CS grad student) so I regularly use either my laptop or a default-setup lab computer; I context switch daily so this layout is meant to reduce the mental overhead as much as possible.
19
20The default ErgoDoxEZ layout is probably more optimized as a solo daily driver - as are a lot of the others available keymaps. The focus of this layout is to get as much from the 'Dox as possible without overly disrupting long-established muscle memory.
21
22Key features of the familiar layout:
231. QWERTY default layout.
241. International symbols layer, mapped in the US-International layout default positions, through [UCIS](https://github.com/qmk/qmk_firmware/wiki/Unicode-and-additional-language-support#ucis_enable).
251. Numpad layer on right hand.
261. Thumb cluster holds spacebar, ALT, and access to secondary layers.
271. Function-layer arrow keys in both the first-person-shooter (actually ESDF instead of WASD) and vim (HJKL) locations.
28
29## Install
30
31If you are on Windows or Mac, choose the proper line in [`keymap.c`](keymap.c) for [unicode/international character support](https://github.com/qmk/qmk_firmware/wiki/Unicode-and-additional-language-support#ucis_enable) (starts at line 235).
32```c
33void matrix_init_user(void) {
34 set_unicode_input_mode(UC_LNX); // Linux
35 //set_unicode_input_mode(UC_OSX); // Mac OSX
36 //set_unicode_input_mode(UC_WIN); // Windows (with registry key, see wiki)
37 //set_unicode_input_mode(UC_WINC); // Windows (with WinCompose, see wiki)
38};
39```
40
41For instructions on building and installing this keymap, [go to the wiki](https://github.com/qmk/qmk_firmware/tree/master/keyboards/ergodox#build-dependencies). Below is the command for me; it may be different for you.
42```sh
43$ make ergodox-ez-familiar-teensy
44```
45
46## Usage
47
48[![Familiar Layout](familiar.png)](http://www.keyboard-layout-editor.com/#/gists/13508a9f99cff381d58b7be6f7dcc644)
49
50### Layers
511. Base Layer: QWERTY, with arrow keys at bottom right.
521. UCIS Layer: US-International symbols layer, plus —. Accessed by toggling the `INTL` layer using the UCIS key (bottom of left thumb cluster).
531. UCIS-Shifted Layer: Making shift work for UCIS characters. An ugly workaround. Any ideas? Accessed through holding shift while the UCIS layer is active (toggles the `INSF` layer).
541. Numpad Layer: Right hand number pad. Accessed by toggling the `NUMP` layer using the NPAD key (bottom of right thumb cluster).
551. Function Layer: F1-F12, arrows on ESDF and HJKL, media player controls. Accessed by holding either FN key (center key of each thumb cluster), which toggles the `ARRW` layer. I know, I need to work on my naming conventions.
56
57## Contribute
58
59[Contributor Covenant](http://contributor-covenant.org/)
60
61I'm terrible at this; I have no background in human-computer interaction, kinesiology, or keyboard-ology. Please send comments/issues/pull requests/angry tweets/etc. If you think there is a better way to take advantage of the ErgoDox/QMK comination without straying far from 84/101-key QWERTY, I want to know it.
62
63### Issues
641. The top two keys of the right thumb cluster are currently unused. I wanted them for screen brightness, but I haven't found a solution I like.
651. The `'`, `"`, `[`, and `]` keys are terrible to access; I want to put them somewhere else but I haven't figured out where.
661. The `INSF` layer is an ugly workaround. I should write a function for doing different things in the `INTL` layer depending on whether SHIFT is being held. Or something. Ideas?
67
68## License
69QMK is licensed ([mostly](https://github.com/qmk/qmk_firmware/issues/1038)) under the [GPLv2](blob/master/license_GPLv2.md). Accordingly, to whatever extent applicable, this keymap is licensed under the [GPLv3](../../../../license_GPLv3.md).
diff --git a/keyboards/ergodox/keymaps/familiar/familiar.png b/keyboards/ergodox/keymaps/familiar/familiar.png
new file mode 100644
index 000000000..f8b50e75e
--- /dev/null
+++ b/keyboards/ergodox/keymaps/familiar/familiar.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/familiar/keymap.c b/keyboards/ergodox/keymaps/familiar/keymap.c
new file mode 100644
index 000000000..c5f94afda
--- /dev/null
+++ b/keyboards/ergodox/keymaps/familiar/keymap.c
@@ -0,0 +1,267 @@
1#include "ergodox.h"
2#include "debug.h"
3#include "action_layer.h"
4#include "version.h"
5
6// Layers
7#define BASE 0 // default layer
8#define INTL 1 // international symbols
9#define INSF 2 // international symbols shifted
10#define NUMP 3 // numpad
11#define ARRW 4 // function, media, arrow keys
12
13// Fillers to make layering more clear
14#define _______ KC_TRNS
15#define XXXXXXX KC_NO
16
17const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
18// If it accepts an argument (i.e, is a function), it doesn't need KC_.
19// Otherwise, it needs KC_*
20/* layer 0 : default
21 *
22 * ,--------------------------------------------------. ,--------------------------------------------------.
23 * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | BCKSPC |
24 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
25 * | TAB | Q | W | E | R | T | HOME | | PGUP | Y | U | I | O | P | DELETE |
26 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
27 * | ` | A | S | D | F | G |------| |------| H | J | K | L | ; | ENTER |
28 * |--------+------+------+------+------+------| END | | PGDN |------+------+------+------+------+--------|
29 * | (/LSFT | Z | X | C | V | B | | | | N | M | , | . | UP | )/RSFT |
30 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
31 * | LCTRL | LGUI | MENU | ' | " | | [ | ] | LEFT | DOWN | RIGHT |
32 * `------------------------------------' `------------------------------------'
33 * ,-------------. ,-------------.
34 * | VOL- | VOL+ | | | |
35 * ,------|------|------| |------+------+------.
36 * | SPC/ |SLASH/| MUTE | |NUMLCK|WHACK/| SPC/ |
37 * | ALT | MO(1)|------| |------|MO(1) | ALT |
38 * | | | LAY3 | | LAY2 | | |
39 * `--------------------' `--------------------'
40 */
41[BASE] = KEYMAP(
42 // left hand
43 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
44 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_HOME,
45 KC_GRV, KC_A, KC_S, KC_D, KC_F, KC_G,
46 KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END,
47 KC_LCTL, KC_LGUI, KC_MENU, KC_QUOT, S(KC_QUOT),
48 KC_VOLD, KC_VOLU,
49 KC_MUTE,
50 ALT_T(KC_SPC), LT(ARRW,KC_SLSH), TG(INTL),
51 // right hand
52 KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
53 KC_PGUP, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
54 KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER,
55 KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSPC,
56 KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_RGHT,
57 _______, _______,
58 KC_NLCK,
59 TG(NUMP), LT(ARRW,KC_BSLS), ALT_T(KC_SPC)
60 ),
61
62/* layer 1: International symbols, etc
63 *
64 * ,--------------------------------------------------. ,--------------------------------------------------.
65 * | ´ | ¡ | ² | ³ | ¤ | € | ¼ | | ½ | ¾ | ‘ | ’ | ¥ | × | |
66 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
67 * | | ä | å | é | ® | þ | | | | ü | ú | í | ó | ö | |
68 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
69 * | | á | ß | ð | | |------| |------| | | | ø | ¶ | |
70 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
71 * |MO(INSF)| æ | | © | | | | | | ñ | µ | ç | | |MO(INSF)|
72 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
73 * | | | | ¬ | ¿ | | « | » | | | |
74 * `------------------------------------' `------------------------------------'
75 * ,-------------. ,-------------.
76 * | | | | | |
77 * ,------|------|------| |------+------+------.
78 * | | | | | | | |
79 * | | |------| |------| | |
80 * | | | | | | | |
81 * `--------------------' `--------------------'
82 */
83[INTL] = KEYMAP(
84 // left hand
85 UC(0x00B4), UC(0x00A1), UC(0x00B2), UC(0x00B3), UC(0x00A4), UC(0x20AC), UC(0x00BC),
86 _______, UC(0x00E4), UC(0x00E5), UC(0x00E9), UC(0x00AE), UC(0x00FE), _______,
87 _______, UC(0x00E1), UC(0x00DF), UC(0x00F0), _______, _______,
88 MO(INSF), UC(0x00E6), _______, UC(0x00A9), _______, _______, _______,
89 _______, _______, _______, UC(0x00AC), UC(0x00BF),
90 _______, _______,
91 _______,
92 _______, _______, _______,
93 // right hand
94 UC(0x00BD), UC(0x00BE), UC(0x2018), UC(0x2019), UC(0x00A5), UC(0x00D7), _______,
95 _______, UC(0x00FC), UC(0x00FA), UC(0x00ED), UC(0x00F3), UC(0x00F6), _______,
96 _______, _______, _______, UC(0x00F8), UC(0x00B6), _______,
97 _______, UC(0x00F1), UC(0x00B5), UC(0x00E7), _______, _______, MO(INSF),
98 UC(0x00AB), UC(0x00BB), _______, _______, _______,
99 _______, _______,
100 _______,
101 _______, _______, _______
102 ),
103
104/* layer 2 : international symbols, shifted
105 * This layer is an ugly workaround; it pretends that SHIFT still works normally on keys
106 * which don't produce an "upper case" or "shifted" international symobol.
107 *
108 * ,--------------------------------------------------. ,--------------------------------------------------.
109 * | ¨ | ¹ | | | £ | | | | | | | | — | ÷ | |
110 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
111 * | | Ä | Å | É | | Þ | | | | Ü | Ú | Í | Ó | Ö | |
112 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
113 * | | Á | § | Ð | | |------| |------| | | | Ø | ° | |
114 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
115 * | | Æ | | ¢ | | | | | | Ñ | | Ç | | | |
116 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
117 * | | | | ¦ | | | | | | | |
118 * `------------------------------------' `------------------------------------'
119 * ,-------------. ,-------------.
120 * | | | | | |
121 * ,------|------|------| |------+------+------.
122 * | | | | | | | |
123 * | | |------| |------| | |
124 * | | | | | | | |
125 * `--------------------' `--------------------'
126 */
127[INSF] = KEYMAP(
128 // left hand
129 UC(0x00A8), UC(0x00B9), _______, _______, UC(0x00A3), _______, _______,
130 _______, UC(0x00C4), UC(0x00C5), UC(0x00C9), _______, UC(0x00DE), _______,
131 _______, UC(0x00C1), UC(0x00A7), UC(0x00D0), S(KC_F), S(KC_G),
132 _______, UC(0x00C6), S(KC_X), UC(0x00A2), S(KC_V), S(KC_B), _______,
133 _______, _______, _______, UC(0x00A6), _______,
134 _______, _______,
135 _______,
136 _______, _______, _______,
137 // right hand
138 _______, _______, _______, _______, UC(0x2014), UC(0x00F7), _______,
139 _______, UC(0x00DC), UC(0x00DA), UC(0x00CD), UC(0x00D3), UC(0x00D6), _______,
140 S(KC_H), S(KC_J), S(KC_K), UC(0x00D8), UC(0x00B0), _______,
141 _______, UC(0x00D1), _______, UC(0x00C7), S(KC_DOT), _______, _______,
142 _______, _______, _______, _______, _______,
143 _______, _______,
144 _______,
145 _______, _______, _______
146 ),
147
148/* layer 3: numberpad
149 *
150 * ,--------------------------------------------------. ,--------------------------------------------------.
151 * | | | | | | | | | | | ( | ) | / | * | |
152 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
153 * | | | | | | | | | | | 7 | 8 | 9 | - | |
154 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
155 * | | | | | | |------| |------| | 4 | 5 | 6 | + | |
156 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
157 * | | | | | | | | | | | 1 | 2 | 3 | = | |
158 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
159 * | | | | | | | 0 | . | , | ENTER| |
160 * `------------------------------------' `------------------------------------'
161 * ,-------------. ,-------------.
162 * | | | | | |
163 * ,------|------|------| |------+------+------.
164 * | | | | | | | |
165 * | | |------| |------| | |
166 * | | | | | | | |
167 * `--------------------' `--------------------'
168 */
169[NUMP] = KEYMAP(
170 // left hand
171 _______, _______, _______, _______, _______, _______, _______,
172 _______, _______, _______, _______, _______, _______, _______,
173 _______, _______, _______, _______, _______, _______,
174 _______, _______, _______, _______, _______, _______, _______,
175 _______, _______, _______, _______, _______,
176 _______, _______,
177 _______,
178 _______, _______, _______,
179 // right hand
180 _______, _______, S(KC_9), S(KC_0), KC_PSLS, KC_PAST, _______,
181 _______, _______, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______,
182 _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______,
183 _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PEQL, _______,
184 KC_KP_0, KC_KP_DOT, KC_PCMM, KC_PENT, _______,
185 _______, _______,
186 _______,
187 _______, _______, _______
188 ),
189
190/* layer 4 : functions and arrows
191 * This layer is at the top so that the functions still work no matter what layers are active.
192 *
193 * ,--------------------------------------------------. ,--------------------------------------------------.
194 * | ESCAPE | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | SYSREQ |
195 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
196 * | | | | UP | | | | | | | | | | | INSERT |
197 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
198 * |CAPSLOCK| | LEFT | DOWN |RIGHT | |------| |------| LEFT | DOWN | UP | RIGHT| | |
199 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
200 * | |M_PREV|M_STOP|M_PLPS|M_NEXT| | | | | | | | | PGUP | |
201 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
202 * | | | | | | | | | HOME | PGDN | END |
203 * `------------------------------------' `------------------------------------'
204 * ,-------------. ,-------------.
205 * | | PAUSE| | | |
206 * ,------|------|------| |------+------+------.
207 * | | | | |SCRLK | | |
208 * | | |------| |------| | |
209 * | | | | | | | |
210 * `--------------------' `--------------------'
211 */
212[ARRW] = KEYMAP(
213 // left hand
214 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
215 _______, _______, _______, KC_UP, _______, _______, _______,
216 KC_CAPS, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______,
217 _______, _______, _______, _______, _______, _______, _______,
218 _______, _______, _______, _______, _______,
219 _______, KC_PAUSE,
220 _______,
221 _______, _______, _______,
222 // right hand
223 KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_SYSREQ,
224 _______, _______, _______, _______, _______, _______, KC_INS,
225 KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
226 _______, _______, _______, _______, _______, KC_PGUP, _______,
227 _______, _______, KC_HOME, KC_PGDN, KC_END,
228 _______, _______,
229 KC_SLCK,
230 _______, _______, _______
231 ),
232};
233
234// Runs just one time when the keyboard initializes.
235void matrix_init_user(void) {
236 set_unicode_input_mode(UC_LNX); // Linux
237 //set_unicode_input_mode(UC_OSX); // Mac OSX
238 //set_unicode_input_mode(UC_WIN); // Windows (with registry key, see wiki)
239 //set_unicode_input_mode(UC_WINC); // Windows (with WinCompose, see wiki)
240};
241
242// Runs constantly in the background, in a loop.
243void matrix_scan_user(void) {
244
245 uint8_t layer = biton32(layer_state);
246
247 ergodox_board_led_off();
248 ergodox_right_led_1_off();
249 ergodox_right_led_2_off();
250 ergodox_right_led_3_off();
251 switch (layer) {
252 case INTL:
253 case INSF:
254 ergodox_right_led_1_on();
255 break;
256 case NUMP:
257 ergodox_right_led_2_on();
258 break;
259 case ARRW:
260 ergodox_right_led_3_on();
261 break;
262 default:
263 // none
264 break;
265 }
266
267};