]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Keymap: Redox: add a new Colemak keymap, macOS oriented. (#3861)
authorJeremy Herve <jeremy@tagada.hu>
Mon, 10 Sep 2018 14:39:05 +0000 (16:39 +0200)
committerDrashna Jaelre <drashna@live.com>
Mon, 10 Sep 2018 14:39:05 +0000 (07:39 -0700)
* Add my own keymap to the list of available Redox keymaps.

This keymap is a Colemak keymap, and is meant to be used on Mac OS.
More information can be found in the readme.

* Fix "macOS" typo and remove mention of the license.

This directory inherits the project's license.

* Add missing custom keycode.

* Address feedback from PR review

- Remove deprecated code
- Remove RGB logic since it is overwritten by code running later.

keyboards/redox/keymaps/jeherve/config.h [new file with mode: 0644]
keyboards/redox/keymaps/jeherve/keymap.c [new file with mode: 0644]
keyboards/redox/keymaps/jeherve/readme.md [new file with mode: 0644]
keyboards/redox/keymaps/jeherve/rules.mk [new file with mode: 0644]

diff --git a/keyboards/redox/keymaps/jeherve/config.h b/keyboards/redox/keymaps/jeherve/config.h
new file mode 100644 (file)
index 0000000..939d0c8
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+Copyright 2018 Jeremy Herve <jeremy@jeremy.hu>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+/* Change the default tapping toggle value (normally 5) */
+#define TAPPING_TOGGLE 2
+
+#define USE_SERIAL
+//#define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+//#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 14
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_SLEEP
diff --git a/keyboards/redox/keymaps/jeherve/keymap.c b/keyboards/redox/keymaps/jeherve/keymap.c
new file mode 100644 (file)
index 0000000..d298fa9
--- /dev/null
@@ -0,0 +1,282 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _COLEMAK 0
+#define _SYMB 1
+#define _NAV 2
+#define _INTER 3
+#define _ADJUST 4
+
+enum custom_keycodes {
+       COLEMAK = SAFE_RANGE,
+       SYMB,
+       NAV,
+       INTER,
+       ADJUST,
+       // These use process_record_user()
+       M_BRACKET_LEFT,
+       M_BRACKET_RIGHT,
+       SHRUG,
+       WAVE,
+       YOSHI,
+       THUMB_UP,
+       NBSP
+};
+
+// Fillers to make layering more clear
+#define KC_ KC_TRNS
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Make macros a bit simpler with this shortcut.
+#define TAP_ONCE(code)  \
+  register_code (code); \
+  unregister_code (code)
+
+// Is shift being held? Let's store this in a bool.
+static bool shift_held = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+       switch(keycode) {
+               case SHRUG:
+                       if (record->event.pressed) {
+                               unicode_input_start(); register_hex(0xaf); unicode_input_finish();
+                               TAP_ONCE (KC_BSLS);
+                               register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
+                               unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
+                               register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
+                               TAP_ONCE (KC_SLSH);
+                               unicode_input_start (); register_hex(0xaf); unicode_input_finish();
+                       }
+                       return false;
+                       break;
+               case YOSHI:
+                       if (record->event.pressed) {
+                               SEND_STRING(":yellow_yoshi:");
+                       }
+                       return false;
+                       break;
+               case THUMB_UP:
+                       if (record->event.pressed) {
+                               SEND_STRING(SS_LALT("D83D+DC4D"));
+                       }
+                       return false;
+                       break;
+               case WAVE:
+                       if (record->event.pressed) {
+                               SEND_STRING(SS_LALT("D83D+DC4B"));
+                       }
+                       return false;
+                       break;
+               case NBSP:
+                       if (record->event.pressed) {
+                               SEND_STRING("&nbsp;");
+                       }
+                       return false;
+                       break;
+       case KC_LSFT:
+               shift_held = record->event.pressed;
+               return true;
+               break;
+       case KC_RSFT:
+               shift_held = record->event.pressed;
+               return true;
+               break;
+               case M_BRACKET_LEFT: {
+                       if (record->event.pressed) {
+                               if (shift_held) {
+                                       unregister_code(KC_LSFT);
+                                       unregister_code(KC_RSFT);
+                                       register_code(KC_LBRC);
+                               } else {
+                                       register_code(KC_LSFT);
+                                       register_code(KC_9);
+                               }
+                       } else { // Release the key
+                               unregister_code(KC_LBRC);
+                               unregister_code(KC_LSFT);
+                               unregister_code(KC_RSFT);
+                               unregister_code(KC_9);
+                       }
+                       return false;
+                       break;
+               }
+               case M_BRACKET_RIGHT: {
+                       if (record->event.pressed) {
+                               if (shift_held) {
+                                       unregister_code(KC_LSFT);
+                                       unregister_code(KC_RSFT);
+                                       register_code(KC_RBRC);
+                               } else {
+                                       register_code(KC_LSFT);
+                                       register_code(KC_0);
+                               }
+                       } else { // Release the key
+                               unregister_code(KC_RBRC);
+                               unregister_code(KC_LSFT);
+                               unregister_code(KC_RSFT);
+                               unregister_code(KC_0);
+                       }
+                       return false;
+                       break;
+               }
+       }
+       return true;
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* COLEMAK
+ * ,------------------------------------------------.            ,------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  | Esc  |            | Exp  |   6  |   7  |   8  |   9  |   0  |   =  |
+ * |------+------+------+------+------+------+------|            |------+------+------+------+------+------+------|
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |  (   |            |   )  |   J  |   L  |   U  |   Y  |   ;  |   \  |
+ * |------+------+------+------+------+------+------|            |------+------+------+------+------+------+------|
+ * | Lay1 |   A  |   R  |   S  |   T  |   D  | Lay2 |            | Lay2 |   H  |   N  |   E  |   I  |   O  |'/Lay1|
+ * |------+------+------+------+------+------+------|            |------+------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  | Lay1 |            | Lay1 |   K  |   M  |   ,  |   .  |   /  |Shift |
+ * |------+------+------+------+------+------+------|            |------+------+------+------+------+------+------|
+ * | Lay3 | Ctrl | Hyper|  Alt | Cmd  |Bcksp | Ctrl |            |Enter |Space | Cmd  | Lay4 | Hyper| Ctrl | Lay3 |
+ * `------------------------------------------------'            `------------------------------------------------'
+ */
+  [_COLEMAK] = LAYOUT(
+  //,----+----+----+----+----+----+----.                                                         ,----+----+----+----+----+----+----.
+        KC_GRV     , KC_1  , KC_2  , KC_3  , KC_4  , KC_5  ,KC_ESC,                           LCTL(KC_DOWN), KC_6  , KC_7 ,   KC_8   , KC_9   , KC_0    , KC_EQL,
+  //|----+----+----+----+----+----+----|                                                         |----+----+----+----+----+----+----|
+        KC_TAB     , KC_Q  , KC_W  , KC_F  , KC_P  , KC_G  , M_BRACKET_LEFT,               M_BRACKET_RIGHT , KC_J  , KC_L  ,   KC_U  , KC_Y   , KC_SCLN , KC_BSLS,
+  //|----+----+----+----+----+----+----|                                                         |----+----+----+----+----+----+----|
+        MO(_SYMB)  , KC_A  , KC_R  , KC_S  , KC_T  , KC_D  ,TT(_NAV),                        TT(_NAV)    , KC_H  , KC_N  ,   KC_E  , KC_I   , KC_O    , LT(_SYMB,KC_QUOT),
+  //|----+----+----+----+----+----+----|                                                         |----+----+----+----+----+----+----|
+        KC_LSFT    , KC_Z  , KC_X  , KC_C  , KC_V  , KC_B  ,TT(_SYMB),                       TT(_SYMB)   , KC_K  , KC_M  , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT,
+  //|----+----+----+----+----+----+----|                                                         |----+----+----+----+----+----+----|
+        MO(_INTER),KC_LCTL,KC_HYPR,KC_LALT,   KC_LCMD,   KC_BSPC,KC_LCTL,               KC_ENT,KC_SPC     ,    KC_RCMD    , TT(_ADJUST),KC_HYPR,KC_RCTL,MO(_INTER)
+  //`----+----+----+----+----+----+----'                                                         `----+----+----+----+----+----+----'
+  ),
+
+/* Symbols
+ * ,------------------------------------------------.      ,------------------------------------------------.
+ * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+ * |      |   1  |   2  |   3  |   4  |   5  |      |      |      |   6  |   7  |   8  |   9  |      |      |
+ * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+ * |      |   !  |   @  |   #  |   $  |   %  |      |      |      |   ^  |   &  |   *  |   -  |   _  |      |
+ * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `------------------------------------------------'      `------------------------------------------------'
+ */
+
+  [_SYMB] = LAYOUT(
+       _______, _______, _______, _______, _______, _______, _______,                             _______, _______, _______, _______, _______, _______, _______,
+       _______, KC_1   , KC_2   , KC_3   , KC_4   , KC_5   , KC_LCBR,                             KC_RCBR, KC_6   , KC_7   ,   KC_8 , KC_9   , KC_0   , _______,
+       _______, KC_EXLM, KC_AT  , KC_HASH, KC_DLR , KC_PERC, _______,                             _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_UNDS, _______,
+       _______, _______, _______, _______, _______, _______, _______,                             _______, _______, _______, _______, _______, _______, _______,
+       _______, _______, _______, _______, _______, _______, _______,                             _______, _______, _______, _______, _______, _______, _______
+  ),
+
+/* Navigation
+ * ,------------------------------------------------.      ,------------------------------------------------.
+ * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+ * |      |      |      |VOLDOW|VOL UP| MUTE |      |      |      | LEFT | DOWN |  UP  |RIGHT |      |      |
+ * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `------------------------------------------------'      `------------------------------------------------'
+ */
+  [_NAV] = LAYOUT(
+       _______, _______, _______, _______, _______, _______, _______,                            _______, _______, _______, _______, _______, _______, _______,
+       XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,                            _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+       XXXXXXX, XXXXXXX, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, _______,                            _______, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP  , KC_RIGHT, XXXXXXX,
+       XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,                            _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+       _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,                            _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______
+  ),
+
+/* i18n + emoji
+* ,------------------------------------------------.      ,------------------------------------------------.
+* |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
+* |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+* |      |  à   | 👋   |      |      |      |      |      |      |      |  ü   |  è   | YOSHI|   ö  |      |
+* |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+* |      |  á   |      |SHRUG |  👍  |      |      |      |      |      |   ú  |   é  |   í  |   ó  |      |
+* |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+* |      |  â   |      |  ç   |      |      |      |      |      |      |   ű  |   ê  |      |  ő   |      |
+* |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+* |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
+* `------------------------------------------------'      `------------------------------------------------'
+*/
+  [_INTER] = LAYOUT(
+       XXXXXXX, _______   , _______, _______   , _______ , _______, _______,                            _______, _______, _______, _______, _______, _______, _______,
+       XXXXXXX, UC(0x00E0), WAVE   , XXXXXXX   , XXXXXXX , XXXXXXX, _______,                            _______, XXXXXXX, UC(0x00FC), UC(0x00E8), YOSHI, UC(0x00F6), XXXXXXX,
+       _______, UC(0x00E1), XXXXXXX, SHRUG     , THUMB_UP, XXXXXXX, _______,                            _______, XXXXXXX, UC(0x00F9), UC(0x00E9), UC(0x00ED)  , UC(0x00F3), _______,
+       XXXXXXX, UC(0x00E2), XXXXXXX, UC(0x00E7), XXXXXXX , XXXXXXX, _______,                            _______, XXXXXXX, UC(0x0171), UC(0x00EA), XXXXXXX, UC(0x0151), XXXXXXX,
+       _______, XXXXXXX   , XXXXXXX, XXXXXXX   , XXXXXXX , XXXXXXX, _______,                            _______, NBSP, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______
+  ),
+
+/* Adjust keyboard settings
+ * ,------------------------------------------------.      ,------------------------------------------------.
+ * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+ * |      |      | RGB- | RGB+ |RGB ON|      |      |      |      |      | RESET| DEBUG|AUD ON|      |      |
+ * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `------------------------------------------------'      `------------------------------------------------'
+ */
+  [_ADJUST] = LAYOUT(
+       XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                            XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+       XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                            XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+       _______, XXXXXXX, RGB_VAD, RGB_VAI, RGB_TOG, XXXXXXX, _______,                            _______, XXXXXXX, RESET  , DEBUG  , AU_TOG , XXXXXXX, _______,
+       XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,                            _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+       _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,                            _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______
+  )
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_colemak[][2]     = SONG(ZELDA_TREASURE);
+#endif
+
+void persistent_default_layer_set(uint16_t default_layer) {
+       eeconfig_update_default_layer(default_layer);
+       default_layer_set(default_layer);
+}
+
+// Set unicode in Mac OS.
+void matrix_init_user(void) {
+       set_unicode_input_mode(UC_OSX);
+};
+
+// Change LED colors depending on the layer.
+uint32_t layer_state_set_user(uint32_t state) {
+       switch (biton32(state)) {
+               case _SYMB:
+                       rgblight_setrgb_orange();
+                       break;
+               case _NAV:
+                       rgblight_setrgb_springgreen();
+                       break;
+               case _INTER:
+                       rgblight_setrgb_teal();
+                       break;
+               case _ADJUST:
+                       rgblight_setrgb_red();
+                       break;
+               default: //  for any other layers, or the default layer
+                       rgblight_setrgb_yellow();
+                       break;
+       }
+       return state;
+};
diff --git a/keyboards/redox/keymaps/jeherve/readme.md b/keyboards/redox/keymaps/jeherve/readme.md
new file mode 100644 (file)
index 0000000..5afad55
--- /dev/null
@@ -0,0 +1,37 @@
+# A Colemak keymap for the Redox keyboard
+
+----
+![jeherve-redox-layout-3](https://user-images.githubusercontent.com/426388/45171716-69888200-b203-11e8-822d-7bc91f9f6c07.jpg)
+
+----
+
+This keymap is **a work in progress**, and is meant to be used on macOS, with the "Unicode Hex Input" keyboard input.
+
+![macOS keyboard input setting](https://user-images.githubusercontent.com/426388/43962498-1ee9e3fc-9cb8-11e8-88e3-dbb068ec5c67.png)
+
+I may change a lot of the keys over the next few months, and will update this repo when I do so.
+
+[View on KLE](http://www.keyboard-layout-editor.com/#/gists/3d5368842d87a8462c8f95d4382c4a19)
+
+## Layers
+
+My keymap uses 5 layers:
+
+1. The default base layer, using [Colemak](https://colemak.com/).
+2. A Symbol layer, so all symbols can be accessed from the home row. (top right legends)
+3. A Navigation / Media layer, with both sound control and arrows on the home row. (bottom right legends)
+4. An international / Emoji layer so I can type accented characters commonly used in France and in Hungary, as well as a few Emoji I often use. (top center legends)
+5. A keyboard control layer, not pictured above, allowing me to control the LED lighting as well as the keyboard debug functions.
+
+## Changelog
+
+- 2018.09.06
+       - Initial submission to QMK. It's alive! ⌨️
+
+## Credits
+
+- Redox keyboard design by [Mattia Dal Ben](https://github.com/mattdibi/redox-keyboard).
+- This keymap is based off the default keymap for the Redox keyboard, available [here](https://github.com/qmk/qmk_firmware/tree/master/keyboards/redox) and also build by Mattia Dal Ben (thank you!).
+- This layout uses [QMK keyboard controller firmware](https://github.com/qmk/qmk_firmware/).
+
+I've also read posts by [Gergely Nagy](https://asylum.madhouse-project.org/blog/2016/10/15/multi-purpose-keys/), [Rebecca Le](https://sevenseacat.net/posts/2018/unicode-in-qmk-on-osx/), and [Justin Rogers](https://implementsblog.com/2016/10/16/my-ergodox-ezs-custom-layout/#comments) for inspiration.
diff --git a/keyboards/redox/keymaps/jeherve/rules.mk b/keyboards/redox/keymaps/jeherve/rules.mk
new file mode 100644 (file)
index 0000000..ac2496b
--- /dev/null
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = yes
+UNICODE_ENABLE = yes
+AUDIO_ENABLE = yes