From eeb100f87d96680302024e816ad7460a6d9bf281 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Thu, 21 Jul 2016 18:19:08 -0400 Subject: [PATCH 01/92] First draft of the 'impossible' layout. --- keyboards/planck/keymaps/impossible/Makefile | 25 ++ keyboards/planck/keymaps/impossible/keymap.c | 332 ++++++++++++++++++ keyboards/planck/keymaps/impossible/readme.md | 2 + 3 files changed, 359 insertions(+) create mode 100644 keyboards/planck/keymaps/impossible/Makefile create mode 100644 keyboards/planck/keymaps/impossible/keymap.c create mode 100644 keyboards/planck/keymaps/impossible/readme.md diff --git a/keyboards/planck/keymaps/impossible/Makefile b/keyboards/planck/keymaps/impossible/Makefile new file mode 100644 index 0000000000..581e08cd02 --- /dev/null +++ b/keyboards/planck/keymaps/impossible/Makefile @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c new file mode 100644 index 0000000000..2489fc270a --- /dev/null +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -0,0 +1,332 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.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 _ALPHA 0 +#define _FN 1 +#define _QWERTY 3 +#define _COLEMAK 4 +#define _DVORAK 5 +#define _LOWER 6 +#define _RAISE 7 +#define _PLOVER 8 +#define _ADJUST 16 + +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_ALPHA] = { + {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, + {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, + {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, GUI_T(KC_ENTER), KC_KP_1, KC_KP_2, KC_KP_3}, + {ALT_T(KC_TAB), KC_SLASH, KC_COMM, SFT_T(KC_BSPC), LT(_FN, KC_ESC), CTL_T(KC_SPC), KC_DOT, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_KP_0} +}, + +[_FN] = { + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_FN12, KC_FN7, KC_FN8, KC_FN9}, + {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_FN11, KC_FN4, KC_FN5, KC_FN6}, + {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, KC_ENTER, _______, KC_FN1, KC_FN2, KC_FN3}, + {_______, KC_BSLASH, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_FN10} +}, + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif diff --git a/keyboards/planck/keymaps/impossible/readme.md b/keyboards/planck/keymaps/impossible/readme.md new file mode 100644 index 0000000000..de9680b498 --- /dev/null +++ b/keyboards/planck/keymaps/impossible/readme.md @@ -0,0 +1,2 @@ +# The Default Planck Layout + From a39eaa7fb573026851fff35f379e8ed75df241c0 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Fri, 22 Jul 2016 17:46:23 -0400 Subject: [PATCH 02/92] Switched to natural arrows, put ENTER on middle Fn, swapped Shift and CTRL. --- keyboards/planck/keymaps/impossible/keymap.c | 25 +++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 2489fc270a..037282ee20 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -42,19 +42,32 @@ enum planck_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Alpha-numeric + ,-----------------------------------------------------------------------------------------------. + | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | + |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + | A | S | H | T | G | N | E | O | I | 4 | 5 | 6 | + |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | + |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 | / | + `-----------------------------------------------------------------------------------------------' +*/ + [_ALPHA] = { {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, - {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, GUI_T(KC_ENTER), KC_KP_1, KC_KP_2, KC_KP_3}, - {ALT_T(KC_TAB), KC_SLASH, KC_COMM, SFT_T(KC_BSPC), LT(_FN, KC_ESC), CTL_T(KC_SPC), KC_DOT, - KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_KP_0} + {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3}, + {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_FN, KC_ENTER), SFT_T(KC_SPC), KC_DOT, + KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, KC_SLASH} }, [_FN] = { {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_FN12, KC_FN7, KC_FN8, KC_FN9}, {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_FN11, KC_FN4, KC_FN5, KC_FN6}, - {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, KC_ENTER, _______, KC_FN1, KC_FN2, KC_FN3}, - {_______, KC_BSLASH, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_FN10} + {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_FN1, KC_FN2, KC_FN3}, + {_______, _______, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_FN10, KC_BSLASH} }, /* Qwerty @@ -67,7 +80,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' - */ + */ [_QWERTY] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, From 723857bf8a59a4d9a779bfb1a0acd049bb4702d0 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Fri, 22 Jul 2016 18:17:34 -0400 Subject: [PATCH 03/92] Table for Fn layer. --- keyboards/planck/keymaps/impossible/keymap.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 037282ee20..6c22423fff 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -63,6 +63,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, KC_SLASH} }, +/* Symbols (FN Held) + ,-----------------------------------------------------------------------------------------------. + | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | + |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | + |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + | DFU | Insert| PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | + |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + |Alt/Tab|Gui/Esc| ` |CTL/Bsp| Fn/Ent|SFT/SPC| ; | Home | PgDn | End | F10 | / | + `-----------------------------------------------------------------------------------------------' +*/ + [_FN] = { {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_FN12, KC_FN7, KC_FN8, KC_FN9}, {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_FN11, KC_FN4, KC_FN5, KC_FN6}, From fb2a7d787a6818ea9aefcff5ce36bac3fc48fa6c Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Tue, 26 Jul 2016 17:29:19 -0400 Subject: [PATCH 04/92] Removed unused layers (left QWERTY for later use/reference) --- keyboards/planck/keymaps/impossible/keymap.c | 50 ++------------------ 1 file changed, 3 insertions(+), 47 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 6c22423fff..ddf4e2feb7 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -17,18 +17,12 @@ extern keymap_config_t keymap_config; #define _ALPHA 0 #define _FN 1 -#define _QWERTY 3 -#define _COLEMAK 4 -#define _DVORAK 5 -#define _LOWER 6 -#define _RAISE 7 -#define _PLOVER 8 -#define _ADJUST 16 +#define _QWERTY 2 +#define _PLOVER 3 +#define _ADJUST 4 enum planck_keycodes { QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, PLOVER, LOWER, RAISE, @@ -242,44 +236,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case COLEMAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_colemak, false, 0); - #endif - persistant_default_layer_set(1UL<<_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_dvorak, false, 0); - #endif - persistant_default_layer_set(1UL<<_DVORAK); - } - return false; - break; - case LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case RAISE: - if (record->event.pressed) { - layer_on(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; case BACKLIT: if (record->event.pressed) { register_code(KC_RSFT); From 465cf08c6398da60ef8029aa2d813ed023fbc253 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Tue, 26 Jul 2016 17:37:56 -0400 Subject: [PATCH 05/92] Removed unused layers (keeping QWERTY for later/reference) --- keyboards/planck/keymaps/impossible/keymap.c | 81 +------------------- 1 file changed, 4 insertions(+), 77 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index ddf4e2feb7..4686776209 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -48,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 | / | `-----------------------------------------------------------------------------------------------' */ - + [_ALPHA] = { {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, @@ -57,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, KC_SLASH} }, -/* Symbols (FN Held) +/* FN-key held ,-----------------------------------------------------------------------------------------------. | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| @@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' - */ + */ [_QWERTY] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, @@ -94,78 +94,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_COLEMAK] = { - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, - -/* Dvorak - * ,-----------------------------------------------------------------------------------. - * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | O | E | U | I | D | H | T | N | S | / | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_DVORAK] = { - {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, - {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, - {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = { - {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, - {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = { - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, - /* Plover layer (http://opensteno.org) * ,-----------------------------------------------------------------------------------. * | # | # | # | # | # | # | # | # | # | # | # | # | @@ -209,9 +137,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef AUDIO_ENABLE float tone_startup[][2] = SONG(STARTUP_SOUND); + float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); float tone_plover[][2] = SONG(PLOVER_SOUND); float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); From ff8136b8837615e342ee475a0968168a08a81ca9 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Tue, 26 Jul 2016 17:39:21 -0400 Subject: [PATCH 06/92] Modified Plover layer for Impossible's home position. --- keyboards/planck/keymaps/impossible/keymap.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 4686776209..8f85e0fb40 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -96,21 +96,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Plover layer (http://opensteno.org) * ,-----------------------------------------------------------------------------------. - * | # | # | # | # | # | # | # | # | # | # | # | # | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | S | T | P | H | * | * | F | P | L | T | D | + * | S | T | P | H | * | F | P | L | T | D | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | + * | S | K | W | R | * | R | B | G | S | Z | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Exit | | | A | O | | E | U | | | | + * | # | # | # | # | | # | # | # | # | # | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Exit | | A | O | | E | U | | | | | | * `-----------------------------------------------------------------------------------' */ [_PLOVER] = { - {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, - {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, - {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_U, KC_I, KC_O, KC_P, XXXXXXX, XXXXXXX}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_J, KC_K, KC_L, KC_SCLN, XXXXXXX, XXXXXXX}, + {KC_1, KC_1, KC_1, KC_1, XXXXXXX, KC_1, KC_1, KC_1, KC_1, XXXXXXX, XXXXXXX}, + {EXT_PLV, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} }, /* Adjust (Lower + Raise) @@ -124,6 +124,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ + [_ADJUST] = { {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, From 57952949fe2fa119e986e96363565248a9461eb2 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Tue, 26 Jul 2016 23:33:21 -0400 Subject: [PATCH 07/92] General table cleanup. --- keyboards/planck/keymaps/impossible/keymap.c | 97 ++++++++++---------- 1 file changed, 49 insertions(+), 48 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 8f85e0fb40..2a9197aec2 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -38,16 +38,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Alpha-numeric - ,-----------------------------------------------------------------------------------------------. - | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | - |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - | A | S | H | T | G | N | E | O | I | 4 | 5 | 6 | - |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | - |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 | / | - `-----------------------------------------------------------------------------------------------' -*/ + * ,-----------------------------------------------------------------------------------------------. + * | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * | A | S | H | T | G | N | E | O | I | 4 | 5 | 6 | + * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + * | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 | / | + * `-----------------------------------------------------------------------------------------------' + */ [_ALPHA] = { {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, @@ -58,16 +58,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, /* FN-key held - ,-----------------------------------------------------------------------------------------------. - | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | - |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | - |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - | DFU | Insert| PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | - |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - |Alt/Tab|Gui/Esc| ` |CTL/Bsp| Fn/Ent|SFT/SPC| ; | Home | PgDn | End | F10 | / | - `-----------------------------------------------------------------------------------------------' -*/ + * ,-----------------------------------------------------------------------------------------------. + * | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | + * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + * | DFU | Insert| PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * |Alt/Tab|Gui/Esc| ` |CTL/Bsp| Fn/Ent|SFT/SPC| ; | Home | PgDn | End | F10 | / | + * `-----------------------------------------------------------------------------------------------' + */ [_FN] = { {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_FN12, KC_FN7, KC_FN8, KC_FN9}, @@ -77,16 +77,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, /* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' + * ,-----------------------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + * | Shift | Z | X | C | V | B | N | M | , | . | / |Enter | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * | Brite | Ctrl | Alt | GUI |Lower | Sp ace |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------------------' */ + [_QWERTY] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, @@ -95,15 +96,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, /* Plover layer (http://opensteno.org) - * ,-----------------------------------------------------------------------------------. - * | S | T | P | H | * | F | P | L | T | D | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | S | K | W | R | * | R | B | G | S | Z | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | # | # | # | # | | # | # | # | # | # | | | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Exit | | A | O | | E | U | | | | | | - * `-----------------------------------------------------------------------------------' + * ,-----------------------------------------------------------------------------------------------. + * | S | T | P | H | * | F | P | L | T | D | | | + * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + * | S | K | W | R | * | R | B | G | S | Z | | | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * | # | # | # | # | | # | # | # | # | # | | | + * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| + * | Exit | | A | O | | E | U | | | | | | + * `-----------------------------------------------------------------------------------------------' */ [_PLOVER] = { @@ -113,16 +114,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {EXT_PLV, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} }, -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' +/* Adjust + * ,-----------------------------------------------------------------------------------------------. + * | | Reset | | | | | | | | | | Del | + * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| + * | | | |Aud on |Audoff |AGnorm |AGswap |Qwerty | | |Plover | | + * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + * | |Voice- |Voice+ |Mus on |Musoff |MIDIon |MIDIof | | | | | | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------------------' */ [_ADJUST] = { From a4e5a4d566f79b2b1c7bb286d25f127d631230d9 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Thu, 28 Jul 2016 13:49:25 -0400 Subject: [PATCH 08/92] Modified Qwerty, created Qwerty with numbers --- keyboards/planck/keymaps/impossible/keymap.c | 64 ++++++++++++-------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 2a9197aec2..fe9c5dc28d 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -20,6 +20,7 @@ extern keymap_config_t keymap_config; #define _QWERTY 2 #define _PLOVER 3 #define _ADJUST 4 +#define _QWERTY2 5 enum planck_keycodes { QWERTY = SAFE_RANGE, @@ -36,7 +37,6 @@ enum planck_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Alpha-numeric * ,-----------------------------------------------------------------------------------------------. * | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | @@ -50,51 +50,69 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_ALPHA] = { - {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, - {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, - {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3}, - {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_FN, KC_ENTER), SFT_T(KC_SPC), KC_DOT, - KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, KC_SLASH} + {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, + {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, + {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3}, + {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_FN, KC_ENTER), SFT_T(KC_SPC), KC_DOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, KC_SLASH} }, /* FN-key held * ,-----------------------------------------------------------------------------------------------. * | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | + * | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | DFU | Insert| PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | + * | DFU |Insert | PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * |Alt/Tab|Gui/Esc| ` |CTL/Bsp| Fn/Ent|SFT/SPC| ; | Home | PgDn | End | F10 | / | + * |Alt/Tab|Gui/Esc| ` |CTL/Bsp|Fn/Ent |SFT/Spc| ; | Home | PgDn | End | F10 | / | * `-----------------------------------------------------------------------------------------------' */ [_FN] = { - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_FN12, KC_FN7, KC_FN8, KC_FN9}, - {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_FN11, KC_FN4, KC_FN5, KC_FN6}, - {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_FN1, KC_FN2, KC_FN3}, - {_______, _______, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_FN10, KC_BSLASH} + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_FN12, KC_FN7, KC_FN8, KC_FN9}, + {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_FN11, KC_FN4, KC_FN5, KC_FN6}, + {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_FN1, KC_FN2, KC_FN3}, + {_______, _______, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_FN10, KC_BSLASH} }, /* Qwerty * ,-----------------------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * | Esc | Q | W | E | R | T | Y | U | I | O | P | / | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * | Tab | A | S | D | F | G | H | J | K | L | ; | " | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | Shift | Z | X | C | V | B | N | M | , | . | / |Enter | + * | Shift | Z | X | C | V | B | N | M | , | . | Up | Enter | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Brite | Ctrl | Alt | GUI |Lower | Sp ace |Raise | Left | Down | Up |Right | + * | Ctrl | Alt | GUI | | | Bksp | Space | | | Left | Down | Right | * `-----------------------------------------------------------------------------------------------' */ [_QWERTY] = { - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SLSH}, + {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT }, + {KC_LCTL, KC_LALT, KC_LGUI, _______, _______, KC_BSPC, KC_SPC, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT} }, +/* Qwerty W/ Numbers + * ,-----------------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| + * | TAB | Q | W | E | R | T | Y | U | I | O | P | / | + * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| + * | Shift | A | S | D | F | G | H | J | K | L | ; | " | + * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + * | Ctrl | Z | X | C | V | SPC | B | N | M | , | . | Enter | + * `-----------------------------------------------------------------------------------------------' + */ + +[_QWERTY2] = { + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC/3_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SLSH}, + {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_ENT}, +1}, + /* Plover layer (http://opensteno.org) * ,-----------------------------------------------------------------------------------------------. * | S | T | P | H | * | F | P | L | T | D | | | @@ -128,7 +146,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_ADJUST] = { {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, - {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, PLOVER, _______}, {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } @@ -182,8 +200,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { stop_all_notes(); PLAY_NOTE_ARRAY(tone_plover, false, 0); #endif - layer_off(_RAISE); - layer_off(_LOWER); layer_off(_ADJUST); layer_on(_PLOVER); if (!eeconfig_is_enabled()) { From 6567fa1ebeabe8fc25df91e8f75330488763b403 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Thu, 28 Jul 2016 14:56:26 -0400 Subject: [PATCH 09/92] Fixed Function keys (Impossible layout) --- keyboards/planck/keymaps/impossible/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index fe9c5dc28d..edc2ed8739 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -69,10 +69,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_FN] = { - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_FN12, KC_FN7, KC_FN8, KC_FN9}, - {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_FN11, KC_FN4, KC_FN5, KC_FN6}, - {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_FN1, KC_FN2, KC_FN3}, - {_______, _______, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_FN10, KC_BSLASH} + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, + {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, + {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, + {_______, _______, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} }, /* Qwerty From c018743729ce55effcec81efa8663dbc54626d15 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Fri, 29 Jul 2016 00:08:48 -0400 Subject: [PATCH 10/92] Connected all layers through Adjust layer --- keyboards/planck/keymaps/impossible/keymap.c | 158 +++++++++---------- 1 file changed, 71 insertions(+), 87 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index edc2ed8739..4ef16aa3a6 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -15,20 +15,17 @@ extern keymap_config_t keymap_config; // 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 _ALPHA 0 -#define _FN 1 +#define _WORKMAN 0 +#define _WORKMAN_FN 1 #define _QWERTY 2 -#define _PLOVER 3 -#define _ADJUST 4 -#define _QWERTY2 5 +#define _QWERTY_FN 3 +#define _PLOVER 4 +#define _ADJUST 5 enum planck_keycodes { - QWERTY = SAFE_RANGE, - PLOVER, - LOWER, - RAISE, - BACKLIT, - EXT_PLV + WORKMAN = SAFE_RANGE, + QWERTY, + PLOVER }; // Fillers to make layering more clear @@ -37,7 +34,7 @@ enum planck_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Alpha-numeric +/* Workman Alpha-numeric * ,-----------------------------------------------------------------------------------------------. * | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| @@ -45,73 +42,73 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| * | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 | / | + * |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 |Adj/ / | * `-----------------------------------------------------------------------------------------------' */ -[_ALPHA] = { +[_WORKMAN] = { {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3}, - {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_FN, KC_ENTER), SFT_T(KC_SPC), KC_DOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, KC_SLASH} + {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_WORKMAN_FN, KC_ENTER), SFT_T(KC_SPC), KC_DOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, LT(_ADJUST, KC_SLASH)} }, -/* FN-key held +/* FN-key held (Workman) * ,-----------------------------------------------------------------------------------------------. * | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | + * | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | DFU |Insert | PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | + * | Tab | Insert| PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * |Alt/Tab|Gui/Esc| ` |CTL/Bsp|Fn/Ent |SFT/Spc| ; | Home | PgDn | End | F10 | / | + * |Alt/Tab| Gui | ~ |CTL/Bsp|Fn/Ent |SFT/Spc| ; | Home | PgDn | End | F10 | \ | * `-----------------------------------------------------------------------------------------------' */ -[_FN] = { - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, - {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, - {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, - {_______, _______, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} +[_WORKMAN_FN] = { + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, + {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, + {KC_Tab, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, + {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} }, /* Qwerty * ,-----------------------------------------------------------------------------------------------. - * | Esc | Q | W | E | R | T | Y | U | I | O | P | / | + * |Gui/Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | Tab | A | S | D | F | G | H | J | K | L | ; | " | + * | Ctrl | Q | W | E | R | T | Y | U | I | O | P | Enter | + * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| + * | Shift | A | S | D | F | G | H | J | K | L | ; | " | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | Shift | Z | X | C | V | B | N | M | , | . | Up | Enter | - * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Ctrl | Alt | GUI | | | Bksp | Space | | | Left | Down | Right | + * |Alt/Tab| Z | X | C | V | Fn/SPC| B | N | M | , | . |Adj/ / | * `-----------------------------------------------------------------------------------------------' */ [_QWERTY] = { - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SLSH}, - {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT }, - {KC_LCTL, KC_LALT, KC_LGUI, _______, _______, KC_BSPC, KC_SPC, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT} + {GUI_T(KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_LCTL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT}, + {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {ALT_T(KC_TAB), KC_Z, KC_X, KC_C, KC_V, KC_B, LT(_QWERTY_FN, KC_SPC), KC_N, KC_M, KC_COMM, KC_DOT, LT(_ADJUST, KC_SLASH)}, }, -/* Qwerty W/ Numbers +/* FN-key held (Qwerty) * ,-----------------------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | TAB | Q | W | E | R | T | Y | U | I | O | P | / | - * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | Shift | A | S | D | F | G | H | J | K | L | ; | " | + * | Gui | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * | Ctrl | ~ | | PgUp | | | | | Up | - | = | F12 | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * | Shift | | Home | PgDn | End | Del | | Left | Down | Right | [ | ] | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | Ctrl | Z | X | C | V | SPC | B | N | M | , | . | Enter | + * |Alt/Tab| | CapsLk| ScrLk | NumLk | Fn/Spc| | Insert| PrtSc | Pause | Menu | \ | * `-----------------------------------------------------------------------------------------------' */ -[_QWERTY2] = { - {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC/3_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SLSH}, - {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_ENT}, -1}, +[_QWERTY_FN] = { + {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11}, + {_______, KC_GRAVE, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, KC_MINUS, KC_EQUAL, KC_F12}, + {_______, XXXXXXX, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LBRACKET, KC_RBRACKET}, + {_______, XXXXXXX, KC_CAPSLOCK, KC_SLCK, KC_NLCK, _______, XXXXXXX, KC_INS, KC_PSCR, KC_PAUSE, KC_MENU, KC_BSLASH} +}, /* Plover layer (http://opensteno.org) * ,-----------------------------------------------------------------------------------------------. @@ -121,49 +118,49 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * | # | # | # | # | | # | # | # | # | # | | | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | Exit | | A | O | | E | U | | | | | | + * | | | A | O | | E | U | | | | | Adjust| * `-----------------------------------------------------------------------------------------------' */ [_PLOVER] = { - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_U, KC_I, KC_O, KC_P, XXXXXXX, XXXXXXX}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_J, KC_K, KC_L, KC_SCLN, XXXXXXX, XXXXXXX}, - {KC_1, KC_1, KC_1, KC_1, XXXXXXX, KC_1, KC_1, KC_1, KC_1, XXXXXXX, XXXXXXX}, - {EXT_PLV, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_U, KC_I, KC_O, KC_P, KC_LBRC, XXXXXXX, XXXXXXX}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, XXXXXXX}, + {KC_1, KC_1, KC_1, KC_1, XXXXXXX, KC_1, KC_1, KC_1, KC_1, KC_1, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MO(_ADJUST)} }, /* Adjust * ,-----------------------------------------------------------------------------------------------. - * | | Reset | | | | | | | | | | Del | + * | | | | | | | | | | | | RESET | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | | | |Aud on |Audoff |AGnorm |AGswap |Qwerty | | |Plover | | + * | | | | | | | | |Voice +| Audio |MIDIoff| | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | |Voice- |Voice+ |Mus on |Musoff |MIDIon |MIDIof | | | | | | + * | | | | | | | | |Voice -| Music |MIDI on| | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | | | | | | | | | | | | | + * | | | | | | | | |Workman| Qwerty| Plover| Adjust| * `-----------------------------------------------------------------------------------------------' */ [_ADJUST] = { - {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, - {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, PLOVER, _______}, - {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET}, + {_______, _______, _______, _______, _______, _______, _______, _______, MUV_IN, AU_TOG, MI_OFF, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, MUV_DE, MU_TOG, MI_ON, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, WORKMAN, QWERTY, PLOVER, _______} } - }; #ifdef AUDIO_ENABLE float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); -float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_workman[][2] = SONG(QWERTY_SOUND); +float tone_qwerty[][2] = SONG(COLEMAK_SOUND); float tone_plover[][2] = SONG(PLOVER_SOUND); -float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); + float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); -float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif @@ -174,6 +171,15 @@ void persistant_default_layer_set(uint16_t default_layer) { bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { + case WORKMAN: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_workman, false, 0); + #endif + persistant_default_layer_set(1UL<<_WORKMAN); + } + return false; + break; case QWERTY: if (record->event.pressed) { #ifdef AUDIO_ENABLE @@ -183,40 +189,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case BACKLIT: - if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif - } else { - unregister_code(KC_RSFT); - } - return false; - break; case PLOVER: if (record->event.pressed) { #ifdef AUDIO_ENABLE - stop_all_notes(); PLAY_NOTE_ARRAY(tone_plover, false, 0); #endif - layer_off(_ADJUST); - layer_on(_PLOVER); if (!eeconfig_is_enabled()) { - eeconfig_init(); + eeconfig_init(); } keymap_config.raw = eeconfig_read_keymap(); keymap_config.nkro = 1; eeconfig_update_keymap(keymap_config.raw); - } - return false; - break; - case EXT_PLV: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); - #endif - layer_off(_PLOVER); + persistant_default_layer_set(1UL<<_PLOVER); } return false; break; From 5f2d3f27de2913656176516f437880ec0c296e7d Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Sat, 30 Jul 2016 00:56:43 -0400 Subject: [PATCH 11/92] Moved CapsLk, ScrollLk, and NumLk to Adjust layer --- keyboards/planck/keymaps/impossible/keymap.c | 34 ++++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 4ef16aa3a6..bf5588ad55 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -57,19 +57,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------------------. * | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | + * | | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | Tab | Insert| PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | + * | Tab | Insert| PrtSc | | Pause | | Menu | | PgUp | F1 | F2 | F3 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * |Alt/Tab| Gui | ~ |CTL/Bsp|Fn/Ent |SFT/Spc| ; | Home | PgDn | End | F10 | \ | * `-----------------------------------------------------------------------------------------------' */ [_WORKMAN_FN] = { - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, - {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, - {KC_Tab, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, - {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, + {XXXXXXX, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, + {KC_Tab, KC_INS, KC_PSCR, XXXXXXX, KC_PAUSE, XXXXXXX, KC_MENU, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, + {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} }, /* Qwerty @@ -99,15 +99,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * | Shift | | Home | PgDn | End | Del | | Left | Down | Right | [ | ] | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * |Alt/Tab| | CapsLk| ScrLk | NumLk | Fn/Spc| | Insert| PrtSc | Pause | Menu | \ | + * |Alt/Tab| | | | | Fn/Spc| | Insert| PrtSc | Pause | Menu | \ | * `-----------------------------------------------------------------------------------------------' */ [_QWERTY_FN] = { - {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11}, - {_______, KC_GRAVE, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, KC_MINUS, KC_EQUAL, KC_F12}, - {_______, XXXXXXX, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LBRACKET, KC_RBRACKET}, - {_______, XXXXXXX, KC_CAPSLOCK, KC_SLCK, KC_NLCK, _______, XXXXXXX, KC_INS, KC_PSCR, KC_PAUSE, KC_MENU, KC_BSLASH} + {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11}, + {_______, KC_GRAVE, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, KC_MINUS, KC_EQUAL, KC_F12}, + {_______, XXXXXXX, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LBRACKET, KC_RBRACKET}, + {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_INS, KC_PSCR, KC_PAUSE, KC_MENU, KC_BSLASH} }, /* Plover layer (http://opensteno.org) @@ -133,19 +133,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------------------. * | | | | | | | | | | | | RESET | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | | | | | | | | |Voice +| Audio |MIDIoff| | + * | | | | | | | | CapLk |Voice +| Audio |MIDIoff| | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | | | | | | | | |Voice -| Music |MIDI on| | + * | | | | | | | | ScrLk |Voice -| Music |MIDI on| | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | | | | | | | | |Workman| Qwerty| Plover| Adjust| + * | | | | | | | | Numlk |Workman| Qwerty| Plover| Adjust| * `-----------------------------------------------------------------------------------------------' */ [_ADJUST] = { {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET}, - {_______, _______, _______, _______, _______, _______, _______, _______, MUV_IN, AU_TOG, MI_OFF, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, MUV_DE, MU_TOG, MI_ON, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, WORKMAN, QWERTY, PLOVER, _______} + {_______, _______, _______, _______, _______, _______, _______, KC_CLCK, MUV_IN, AU_TOG, MI_OFF, _______}, + {_______, _______, _______, _______, _______, _______, _______, KC_SLCK, MUV_DE, MU_TOG, MI_ON, _______}, + {_______, _______, _______, _______, _______, _______, _______, KC_NLCK, WORKMAN, QWERTY, PLOVER, _______} } }; From 4b74c90cdbe820fc662eb183fa3e138f16191437 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Sun, 31 Jul 2016 22:39:25 -0400 Subject: [PATCH 12/92] Added quote key. --- keyboards/planck/keymaps/impossible/keymap.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index bf5588ad55..b1815e9011 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -57,19 +57,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------------------. * | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | + * | Tab | [ | ] | - | Del | ' | ( | ) | F11 | F4 | F5 | F6 | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | Tab | Insert| PrtSc | | Pause | | Menu | | PgUp | F1 | F2 | F3 | + * | Menu | Insert| PrtSc | = | Pause | / | | | PgUp | F1 | F2 | F3 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * |Alt/Tab| Gui | ~ |CTL/Bsp|Fn/Ent |SFT/Spc| ; | Home | PgDn | End | F10 | \ | * `-----------------------------------------------------------------------------------------------' */ [_WORKMAN_FN] = { - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, - {XXXXXXX, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, - {KC_Tab, KC_INS, KC_PSCR, XXXXXXX, KC_PAUSE, XXXXXXX, KC_MENU, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, - {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, + {KC_TAB, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_QUOT, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, + {KC_MENU, KC_INS, KC_PSCR, KC_EQUAL, KC_PAUSE, KC_SLSH, XXXXXXX, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, + {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} }, /* Qwerty @@ -97,7 +97,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * | Ctrl | ~ | | PgUp | | | | | Up | - | = | F12 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Shift | | Home | PgDn | End | Del | | Left | Down | Right | [ | ] | + * | Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | [ | ] | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| * |Alt/Tab| | | | | Fn/Spc| | Insert| PrtSc | Pause | Menu | \ | * `-----------------------------------------------------------------------------------------------' From 76ef37e72d0cba9c83775e82c086534e8d45a7b8 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Mon, 1 Aug 2016 18:54:25 -0400 Subject: [PATCH 13/92] Corrected Qwerty/Fn Mismatch. --- keyboards/planck/keymaps/impossible/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index b1815e9011..65d8ac5fd7 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -85,10 +85,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_QWERTY] = { - {GUI_T(KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_LCTL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT}, - {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {ALT_T(KC_TAB), KC_Z, KC_X, KC_C, KC_V, KC_B, LT(_QWERTY_FN, KC_SPC), KC_N, KC_M, KC_COMM, KC_DOT, LT(_ADJUST, KC_SLASH)}, + {GUI_T(KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_LCTL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT}, + {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {ALT_T(KC_TAB), KC_Z, KC_X, KC_C, KC_V, LT(_QWERTY_FN, KC_SPC), KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LT(_ADJUST, KC_SLASH)}, }, /* FN-key held (Qwerty) From 0acb394ac41f56895d4287d950a79bca5437a45c Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Tue, 2 Aug 2016 22:32:27 -0400 Subject: [PATCH 14/92] Moved Insert, PrtSc, Pause to Adjust; Corner enter --- keyboards/planck/keymaps/impossible/keymap.c | 70 ++++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 65d8ac5fd7..e816f359a6 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -16,11 +16,11 @@ extern keymap_config_t keymap_config; // entirely and just use numbers. #define _WORKMAN 0 -#define _WORKMAN_FN 1 +#define _FN 1 #define _QWERTY 2 -#define _QWERTY_FN 3 +#define _QW_FN 3 #define _PLOVER 4 -#define _ADJUST 5 +#define _ADJ 5 enum planck_keycodes { WORKMAN = SAFE_RANGE, @@ -42,15 +42,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| * | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 |Adj/ / | + * |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 |Adj/Ent| * `-----------------------------------------------------------------------------------------------' */ [_WORKMAN] = { - {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, - {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, - {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3}, - {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_WORKMAN_FN, KC_ENTER), SFT_T(KC_SPC), KC_DOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, LT(_ADJUST, KC_SLASH)} + {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, + {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, + {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3}, + {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_FN, KC_ENT), SFT_T(KC_SPC), KC_DOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, LT(_ADJ, KC_ENT)} }, /* FN-key held (Workman) @@ -59,55 +59,55 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * | Tab | [ | ] | - | Del | ' | ( | ) | F11 | F4 | F5 | F6 | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | Menu | Insert| PrtSc | = | Pause | / | | | PgUp | F1 | F2 | F3 | + * | Menu | | | = | \ | / | | | PgUp | F1 | F2 | F3 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * |Alt/Tab| Gui | ~ |CTL/Bsp|Fn/Ent |SFT/Spc| ; | Home | PgDn | End | F10 | \ | + * |Alt/Tab| Gui | ~ |CTL/Bsp| Fn/Ent|SFT/Spc| ; | Home | PgDn | End | F10 |Adj/Ent| * `-----------------------------------------------------------------------------------------------' */ -[_WORKMAN_FN] = { +[_FN] = { {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, {KC_TAB, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_QUOT, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, - {KC_MENU, KC_INS, KC_PSCR, KC_EQUAL, KC_PAUSE, KC_SLSH, XXXXXXX, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, - {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} + {KC_MENU, _______, _______, KC_EQUAL, KC_BSLS, KC_SLSH, XXXXXXX, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, + {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, _______} }, /* Qwerty * ,-----------------------------------------------------------------------------------------------. * |Gui/Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | Ctrl | Q | W | E | R | T | Y | U | I | O | P | Enter | + * | Ctrl | Q | W | E | R | T | Y | U | I | O | P | / | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| * | Shift | A | S | D | F | G | H | J | K | L | ; | " | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * |Alt/Tab| Z | X | C | V | Fn/SPC| B | N | M | , | . |Adj/ / | + * |Alt/Tab| Z | X | C | V | Fn/SPC| B | N | M | , | . |Adj/Ent| * `-----------------------------------------------------------------------------------------------' */ [_QWERTY] = { - {GUI_T(KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_LCTL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT}, - {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {ALT_T(KC_TAB), KC_Z, KC_X, KC_C, KC_V, LT(_QWERTY_FN, KC_SPC), KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LT(_ADJUST, KC_SLASH)}, + {GUI_T(KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_LCTL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT}, + {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {ALT_T(KC_TAB), KC_Z, KC_X, KC_C, KC_V, LT(_QW_FN, KC_SPC), KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LT(_ADJ, KC_ENT)}, }, /* FN-key held (Qwerty) * ,-----------------------------------------------------------------------------------------------. * | Gui | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Ctrl | ~ | | PgUp | | | | | Up | - | = | F12 | + * | Ctrl | ~ | [ | PgUp | ] | | | - | Up | = | | F12 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * | Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | [ | ] | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * |Alt/Tab| | | | | Fn/Spc| | Insert| PrtSc | Pause | Menu | \ | + * |Alt/Tab| | | | | Fn/Spc| | | | | Menu |Adj/Ent| * `-----------------------------------------------------------------------------------------------' */ -[_QWERTY_FN] = { - {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11}, - {_______, KC_GRAVE, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, KC_MINUS, KC_EQUAL, KC_F12}, - {_______, XXXXXXX, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LBRACKET, KC_RBRACKET}, - {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_INS, KC_PSCR, KC_PAUSE, KC_MENU, KC_BSLASH} +[_QW_FN] = { + {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11}, + {_______, KC_GRAVE, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, KC_MINUS, KC_EQUAL, KC_F12}, + {_______, XXXXXXX, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LBRACKET, KC_RBRACKET}, + {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, _______, KC_MENU, _______} }, /* Plover layer (http://opensteno.org) @@ -118,7 +118,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * | # | # | # | # | | # | # | # | # | # | | | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | | | A | O | | E | U | | | | | Adjust| + * | | | A | O | | E | U | | | | |Adj/Ent| * `-----------------------------------------------------------------------------------------------' */ @@ -126,26 +126,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_U, KC_I, KC_O, KC_P, KC_LBRC, XXXXXXX, XXXXXXX}, {KC_A, KC_S, KC_D, KC_F, KC_G, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, XXXXXXX}, {KC_1, KC_1, KC_1, KC_1, XXXXXXX, KC_1, KC_1, KC_1, KC_1, KC_1, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MO(_ADJUST)} + {XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LT(_ADJ, KC_ENT)} }, /* Adjust * ,-----------------------------------------------------------------------------------------------. - * | | | | | | | | | | | | RESET | + * | | | | | | | | | Insert| PrtSc | Pause | RESET | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| * | | | | | | | | CapLk |Voice +| Audio |MIDIoff| | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| * | | | | | | | | ScrLk |Voice -| Music |MIDI on| | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | | | | | | | | Numlk |Workman| Qwerty| Plover| Adjust| + * | | | | | | | | Numlk |Workman| Qwerty| Plover|Adj/Ent| * `-----------------------------------------------------------------------------------------------' */ -[_ADJUST] = { - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET}, - {_______, _______, _______, _______, _______, _______, _______, KC_CLCK, MUV_IN, AU_TOG, MI_OFF, _______}, - {_______, _______, _______, _______, _______, _______, _______, KC_SLCK, MUV_DE, MU_TOG, MI_ON, _______}, - {_______, _______, _______, _______, _______, _______, _______, KC_NLCK, WORKMAN, QWERTY, PLOVER, _______} +[_ADJ] = { + {_______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_PSCR, KC_PAUSE, RESET}, + {_______, _______, _______, _______, _______, _______, _______, KC_CLCK, MUV_IN, AU_TOG, MI_OFF, _______}, + {_______, _______, _______, _______, _______, _______, _______, KC_SLCK, MUV_DE, MU_TOG, MI_ON, _______}, + {_______, _______, _______, _______, _______, _______, _______, KC_NLCK, WORKMAN, QWERTY, PLOVER, _______} } }; From 6a7ef59629dcb6cb388649002242abdab344424b Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Mon, 12 Sep 2016 13:24:22 -0400 Subject: [PATCH 15/92] Ongoing experiment; have a special layer for RESET --- keyboards/planck/keymaps/cbbrowne/keymap.c | 44 +++++++++++++++++++-- keyboards/planck/keymaps/cbbrowne/readme.md | 23 +++++++++-- 2 files changed, 61 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 898f6f0e0a..1bfd142e90 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -69,6 +69,7 @@ enum layers { _LW, /* Lower layer, where top line has symbols !@#$%^&*() */ _RS, /* Raised layer, where top line has digits 1234567890 */ _KP, /* Key pad */ + _ADJUST, /* Special Adjust layer coming via tri-placement */ }; enum macro_id { @@ -76,9 +77,14 @@ enum macro_id { M_USERNAME, M_RANDDIGIT, M_RANDLETTER, - M_VERSION + M_VERSION, + MACRO_UPPER, + MACRO_LOWER, }; +#define M_LOWER M(MACRO_LOWER) +#define M_UPPER M(MACRO_UPPER) + /* Note that Planck has dimensions 4 rows x 12 columns */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -86,7 +92,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT)}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT }, - {KC_TAB, M(M_LED), KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_TAB, M(M_LED), KC_LALT, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */ }, [_RS] = { /* RAISE */ @@ -106,7 +112,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_LCTL, M(M_RANDDIGIT), KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, {KC_LSFT, M(M_RANDLETTER), KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, DF(_QW), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} -} +}, + +[_ADJUST] = { /* Adjustments - gonna shift the wild tools in here */ + { M(M_LED), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + {_______, _______, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______ }, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } +} }; /* What is fn_actions actually used for??? */ @@ -171,6 +184,31 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) unregister_code (KC_A + rval); } break; + case MACRO_UPPER: + if (record->event.pressed) + { + layer_on(_RS); + update_tri_layer(_LW, _RS, _ADJUST); + } + else + { + layer_off(_RS); + update_tri_layer(_LW, _RS, _ADJUST); + } + break; + case MACRO_LOWER: + if (record->event.pressed) + { + layer_on(_LW); + update_tri_layer(_LW, _RS, _ADJUST); + } + else + { + layer_off(_LW); + update_tri_layer(_LW, _RS, _ADJUST); + } + break; + } return MACRO_NONE; }; diff --git a/keyboards/planck/keymaps/cbbrowne/readme.md b/keyboards/planck/keymaps/cbbrowne/readme.md index 51979f6300..e9e423ed91 100644 --- a/keyboards/planck/keymaps/cbbrowne/readme.md +++ b/keyboards/planck/keymaps/cbbrowne/readme.md @@ -24,7 +24,8 @@ doing sundry experimentation: - Key [2][2] aka "a" uses a random number generator to select a digit 0-9 at random - Key [3][2] aka "z" uses a random number generator to select a letter a-z at random - Key [1][3] aka "e" spits out the keymap version number - * Minor use of Space Cadet Shift; my SHIFT key has switched to KC_LSP0, so that when I just hit SHIFT, I get a left parens: ( which is great for Lisping. I don't have a Right Shift, so I don't get an autoclose; I think I'll live with that until a Planck successor with more lines of keys :-) + * Trying out sgoodwin's "hold Enter down to get Shift" + 2. Some code structure ideas --------------------------------------------------- @@ -57,12 +58,29 @@ doing sundry experimentation: and shift ESC off the first column so KC_LCTL and KC_LALT can be on the first column. * I needed to swap ' and ENTER + +4. Unuseful experiments +--------------------------------------------------------- + +I have tried some things out that didn't turn out particularly well. +I'll note some of these for posterity, hopefully helpful in not doing +unwise things again... + * I tried added Workman alongside Dvorak and Colemak - Boy, oh boy, these don't help!!! - I have done 30 years of learning of Emacs key mappings, and these alternative keyboards massively mess me up -4. TODO + * Space Cadet Shift; switching L_SHIFT to KC_LSP0, so that when I + just hit SHIFT, I get a left parens. In principle, this is great + for Lisping. + - Unfortunately, there are times when mouse interfaces use SHIFT + to allow selecting multiple items, and this really interferes + with that + + + +5. TODO --------------------------------------------------------- * I use tmux quite a lot; the mollat keymap seems to have some @@ -77,4 +95,3 @@ doing sundry experimentation: * The jeebak keymap seems to have some neat ideas: - Number layer which is aggressive about having numbers in several places - Touch layer seems interesting - * Trying out sgoodwin's "hold Enter down to get Shift" \ No newline at end of file From af4c25c4753b2d212dd46090f8fc6e322b1d7537 Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Mon, 12 Sep 2016 15:20:51 -0500 Subject: [PATCH 16/92] My Atreus Layout --- keyboards/atreus/keymaps/erlandsona/keymap.c | 61 ++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 keyboards/atreus/keymaps/erlandsona/keymap.c diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c new file mode 100644 index 0000000000..f1555fb1df --- /dev/null +++ b/keyboards/atreus/keymaps/erlandsona/keymap.c @@ -0,0 +1,61 @@ +// this is the style you want to emulate. +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, + +#include "atreus.h" + +// 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 BASE 0 +#define NUMS 1 +#define MOUS 2 + +// Some quick aliases, just to make it look pretty +#define _______ KC_TRNS +#define XXXXXXX KC_NO + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[BASE] = KEYMAP( /* Qwerty */ + KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , + KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , + KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_RSFT , + KC_LCTL, KC_LALT, KC_LSFT, KC_LGUI, KC_BSPC, KC_ESC , KC_ENT, KC_SPC, F(NUMS), KC_QUOT, KC_SLSH, KC_RALT), + +[NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */ + KC_GRV , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_LBRC, + KC_TAB , KC_1 , KC_2 , KC_3 , KC_4 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, + KC_DOT , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, + _______, _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, XXXXXXX, KC_BSLS, _______), + +[MOUS] = KEYMAP( /* Mouse and Media Keys */ + KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, + KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3, + KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_F2, + _______, _______ , _______, _______, _______, _______ , KC_SLEP, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1) +}; + + +// I prefer this layer switching strategy to the TG and MO functions. +// so that I can get out of mouse mode just by tapping/holding my base layer FN key. +const uint16_t PROGMEM fn_actions[] = { + [BASE] = ACTION_LAYER_OFF(2, 1), // switch back to layer 0 + [NUMS] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay + [MOUS] = ACTION_LAYER_ON(2, 1) // switch to layer 2 +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; From 0c3aede09e131243017dfb89638795e7cd25c969 Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Mon, 12 Sep 2016 18:23:24 -0500 Subject: [PATCH 17/92] Latest making use of overloaded modifiers... --- keyboards/atreus/keymaps/erlandsona/keymap.c | 24 ++++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c index f1555fb1df..6ca8aaed92 100644 --- a/keyboards/atreus/keymaps/erlandsona/keymap.c +++ b/keyboards/atreus/keymaps/erlandsona/keymap.c @@ -18,22 +18,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [BASE] = KEYMAP( /* Qwerty */ - KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , - KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , - KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_RSFT , - KC_LCTL, KC_LALT, KC_LSFT, KC_LGUI, KC_BSPC, KC_ESC , KC_ENT, KC_SPC, F(NUMS), KC_QUOT, KC_SLSH, KC_RALT), + KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , + KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , + SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_SLSH), + KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, ALT_T(KC_ESC), CTL_T(KC_ENT), KC_SPC, F(NUMS), KC_QUOT, KC_RALT , KC_BSLS ), [NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */ - KC_GRV , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_LBRC, - KC_TAB , KC_1 , KC_2 , KC_3 , KC_4 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, - KC_DOT , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, - _______, _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, XXXXXXX, KC_BSLS, _______), + KC_GRV , KC_7 , KC_8 , KC_9 , KC_0 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC, + KC_TAB , KC_4 , KC_5 , KC_6 , KC_DLR, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, + _______, KC_1 , KC_2 , KC_3 , KC_DOT, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, + _______, _______, _______, _______, KC_DEL, F(MOUS), _______, _______, _______, _______, _______, _______), [MOUS] = KEYMAP( /* Mouse and Media Keys */ - KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, - KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3, - KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_F2, - _______, _______ , _______, _______, _______, _______ , KC_SLEP, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1) + KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, + KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3, + KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_F2, + _______, _______ , _______, _______, _______, _______, KC_SLEP, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1) }; From cf17eb0f4360fca9ad3910c9cdf0d0ef5155b026 Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Mon, 12 Sep 2016 18:36:41 -0500 Subject: [PATCH 18/92] Get rid of sleep button... --- keyboards/atreus/keymaps/erlandsona/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c index 6ca8aaed92..83871219eb 100644 --- a/keyboards/atreus/keymaps/erlandsona/keymap.c +++ b/keyboards/atreus/keymaps/erlandsona/keymap.c @@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3, KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_F2, - _______, _______ , _______, _______, _______, _______, KC_SLEP, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1) + _______, _______ , _______, _______, _______, _______, _______, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1) }; From e9a093451ea13b18b5dc60d427244efeba593da5 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Mon, 12 Sep 2016 19:54:52 -0500 Subject: [PATCH 19/92] Clean up atomic keymap (#9) * Added keyboard help macros * Fixing Atomic PVC keymap / adding print help --- keyboards/atomic/keymaps/pvc/Makefile | 2 +- keyboards/atomic/keymaps/pvc/config.h | 11 +- keyboards/atomic/keymaps/pvc/keymap.c | 460 ++++++++++++++------------ keyboards/planck/keymaps/pvc/keymap.c | 106 ++++-- 4 files changed, 337 insertions(+), 242 deletions(-) diff --git a/keyboards/atomic/keymaps/pvc/Makefile b/keyboards/atomic/keymaps/pvc/Makefile index 278407e6c9..ebd75e313f 100644 --- a/keyboards/atomic/keymaps/pvc/Makefile +++ b/keyboards/atomic/keymaps/pvc/Makefile @@ -1,7 +1,7 @@ BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) +CONSOLE_ENABLE = yes # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality diff --git a/keyboards/atomic/keymaps/pvc/config.h b/keyboards/atomic/keymaps/pvc/config.h index 70353323b6..18a7253f2e 100644 --- a/keyboards/atomic/keymaps/pvc/config.h +++ b/keyboards/atomic/keymaps/pvc/config.h @@ -150,10 +150,17 @@ along with this program. If not, see . */ /* disable debug print */ -//#define NO_DEBUG +#ifndef NO_DEBUG +# define NO_DEBUG +#endif /* disable print */ -//#define NO_PRINT +// #ifndef NO_PRINT +// # define NO_PRINT +// #endif + +/* Only print user print statements */ +#define USER_PRINT /* disable action features */ //#define NO_ACTION_LAYER diff --git a/keyboards/atomic/keymaps/pvc/keymap.c b/keyboards/atomic/keymaps/pvc/keymap.c index b02e89d2c7..d10bfe3bfc 100644 --- a/keyboards/atomic/keymaps/pvc/keymap.c +++ b/keyboards/atomic/keymaps/pvc/keymap.c @@ -2,48 +2,59 @@ #include "action_layer.h" #include "eeconfig.h" #include "led.h" +#include "mousekey.h" #ifdef AUDIO_ENABLE #include "audio.h" #include "song_list.h" #endif -#define LAYER_QWERTY 0 -#define LAYER_COLEMAK 1 -#define LAYER_DVORAK 2 -#define LAYER_UPPER 3 -#define LAYER_LOWER 4 -#define LAYER_FUNCTION 5 -#define LAYER_MOUSE 6 -#define LAYER_ADJUST 7 - -#define MACRO_QWERTY 0 -#define MACRO_COLEMAK 1 -#define MACRO_DVORAK 2 -#define MACRO_UPPER 3 -#define MACRO_LOWER 4 -#define MACRO_FUNCTION 5 -#define MACRO_MOUSE 6 -#define MACRO_TIMBRE_1 7 -#define MACRO_TIMBRE_2 8 -#define MACRO_TIMBRE_3 9 -#define MACRO_TIMBRE_4 10 -#define MACRO_TEMPO_U 11 -#define MACRO_TEMPO_D 12 -#define MACRO_TONE_DEFAULT 13 -#define MACRO_MUSIC_TOGGLE 14 -#define MACRO_AUDIO_TOGGLE 16 -#define MACRO_INC_VOICE 18 -#define MACRO_DEC_VOICE 19 -#define MACRO_BACKLIGHT 20 -#define MACRO_BREATH_TOGGLE 21 -#define MACRO_BREATH_SPEED_INC 23 -#define MACRO_BREATH_SPEED_DEC 24 -#define MACRO_BREATH_DEFAULT 25 +enum keyboard_layers { + LAYER_QWERTY = 0, + LAYER_UPPER, + LAYER_LOWER, + LAYER_FUNCTION, + LAYER_MOUSE, + LAYER_ADJUST, +}; +enum keyboard_macros { + MACRO_QWERTY = 0, + MACRO_UPPER, + MACRO_LOWER, + MACRO_FUNCTION, + MACRO_MOUSE, + MACRO_TIMBRE_1, + MACRO_TIMBRE_2, + MACRO_TIMBRE_3, + MACRO_TIMBRE_4, + MACRO_TEMPO_U, + MACRO_TEMPO_D, + MACRO_TONE_DEFAULT, + MACRO_MUSIC_TOGGLE, + MACRO_AUDIO_TOGGLE, + MACRO_INC_VOICE, + MACRO_DEC_VOICE, + MACRO_BACKLIGHT, + MACRO_BREATH_TOGGLE, + MACRO_BREATH_SPEED_INC, + MACRO_BREATH_SPEED_DEC, + MACRO_BREATH_DEFAULT, + MACRO_MOUSE_MOVE_UL, + MACRO_MOUSE_MOVE_UR, + MACRO_MOUSE_MOVE_DL, + MACRO_MOUSE_MOVE_DR, + MACRO_HELP_1, + MACRO_HELP_2, + MACRO_HELP_3, + MACRO_HELP_4, + MACRO_HELP_5, + MACRO_HELP_6, + MACRO_HELP_7, + MACRO_HELP_8, + MACRO_HELP_9, +}; #define M_QWRTY M(MACRO_QWERTY) -#define M_COLMK M(MACRO_COLEMAK) -#define M_DVORK M(MACRO_DVORAK) #define M_UPPER M(MACRO_UPPER) #define M_LOWER M(MACRO_LOWER) #define M_FUNCT M(MACRO_FUNCTION) @@ -60,6 +71,19 @@ #define M_BSPDU M(MACRO_BREATH_SPEED_INC) #define M_BSPDD M(MACRO_BREATH_SPEED_DEC) #define M_BDFLT M(MACRO_BREATH_DEFAULT) +#define M_MS_UL M(MACRO_MOUSE_MOVE_UL) +#define M_MS_UR M(MACRO_MOUSE_MOVE_UR) +#define M_MS_DL M(MACRO_MOUSE_MOVE_DL) +#define M_MS_DR M(MACRO_MOUSE_MOVE_DR) +#define M_HELP1 M(MACRO_HELP_1) +#define M_HELP2 M(MACRO_HELP_2) +#define M_HELP3 M(MACRO_HELP_3) +#define M_HELP4 M(MACRO_HELP_4) +#define M_HELP5 M(MACRO_HELP_5) +#define M_HELP6 M(MACRO_HELP_6) +#define M_HELP7 M(MACRO_HELP_7) +#define M_HELP8 M(MACRO_HELP_8) +#define M_HELP9 M(MACRO_HELP_9) #define VC_UP M(MACRO_INC_VOICE) @@ -77,6 +101,7 @@ #define SC_ACLS LALT(KC_F4) #define SC_CCLS LCTL(KC_F4) +#define TG_NKRO MAGIC_TOGGLE_NKRO #define OS_SHFT KC_FN0 #define _______ KC_TRNS @@ -86,169 +111,126 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* QWERTY - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [LAYER_QWERTY] = { // QWERTY - { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, - { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, - { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, - { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, - }, - - /* COLEMAK - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | TAB | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ | DEL | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | BACKSP | A | R | S | T | D | H | N | E | I | O | ' | XXXXXX . ENTER | PG UP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [LAYER_COLEMAK] = { // COLEMAK - { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, - { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, - { KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, - { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, -}, - -/* DVORAK - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | XXXXXX . BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | TAB | ' | , | . | P | Y | F | G | C | R | L | / | = | \ | DEL | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | CAPS | A | O | E | U | I | D | H | T | N | S | - | XXXXXX . ENTER | PG UP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [LAYER_DVORAK] = { // DVORAK - { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_BSPC }, - { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL }, - { KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_ENT, KC_PGUP }, - { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, - }, - -/* UPPER - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | PRINT | BR TOG | BR SP+ | BR SP- | BR RST | XXXXXX | XXXXXX | NUM LK | / | * | | NUM LK | SCR LK | XXXXXX . PAUSE | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | | F1 | F2 | F3 | F4 | | | 7 | 8 | 9 | - | | | | INS | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | CAP LK | F5 | F6 | F7 | F8 | | | 4 | 5 | 6 | + | | XXXXXX . | HOME | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | ENTER | XXXXXX . | | END | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | | | | | | 0 | | RALT | . | ENTER | | | | | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [LAYER_UPPER] = { // UPPER - { KC_PSCR, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, XXXXXXX, XXXXXXX, KC_SLCK, KC_PAUS, KC_PAUS }, - { _______, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS }, - { KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, ________________, KC_HOME }, - { _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, ________________, _______, KC_END }, - { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ }, - }, - -/* LOWER - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | | $ | { | [ | ( | % | # | ) | ] | } | @ | | | | INS | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | | ^ | * | + | - | / | \ | _ | ' | " | ` | | XXXXXX . | HOME | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | | | | & | ! | ~ | ; | : | = | < | > | ? | XXXXXX . | | END | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | | | | | | | | | | | | | | | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [LAYER_LOWER] = { // LOWER - { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, - { _______, KC_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, _______, _______, _______, KC_INS }, - { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, _______, ________________, KC_HOME }, - { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL, KC_LT, KC_GT, KC_QUES, ________________, _______, KC_END }, - { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, - }, - -/* FUNCTION - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | NUM LK | | | | | | | | | | | | | XXXXXX . | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | SCR LK | F13 | F14 | F15 | F16 | | | | | | | | | | | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | CAP LK | F17 | F18 | F19 | F20 | | | | | | | | XXXXXX . | | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | | F21 | F22 | F23 | F24 | | | | | | | XXXXXX . | VOL UP | MUTE | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | | | | | | PLAY/PAUSE | | | | | | PTRACK | VOL DN | NTRACK | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [LAYER_FUNCTION] = { // FUNCTION - { KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX }, - { KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { KC_CAPS, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXX }, - { _______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_VOLU, KC_MUTE }, - { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT }, - }, - -#ifdef MOUSEKEY_ENABLE - - [LAYER_MOUSE] = { // MOUSE - { _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX }, - { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U }, - { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_MS_U, KC_WH_D }, - { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }, - }, - -#endif - - [LAYER_ADJUST] = { // ADJUST - { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MU_TOG, AU_TOG, ________________ }, - { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, - { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, ________________, MUV_IN, _______ }, - { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, MUV_DE, _______ }, - }, - - -/* - [LAYER_EMPTY] = { // LAYER - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, _______ }, - { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, - }, +/* LAYER = LAYER_QWERTY + .--------------------------------------------------------------------------------------------------------------------------------------. + | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BACKSP . BACKSP | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | CAP LK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER . ENTER | PG UP | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT . RSHIFT | UP | PG DN | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | LCTRL | LWIN | FN | LALT | UPPER | SPACE . SPACE | LOWER | OSHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | + '--------------------------------------------------------------------------------------------------------------------------------------' */ - +[LAYER_QWERTY] = { + { KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC }, + { KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, + { KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_ENT , KC_PGUP }, + { KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_RSFT, KC_UP , KC_PGDN }, + { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_RALT, KC_APP , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT } +}, +/* LAYER = LAYER_UPPER + .--------------------------------------------------------------------------------------------------------------------------------------. + | PRINT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | KP / | KP * | KP - | XXXXXX | XXXXXX | ______ . ______ | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | PAUSE | F1 | F2 | F3 | F4 | NUM LK | KP / | KP 7 | KP 8 | KP 9 | KP - | ______ | ______ | ______ | INS | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | F5 | F6 | F7 | F8 | CAP LK | KP * | KP 4 | KP 5 | KP 6 | KP + | ______ | ______ . ______ | HOME | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | F9 | F10 | F11 | F12 | SCR LK | KP 0 | KP 1 | KP 2 | KP 3 | KP ENT | ______ . ______ | ______ | END | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | ______ | ______ | UPPER | KP 0 . KP 0 | ______ | RALT | KP . | KP ENT | ______ | ______ | ______ | ______ | + '--------------------------------------------------------------------------------------------------------------------------------------' +*/ +[LAYER_UPPER] = { + { KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, XXXXXXX, XXXXXXX, _______, _______ }, + { KC_PAUS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS }, + { _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_CAPS, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, _______, KC_HOME }, + { _______, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_SLCK, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, _______, _______, KC_END }, + { _______, _______, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ } +}, +/* LAYER = LAYER_LOWER + .--------------------------------------------------------------------------------------------------------------------------------------. + | PRINT | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | ______ . ______ | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | $ | { | [ | ( | % | # | ) | ] | } | @ | ______ | ______ | ______ | INS | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ^ | * | + | - | / | \ | _ | ' | " | ` | ______ | ______ . ______ | HOME | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | | | & | ! | ~ | ; | : | = | < | > | ? | ______ . ______ | ______ | END | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | ______ | ______ | ______ | ______ . ______ | LOWER | ______ | ______ | ______ | ______ | ______ | ______ | ______ | + '--------------------------------------------------------------------------------------------------------------------------------------' +*/ +[LAYER_LOWER] = { + { KC_PSCR, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , _______, _______ }, + { _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT , _______, _______, _______, KC_INS }, + { _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , _______, _______, _______, KC_HOME }, + { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT , KC_GT , KC_QUES, _______, _______, _______, KC_END }, + { _______, _______, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, _______, _______, _______, _______ } +}, +/* LAYER = LAYER_FUNCTION + .--------------------------------------------------------------------------------------------------------------------------------------. + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | F13 | F14 | F15 | F16 | NUM LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | F17 | F18 | F19 | F20 | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | F21 | F22 | F23 | F24 | CAP LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ______ . ______ | VOL UP | MUTE | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | FN | ______ | ______ | PLAY . PLAY | ______ | ______ | ______ | ______ | ______ | PREV | VOL DN | NEXT | + '--------------------------------------------------------------------------------------------------------------------------------------' +*/ +[LAYER_FUNCTION] = { + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { _______, KC_F21 , KC_F22 , KC_F23 , KC_F24 , KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_VOLU, KC_MUTE }, + { _______, _______, M_FUNCT, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT } +}, +/* LAYER = LAYER_MOUSE + .--------------------------------------------------------------------------------------------------------------------------------------. + | ESC | MS AC0 | MS AC1 | MS AC2 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS UL | MS U | MS UR | XXXXXX | XXXXXX | XXXXXX | MS WHL | MS WHR | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | MS BT5 | MS BT4 | MS BT3 | MS BT2 | XXXXXX | XXXXXX | MS L | XXXXXX | MS R | XXXXXX | XXXXXX | XXXXXX . XXXXXX | MS WHU | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS DL | MS D | MS DR | XXXXXX | ______ . ______ | MS U | MS WHD | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | ______ | ______ | ______ | MS BT1 . MS BT1 | ______ | ______ | ______ | ______ | ______ | MS L | MS D | MS R | + '--------------------------------------------------------------------------------------------------------------------------------------' +*/ +[LAYER_MOUSE] = { + { KC_ESC , KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_UL, KC_MS_U, M_MS_UR, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_R }, + { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, KC_MS_L, XXXXXXX, KC_MS_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U }, + { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_DL, KC_MS_D, M_MS_DR, XXXXXXX, _______, _______, KC_MS_U, KC_WH_D }, + { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R } +}, +/* LAYER = LAYER_ADJUST + .--------------------------------------------------------------------------------------------------------------------------------------. + | XXXXXX | HELP 1 | HELP 2 | HELP 3 | HELP 4 | HELP 5 | HELP 6 | HELP 7 | HELP 8 | HELP 9 | XXXXXX | MUSIC | AUDIO | XXXXXX . XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | BRTOG | BRSPD+ | BRSPD- | BRDFLT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | QWERTY | XXXXXX | XXXXXX | BACKLT | RESET | XXXXXX | MOUSE | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | VOICE+ | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER | XXXXXX . XXXXXX | LOWER | XXXXXX | XXXXXX | XXXXXX | XXXXXX | TEMPO- | VOICE- | TEMPO+ | + '--------------------------------------------------------------------------------------------------------------------------------------' +*/ +[LAYER_ADJUST] = { + { XXXXXXX, M_HELP1, M_HELP2, M_HELP3, M_HELP4, M_HELP5, M_HELP6, M_HELP7, M_HELP8, M_HELP9, XXXXXXX, MU_TOG , AU_TOG , XXXXXXX, XXXXXXX }, + { XXXXXXX, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, 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, M_QWRTY, XXXXXXX, XXXXXXX, M_BACKL, RESET , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MUV_IN , XXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TMPO_DN, MUV_DE , TMPO_UP } +}, }; #ifdef AUDIO_ENABLE @@ -290,6 +272,69 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { + case MACRO_HELP_1: + if (record->event.pressed) + { + uprintf("1"); + } + break; + + case MACRO_HELP_2: + if (record->event.pressed) + { + uprintf("2"); + } + break; + + case MACRO_HELP_3: + if (record->event.pressed) + { + uprintf("3"); + } + break; + + case MACRO_HELP_4: + if (record->event.pressed) + { + uprintf("4"); + } + break; + + case MACRO_HELP_5: + if (record->event.pressed) + { + uprintf("5"); + } + break; + + case MACRO_HELP_6: + if (record->event.pressed) + { + uprintf("6"); + } + break; + + case MACRO_HELP_7: + if (record->event.pressed) + { + uprintf("7"); + } + break; + + case MACRO_HELP_8: + if (record->event.pressed) + { + uprintf("8"); + } + break; + + case MACRO_HELP_9: + if (record->event.pressed) + { + uprintf("9"); + } + break; + case MACRO_BREATH_TOGGLE: if (record->event.pressed) { @@ -322,29 +367,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) if (record->event.pressed) { persistant_default_layer_set(1UL<event.pressed) - { - persistant_default_layer_set(1UL<event.pressed) - { - persistant_default_layer_set(1UL<event.pressed) + { + uprintf("1"); + } + break; + + case MACRO_HELP_2: + if (record->event.pressed) + { + uprintf("2"); + } + break; + + case MACRO_HELP_3: + if (record->event.pressed) + { + uprintf("3"); + } + break; + + case MACRO_HELP_4: + if (record->event.pressed) + { + uprintf("4"); + } + break; + + case MACRO_HELP_5: + if (record->event.pressed) + { + uprintf("5"); + } + break; + + case MACRO_HELP_6: + if (record->event.pressed) + { + uprintf("6"); + } + break; + + case MACRO_HELP_7: + if (record->event.pressed) + { + uprintf("7"); + } + break; + + case MACRO_HELP_8: + if (record->event.pressed) + { + uprintf("8"); + } + break; + + case MACRO_HELP_9: + if (record->event.pressed) + { + uprintf("9"); + } + break; + case MACRO_BREATH_TOGGLE: if (record->event.pressed) { From cb1ac2a3edf637a3e2ecb53f0627212d1f5abb08 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Mon, 12 Sep 2016 20:20:31 -0500 Subject: [PATCH 20/92] Fixed NO_PRINT / USER_PRINT conflict warning. --- keyboards/atomic/keymaps/pvc/Makefile | 2 +- tmk_core/common/command.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/keyboards/atomic/keymaps/pvc/Makefile b/keyboards/atomic/keymaps/pvc/Makefile index ebd75e313f..c7c04485fc 100644 --- a/keyboards/atomic/keymaps/pvc/Makefile +++ b/keyboards/atomic/keymaps/pvc/Makefile @@ -1,4 +1,4 @@ -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = yes # Console for debug(+400) diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c index 54d6117fd1..fc5aad5c1d 100644 --- a/tmk_core/common/command.c +++ b/tmk_core/common/command.c @@ -261,7 +261,10 @@ static void print_status(void) #ifdef BOOTMAGIC_ENABLE static void print_eeconfig(void) { -#ifndef NO_PRINT + +// Print these variables if NO_PRINT or USER_PRINT are not defined. +#if !defined(NO_PRINT) && !defined(USER_PRINT) + print("default_layer: "); print_dec(eeconfig_read_default_layer()); print("\n"); debug_config_t dc; @@ -571,7 +574,8 @@ static uint8_t mousekey_param = 0; static void mousekey_param_print(void) { -#ifndef NO_PRINT +// Print these variables if NO_PRINT or USER_PRINT are not defined. +#if !defined(NO_PRINT) && !defined(USER_PRINT) print("\n\t- Values -\n"); print("1: delay(*10ms): "); pdec(mk_delay); print("\n"); print("2: interval(ms): "); pdec(mk_interval); print("\n"); From 6098704145c95f7854e0696e6137332e8e12faf8 Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Tue, 13 Sep 2016 09:54:18 -0500 Subject: [PATCH 21/92] Small update --- keyboards/atreus/keymaps/erlandsona/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c index 83871219eb..9e11ac048e 100644 --- a/keyboards/atreus/keymaps/erlandsona/keymap.c +++ b/keyboards/atreus/keymaps/erlandsona/keymap.c @@ -18,10 +18,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [BASE] = KEYMAP( /* Qwerty */ - KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , - KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , - SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_SLSH), - KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, ALT_T(KC_ESC), CTL_T(KC_ENT), KC_SPC, F(NUMS), KC_QUOT, KC_RALT , KC_BSLS ), + KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , + KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , + SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_QUOT), + KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, ALT_T(KC_ESC), CTL_T(KC_ENT), KC_SPC, F(NUMS), KC_RALT, KC_SLSH, KC_BSLS ), [NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */ KC_GRV , KC_7 , KC_8 , KC_9 , KC_0 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC, @@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [MOUS] = KEYMAP( /* Mouse and Media Keys */ KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3, - KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_F2, + KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_R, KC_WH_U, KC_WH_D, KC_WH_L, KC_F2, _______, _______ , _______, _______, _______, _______, _______, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1) }; From 3668b295200c53e7131551bc906264ecc54e6b04 Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Tue, 13 Sep 2016 11:16:53 -0500 Subject: [PATCH 22/92] Shorten TAPPING_TERM for better responsiveness of overloaded keys... --- keyboards/atreus/config.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/keyboards/atreus/config.h b/keyboards/atreus/config.h index 51162cde3a..a59eee18eb 100644 --- a/keyboards/atreus/config.h +++ b/keyboards/atreus/config.h @@ -49,6 +49,9 @@ along with this program. If not, see . # define UNUSED_PINS #endif +/* Make Overloaded Keys switch faster */ +#define TAPPING_TERM 175 + /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW From 344929e0675f9857503b0dd2cd307984a57d61aa Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Tue, 13 Sep 2016 15:48:50 -0400 Subject: [PATCH 23/92] Give layers longer names --- keyboards/planck/keymaps/cbbrowne/keymap.c | 40 +++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 1bfd142e90..85f8e34722 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -65,10 +65,10 @@ */ enum layers { - _QW = 0, /* Qwerty mapping */ - _LW, /* Lower layer, where top line has symbols !@#$%^&*() */ - _RS, /* Raised layer, where top line has digits 1234567890 */ - _KP, /* Key pad */ + _QWERTY = 0, /* Qwerty mapping */ + _LOWER, /* Lower layer, where top line has symbols !@#$%^&*() */ + _RAISE, /* Raised layer, where top line has digits 1234567890 */ + KEYPAD, /* Key pad */ _ADJUST, /* Special Adjust layer coming via tri-placement */ }; @@ -88,30 +88,30 @@ enum macro_id { /* Note that Planck has dimensions 4 rows x 12 columns */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QW] = { /* Qwerty */ +[_QWERTY] = { /* Qwerty */ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT)}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT }, {KC_TAB, M(M_LED), KC_LALT, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */ }, -[_RS] = { /* RAISE */ +[_RAISE] = { /* RAISE */ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_KP), DF(_KP), RESET, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(KEYPAD), DF(KEYPAD), RESET, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, -[_LW] = { /* LOWER */ +[_LOWER] = { /* LOWER */ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_KP), DF(_KP), RESET, _______}, - {_______, DF(_KP), _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(KEYPAD), DF(KEYPAD), RESET, _______}, + {_______, DF(KEYPAD), _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, -[_KP] = { /* Key Pad */ +[KEYPAD] = { /* Key Pad */ {KC_ESC, M(M_USERNAME), M(M_VERSION), KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, {KC_LCTL, M(M_RANDDIGIT), KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, {KC_LSFT, M(M_RANDLETTER), KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, - {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, DF(_QW), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} + {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, DF(_QWERTY), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} }, [_ADJUST] = { /* Adjustments - gonna shift the wild tools in here */ @@ -187,25 +187,25 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case MACRO_UPPER: if (record->event.pressed) { - layer_on(_RS); - update_tri_layer(_LW, _RS, _ADJUST); + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); } else { - layer_off(_RS); - update_tri_layer(_LW, _RS, _ADJUST); + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); } break; case MACRO_LOWER: if (record->event.pressed) { - layer_on(_LW); - update_tri_layer(_LW, _RS, _ADJUST); + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); } else { - layer_off(_LW); - update_tri_layer(_LW, _RS, _ADJUST); + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); } break; From fdeaf1d9f8c87a0266066799fd14b808f6debe29 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Tue, 13 Sep 2016 15:49:46 -0400 Subject: [PATCH 24/92] Give layers longer names --- keyboards/planck/keymaps/cbbrowne/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 85f8e34722..8051721cd3 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -68,7 +68,7 @@ enum layers { _QWERTY = 0, /* Qwerty mapping */ _LOWER, /* Lower layer, where top line has symbols !@#$%^&*() */ _RAISE, /* Raised layer, where top line has digits 1234567890 */ - KEYPAD, /* Key pad */ + _KEYPAD, /* Key pad */ _ADJUST, /* Special Adjust layer coming via tri-placement */ }; @@ -98,16 +98,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_RAISE] = { /* RAISE */ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(KEYPAD), DF(KEYPAD), RESET, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(_KEYPAD), DF(_KEYPAD), RESET, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, [_LOWER] = { /* LOWER */ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(KEYPAD), DF(KEYPAD), RESET, _______}, - {_______, DF(KEYPAD), _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(_KEYPAD), DF(_KEYPAD), RESET, _______}, + {_______, DF(_KEYPAD), _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, -[KEYPAD] = { /* Key Pad */ +[_KEYPAD] = { /* Key Pad */ {KC_ESC, M(M_USERNAME), M(M_VERSION), KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, {KC_LCTL, M(M_RANDDIGIT), KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, {KC_LSFT, M(M_RANDLETTER), KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, From 5be2795ca1b8c3e555fb7fb3a2d7fca69d2db9b4 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Tue, 13 Sep 2016 16:17:51 -0400 Subject: [PATCH 25/92] C macros for my favorite complex keystrokes --- keyboards/planck/keymaps/cbbrowne/keymap.c | 29 ++++++++++++++-------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 8051721cd3..fafc47e1d4 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -84,6 +84,13 @@ enum macro_id { #define M_LOWER M(MACRO_LOWER) #define M_UPPER M(MACRO_UPPER) +#define ROT_LED M(M_LED) /* Rotate LED */ +#define QWERTY DF(_QWERTY) /* Switch to QWERTY layout */ +#define KEYPAD DF(_KEYPAD) /* Switch to keypad */ +#define USERNAME M(M_USERNAME) /* shortcut for username */ +#define RANDDIG M(M_RANDDIGIT) +#define RANDALP M(M_RANDLETTER) + /* Note that Planck has dimensions 4 rows x 12 columns */ @@ -92,32 +99,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT)}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT }, - {KC_TAB, M(M_LED), KC_LALT, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_TAB, ROT_LED, KC_LALT, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */ }, [_RAISE] = { /* RAISE */ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(_KEYPAD), DF(_KEYPAD), RESET, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, RESET, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, [_LOWER] = { /* LOWER */ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(_KEYPAD), DF(_KEYPAD), RESET, _______}, - {_______, DF(_KEYPAD), _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, RESET, _______}, + {_______, KEYPAD, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, [_KEYPAD] = { /* Key Pad */ - {KC_ESC, M(M_USERNAME), M(M_VERSION), KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, - {KC_LCTL, M(M_RANDDIGIT), KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, - {KC_LSFT, M(M_RANDLETTER), KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, - {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, DF(_QWERTY), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} + {KC_ESC, USERNAME, M(M_VERSION), KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, + {KC_LCTL, RANDDIG, KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, + {KC_LSFT, RANDALP, KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, + {BL_STEP, ROT_LED, KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, QWERTY, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} }, [_ADJUST] = { /* Adjustments - gonna shift the wild tools in here */ - { M(M_LED), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - {_______, _______, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______ }, + { ROT_LED, USERNAME, M(M_VERSION), _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + {_______, RANDDIG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + {_______, RANDALP, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______ }, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } } }; From 5d643bb7ee8375a354693f19a6e9eae44f825532 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Tue, 13 Sep 2016 16:29:01 -0400 Subject: [PATCH 26/92] Got Right SHIFT + Right CTRL --- keyboards/planck/keymaps/cbbrowne/keymap.c | 6 ++++-- keyboards/planck/keymaps/cbbrowne/readme.md | 7 ++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index fafc47e1d4..d6f8a6ed48 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -90,6 +90,8 @@ enum macro_id { #define USERNAME M(M_USERNAME) /* shortcut for username */ #define RANDDIG M(M_RANDDIGIT) #define RANDALP M(M_RANDLETTER) +#define CTLENTER MT(MOD_RCTL, KC_ENT) +#define SHIFTQUOTE MT(MOD_RSFT, KC_QUOT) /* Note that Planck has dimensions 4 rows x 12 columns */ @@ -97,8 +99,8 @@ enum macro_id { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_QWERTY] = { /* Qwerty */ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT)}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT }, + {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, CTLENTER}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SHIFTQUOTE }, {KC_TAB, ROT_LED, KC_LALT, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */ }, diff --git a/keyboards/planck/keymaps/cbbrowne/readme.md b/keyboards/planck/keymaps/cbbrowne/readme.md index e9e423ed91..272e042a0d 100644 --- a/keyboards/planck/keymaps/cbbrowne/readme.md +++ b/keyboards/planck/keymaps/cbbrowne/readme.md @@ -25,7 +25,12 @@ doing sundry experimentation: - Key [3][2] aka "z" uses a random number generator to select a letter a-z at random - Key [1][3] aka "e" spits out the keymap version number * Trying out sgoodwin's "hold Enter down to get Shift" - + - Liking this Quite Well Enough... + - Applied this to both Shift and Quote + * I have added an alternate ADJUST layer that is activated via update_tri_layer() + - e.g. - LOWER+RAISE simultaneously + - This seems entirely more useful for handling my "special keys" + like the random numbers, user name, and such, than the keypad layer 2. Some code structure ideas --------------------------------------------------- From 9c574b493c3d098d2c4f2475dfc1564a182acce0 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Tue, 13 Sep 2016 22:05:10 -0500 Subject: [PATCH 27/92] Changed Docs, Moved RetroRefit to Handwired --- keyboards/arrow_pad/readme.md | 113 +++++++++++++++++- .../{ => handwired}/retro_refit/Makefile | 2 +- .../{ => handwired}/retro_refit/config.h | 0 .../retro_refit/keymaps/default/keymap.c | 0 keyboards/handwired/retro_refit/readme.md | 60 ++++++++++ .../{ => handwired}/retro_refit/retro_refit.c | 0 .../{ => handwired}/retro_refit/retro_refit.h | 0 .../{ => handwired}/retro_refit/rules.mk | 0 keyboards/retro_refit/readme.md | 26 ---- keyboards/vision_division/readme.md | 6 + 10 files changed, 177 insertions(+), 30 deletions(-) rename keyboards/{ => handwired}/retro_refit/Makefile (52%) rename keyboards/{ => handwired}/retro_refit/config.h (100%) rename keyboards/{ => handwired}/retro_refit/keymaps/default/keymap.c (100%) create mode 100644 keyboards/handwired/retro_refit/readme.md rename keyboards/{ => handwired}/retro_refit/retro_refit.c (100%) rename keyboards/{ => handwired}/retro_refit/retro_refit.h (100%) rename keyboards/{ => handwired}/retro_refit/rules.mk (100%) delete mode 100644 keyboards/retro_refit/readme.md diff --git a/keyboards/arrow_pad/readme.md b/keyboards/arrow_pad/readme.md index 2e9a64f2ef..d0d172272e 100644 --- a/keyboards/arrow_pad/readme.md +++ b/keyboards/arrow_pad/readme.md @@ -1,13 +1,120 @@ arrow_pad keyboard firmware ====================== +## Keyboard Info + +The ArrowPad is a wired conversion that can be made to any stand-alone keypad. It uses two main layers - a standard numpad, and a more advanced arrow cluster navigator. + +The first 24-key ArrowPad was handwired, but the PCB was wired as listed below. + +``` + pin + (Silkscreen Name if different) - + + +Note: +U2 pin 2 is the Num Lock LED and is active low. + +U2 pin 1 +Clear (Num Lock) - 1 +Enter - 2 +Esc (ESC) - 2 + + +U2 pin 3 +- - 1 + +U2 pin 4 +7 - 2 +8 - 2 +9 - 2 + +U2 pin 5 +* - 2 +Delete (BACK SPACE) - 2 + +U2 pin 6 +1 - 2 +0 - 2 +. - 2 +, - 2 + +U2 pin 7 +4 - 2 +5 - 2 +6 - 2 + +U2 pin 8 +Tab - 2 += (/) - 2 + +U2 pin 13 +Delete (BACK SPACE) - 1 +9 - 1 +6 - 1 +3 - 1 +. - 1 + +U2 pin 14 +Tab - 1 +8 - 1 +5 - 1 +2 - 1 +0 - 1 + +U2 pin 15 +Esc (ESC) - 1 += (/) - 1 +/ (*) - 1 +7 - 1 +4 - 1 +1 - 1 ++ - 1 + +U2 pin 16 +Enter - 1 +* (<--) - 1 +, - 1 + +U2 pin 17 +Fn (#NAME?) - 1 +- - 2 +Clear (Num Lock) - 2 + +U2 pin 18 +Fn (#NAME?) - 2 +* (<--) - 2 ++ - 2 +3 - 2 +2 - 2 +``` + +More info can be found on [GeekHack](https://geekhack.org/index.php?topic=73632.msg1802497#msg1802497) + +The second ArrowPad was a conversion from a 21-key Genovation keypad. It used a 2 row x 11 column matrix. + +``` +#define KEYMAP( \ + KM_ESC, KM_TAB, KM_BSL, KM_ARR, \ + KM_NUM, KM_FSL, KM_AST, KM_MIN, \ + KM___7, KM___8, KM___9, ___PLS, \ + KM___4, KM___5, KM___6, KM_PLS, \ + KM___1, KM___2, KM___3, ___ENT, \ + KM___0, _____0, KM_DOT, KM_ENT \ +) { \ + { KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \ + { KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \ +} +``` + + ## Quantum MK Firmware For the full Quantum feature list, see [the parent readme.md](/readme.md). ## Building -Download or clone the whole firmware and navigate to the keyboards/arrow_pad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. +Download or clone the whole firmware and navigate to the keyboards/arrow_pad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. Depending on which keymap you would like to use, you will have to compile slightly differently. @@ -20,7 +127,7 @@ Several version of keymap are available in advance but you are recommended to de To build the firmware binary hex file with a keymap just do `make` with a keymap like this: ``` -$ make [default|jack|] +$ make [default|pad_21|pad_24|] ``` -Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. \ No newline at end of file +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/retro_refit/Makefile b/keyboards/handwired/retro_refit/Makefile similarity index 52% rename from keyboards/retro_refit/Makefile rename to keyboards/handwired/retro_refit/Makefile index 4e2a6f00fd..191c6bb664 100644 --- a/keyboards/retro_refit/Makefile +++ b/keyboards/handwired/retro_refit/Makefile @@ -1,3 +1,3 @@ ifndef MAKEFILE_INCLUDED - include ../../Makefile + include ../../../Makefile endif \ No newline at end of file diff --git a/keyboards/retro_refit/config.h b/keyboards/handwired/retro_refit/config.h similarity index 100% rename from keyboards/retro_refit/config.h rename to keyboards/handwired/retro_refit/config.h diff --git a/keyboards/retro_refit/keymaps/default/keymap.c b/keyboards/handwired/retro_refit/keymaps/default/keymap.c similarity index 100% rename from keyboards/retro_refit/keymaps/default/keymap.c rename to keyboards/handwired/retro_refit/keymaps/default/keymap.c diff --git a/keyboards/handwired/retro_refit/readme.md b/keyboards/handwired/retro_refit/readme.md new file mode 100644 index 0000000000..9f10edf9fc --- /dev/null +++ b/keyboards/handwired/retro_refit/readme.md @@ -0,0 +1,60 @@ +retro_refit keyboard firmware +====================== + +## Keyboard Info + +The retro refit keyboard used a Teensy to replace the original controller on a 386 "laptop". + +http://imgur.com/a/08Fyj + +This keyboard uses a KEYMAP macro that is a great example of using a non-standard row-column matrix. The keyboard in question had 11 rows and 8 columns, but the rows were not all horizontal, and the columns were not all vertical. For example, row 2 contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and"Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B", "Left Alt", "Up Arrow", and "Down Arrow". + +The macro makes programming the keys easier and in a more straight-forward manner because it realigns the keys into a 6x15 sensible keyboard layout instead of the obtuse 11x8 matrix. Each Kxy corrisponds to a key in row x column y. + +``` +#define KEYMAP( \ + K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \ + K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \ + K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \ + K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \ + K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \ + K10, K06, K25, K07, K86, K85, K95, K90, K93 \ +) { \ +{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, }, \ +{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, }, \ +{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, }, \ +{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, }, \ +{ KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, }, \ +{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57, }, \ +{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, }, \ +{ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77, }, \ +{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K85, KC_##K86, KC_##K87, }, \ +{ KC_##K90, KC_##K91, KC_NO, KC_##K93, KC_##K94, KC_##K95, KC_NO, KC_##K97, }, \ +{ KC_##KA0, KC_##KA1, KC_##KA2, KC_##KA3, KC_##KA4, KC_##KA5, KC_##KA6, KC_##KA7, } \ +} +``` + + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/retro_refit folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default +To build with the default keymap, simply run `make default`. + +### Other Keymaps +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` and see keymap document (you can find in top readme.md) and existent keymap files. + +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + +``` +$ make [default|jack|] +``` + +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. \ No newline at end of file diff --git a/keyboards/retro_refit/retro_refit.c b/keyboards/handwired/retro_refit/retro_refit.c similarity index 100% rename from keyboards/retro_refit/retro_refit.c rename to keyboards/handwired/retro_refit/retro_refit.c diff --git a/keyboards/retro_refit/retro_refit.h b/keyboards/handwired/retro_refit/retro_refit.h similarity index 100% rename from keyboards/retro_refit/retro_refit.h rename to keyboards/handwired/retro_refit/retro_refit.h diff --git a/keyboards/retro_refit/rules.mk b/keyboards/handwired/retro_refit/rules.mk similarity index 100% rename from keyboards/retro_refit/rules.mk rename to keyboards/handwired/retro_refit/rules.mk diff --git a/keyboards/retro_refit/readme.md b/keyboards/retro_refit/readme.md deleted file mode 100644 index 77df861cef..0000000000 --- a/keyboards/retro_refit/readme.md +++ /dev/null @@ -1,26 +0,0 @@ -retro_refit keyboard firmware -====================== - -## Quantum MK Firmware - -For the full Quantum feature list, see [the parent readme.md](/readme.md). - -## Building - -Download or clone the whole firmware and navigate to the keyboards/retro_refit folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. - -Depending on which keymap you would like to use, you will have to compile slightly differently. - -### Default -To build with the default keymap, simply run `make default`. - -### Other Keymaps -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` and see keymap document (you can find in top readme.md) and existent keymap files. - -To build the firmware binary hex file with a keymap just do `make` with a keymap like this: - -``` -$ make [default|jack|] -``` - -Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. \ No newline at end of file diff --git a/keyboards/vision_division/readme.md b/keyboards/vision_division/readme.md index 0a637fd068..de200d7c5b 100644 --- a/keyboards/vision_division/readme.md +++ b/keyboards/vision_division/readme.md @@ -1,6 +1,12 @@ vision_division keyboard firmware ====================== +## Keyboard Info + +[See this thread.](https://geekhack.org/index.php?topic=83692.msg2227856#msg2227856) + +Vision/Division is a full size or split keyboard that can be customized due to its pcb. + ## Quantum MK Firmware For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). From c8e7cca6eddf7c352ec6579adf1177871e106bca Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Wed, 14 Sep 2016 09:39:16 -0500 Subject: [PATCH 28/92] Copy config overrides to my keymap directory... --- keyboards/atreus/config.h | 3 - keyboards/atreus/keymaps/erlandsona/config.h | 101 +++++++++++++++++++ 2 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 keyboards/atreus/keymaps/erlandsona/config.h diff --git a/keyboards/atreus/config.h b/keyboards/atreus/config.h index a59eee18eb..51162cde3a 100644 --- a/keyboards/atreus/config.h +++ b/keyboards/atreus/config.h @@ -49,9 +49,6 @@ along with this program. If not, see . # define UNUSED_PINS #endif -/* Make Overloaded Keys switch faster */ -#define TAPPING_TERM 175 - /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW diff --git a/keyboards/atreus/keymaps/erlandsona/config.h b/keyboards/atreus/keymaps/erlandsona/config.h new file mode 100644 index 0000000000..6f0d258f50 --- /dev/null +++ b/keyboards/atreus/keymaps/erlandsona/config.h @@ -0,0 +1,101 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + + + + +/* Make Overloaded Keys switch faster */ +#define TAPPING_TERM 175 + + + + +/* USB Device descriptor parameter */ + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Technomancy +#define PRODUCT Atreus +#define DESCRIPTION q.m.k. keyboard firmware for Atreus + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 11 + +// Change this to how you wired your keyboard +// COLS: Left to right, ROWS: Top to bottom +#if defined(ATREUS_ASTAR) +# define MATRIX_ROW_PINS { D0, D1, D3, D2 } +#if defined(PCBDOWN) +# define MATRIX_COL_PINS { B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 } +#else +# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 } +#endif +# define UNUSED_PINS +#elif defined(ATREUS_TEENSY2) +# define MATRIX_ROW_PINS { D0, D1, D2, D3 } +# define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 } +# define UNUSED_PINS +#endif + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +//#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif From e72f8dfd7e7a95fb48f672a794c69b94d2998410 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Wed, 14 Sep 2016 20:22:04 -0500 Subject: [PATCH 29/92] Adding WinCheck Script for windows install help --- util/Win_Check_Output.bat | 205 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 util/Win_Check_Output.bat diff --git a/util/Win_Check_Output.bat b/util/Win_Check_Output.bat new file mode 100644 index 0000000000..3d517d9403 --- /dev/null +++ b/util/Win_Check_Output.bat @@ -0,0 +1,205 @@ +@setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION +@echo OFF +set BAT_VERSION=v1.0 + +cls + +echo QMK Windows Check Output %BAT_VERSION% +echo QMK Windows Check Output %BAT_VERSION%.>%REPORT_NAME% + +:: ----------------------------------------------------------------------------- + +set MINGW_BASE_DIR=C:\MinGW +set REPORT_NAME=Win_Check_Output.txt + +set KEYMAP=atomic-pvc +set KEYMAP_CLEAN=atomic-pvc-clean + +:: ----------------------------------------------------------------------------- + +if %0 == VERBOSE (goto :Verbose_Make) else (goto :Normal_Make) + +:Normal_Make +set MAKE_CMD_LEVEL_0=make -r -f Makefile COLOR=FALSE +set MAKE_CMD_LEVEL_1=make -r -f ../Makefile COLOR=FALSE +set MAKE_CMD_LEVEL_2=make -r -f ../../Makefile COLOR=FALSE +goto :Start_Report + +:Verbose_Make +echo Verbose Mode +set MAKE_CMD_LEVEL_0=make -r -d -f Makefile COLOR=FALSE VERBOSE=TRUE +set MAKE_CMD_LEVEL_1=make -r -d -f ../Makefile COLOR=FALSE VERBOSE=TRUE +set MAKE_CMD_LEVEL_2=make -r -d -f ../../Makefile COLOR=FALSE VERBOSE=TRUE +goto :Start_Report + +:Start_Report + + +:: ----------------------------------------------------------------------------- + +set header=CURRENT DIRECTORY & call :ReportHeader + +echo %CD%>>%REPORT_NAME% 2>&1 + +echo.>>%REPORT_NAME% 2>&1 +:: ----------------------------------------------------------------------------- + +set header=CURRENT PATHS & call :ReportHeader + +for %%A in ("%path:;=";"%") do (echo %%~A>>%REPORT_NAME% 2>&1) + +echo.>>%REPORT_NAME% 2>&1 + +:: ----------------------------------------------------------------------------- + +set header=CURRENT ENVIRONMENTAL SETTINGS & call :ReportHeader + +set>>%REPORT_NAME% 2>&1 +echo.>>%REPORT_NAME% 2>&1 + +:: ----------------------------------------------------------------------------- + +set header=KEY EXECUTABLE LOCATIONS - GENERAL & call :ReportHeader + +set filename=make.exe & set version_cmd=--version & set version_find="GNU Make" & call :ReportVersion +set filename=git.exe & set version_cmd=--version & set version_find="git" & call :ReportVersion +set filename=cmp.exe & set version_cmd=--version & set version_find="cmp" & call :ReportVersion + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - AVR MCU COMPILERS & call :ReportHeader + +set filename=avr-gcc.exe & set version_cmd=--version & set version_find="avr" & call :ReportVersion +set filename=avr-objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion +set filename=avr-objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion +set filename=avr-size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion +set filename=avr-ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion +set filename=avr-nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - ARM MCU COMPILERS & call :ReportHeader + +set filename=arm-none-eabi-gcc.exe & set version_cmd=--version & set version_find="arm-none-eabi-gcc" & call :ReportVersion +set filename=arm-none-eabi-objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion +set filename=arm-none-eabi-objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion +set filename=arm-none-eabi-size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion +set filename=arm-none-eabi-ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion +set filename=arm-none-eabi-nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - NATIVE COMPILERS & call :ReportHeader + +set filename=gcc.exe & set version_cmd=--version & set version_find="gcc" & call :ReportVersion +set filename=objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion +set filename=objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion +set filename=size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion +set filename=ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion +set filename=nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - PROGRAMMERS & call :ReportHeader + +set filename=dfu-programmer.exe & set version_cmd=--version & set version_find="dfu" & call :ReportVersion +set filename=batchisp.exe & set version_cmd=-version & set version_find="batchisp" & call :ReportVersion +set filename=dfu-util.exe & call :Report +set filename=teensy_loader_cli.exe & call :Report +set filename=hid_bootloader_cli.exe & call :Report +set filename=avrdude.exe & call :Report + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - OPTIONAL & call :ReportHeader +set filename=cppcheck.exe & call :Report +set filename=doxygen.exe & call :Report +set filename=gdb-config.exe & call :Report +set filename=wget.exe & call :Report +set filename=unzip.exe & call :Report + +:: ----------------------------------------------------------------------------- + +set header=MINGW CHECK - OPTIONAL & call :ReportHeader +if exist %MINGW_BASE_DIR% (echo Expected MinGW Base Dir = %MINGW_BASE_DIR%>>%REPORT_NAME% 2>&1) else (echo Expected MinGW Base Dir = %MINGW_BASE_DIR% - Not Found>>%REPORT_NAME% 2>&1) +echo.>>%REPORT_NAME% 2>&1 +set filename=mingw32-make.exe & set version_cmd=--version & set version_find="GNU Make" & call :ReportVersion +if exist %MINGW_BASE_DIR%\bin\gcc.exe (ECHO It is not recommended to have make.exe in mingw/bin.>>%REPORT_NAME% 2>&1 & echo.>>%REPORT_NAME% 2>&1) + +:: ----------------------------------------------------------------------------- + +set header=MAKE CHECK & call :ReportHeader +if exist Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_0% & goto MakeFound) +if exist ..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_1% & goto MakeFound) +if exist ..\..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_2% & goto MakeFound) + +echo No Makfile Found.>>%REPORT_NAME% 2>&1 +echo.>>%REPORT_NAME% 2>&1 +echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 + +goto ContinueAfterMake + +:MakeFound +call :RunMake + +:ContinueAfterMake +goto ExitBatch + +:ExitBatch + echo Done! + echo. + rem type %REPORT_NAME% + echo. + echo See %REPORT_NAME% for the report. + endlocal +exit /b + +:: ----------------------------------------------------------------------------- + +:RunMake + + echo Makfile Found.>>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 + set header=MAKE CLEAN & call :ReportHeader + echo Make Command = %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 + %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1 + set header=MAKE & call :ReportHeader + echo Make Command = %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 + %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1 + echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 +exit /b + +:ReportHeader + echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 + echo %header%>>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 +exit /b + +:Report + echo Filename = %filename% >>%REPORT_NAME% 2>&1 + >%REPORT_NAME% 2>&1 + where %filename% >>%REPORT_NAME% 2> NUL + if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReport) + + :EndReport + echo.>>%REPORT_NAME% 2>&1 + >%REPORT_NAME% 2>&1 + >%REPORT_NAME% 2>&1 + where %filename% >>%REPORT_NAME% 2> NUL + if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReportVersion) + >%REPORT_NAME% 2>&1 + + (%filename% %version_cmd% | find %version_find%) >>%REPORT_NAME% 2>&1 + + :EndReportVersion + echo.>>%REPORT_NAME% 2>&1 + Date: Wed, 14 Sep 2016 21:34:28 -0500 Subject: [PATCH 30/92] Fixed a last minute format bug. --- util/Win_Check_Output.bat | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/util/Win_Check_Output.bat b/util/Win_Check_Output.bat index 3d517d9403..f57083e6d9 100644 --- a/util/Win_Check_Output.bat +++ b/util/Win_Check_Output.bat @@ -1,6 +1,9 @@ @setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION @echo OFF set BAT_VERSION=v1.0 +set REPORT_NAME=Win_Check_Output.txt + +:: ----------------------------------------------------------------------------- cls @@ -10,7 +13,6 @@ echo QMK Windows Check Output %BAT_VERSION%.>%REPORT_NAME% :: ----------------------------------------------------------------------------- set MINGW_BASE_DIR=C:\MinGW -set REPORT_NAME=Win_Check_Output.txt set KEYMAP=atomic-pvc set KEYMAP_CLEAN=atomic-pvc-clean From bcc4213edcc5b09d2a55fa9ed705ef13ef48f7a8 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Wed, 14 Sep 2016 21:39:19 -0500 Subject: [PATCH 31/92] Marked the Win_Check_Output.txt file as ignored --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 07bbf13db1..153fea093c 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ CMakeLists.txt .idea .browse.VC.db* *.stackdump +util/Win_Check_Output.txt From 0d3ce58b6ba2afa16a1b566b4d06dbe01c39cf06 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Wed, 14 Sep 2016 22:53:23 -0500 Subject: [PATCH 32/92] Renamed to Win_Check, Removed SET for privacy. --- util/{Win_Check_Output.bat => Win_Check.bat} | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) rename util/{Win_Check_Output.bat => Win_Check.bat} (98%) diff --git a/util/Win_Check_Output.bat b/util/Win_Check.bat similarity index 98% rename from util/Win_Check_Output.bat rename to util/Win_Check.bat index f57083e6d9..28f89f10e2 100644 --- a/util/Win_Check_Output.bat +++ b/util/Win_Check.bat @@ -44,6 +44,7 @@ set header=CURRENT DIRECTORY & call :ReportHeader echo %CD%>>%REPORT_NAME% 2>&1 echo.>>%REPORT_NAME% 2>&1 + :: ----------------------------------------------------------------------------- set header=CURRENT PATHS & call :ReportHeader @@ -54,10 +55,10 @@ echo.>>%REPORT_NAME% 2>&1 :: ----------------------------------------------------------------------------- -set header=CURRENT ENVIRONMENTAL SETTINGS & call :ReportHeader +rem set header=CURRENT ENVIRONMENTAL SETTINGS & call :ReportHeader -set>>%REPORT_NAME% 2>&1 -echo.>>%REPORT_NAME% 2>&1 +rem set>>%REPORT_NAME% 2>&1 +rem echo.>>%REPORT_NAME% 2>&1 :: ----------------------------------------------------------------------------- From 4f5f5f0103eab40fe6621cf58f4f5b8dcffda9bd Mon Sep 17 00:00:00 2001 From: IBNobody Date: Thu, 15 Sep 2016 07:59:14 -0500 Subject: [PATCH 33/92] Fixed Win_Check Verbose mode. --- util/Win_Check.bat | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/Win_Check.bat b/util/Win_Check.bat index 28f89f10e2..fcf452d42c 100644 --- a/util/Win_Check.bat +++ b/util/Win_Check.bat @@ -19,7 +19,7 @@ set KEYMAP_CLEAN=atomic-pvc-clean :: ----------------------------------------------------------------------------- -if %0 == VERBOSE (goto :Verbose_Make) else (goto :Normal_Make) +if %1 == VERBOSE (goto :Verbose_Make) else (goto :Normal_Make) :Normal_Make set MAKE_CMD_LEVEL_0=make -r -f Makefile COLOR=FALSE @@ -127,7 +127,7 @@ set header=MINGW CHECK - OPTIONAL & call :ReportHeader if exist %MINGW_BASE_DIR% (echo Expected MinGW Base Dir = %MINGW_BASE_DIR%>>%REPORT_NAME% 2>&1) else (echo Expected MinGW Base Dir = %MINGW_BASE_DIR% - Not Found>>%REPORT_NAME% 2>&1) echo.>>%REPORT_NAME% 2>&1 set filename=mingw32-make.exe & set version_cmd=--version & set version_find="GNU Make" & call :ReportVersion -if exist %MINGW_BASE_DIR%\bin\gcc.exe (ECHO It is not recommended to have make.exe in mingw/bin.>>%REPORT_NAME% 2>&1 & echo.>>%REPORT_NAME% 2>&1) +if exist %MINGW_BASE_DIR%\bin\make.exe (ECHO It is not recommended to have make.exe in mingw/bin.>>%REPORT_NAME% 2>&1 & echo.>>%REPORT_NAME% 2>&1) :: ----------------------------------------------------------------------------- From 24e8d01dc93c7367fbc58b79955b7c4ef6899c61 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Thu, 15 Sep 2016 11:28:12 -0400 Subject: [PATCH 34/92] Move ALT... --- keyboards/planck/keymaps/cbbrowne/keymap.c | 3 ++- keyboards/planck/keymaps/cbbrowne/readme.md | 19 +++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index d6f8a6ed48..26a99a4e74 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -92,6 +92,7 @@ enum macro_id { #define RANDALP M(M_RANDLETTER) #define CTLENTER MT(MOD_RCTL, KC_ENT) #define SHIFTQUOTE MT(MOD_RSFT, KC_QUOT) +#define ALTRIGHT MT(MOD_LALT, KC_RGHT) /* Note that Planck has dimensions 4 rows x 12 columns */ @@ -101,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, CTLENTER}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SHIFTQUOTE }, - {KC_TAB, ROT_LED, KC_LALT, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_TAB, KC_LALT, ROT_LED, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, ALTRIGHT} /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */ }, [_RAISE] = { /* RAISE */ diff --git a/keyboards/planck/keymaps/cbbrowne/readme.md b/keyboards/planck/keymaps/cbbrowne/readme.md index 272e042a0d..184142e0c1 100644 --- a/keyboards/planck/keymaps/cbbrowne/readme.md +++ b/keyboards/planck/keymaps/cbbrowne/readme.md @@ -27,10 +27,23 @@ doing sundry experimentation: * Trying out sgoodwin's "hold Enter down to get Shift" - Liking this Quite Well Enough... - Applied this to both Shift and Quote + - It seems likely that Alt should get a right-hand-side, akin to this... + - Alt needs to move, and get a RHS + - Hence ALTRIGHT, and shifted ROT_LED over + - Emacs likes this!!! :-) + - I'm suspicious that I'll want to shift ROT_LED another location over, + so some modifier can replace the OS/KC_LGUI key * I have added an alternate ADJUST layer that is activated via update_tri_layer() - e.g. - LOWER+RAISE simultaneously - This seems entirely more useful for handling my "special keys" like the random numbers, user name, and such, than the keypad layer + * The _ADJUST layer provides a good place to have RESET + - But this isn't strictly enough; I want RESET somewhat accessible from + main layer lest an error hide that layer + - I never use the OS/KC_LGUI key (that's Command on MacOS, Windows + Key on Windows), so that's a good place to have it as a chord of + some sort + 2. Some code structure ideas --------------------------------------------------- @@ -49,8 +62,8 @@ doing sundry experimentation: only need to fit 4 symbols onto each line, rather than 12. I used enums to manage layer IDs and macro IDs so that I don't need - to care (beyond "start at 0", and arguably that's not needed) about - their values. + to care (beyond "start at 0", and arguably even that's not needed) + about their values. 3. Things I did not like about the default mapping --------------------------------------------------------- @@ -83,8 +96,6 @@ unwise things again... to allow selecting multiple items, and this really interferes with that - - 5. TODO --------------------------------------------------------- From e50f15e36019fa39798bbe4e001fe7d2c94c88e7 Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Thu, 15 Sep 2016 10:58:28 -0500 Subject: [PATCH 35/92] Add IGNORE_MOD_TAP_INTERRUPT to fix overloaded mod keys sending mod on diads... --- keyboards/atreus/keymaps/erlandsona/config.h | 11 +++++++---- keyboards/atreus/keymaps/erlandsona/keymap.c | 16 ++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/keyboards/atreus/keymaps/erlandsona/config.h b/keyboards/atreus/keymaps/erlandsona/config.h index 6f0d258f50..bf09bf23aa 100644 --- a/keyboards/atreus/keymaps/erlandsona/config.h +++ b/keyboards/atreus/keymaps/erlandsona/config.h @@ -21,13 +21,16 @@ along with this program. If not, see . #include "config_common.h" - - /* Make Overloaded Keys switch faster */ #define TAPPING_TERM 175 - - +/* this makes it possible to do rolling combos (zx) + * with keys that convert to other keys on hold + * (z becomes ctrl when you hold it, + * and when this option isn't enabled, + * z rapidly followed by x actually sends Ctrl-x. That's bad.) + */ +#define IGNORE_MOD_TAP_INTERRUPT /* USB Device descriptor parameter */ diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c index 9e11ac048e..7807eb2245 100644 --- a/keyboards/atreus/keymaps/erlandsona/keymap.c +++ b/keyboards/atreus/keymaps/erlandsona/keymap.c @@ -18,16 +18,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [BASE] = KEYMAP( /* Qwerty */ - KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , - KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , - SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_QUOT), - KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, ALT_T(KC_ESC), CTL_T(KC_ENT), KC_SPC, F(NUMS), KC_RALT, KC_SLSH, KC_BSLS ), + KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , + ALT_T(KC_A), KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , + SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_QUOT), + KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, KC_ESC, KC_ENT, KC_SPC, F(NUMS), KC_RALT, KC_SLSH, KC_BSLS ), [NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */ - KC_GRV , KC_7 , KC_8 , KC_9 , KC_0 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC, - KC_TAB , KC_4 , KC_5 , KC_6 , KC_DLR, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, - _______, KC_1 , KC_2 , KC_3 , KC_DOT, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, - _______, _______, _______, _______, KC_DEL, F(MOUS), _______, _______, _______, _______, _______, _______), + KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC, + ALT_T(KC_TAB), KC_5 , KC_6 , KC_7 , KC_8 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, + _______ , KC_9 , KC_0 , KC_DOT , KC_COMM, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, + _______ , _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, _______, _______, _______), [MOUS] = KEYMAP( /* Mouse and Media Keys */ KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, From ac6125cbea0ef2cfb9e8c79b89659128f60f0853 Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Thu, 15 Sep 2016 11:19:54 -0500 Subject: [PATCH 36/92] Revert because the IGNORE_MOD_TAP_INTERRUPT flag didn't feel right. --- keyboards/atreus/keymaps/erlandsona/config.h | 10 +--------- keyboards/atreus/keymaps/erlandsona/keymap.c | 10 +++++----- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/keyboards/atreus/keymaps/erlandsona/config.h b/keyboards/atreus/keymaps/erlandsona/config.h index bf09bf23aa..d9eb1903ed 100644 --- a/keyboards/atreus/keymaps/erlandsona/config.h +++ b/keyboards/atreus/keymaps/erlandsona/config.h @@ -22,15 +22,7 @@ along with this program. If not, see . /* Make Overloaded Keys switch faster */ -#define TAPPING_TERM 175 - -/* this makes it possible to do rolling combos (zx) - * with keys that convert to other keys on hold - * (z becomes ctrl when you hold it, - * and when this option isn't enabled, - * z rapidly followed by x actually sends Ctrl-x. That's bad.) - */ -#define IGNORE_MOD_TAP_INTERRUPT +#define TAPPING_TERM 150 /* USB Device descriptor parameter */ diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c index 7807eb2245..32c8826e02 100644 --- a/keyboards/atreus/keymaps/erlandsona/keymap.c +++ b/keyboards/atreus/keymaps/erlandsona/keymap.c @@ -19,15 +19,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [BASE] = KEYMAP( /* Qwerty */ KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , - ALT_T(KC_A), KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , + KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_QUOT), KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, KC_ESC, KC_ENT, KC_SPC, F(NUMS), KC_RALT, KC_SLSH, KC_BSLS ), [NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */ - KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC, - ALT_T(KC_TAB), KC_5 , KC_6 , KC_7 , KC_8 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, - _______ , KC_9 , KC_0 , KC_DOT , KC_COMM, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, - _______ , _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, _______, _______, _______), + KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC, + KC_TAB , KC_5 , KC_6 , KC_7 , KC_8 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, + _______, KC_9 , KC_0 , KC_DOT , KC_COMM, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, + _______, _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, _______, _______, _______), [MOUS] = KEYMAP( /* Mouse and Media Keys */ KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, From 39cbf1c221fbd6886bf098cb570785a110e1a781 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Thu, 15 Sep 2016 19:49:29 -0500 Subject: [PATCH 37/92] Fixed Batch Syntax on different versions of Windows --- util/Win_Check.bat | 110 ++++++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/util/Win_Check.bat b/util/Win_Check.bat index fcf452d42c..3fdb656f9c 100644 --- a/util/Win_Check.bat +++ b/util/Win_Check.bat @@ -19,7 +19,7 @@ set KEYMAP_CLEAN=atomic-pvc-clean :: ----------------------------------------------------------------------------- -if %1 == VERBOSE (goto :Verbose_Make) else (goto :Normal_Make) +if /I "%1" EQU VERBOSE (goto :Verbose_Make) else (goto :Normal_Make) :Normal_Make set MAKE_CMD_LEVEL_0=make -r -f Makefile COLOR=FALSE @@ -39,7 +39,7 @@ goto :Start_Report :: ----------------------------------------------------------------------------- -set header=CURRENT DIRECTORY & call :ReportHeader +set HEADER=CURRENT DIRECTORY & call :ReportHeader echo %CD%>>%REPORT_NAME% 2>&1 @@ -47,7 +47,7 @@ echo.>>%REPORT_NAME% 2>&1 :: ----------------------------------------------------------------------------- -set header=CURRENT PATHS & call :ReportHeader +set HEADER=CURRENT PATHS & call :ReportHeader for %%A in ("%path:;=";"%") do (echo %%~A>>%REPORT_NAME% 2>&1) @@ -55,83 +55,83 @@ echo.>>%REPORT_NAME% 2>&1 :: ----------------------------------------------------------------------------- -rem set header=CURRENT ENVIRONMENTAL SETTINGS & call :ReportHeader +rem set HEADER=CURRENT ENVIRONMENTAL SETTINGS & call :ReportHeader rem set>>%REPORT_NAME% 2>&1 rem echo.>>%REPORT_NAME% 2>&1 :: ----------------------------------------------------------------------------- -set header=KEY EXECUTABLE LOCATIONS - GENERAL & call :ReportHeader +set HEADER=KEY EXECUTABLE LOCATIONS - GENERAL & call :ReportHeader -set filename=make.exe & set version_cmd=--version & set version_find="GNU Make" & call :ReportVersion -set filename=git.exe & set version_cmd=--version & set version_find="git" & call :ReportVersion -set filename=cmp.exe & set version_cmd=--version & set version_find="cmp" & call :ReportVersion +set FILENAME=make.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU Make" & call :ReportVersion +set FILENAME=git.exe & set VERSION_CMD=--version & set VERSION_FIND="git" & call :ReportVersion +set FILENAME=cmp.exe & set VERSION_CMD=--version & set VERSION_FIND="cmp" & call :ReportVersion :: ----------------------------------------------------------------------------- -set header=EXECUTABLE LOCATIONS - AVR MCU COMPILERS & call :ReportHeader +set HEADER=EXECUTABLE LOCATIONS - AVR MCU COMPILERS & call :ReportHeader -set filename=avr-gcc.exe & set version_cmd=--version & set version_find="avr" & call :ReportVersion -set filename=avr-objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion -set filename=avr-objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion -set filename=avr-size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion -set filename=avr-ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion -set filename=avr-nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion +set FILENAME=avr-gcc.exe & set VERSION_CMD=--version & set VERSION_FIND="avr" & call :ReportVersion +set FILENAME=avr-objcopy.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objcopy" & call :ReportVersion +set FILENAME=avr-objdump.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objdump" & call :ReportVersion +set FILENAME=avr-size.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU size" & call :ReportVersion +set FILENAME=avr-ar.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU ar" & call :ReportVersion +set FILENAME=avr-nm.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU nm" & call :ReportVersion :: ----------------------------------------------------------------------------- -set header=EXECUTABLE LOCATIONS - ARM MCU COMPILERS & call :ReportHeader +set HEADER=EXECUTABLE LOCATIONS - ARM MCU COMPILERS & call :ReportHeader -set filename=arm-none-eabi-gcc.exe & set version_cmd=--version & set version_find="arm-none-eabi-gcc" & call :ReportVersion -set filename=arm-none-eabi-objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion -set filename=arm-none-eabi-objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion -set filename=arm-none-eabi-size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion -set filename=arm-none-eabi-ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion -set filename=arm-none-eabi-nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion +set FILENAME=arm-none-eabi-gcc.exe & set VERSION_CMD=--version & set VERSION_FIND="arm-none-eabi-gcc" & call :ReportVersion +set FILENAME=arm-none-eabi-objcopy.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objcopy" & call :ReportVersion +set FILENAME=arm-none-eabi-objdump.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objdump" & call :ReportVersion +set FILENAME=arm-none-eabi-size.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU size" & call :ReportVersion +set FILENAME=arm-none-eabi-ar.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU ar" & call :ReportVersion +set FILENAME=arm-none-eabi-nm.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU nm" & call :ReportVersion :: ----------------------------------------------------------------------------- -set header=EXECUTABLE LOCATIONS - NATIVE COMPILERS & call :ReportHeader +set HEADER=EXECUTABLE LOCATIONS - NATIVE COMPILERS & call :ReportHeader -set filename=gcc.exe & set version_cmd=--version & set version_find="gcc" & call :ReportVersion -set filename=objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion -set filename=objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion -set filename=size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion -set filename=ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion -set filename=nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion +set FILENAME=gcc.exe & set VERSION_CMD=--version & set VERSION_FIND="gcc" & call :ReportVersion +set FILENAME=objcopy.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objcopy" & call :ReportVersion +set FILENAME=objdump.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objdump" & call :ReportVersion +set FILENAME=size.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU size" & call :ReportVersion +set FILENAME=ar.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU ar" & call :ReportVersion +set FILENAME=nm.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU nm" & call :ReportVersion :: ----------------------------------------------------------------------------- -set header=EXECUTABLE LOCATIONS - PROGRAMMERS & call :ReportHeader +set HEADER=EXECUTABLE LOCATIONS - PROGRAMMERS & call :ReportHeader -set filename=dfu-programmer.exe & set version_cmd=--version & set version_find="dfu" & call :ReportVersion -set filename=batchisp.exe & set version_cmd=-version & set version_find="batchisp" & call :ReportVersion -set filename=dfu-util.exe & call :Report -set filename=teensy_loader_cli.exe & call :Report -set filename=hid_bootloader_cli.exe & call :Report -set filename=avrdude.exe & call :Report +set FILENAME=dfu-programmer.exe & set VERSION_CMD=--version & set VERSION_FIND="dfu" & call :ReportVersion +set FILENAME=batchisp.exe & set VERSION_CMD=-version & set VERSION_FIND="batchisp" & call :ReportVersion +set FILENAME=dfu-util.exe & call :Report +set FILENAME=teensy_loader_cli.exe & call :Report +set FILENAME=hid_bootloader_cli.exe & call :Report +set FILENAME=avrdude.exe & call :Report :: ----------------------------------------------------------------------------- -set header=EXECUTABLE LOCATIONS - OPTIONAL & call :ReportHeader -set filename=cppcheck.exe & call :Report -set filename=doxygen.exe & call :Report -set filename=gdb-config.exe & call :Report -set filename=wget.exe & call :Report -set filename=unzip.exe & call :Report +set HEADER=EXECUTABLE LOCATIONS - OPTIONAL & call :ReportHeader +set FILENAME=cppcheck.exe & call :Report +set FILENAME=doxygen.exe & call :Report +set FILENAME=gdb-config.exe & call :Report +set FILENAME=wget.exe & call :Report +set FILENAME=unzip.exe & call :Report :: ----------------------------------------------------------------------------- -set header=MINGW CHECK - OPTIONAL & call :ReportHeader +set HEADER=MINGW CHECK - OPTIONAL & call :ReportHeader if exist %MINGW_BASE_DIR% (echo Expected MinGW Base Dir = %MINGW_BASE_DIR%>>%REPORT_NAME% 2>&1) else (echo Expected MinGW Base Dir = %MINGW_BASE_DIR% - Not Found>>%REPORT_NAME% 2>&1) echo.>>%REPORT_NAME% 2>&1 -set filename=mingw32-make.exe & set version_cmd=--version & set version_find="GNU Make" & call :ReportVersion +set FILENAME=mingw32-make.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU Make" & call :ReportVersion if exist %MINGW_BASE_DIR%\bin\make.exe (ECHO It is not recommended to have make.exe in mingw/bin.>>%REPORT_NAME% 2>&1 & echo.>>%REPORT_NAME% 2>&1) :: ----------------------------------------------------------------------------- -set header=MAKE CHECK & call :ReportHeader +set HEADER=MAKE CHECK & call :ReportHeader if exist Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_0% & goto MakeFound) if exist ..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_1% & goto MakeFound) if exist ..\..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_2% & goto MakeFound) @@ -140,13 +140,13 @@ echo No Makfile Found.>>%REPORT_NAME% 2>&1 echo.>>%REPORT_NAME% 2>&1 echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 -goto ContinueAfterMake +goto :ContinueAfterMake :MakeFound call :RunMake :ContinueAfterMake -goto ExitBatch +goto :ExitBatch :ExitBatch echo Done! @@ -163,11 +163,11 @@ exit /b echo Makfile Found.>>%REPORT_NAME% 2>&1 echo.>>%REPORT_NAME% 2>&1 - set header=MAKE CLEAN & call :ReportHeader + set HEADER=MAKE CLEAN & call :ReportHeader echo Make Command = %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1 echo.>>%REPORT_NAME% 2>&1 %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1 - set header=MAKE & call :ReportHeader + set HEADER=MAKE & call :ReportHeader echo Make Command = %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1 echo.>>%REPORT_NAME% 2>&1 %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1 @@ -178,14 +178,14 @@ exit /b :ReportHeader echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 echo.>>%REPORT_NAME% 2>&1 - echo %header%>>%REPORT_NAME% 2>&1 + echo %HEADER%>>%REPORT_NAME% 2>&1 echo.>>%REPORT_NAME% 2>&1 exit /b :Report - echo Filename = %filename% >>%REPORT_NAME% 2>&1 + echo Filename = %FILENAME% >>%REPORT_NAME% 2>&1 >%REPORT_NAME% 2>&1 - where %filename% >>%REPORT_NAME% 2> NUL + where %FILENAME% >>%REPORT_NAME% 2> NUL if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReport) :EndReport @@ -194,13 +194,13 @@ exit /b exit /b :ReportVersion - echo Filename = %filename% >>%REPORT_NAME% 2>&1 + echo Filename = %FILENAME% >>%REPORT_NAME% 2>&1 >%REPORT_NAME% 2>&1 - where %filename% >>%REPORT_NAME% 2> NUL + where %FILENAME% >>%REPORT_NAME% 2> NUL if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReportVersion) >%REPORT_NAME% 2>&1 - (%filename% %version_cmd% | find %version_find%) >>%REPORT_NAME% 2>&1 + (%FILENAME% %VERSION_CMD% | find %VERSION_FIND%) >>%REPORT_NAME% 2>&1 :EndReportVersion echo.>>%REPORT_NAME% 2>&1 From bbf06d516a2946816e2ad53798dac7ee901ad25b Mon Sep 17 00:00:00 2001 From: IBNobody Date: Thu, 15 Sep 2016 21:44:03 -0500 Subject: [PATCH 38/92] Added notes on vagrant file fixes, UPRINT --- doc/VAGRANT_GUIDE.md | 3 ++- readme.md | 26 ++++++++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/doc/VAGRANT_GUIDE.md b/doc/VAGRANT_GUIDE.md index c9958e16b5..439e78da7d 100644 --- a/doc/VAGRANT_GUIDE.md +++ b/doc/VAGRANT_GUIDE.md @@ -6,7 +6,8 @@ This project includes a Vagrantfile that will allow you to build a new firmware Using the `/Vagrantfile` in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as [VirtualBox](https://www.virtualbox.org/) (or [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware) but the (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion). -*COMPATIBILITY NOTICE* Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. +*COMPATIBILITY NOTICE* Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. **Alternately, you can try running the following command:** `vagrant plugin install vagrant-vbguest` + Other than having Vagrant and Virtualbox installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start a Linux virtual machine that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below. diff --git a/readme.md b/readme.md index 20be105dd7..ea20b5e017 100644 --- a/readme.md +++ b/readme.md @@ -72,9 +72,11 @@ Here are the steps 3. If you are going to flash Infinity based keyboards you will need to install dfu-util, refer to the instructions by [Input Club](https://github.com/kiibohd/controller/wiki/Loading-DFU-Firmware). 4. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location. 5. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer. -6. Double-click on the 1-setup-path-win batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up. -7. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete! -8. Future build commands should be run from the MHV AVR Shell, which sets up an environment compatible with colorful build output. The standard Command Prompt will also work, but add `COLOR=false` to the end of all make commands when using it. +6. Open the `\util` folder. +7. Double-click on the `1-setup-path-win` batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up. +8. Right-click on the `2-setup-environment-win` batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete! + +If you have trouble and want to ask for help, it is useful to generate a *Win_Check_Output.txt* file by running `Win_Check.bat` in the `\util` folder. ### Mac If you're using [homebrew,](http://brew.sh/) you can use the following commands: @@ -278,11 +280,23 @@ This allows you to use the system and audio control key codes. `CONSOLE_ENABLE` -This allows you to print messages that can be read using [`hid_listen`](https://www.pjrc.com/teensy/hid_listen.html). Add this to your `Makefile`, and set it to `yes`. Then put `println`, `printf`, etc. in your keymap or anywhere in the `qmk` source. Finally, open `hid_listen` and enjoy looking at your printed messages. +This allows you to print messages that can be read using [`hid_listen`](https://www.pjrc.com/teensy/hid_listen.html). + +By default, all debug (*dprint*) print (*print*, *xprintf*), and user print (*uprint*) messages will be enabled. This will eat up a significant portion of the flash and may make the keyboard .hex file too big to program. + +To disable debug messages (*dprint*) and reduce the .hex file size, include `#define NO_DEBUG` in your `config.h` file. + +To disable print messages (*print*, *xprintf*) and user print messages (*uprint*) and reduce the .hex file size, include `#define NO_PRINT` in your `config.h` file. + +To disable print messages (*print*, *xprintf*) and **KEEP** user print messages (*uprint*), include `#define USER_PRINT` in your `config.h` file. + +To see the text, open `hid_listen` and enjoy looking at your printed messages. + +**NOTE:** Do not include *uprint* messages in anything other than your keymap code. It must not be used within the QMK system framework. Otherwise, you will bloat other people's .hex files. `COMMAND_ENABLE` -TODO +This enables magic commands, typically fired with the default magic key combo `LSHIFT+RSHIFT+KEY`. Magic commands include turning on debugging messages (`MAGIC+D`) or temporarily toggling NKRO (`MAGIC+N`). `SLEEP_LED_ENABLE` @@ -290,7 +304,7 @@ Enables your LED to breath while your computer is sleeping. Timer1 is being used `NKRO_ENABLE` -This allows for n-key rollover (default is 6) to be enabled. It is off by default, but can be forced by adding `#define FORCE_NKRO` to your config.h. +This allows the keyboard to tell the host OS that up to 248 keys are held down at once (default without NKRO is 6). NKRO is off by default, even if `NKRO_ENABLE` is set. NKRO can be forced by adding `#define FORCE_NKRO` to your config.h or by binding `MAGIC_TOGGLE_NKRO` to a key and then hitting the key. `BACKLIGHT_ENABLE` From cc7604d11670cf3155d53f0019557b249b1192c0 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Fri, 16 Sep 2016 17:15:33 -0400 Subject: [PATCH 39/92] Add breathing, as initial implementation with the RAISE/LOWER keys. And throw in extra macros to shorten keymaps --- keyboards/planck/keymaps/cbbrowne/config.h | 5 +++-- keyboards/planck/keymaps/cbbrowne/keymap.c | 17 +++++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/config.h b/keyboards/planck/keymaps/cbbrowne/config.h index 58cd2cc5bc..1e04ba61d7 100644 --- a/keyboards/planck/keymaps/cbbrowne/config.h +++ b/keyboards/planck/keymaps/cbbrowne/config.h @@ -3,6 +3,9 @@ #include "../../config.h" +#define LEADER_TIMEOUT 300 +#define BACKLIGHT_BREATHING + /* cbbrowne user configuration */ #define randadd 53 @@ -16,5 +19,3 @@ #endif - - diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 26a99a4e74..7f1601af75 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -93,6 +93,7 @@ enum macro_id { #define CTLENTER MT(MOD_RCTL, KC_ENT) #define SHIFTQUOTE MT(MOD_RSFT, KC_QUOT) #define ALTRIGHT MT(MOD_LALT, KC_RGHT) +#define MVERSION M(M_VERSION) /* Note that Planck has dimensions 4 rows x 12 columns */ @@ -116,16 +117,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, RESET, _______}, {_______, KEYPAD, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, + }, [_KEYPAD] = { /* Key Pad */ - {KC_ESC, USERNAME, M(M_VERSION), KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, + {KC_ESC, USERNAME, MVERSION, KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, {KC_LCTL, RANDDIG, KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, {KC_LSFT, RANDALP, KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, - {BL_STEP, ROT_LED, KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, QWERTY, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} + {KC_TAB, KC_LALT, ROT_LED, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, QWERTY, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} }, [_ADJUST] = { /* Adjustments - gonna shift the wild tools in here */ - { ROT_LED, USERNAME, M(M_VERSION), _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + {ROT_LED,USERNAME,MVERSION, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, {_______, RANDDIG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, {_______, RANDALP, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______ }, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } @@ -198,6 +199,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) if (record->event.pressed) { layer_on(_RAISE); +#ifdef BACKLIGHT_ENABLE + breathing_speed_set(2); + breathing_pulse(); +#endif update_tri_layer(_LOWER, _RAISE, _ADJUST); } else @@ -210,6 +215,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) if (record->event.pressed) { layer_on(_LOWER); +#ifdef BACKLIGHT_ENABLE + breathing_speed_set(2); + breathing_pulse(); +#endif update_tri_layer(_LOWER, _RAISE, _ADJUST); } else From 602b058b9e1ebbe043754e39007cf01427872770 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sat, 17 Sep 2016 19:40:56 +0200 Subject: [PATCH 40/92] - Added capslock led for KC60 keyboard (based on gitbug.com/jpec/kc60 works) --- .../kc60/keymaps/dbroqua_hhkb_like/keymap.c | 103 ++++++++++++++++++ .../kc60/keymaps/dbroqua_hhkb_like/readme.md | 11 ++ 2 files changed, 114 insertions(+) create mode 100644 keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c create mode 100644 keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md diff --git a/keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c b/keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c new file mode 100644 index 0000000000..0c952327b9 --- /dev/null +++ b/keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c @@ -0,0 +1,103 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "kc60.h" + +#define _QWERTY 0 +#define _FNCAPS 1 +#define _FNRIGHTSHIFT 2 + +// Fillers to make layering more clear +#define ______ KC_TRNS +#define XXXXXXX KC_NO + +// Func macro definitions. +#define S_LED FUNC(0) +#define S_LEDI FUNC(1) +#define S_LEDD FUNC(2) + +// Enable these functions using FUNC(n) macro. +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_BACKLIGHT_TOGGLE(), + [1] = ACTION_BACKLIGHT_INCREASE(), + [2] = ACTION_BACKLIGHT_DECREASE() + }; + +/* + * | | | + * | | | + * | | | + * | | | + * | | + */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Qwerty + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + * |-----------------------------------------------------------------------------------------+ + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / | Up | FN2 | + * |-----------------------------------------------------------------------------------------+ + * | FN1 | Gui | Alt | Space | AltGr | Left | Down | Right | + * `-----------------------------------------------------------------------------------------' + */ + [0] = KEYMAP( /* Basic QWERTY */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \ + KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_FNRIGHTSHIFT), KC_UP, \ + LT(_FNCAPS, KC_CAPS), KC_LGUI, KC_LALT, KC_SPC, KC_GRV, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT \ + ), + +/* Layer 1 + * ,-----------------------------------------------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | Psc | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | Led | Led-| Led+| | Mute| Vol+| Vol-| | | | Play | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | Prev | Stop | Next | + * `-----------------------------------------------------------------------------------------' + */ + [_FNCAPS] = KEYMAP( /* Layer 1 */ + ______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, \ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ + ______, ______, ______, ______, ______, ______, ______, KC_PSCR,______, ______, ______, ______, ______, ______, \ + ______, ______, S_LED, S_LEDI, S_LEDD,______,KC_MUTE,KC_VOLU,KC_VOLD,______, ______, ______, ______,KC_MPLY, \ + ______, ______, ______, ______, KC_DEL, ______, KC_MPRV, KC_MSTP, KC_MNXT \ + ), + +/* Layer 2 + * ,-----------------------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | PgUp | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | Home | PgDown| End | + * `-----------------------------------------------------------------------------------------' + */ + [_FNRIGHTSHIFT] = KEYMAP( /* Layer 2 */ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_PGUP, \ + ______, ______, ______, ______, ______, ______, KC_HOME,KC_PGDN,KC_END \ + ), +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + return MACRO_NONE; +}; diff --git a/keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md b/keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md new file mode 100644 index 0000000000..c7850c37ce --- /dev/null +++ b/keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md @@ -0,0 +1,11 @@ +# Dbroqua HHKB like Layout + +* Online keyboard layout editor: *Coming soon* +* Online keyboard layout editor (caps layer): http://www.keyboard-layout-editor.com/#/gists/4136d4d1555d6f0d9403c21aaf50fd37 +* Online keyboard layout editor (fn2 layer): http://www.keyboard-layout-editor.com/#/gists/cf4955f73f339020dbb41c15364e7e4f + +# Programming Instructions: +Enter into programming mode and run the following command. +``` +$ sudo KEYMAP=dbroqua_hhkb_like make dfu +``` \ No newline at end of file From 3e128552d92714ff86d4378b4e3acccc62d6f132 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sun, 18 Sep 2016 11:48:47 +0200 Subject: [PATCH 41/92] Update the ergodox/algernon keymap to v1.7 Overall changes =============== * The number row has been completely rearranged on both the **Base** and the **ADORE** layers. * The number/function key behavior was changed: function keys are now on the **Media**. * The `:`/`;` and `-`/`_` keys were put back to their thumb position on the bottom row, on both the **Base** and **ADORE** layers. * The bottom large keys on the inner side of each half now function as [tmux](http://tmux.github.io/) keys: the left to send the prefix, the right to send the `display-panes` key. The left also doubles as a GNU screen prefix key, and sends `C-a` when double tapped. * A number of functions, such as the **AppSel** layer, now require the `hid-commands` tool to be running, with the output of `hid_listen` being piped to it. ADORE ===== * `Y` and `X` have been swapped again. Media/Navigation layer ====================== * The function keys are now on this layer. * Mouse keys have been removed. * Media start/stop/prev/next have been removed. * `Print screen` has been removed. * There is only one screen lock key now. Heatmap ======= * Fixed a few issues in the finger-stats calculation. * The tool now also timestamps and saves all input lines to a logfile, which it loads on start, allowing one to continue the collection after upgrading the tool. * The heatmap tool will now colorize the stats by default. * The periodic stats are now printed in a more compact format. Tools ===== * Added a new tool, `tools/layer-notify` that listens to layer change events on the HID console, and pops up a notification on layer changes. * Another new tool, `tools/text-to-log.py` has been added that converts arbitrary text to a keylogger output, which can be fed to the heatmap generator. * A number of features have been moved to the `tools/hid-commands` utility. These generally are OS dependent, and are easier to implement on the software side. Signed-off-by: Gergely Nagy --- keyboards/ergodox/keymaps/algernon/Makefile | 4 +- .../keymaps/algernon/images/adore-layer.png | Bin 93893 -> 97225 bytes .../keymaps/algernon/images/base-layer.png | Bin 95204 -> 102142 bytes .../keymaps/algernon/images/heatmap.png | Bin 137912 -> 139351 bytes keyboards/ergodox/keymaps/algernon/keymap.c | 387 ++++++++---------- keyboards/ergodox/keymaps/algernon/readme.md | 76 ++-- .../algernon/tools/heatmap-layout.ADORE.json | 132 ++---- .../algernon/tools/heatmap-layout.Dvorak.json | 129 ++---- .../keymaps/algernon/tools/hid-commands | 61 +++ .../keymaps/algernon/tools/layer-notify | 12 + .../keymaps/algernon/tools/log-to-heatmap.py | 184 ++++++--- .../keymaps/algernon/tools/max-focused | 5 - .../keymaps/algernon/tools/text-to-log.py | 107 +++++ 13 files changed, 619 insertions(+), 478 deletions(-) create mode 100755 keyboards/ergodox/keymaps/algernon/tools/hid-commands create mode 100755 keyboards/ergodox/keymaps/algernon/tools/layer-notify delete mode 100755 keyboards/ergodox/keymaps/algernon/tools/max-focused create mode 100755 keyboards/ergodox/keymaps/algernon/tools/text-to-log.py diff --git a/keyboards/ergodox/keymaps/algernon/Makefile b/keyboards/ergodox/keymaps/algernon/Makefile index 7c2b3ad97c..699add3dda 100644 --- a/keyboards/ergodox/keymaps/algernon/Makefile +++ b/keyboards/ergodox/keymaps/algernon/Makefile @@ -7,7 +7,7 @@ CONSOLE_ENABLE = no TAP_DANCE_ENABLE = yes KEYLOGGER_ENABLE ?= yes UCIS_ENABLE = yes -MOUSEKEY_ENABLE ?= yes +MOUSEKEY_ENABLE = no AUTOLOG_ENABLE ?= no @@ -25,6 +25,8 @@ OPT_DEFS += -DKEYLOGGER_ENABLE CONSOLE_ENABLE = yes endif +OPT_DEFS += -DUSER_PRINT + KEYMAP_VERSION = $(shell \ if [ -d "${KEYMAP_PATH}/.git" ]; then \ cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \ diff --git a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png index 3d0a5fb20cd426a3a79d1b581b1a84d1cd71a8c1..b611fbc42a702ac135e9fa870aa664c8386a4f68 100644 GIT binary patch literal 97225 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 literal 93893 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 z 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 & MOD_BIT(KC_LSFT) || + ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { + if (record->event.pressed) + shifted[idx] = true; + } + + if (!shifted[idx]) { + kc = idx + KC_1; + } else { + switch (id) { + case A_8: + case A_9: + shifted[idx] = false; + return; + + case A_7: + kc = KC_2; + break; + case A_5: + kc = KC_8; + break; + case A_3: + kc = KC_6; + break; + case A_1: + kc = KC_4; + break; + + case A_0: + kc = KC_5; + break; + case A_2: + kc = KC_1; + break; + case A_4: + kc = KC_3; + break; + case A_6: + kc = KC_7; + break; + } + } if (record->event.pressed) { - kf_timers[code] = timer_read (); + register_code (kc); } else { - uint8_t kc_base; - - if (from_appsel) { - from_appsel = false; - return; - } - - if (kf_timers[code] && timer_elapsed (kf_timers[code]) > TAPPING_TERM) { - // Long press - kc_base = KC_F1; - } else { - kc_base = KC_1; - } - kf_timers[code] = 0; - code += kc_base; - - register_code (code); - unregister_code (code); + unregister_code (kc); + shifted[idx] = false; } } -static struct { - uint8_t idx; -} m_accel_state; - const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) { @@ -592,70 +606,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case HU_UEE: return ang_do_hun (record, KC_EQL, KC_U); -#if MOUSEKEY_ENABLE - /* Mouse movement */ - case A_MUL: - if (record->event.pressed) { - mousekey_on(KC_MS_UP); - mousekey_on(KC_MS_LEFT); - } else { - mousekey_off(KC_MS_UP); - mousekey_off(KC_MS_LEFT); - } - mousekey_send(); - break; - - case A_MUR: - if (record->event.pressed) { - mousekey_on(KC_MS_UP); - mousekey_on(KC_MS_RIGHT); - } else { - mousekey_off(KC_MS_UP); - mousekey_off(KC_MS_RIGHT); - } - mousekey_send(); - break; - - case A_MDL: - if (record->event.pressed) { - mousekey_on(KC_MS_DOWN); - mousekey_on(KC_MS_LEFT); - } else { - mousekey_off(KC_MS_DOWN); - mousekey_off(KC_MS_LEFT); - } - mousekey_send(); - break; - - case A_MDR: - if (record->event.pressed) { - mousekey_on(KC_MS_DOWN); - mousekey_on(KC_MS_RIGHT); - } else { - mousekey_off(KC_MS_DOWN); - mousekey_off(KC_MS_RIGHT); - } - mousekey_send(); - break; - - case A_ACL0 ... A_ACL2: - if (record->event.pressed) { - uint8_t idx = id - A_ACL0; - if (m_accel_state.idx == id) { - mousekey_off(m_accel_state.idx - A_ACL0 + KC_ACL0); - m_accel_state.idx = 0; - } else { - if (m_accel_state.idx) { - mousekey_off(m_accel_state.idx - A_ACL0 + KC_ACL0); - m_accel_state.idx = 0; - } - mousekey_on(KC_ACL0 + idx); - m_accel_state.idx = id; - } - } - break; -#endif - /* Plover base */ case A_PLVR: toggle_steno(record->event.pressed); @@ -667,7 +617,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) register_code (KC_LGUI); if (record->tap.count && !record->tap.interrupted) { if (record->tap.count >= 2) { - register_code (KC_W); layer_on (APPSEL); set_oneshot_layer (APPSEL, ONESHOT_START); } @@ -678,7 +627,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } else { if (record->tap.count >= 2) { - unregister_code (KC_W); clear_oneshot_layer_state (ONESHOT_PRESSED); } gui_timer = timer_read (); @@ -686,43 +634,39 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case APP_SLK: - from_appsel = true; - return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END); + if (record->event.pressed) + uprintf("CMD:appsel_slack\n"); + break; case APP_EMCS: - from_appsel = true; - return MACRODOWN(T(G), T(N), T(U), T(SPC), T(E), T(M), T(A), T(C), T(S), T(SPC), T(2), T(4), T(ENT), END); + if (record->event.pressed) + uprintf("CMD:appsel_emacs\n"); + break; case APP_TERM: - from_appsel = true; - if (!record->event.pressed) { - register_code(KC_ESC); - unregister_code(KC_ESC); - wait_ms(TAPPING_TERM + 25); - register_code(KC_DEL); - unregister_code(KC_DEL); - } + if (record->event.pressed) + uprintf("CMD:appsel_term\n"); break; case APP_CHRM: - from_appsel = true; - return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END); + if (record->event.pressed) + uprintf("CMD:appsel_chrome\n"); + break; case APP_MSIC: - from_appsel = true; - return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END); + if (record->event.pressed) + uprintf("CMD:appsel_music\n"); + break; - /* Function keys */ - case KF_1 ... KF_10: - ang_handle_kf (record, id); + // number row and symbols + case A_1 ... A_0: + ang_handle_num_row(id, record); break; } return MACRO_NONE; }; -static uint8_t is_adore = 0; - // Runs just one time when the keyboard initializes. void matrix_init_user(void) { uint8_t dl; @@ -805,6 +749,36 @@ static void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data layer_off (ARRW); } +static void ang_tap_dance_tmux_finished (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code(KC_LALT); + register_code(KC_SPC); + unregister_code(KC_SPC); + unregister_code(KC_LALT); + } else { + register_code(KC_LCTL); + register_code(KC_A); + unregister_code(KC_A); + unregister_code(KC_LCTL); + } +} + +static void ang_tap_dance_tmux_pane_select (qk_tap_dance_state_t *state, void *user_data) { + uint8_t kc = KC_P; + + if (state->count >= 2) { + kc = KC_Z; + } + + register_code(KC_LALT); + register_code(KC_SPC); + unregister_code(KC_SPC); + unregister_code(KC_LALT); + + register_code(kc); + unregister_code(kc); +} + qk_tap_dance_action_t tap_dance_actions[] = { [CT_CLN] = ACTION_TAP_DANCE_DOUBLE (KC_COLN, KC_SCLN) ,[CT_TA] = { @@ -813,12 +787,23 @@ qk_tap_dance_action_t tap_dance_actions[] = { } ,[CT_LBP] = ACTION_TAP_DANCE_DOUBLE (KC_LBRC, KC_LPRN) ,[CT_RBP] = ACTION_TAP_DANCE_DOUBLE (KC_RBRC, KC_RPRN) + ,[CT_TMUX]= ACTION_TAP_DANCE_FN (ang_tap_dance_tmux_finished) + ,[CT_TPS] = ACTION_TAP_DANCE_FN (ang_tap_dance_tmux_pane_select) }; // Runs constantly in the background, in a loop. void matrix_scan_user(void) { + static uint32_t prev_layer_state; uint8_t layer = biton32(layer_state); bool is_arrow = false; + static char *layer_lookup[] = {"Dvorak", "ADORE", "Arrows", "AppSel", "Hungarian", "Nav/Media", "Plover"}; + + if (layer_state != prev_layer_state) { + prev_layer_state = layer_state; + if (layer_lookup[layer]) + uprintf("LAYER: %s\n", layer_lookup[layer]); + } + if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM) unregister_code (KC_LGUI); @@ -929,18 +914,7 @@ void matrix_scan_user(void) { } SEQ_TWO_KEYS (KC_W, KC_M) { - register_code (KC_LALT); - register_code (KC_F2); - unregister_code (KC_F2); - unregister_code (KC_LALT); - - wait_ms (1000); - - ang_tap (KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0); - register_code (KC_LGUI); - register_code (KC_UP); - unregister_code (KC_UP); - unregister_code (KC_LGUI); + uprintf("CMD:wm\n"); } SEQ_ONE_KEY (KC_A) { @@ -999,8 +973,11 @@ const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE bool process_record_user (uint16_t keycode, keyrecord_t *record) { #if KEYLOGGER_ENABLE if (log_enable) { - xprintf ("KL: col=%02d, row=%02d, pressed=%d, layer=%s\n", record->event.key.col, - record->event.key.row, record->event.pressed, (is_adore) ? "ADORE" : "Dvorak"); + uint8_t layer = biton32(layer_state); + + if ((layer == ADORE) || (layer == BASE)) + uprintf ("KL: col=%02d, row=%02d, pressed=%d, layer=%s\n", record->event.key.col, + record->event.key.row, record->event.pressed, (is_adore) ? "ADORE" : "Dvorak"); } #endif @@ -1047,8 +1024,8 @@ void qk_ucis_symbol_fallback (void) { for (uint8_t i = 0; i < qk_ucis_state.count - 1; i++) { uint8_t code; - if (qk_ucis_state.codes[i] > KF_1) - code = qk_ucis_state.codes[i] - KF_1 + KC_1; + if ((qk_ucis_state.codes[i] >= M(A_1)) && (qk_ucis_state.codes[i] <= M(A_0))) + code = qk_ucis_state.codes[i] - M(A_1) + KC_1; else code = qk_ucis_state.codes[i]; register_code(code); diff --git a/keyboards/ergodox/keymaps/algernon/readme.md b/keyboards/ergodox/keymaps/algernon/readme.md index 5e7adb3320..f15b676528 100644 --- a/keyboards/ergodox/keymaps/algernon/readme.md +++ b/keyboards/ergodox/keymaps/algernon/readme.md @@ -18,12 +18,11 @@ Some of the things in the layout only work when one uses [Spacemacs][spacemacs] * [Layouts](#layouts) - [Base layer](#base-layer) - [ADORE layer](#adore-layer) - - [Hungarian layer](#hungarian-layer) - - [Navigation and media layer](#navigation-and-media-layer) - [Steno layer](#steno-layer) - [LED states](#led-states) * [Tools](#tools) - [Heatmap](#heatmap) + - [Layer notification](#layer-notification) * [Special features](#special-features) - [Unicode Symbol Input](#unicode-symbol-input) * [Building](#building) @@ -39,7 +38,7 @@ Some of the things in the layout only work when one uses [Spacemacs][spacemacs] At its core, this is a Dvorak layout, with some minor changes. The more interesting parts are how certain keys behave: -* The keys on the number row double as function keys, when held for a bit longer than an usual tap. This allows me to use the function keys without having to switch layers. +* The number row is the same as in the [ADORE](#adore-layer) layer. The function keys are on the **Media** layer. * The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they are considered active for the next key press only. When double tapped, they toggle on, until a third, single tap sometime later. When held, they act as expected. My usual pattern is that I use these for the next keypress only, so this behaviour is perfect. If I need them held, I'll just double-tap. * The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, which pops up an application selector. It also switches to a one-shot layer, where the number row on the left half turns into app selector macros, for the most common things I usually want to switch to. Otherwise it behaves as on a normal layout. * The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if active. Otherwise it sends the usual keycode. @@ -57,28 +56,16 @@ At its core, this is a Dvorak layout, with some minor changes. The more interest - `LEAD d` toggles logging keypress positions to the HID console. - `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader. - `LEAD u` enters the [Unicode symbol input](#unicode-symbol-input) mode. + +The symbols on the front in the image above have the same color as the key that activates them, with the exception of the **Arrow** layer, which is just black on the front. ## ADORE layer [![ADORE layer](images/adore-layer.png)](http://www.keyboard-layout-editor.com/#/gists/45681a17453d235925b6028dd83bf12a) -While using the standard Dvorak layout, I encountered a number of inconveniences, and on this layer, I am playing with ideas to make the layout feel better. Initially, it was based on [Capewell-Dvorak][cpd], but that too, had shortcomings I was not happy with. So now this is something inbetween, with own observations thrown in. How it works out in the long run remains to be seen. +My experimental layout, that I keep tweaking. No full description here, because things are very much in flux. - [cpd]: http://www.michaelcapewell.com/projects/keyboard/layout_capewell-dvorak.htm - -Based on a week and a half of typing, the keys were rearranged, and the home row neatly spelled out **ADORE**, that gave the layout its name. - -## Hungarian layer - -[![Hungarian layer](images/hun-layer.png)](http://www.keyboard-layout-editor.com/#/gists/b160f6ec90d58c127c114c89f66e9dc9) - -On this layer, the accented characters are at the same position as their base variant. For some, which can have other diatribes, the long one is on top, short's on bottom. Tapping any of the accented characters takes us back to the base layer. - -## Navigation and media layer - -[![Navigation and media layer](images/nav-n-media-layer.png)](http://www.keyboard-layout-editor.com/#/gists/c59c453f9fe1a3238ba1494e7e5c6892) - -This layer is primarily for navigating with the cursor or the mouse, and some media things. +Note that the **HUN** layer does not work well with ADORE: it still has the same layout as on the [Base](#base-layer) layer. This will remain until ADORE becomes the default. ## Steno layer @@ -93,8 +80,8 @@ The primary purpose of the LEDs is to show the modifier status, a secondary, to For the layers, the following rules apply: * When the [ADORE layer](#adore-layer) is toggled on, LEDs will light up from left to right in a sequence, then turn off. When the layer is toggled off, the LEDs light up and turn off in the other direction. No LEDs are on while the layer is active. -* When the [Hungarian layer](#hungarian-layer) is active, the *green* and *blue* LEDs are on. -* When the [Navigation and media layer](#navigation-and-media-layer) is active, the *red* and *green* ones are on. +* When the **Hungarian** layer is active, the *green* and *blue* LEDs are on. +* When the **Media** layer is active, the *red* and *green* ones are on. * When the **ARROW** layer is active, the *red* and *blue* ones are on. * For the [Steno layer](#steno-layer), all LEDs will be turned on. @@ -129,6 +116,10 @@ The generated heatmap looks somewhat like this: ![Heatmap](images/heatmap.png) +## Layer notification + +There is a very small tool in `tools/layer-notify`, that listens to the HID console, looking for layer change events, and pops up a notification for every detected change. It is a very simple tool, mainly serving as an example. + # Building To make my workflow easier, this layout is maintained in [its own repository][algernon:ez-layout]. To build it, you will need the [QMK][qmk] firmware checked out, and this repo either checked out to something like `keyboards/ergodox_ez/algernon-master`. One way to achieve that is this: @@ -156,6 +147,43 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the # Changelog +## v1.7 + +*2016-09-18* + +### Overall changes + +* The number row has been completely rearranged on both the [Base](#base-layer) and the [ADORE](#adore-layer) layers. +* The number/function key behavior was changed: function keys are now on the **Media**. +* The `:`/`;` and `-`/`_` keys were put back to their thumb position on the bottom row, on both the [Base](#base-layer) and [ADORE](#adore-layer) layers. +* The bottom large keys on the inner side of each half now function as [tmux](http://tmux.github.io/) keys: the left to send the prefix, the right to send the `display-panes` key. The left also doubles as a GNU screen prefix key, and sends `C-a` when double tapped. +* A number of functions, such as the **AppSel** layer, now require the `hid-commands` tool to be running, with the output of `hid_listen` being piped to it. + +### ADORE + +* `Y` and `X` have been swapped again. + +### Media/Navigation layer + +* The function keys are now on this layer. +* Mouse keys have been removed. +* Media start/stop/prev/next have been removed. +* `Print screen` has been removed. +* There is only one screen lock key now. + +### Heatmap + +* Fixed a few issues in the finger-stats calculation. +* The tool now also timestamps and saves all input lines to a logfile, which it loads on start, allowing one to continue the collection after upgrading the tool. +* The heatmap tool will now colorize the stats by default. +* The periodic stats are now printed in a more compact format. + +### Tools + +* Added a new tool, `tools/layer-notify` that listens to layer change events on the HID console, and pops up a notification on layer changes. +* Another new tool, `tools/text-to-log.py` has been added that converts arbitrary text to a keylogger output, which can be fed to the heatmap generator. +* A number of features have been moved to the `tools/hid-commands` utility. These generally are OS dependent, and are easier to implement on the software side. + ## v1.6 *2016-08-24* @@ -174,7 +202,7 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the ### Miscellaneous changes * `LEAD u` now starts the symbolic unicode input system, instead of the OS-one. -* The mouse acceleration keys on the [Navigation and Media](#navigation-and-media-layer) layer have been turned into toggles: tap them once to turn them on, until tapped again. Tapping an accelerator button will turn all the others off. +* The mouse acceleration keys on the **Navigation/Media** layer have been turned into toggles: tap them once to turn them on, until tapped again. Tapping an accelerator button will turn all the others off. * When the **ARROW** layer is on, the *red* and *blue* LEDs light up now. ### Heatmap @@ -221,7 +249,7 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the * The `:;` key has changed behaviour: to access the `;` symbol, the key needs to be double-tapped, instead of shifted. * The `=` and `\` keys were swapped, `=` moved to the home row, on both the [base](#base-layer) and the **experimental** layers. * The arrow and navigation keys were redone, they are now more accessible, but the navigation keys require an extra tap to access. -* The **Emacs** layer is gone, replaced by a simplified [navigation and media](#navigation-and-media-layer) layer. +* The **Emacs** layer is gone, replaced by a simplified **navigation and media** layer. * `LEAD v` types the firmware version, and the keymap version. * On the **experimental** layer, the `L` and `Q`, and the `K` and `G` keys were swapped. * The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it easier on my fingers. @@ -240,7 +268,7 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the - `-` on the left half was replaced by `Tab`. - `Tab`'s original position is taken by a `Media Next`/`Media Prev` key. - `:` now inputs `;` when shifted. -* `ESC` cancels the [Hungarian](#hungarian-layer) layer too, not just modifiers. +* `ESC` cancels the **Hungarian** layer too, not just modifiers. ## v1.0 diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json index 4dfa877a78..502d1e6ea4 100644 --- a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json +++ b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json @@ -13,18 +13,15 @@ [ { "x": 3.5, - "c": "#a7d0db", "fa": [ 0, 0, 2 ] }, - "#\n3\nF3", + "*\n5\nF5", { "x": 10.5, - "c": "#a7d0db", - "t": "#000000", "a": 4, "fa": [ 0, @@ -32,54 +29,44 @@ 2 ] }, - "*\n8\nF8" + "#\n4\nF4" ], [ { "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 2.5 }, - "@\n2\nF2", + "@\n7\nF7", { - "x": 1, - "c": "#7adabd", - "t": "#000000" + "x": 1 }, - "$\n4\nF4", + "^\n3\nF3", { "x": 8.5 }, - "&\n7\nF7", + "!\n2\nF2", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, - "(\n9\nF9" + "&\n6\nF6" ], [ { "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" + "x": 5.5 }, - "%\n5\nF5", + "$\n1\nF1", { - "c": "#f9cd31", "a": 7, - "f": 2 + "f": 3 }, - "STENO", + "F11", { "x": 4.5, "f": 3 }, "F12", { - "c": "#7adabd", "a": 4, "f": 3, "fa": [ @@ -88,19 +75,17 @@ 2 ] }, - "^\n6\nF6" + "%\n0\nF10" ], [ { "y": -0.875, - "c": "#ffb2d2", "f": 9, "a": 6, "w": 1.5 }, "\n\n", { - "t": "#0d0d0b", "f": 3, "a": 4, "fa": [ @@ -109,23 +94,21 @@ 2 ] }, - "!\n1\nF1", + " \n9\nF9", { "x": 14.5 }, - ")\n0\nF10", + " \n8\nF8", { "a": 7, "w": 1.5 }, - "F11" + "STENO" ], [ { "y": -0.375, "x": 3.5, - "c": "#a7d0db", - "t": "#000000", "a": 6 }, "G", @@ -138,15 +121,11 @@ { "y": -0.875, "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b", "a": 6 }, "W", { "x": 1, - "c": "#7adabd", - "t": "#000000", "a": 6 }, "L", @@ -155,22 +134,17 @@ }, "H", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, "P" ], [ { "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" + "x": 5.5 }, "M", { - "c": "#93c9b7", "a": 4, "fa": [0, 0, 0], "h": 1.5 @@ -182,7 +156,6 @@ }, "}\n)\n]", { - "c": "#7adabd", "a": 6 }, "F" @@ -190,24 +163,21 @@ [ { "y": -0.875, - "c": "#ffb07b", - "t": "#0d0d0b", "f": 3, "a": 4, "w": 1.5 }, "\n\n~\n`", { - "c": "#ffb2d2", "a": 6, "f": 3 }, - "Y", + "X", { "x": 14.5, "a": 6 }, - "X", + "Y", { "a": 4, "w": 1.5 @@ -218,8 +188,6 @@ { "y": -0.375, "x": 3.5, - "c": "#a7d0db", - "t": "#000000", "a": 6 }, "E", @@ -231,15 +199,11 @@ [ { "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 2.5 }, "O", { "x": 1, - "c": "#7adabd", - "t": "#000000", "n": true }, "I", @@ -249,18 +213,14 @@ }, "R", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, "N" ], [ { "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" + "x": 5.5 }, "U", { @@ -271,8 +231,6 @@ [ { "y": -0.875, - "c": "#ffb2d2", - "t": "#0d0d0b", "fa": [ 6 ], @@ -308,22 +266,21 @@ { "y": -0.625, "x": 6.5, - "c": "#93c9b7", - "t": "#000000", + "a": 7, + "f": 9, "h": 1.5 }, - ";\n:", + "", { "x": 4.5, "h": 1.5 }, - "_\n-" + "" ], [ { "y": -0.75, "x": 3.5, - "c": "#a7d0db", "a": 4, "f": 3 }, @@ -339,15 +296,11 @@ { "y": -0.875, "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b", "a": 6 }, "Q", { "x": 1, - "c": "#7adabd", - "t": "#000000", "a": 4 }, "<\n,", @@ -357,9 +310,7 @@ }, "K", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, "J" ], @@ -367,8 +318,6 @@ { "y": -0.875, "x": 5.5, - "c": "#7adabd", - "t": "#000000", "a": 4 }, ">\n.", @@ -381,15 +330,12 @@ [ { "y": -0.875, - "c": "#ffb07b", "f": 9, "w": 1.5, "g": true }, "", { - "c": "#ffb2d2", - "t": "#0d0d0b", "a": 6, "f": 3, "g": false @@ -401,8 +347,6 @@ }, "?\n/", { - "c": "#ffb07b", - "t": "#000000", "f": 9, "g": true, "w": 1.5, @@ -414,7 +358,6 @@ { "y": -0.375, "x": 3.5, - "c": "#d9dae0", "g": true, "a": 7, "f": 3 @@ -433,18 +376,16 @@ "", { "x": 1, - "c": "#d4872a", - "g": true, + "g": false, "a": 5 }, - "", + ";\n:", { "x": 8.5 }, - "", + "_\n-", { "x": 1, - "c": "#d9dae0", "g": true, "a": 7 }, @@ -472,7 +413,6 @@ "ry": 4.25, "y": -1, "x": 1, - "c": "#f9cd31", "g": false }, "Alt", @@ -489,7 +429,6 @@ ], [ { - "c": "#d4872a", "a": 7, "f": 9, "h": 2 @@ -500,15 +439,13 @@ }, "", { - "c": "#f9cd31", "f": 3 }, "Ctrl" ], [ { - "x": 2, - "c": "#e26757" + "x": 2 }, "ESC" ], @@ -518,7 +455,6 @@ "rx": 13, "y": -1, "x": -3, - "c": "#f9cd31", "f": 2 }, "MEDIA", @@ -531,7 +467,6 @@ }, "HUN", { - "c": "#d4872a", "f": 9, "h": 2 }, @@ -545,7 +480,6 @@ [ { "x": -3, - "c": "#f9cd31", "f": 2 }, "LEAD" diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json index 1248d36af7..5b4ca06c30 100644 --- a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json +++ b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json @@ -13,18 +13,15 @@ [ { "x": 3.5, - "c": "#a7d0db", "fa": [ 0, 0, 2 ] }, - "#\n3\nF3", + "*\n5\nF5", { "x": 10.5, - "c": "#a7d0db", - "t": "#000000", "a": 4, "fa": [ 0, @@ -32,54 +29,44 @@ 2 ] }, - "*\n8\nF8" + "#\n4\nF4" ], [ { "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 2.5 }, - "@\n2\nF2", + "@\n7\nF7", { - "x": 1, - "c": "#7adabd", - "t": "#000000" + "x": 1 }, - "$\n4\nF4", + "^\n3\nF3", { "x": 8.5 }, - "&\n7\nF7", + "!\n2\nF2", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, - "(\n9\nF9" + "&\n6\nF6" ], [ { "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" + "x": 5.5 }, - "%\n5\nF5", + "$\n1\nF1", { - "c": "#f9cd31", "a": 7, - "f": 2 + "f": 3 }, - "STENO", + "F11", { "x": 4.5, "f": 3 }, "F12", { - "c": "#7adabd", "a": 4, "f": 3, "fa": [ @@ -88,12 +75,11 @@ 2 ] }, - "^\n6\nF6" + "%\n0\nF10" ], [ { "y": -0.875, - "c": "#ffb2d2", "f": 6, "a": 6, "w": 1.5 @@ -101,7 +87,6 @@ "\n\n", { "f": 3, - "t": "#0d0d0b", "a": 4, "fa": [ 0, @@ -110,23 +95,21 @@ ] }, - "!\n1\nF1", + " \n9\nF9", { "x": 14.5 }, - ")\n0\nF10", + " \n8\nF8", { "a": 7, "w": 1.5 }, - "F11" + "STENO" ], [ { "y": -0.375, "x": 3.5, - "c": "#a7d0db", - "t": "#000000", "a": 4 }, ">\n.", @@ -140,15 +123,11 @@ { "y": -0.875, "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b", "a": 4 }, "<\n,", { "x": 1, - "c": "#7adabd", - "t": "#000000", "a": 6 }, "P", @@ -157,22 +136,17 @@ }, "G", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, "R" ], [ { "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" + "x": 5.5 }, "Y", { - "c": "#93c9b7", "a": 4, "h": 1.5 }, @@ -183,7 +157,6 @@ }, "}\n)\n]", { - "c": "#7adabd", "a": 6 }, "F" @@ -191,14 +164,12 @@ [ { "y": -0.875, - "c": "#ffb07b", - "t": "#0d0d0b", "f": 3, + "a": 4, "w": 1.5 }, "\n\n~\n`", { - "c": "#ffb2d2", "a": 4, "f": 3 }, @@ -218,8 +189,6 @@ { "y": -0.375, "x": 3.5, - "c": "#a7d0db", - "t": "#000000", "a": 6 }, "E", @@ -231,15 +200,11 @@ [ { "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 2.5 }, "O", { "x": 1, - "c": "#7adabd", - "t": "#000000", "n": true }, "U", @@ -249,18 +214,14 @@ }, "H", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, "N" ], [ { "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" + "x": 5.5 }, "I", { @@ -271,8 +232,6 @@ [ { "y": -0.875, - "c": "#ffb2d2", - "t": "#0d0d0b", "fa": [ 6 ], @@ -308,23 +267,22 @@ { "y": -0.625, "x": 6.5, - "c": "#93c9b7", - "t": "#000000", "a": 7, + "f": 9, "h": 1.5 }, - "(", + "", { "x": 4.5, "h": 1.5 }, - ")" + "" ], [ { "y": -0.75, "x": 3.5, - "c": "#a7d0db", + "f": 3, "a": 6 }, "J", @@ -336,15 +294,11 @@ [ { "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 2.5 }, "Q", { - "x": 1, - "c": "#7adabd", - "t": "#000000" + "x": 1 }, "K", { @@ -352,18 +306,14 @@ }, "M", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, "V" ], [ { "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" + "x": 5.5 }, "X", { @@ -374,14 +324,11 @@ [ { "y": -0.875, - "c": "#ffb07b", "f": 9, "w": 1.5 }, "\n\n", { - "c": "#ffb2d2", - "t": "#0d0d0b", "a": 4, "f": 3 }, @@ -392,8 +339,6 @@ }, "Z", { - "c": "#ffb07b", - "t": "#000000", "f": 9, "w": 1.5 }, @@ -403,7 +348,6 @@ { "y": -0.375, "x": 3.5, - "c": "#d9dae0", "g": true, "a": 7, "f": 3 @@ -422,7 +366,6 @@ "", { "x": 1, - "c": "#d4872a", "g": false, "a": 5 }, @@ -433,7 +376,6 @@ "_\n-", { "x": 1, - "c": "#d9dae0", "g": true, "a": 7 }, @@ -461,7 +403,6 @@ "ry": 4.25, "y": -1, "x": 1, - "c": "#f9cd31", "g": false }, "Alt", @@ -478,7 +419,6 @@ ], [ { - "c": "#d4872a", "a": 7, "f": 9, "h": 2 @@ -489,15 +429,13 @@ }, "", { - "c": "#f9cd31", "f": 3 }, "Ctrl" ], [ { - "x": 2, - "c": "#e26757" + "x": 2 }, "ESC" ], @@ -507,7 +445,6 @@ "rx": 13, "y": -1, "x": -3, - "c": "#f9cd31", "f": 2 }, "MEDIA", @@ -520,7 +457,6 @@ }, "LEAD", { - "c": "#d4872a", "f": 9, "h": 2 }, @@ -534,7 +470,6 @@ [ { "x": -3, - "c": "#f9cd31", "f": 2 }, "HUN" diff --git a/keyboards/ergodox/keymaps/algernon/tools/hid-commands b/keyboards/ergodox/keymaps/algernon/tools/hid-commands new file mode 100755 index 0000000000..f3b83cf6d1 --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/tools/hid-commands @@ -0,0 +1,61 @@ +#!/bin/bash +set -e + +cmd_wm () { + WIN="$(xdotool getactivewindow)" + wmctrl -i -r ${WIN} -b remove,maximized_vert,maximized_horz + xdotool windowsize ${WIN} 100% 100% + wmctrl -i -r ${WIN} -b add,maximized_vert,maximized_horz +} + +_cmd_appsel () { + wmctrl -x -a $1 || true + xdotool key Escape +} + +cmd_appsel_music () { + wmctrl -x -a rhythmbox || wmctrl -x -a spotify || true + xdotool key Escape +} + +cmd_appsel_slack () { + _cmd_appsel slack +} + +cmd_appsel_emacs () { + _cmd_appsel emacs24 +} + +cmd_appsel_term () { + _cmd_appsel gnome-terminal +} + +cmd_appsel_chrome () { + _cmd_appsel chromium +} + +cmd_help () { + cat </dev/null 2>&1; then + cmd_${cmd} + fi +done + + diff --git a/keyboards/ergodox/keymaps/algernon/tools/layer-notify b/keyboards/ergodox/keymaps/algernon/tools/layer-notify new file mode 100755 index 0000000000..627c2861ef --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/tools/layer-notify @@ -0,0 +1,12 @@ +#!/bin/sh +HL="${HID_LISTEN:-$HOME/src/ext/hid_listen/hid_listen}" + +sudo "${HL}" | grep --line-buffered LAYER: | \ +(while read line; do + case $line in + LAYER:*) + layer="$(echo $(echo $line | cut -d: -f2-))" + notify-send -i mark-location-symbolic "Switched to layer: $layer" + ;; + esac + done) diff --git a/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py b/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py index 68585843be..09c737646c 100755 --- a/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py +++ b/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py @@ -1,12 +1,15 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 import json import os import sys import re import argparse +import time from math import floor from os.path import dirname +from subprocess import Popen, PIPE, STDOUT +from blessings import Terminal class Heatmap(object): coords = [ @@ -33,7 +36,7 @@ class Heatmap(object): [ # Row 4 [20, 0], [20, 2], [19, 0], [18, 0], [19, 2], [], [], [], [], - [19, 4], [18, 2], [19, 6], [20, 4], [20, 6], + [19, 4], [18, 2], [19, 6], [20, 4], [20, 6], [], [], [], [] ], [ # Row 5 @@ -56,11 +59,13 @@ class Heatmap(object): def set_attr(orig, new): return new - def set_bg(self, (block, n), color): + def set_bg(self, coords, color): + (block, n) = coords self.set_attr_at(block, n, "c", self.set_attr, color) #self.set_attr_at(block, n, "g", self.set_attr, False) - def set_tap_info(self, (block, n), count, cap): + def set_tap_info(self, coords, count, cap): + (block, n) = coords def _set_tap_info(o, _count, _cap): ns = 4 - o.count ("\n") return o + "\n" * ns + "%.02f%%" % (float(_count) / float(_cap) * 100) @@ -87,8 +92,8 @@ class Heatmap(object): g = (colors[idx2][1] - colors[idx1][1]) * fb + colors[idx1][1] b = (colors[idx2][2] - colors[idx1][2]) * fb + colors[idx1][2] - r, g, b = [x * 255 for x in r, g, b] - return "#%02x%02x%02x" % (r, g, b) + r, g, b = [x * 255 for x in (r, g, b)] + return "#%02x%02x%02x" % (int(r), int(g), int(b)) def __init__(self, layout): self.log = {} @@ -96,7 +101,8 @@ class Heatmap(object): self.max_cnt = 0 self.layout = layout - def update_log(self, (c, r)): + def update_log(self, coords): + (c, r) = coords if not (c, r) in self.log: self.log[(c, r)] = 0 self.log[(c, r)] = self.log[(c, r)] + 1 @@ -132,18 +138,17 @@ class Heatmap(object): # right hand [0, 0, 0, 0, 0] ] - finger_map = [0, 0, 1, 2, 3, 4, 4] + finger_map = [0, 0, 1, 2, 3, 3, 3, 1, 1, 1, 2, 3, 4, 4] for (c, r) in self.log: if r == 5: # thumb cluster if c <= 6: # left side usage[0][4] = usage[0][4] + self.log[(c, r)] else: - usage[1][4] = usage[1][4] + self.log[(c, r)] + usage[1][0] = usage[1][0] + self.log[(c, r)] else: fc = c hand = 0 if fc >= 7: - fc = fc - 7 hand = 1 fm = finger_map[fc] usage[hand][fm] = usage[hand][fm] + self.log[(c, r)] @@ -157,79 +162,158 @@ class Heatmap(object): if total == 0: total = 1 stats = { + "total-keys": total, "hands": { "left": { - "usage": float(hand_usage[0]) / total * 100, + "usage": round(float(hand_usage[0]) / total * 100, 2), "fingers": { - "0 - pinky": 0, - "1 - ring": 0, - "2 - middle": 0, - "3 - index": 0, - "4 - thumb": 0, + "pinky": 0, + "ring": 0, + "middle": 0, + "index": 0, + "thumb": 0, } }, "right": { - "usage": float(hand_usage[1]) / total * 100, + "usage": round(float(hand_usage[1]) / total * 100, 2), "fingers": { - "0 - thumb": 0, - "1 - index": 0, - "2 - middle": 0, - "3 - ring": 0, - "4 - pinky": 0, + "thumb": 0, + "index": 0, + "middle": 0, + "ring": 0, + "pinky": 0, } }, } } hmap = ['left', 'right'] - fmap = ['0 - pinky', '1 - ring', '2 - middle', '3 - index', '4 - thumb', - '0 - thumb', '1 - index', '2 - middle', '3 - ring', '4 - pinky'] + fmap = ['pinky', 'ring', 'middle', 'index', 'thumb', + 'thumb', 'index', 'middle', 'ring', 'pinky'] for hand_idx in range(len(usage)): hand = usage[hand_idx] for finger_idx in range(len(hand)): - stats['hands'][hmap[hand_idx]]['fingers'][fmap[finger_idx + hand_idx * 5]] = float(hand[finger_idx]) / total * 100 + stats['hands'][hmap[hand_idx]]['fingers'][fmap[finger_idx + hand_idx * 5]] = round(float(hand[finger_idx]) / total * 100, 2) return stats def dump_all(out_dir, heatmaps): - for layer in heatmaps.keys(): + stats = {} + t = Terminal() + t.clear() + sys.stdout.write("\x1b[2J\x1b[H") + + print ('{t.underline}{outdir}{t.normal}\n'.format(t=t, outdir=out_dir)) + + keys = list(heatmaps.keys()) + keys.sort() + + for layer in keys: if len(heatmaps[layer].log) == 0: continue with open ("%s/%s.json" % (out_dir, layer), "w") as f: json.dump(heatmaps[layer].get_heatmap(), f) - print >>sys.stderr, "%s stats:" % (layer) - json.dump (heatmaps[layer].get_stats(), sys.stderr, - indent = 4, sort_keys = True) - print >>sys.stderr, "" - print >>sys.stderr, "" + stats[layer] = heatmaps[layer].get_stats() + + left = stats[layer]['hands']['left'] + right = stats[layer]['hands']['right'] + + print ('{t.bold}{layer}{t.normal} ({total:,} taps):'.format(t=t, layer=layer, + total=int(stats[layer]['total-keys'] / 2))) + print (('{t.underline} | ' + \ + 'left ({l[usage]:6.2f}%) | ' + \ + 'right ({r[usage]:6.2f}%) |{t.normal}').format(t=t, l=left, r=right)) + print ((' {t.bright_magenta}pinky{t.white} | {left[pinky]:6.2f}% | {right[pinky]:6.2f}% |\n' + \ + ' {t.bright_cyan}ring{t.white} | {left[ring]:6.2f}% | {right[ring]:6.2f}% |\n' + \ + ' {t.bright_blue}middle{t.white} | {left[middle]:6.2f}% | {right[middle]:6.2f}% |\n' + \ + ' {t.bright_green}index{t.white} | {left[index]:6.2f}% | {right[index]:6.2f}% |\n' + \ + ' {t.bright_red}thumb{t.white} | {left[thumb]:6.2f}% | {right[thumb]:6.2f}% |\n' + \ + '').format(left=left['fingers'], right=right['fingers'], t=t)) + +def process_line(line, heatmaps, opts, stamped_log = None): + m = re.search ('KL: col=(\d+), row=(\d+), pressed=(\d+), layer=(.*)', line) + if not m: + return False + if stamped_log is not None: + if line.startswith("KL:"): + print ("%10.10f %s" % (time.time(), line), + file = stamped_log, end = '') + else: + print (line, + file = stamped_log, end = '') + stamped_log.flush() + + (c, r, l) = (int(m.group (2)), int(m.group (1)), m.group (4)) + if (c, r) not in opts.allowed_keys: + return False + + heatmaps[l].update_log ((c, r)) + + return True + +def setup_allowed_keys(opts): + if len(opts.only_key): + incmap={} + for v in opts.only_key: + m = re.search ('(\d+),(\d+)', v) + if not m: + continue + (c, r) = (int(m.group(1)), int(m.group(2))) + incmap[(c, r)] = True + else: + incmap={} + for r in range(0, 6): + for c in range(0, 14): + incmap[(c, r)] = True + + for v in opts.ignore_key: + m = re.search ('(\d+),(\d+)', v) + if not m: + continue + (c, r) = (int(m.group(1)), int(m.group(2))) + del(incmap[(c, r)]) + + return incmap def main(opts): - heatmaps = {"Dvorak": Heatmap("Dvorak"), "ADORE": Heatmap("ADORE") } cnt = 0 - restrict_row = opts.restrict_row out_dir = opts.outdir + if not os.path.exists(out_dir): + os.makedirs(out_dir) + + opts.allowed_keys = setup_allowed_keys(opts) + + if not opts.one_shot: + + try: + with open("%s/stamped-log" % out_dir, "r") as f: + while True: + line = f.readline() + if not line: + break + if not process_line(line, heatmaps, opts): + continue + except: + pass + + stamped_log = open ("%s/stamped-log" % (out_dir), "a+") + else: + stamped_log = None + while True: line = sys.stdin.readline() if not line: break - m = re.search ('KL: col=(\d+), row=(\d+), pressed=(\d+), layer=(.*)', line) - if not m: + if not process_line(line, heatmaps, opts, stamped_log): continue cnt = cnt + 1 - (c, r, l) = (int(m.group (2)), int(m.group (1)), m.group (4)) - if restrict_row != -1 and r != restrict_row: - continue - if c in opts.ignore_columns: - continue - heatmaps[l].update_log ((c, r)) - - if opts.dump_interval != -1 and cnt >= opts.dump_interval: + if opts.dump_interval != -1 and cnt >= opts.dump_interval and not opts.one_shot: cnt = 0 dump_all(out_dir, heatmaps) @@ -239,11 +323,17 @@ if __name__ == "__main__": parser = argparse.ArgumentParser (description = "keylog to heatmap processor") parser.add_argument ('outdir', action = 'store', help = 'Output directory') - parser.add_argument ('--row', dest = 'restrict_row', action = 'store', type = int, - default = -1, help = 'Restrict processing to this row only') parser.add_argument ('--dump-interval', dest = 'dump_interval', action = 'store', type = int, default = 100, help = 'Dump stats and heatmap at every Nth event, -1 for dumping at EOF only') - parser.add_argument ('--ignore-column', dest = 'ignore_columns', action = 'append', type = int, - default = [], help = 'Ignore the specified columns') + parser.add_argument ('--ignore-key', dest = 'ignore_key', action = 'append', type = str, + default = [], help = 'Ignore the key at position (x, y)') + parser.add_argument ('--only-key', dest = 'only_key', action = 'append', type = str, + default = [], help = 'Only include key at position (x, y)') + parser.add_argument ('--one-shot', dest = 'one_shot', action = 'store_true', + help = 'Do not load previous data, and do not update it, either.') args = parser.parse_args() + if len(args.ignore_key) and len(args.only_key): + print ("--ignore-key and --only-key are mutually exclusive, please only use one of them!", + file = sys.stderr) + sys.exit(1) main(args) diff --git a/keyboards/ergodox/keymaps/algernon/tools/max-focused b/keyboards/ergodox/keymaps/algernon/tools/max-focused deleted file mode 100755 index 4d5220aa8b..0000000000 --- a/keyboards/ergodox/keymaps/algernon/tools/max-focused +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/sh -WIN="$(xdotool getactivewindow)" -wmctrl -i -r ${WIN} -b remove,maximized_vert,maximized_horz -xdotool windowsize ${WIN} 100% 100% -wmctrl -i -r ${WIN} -b add,maximized_vert,maximized_horz diff --git a/keyboards/ergodox/keymaps/algernon/tools/text-to-log.py b/keyboards/ergodox/keymaps/algernon/tools/text-to-log.py new file mode 100755 index 0000000000..e068c3cbfb --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/tools/text-to-log.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 + +import os +import sys + +charmap = { + '9': [[1, 0]], + '7': [[2, 0]], '@': [[2, 5], [2, 0]], + '5': [[3, 0]], '*': [[2, 5], [3, 0]], + '3': [[4, 0]], '^': [[2, 5], [4, 0]], + '1': [[5, 0]], '$': [[2, 5], [5, 0]], + '0': [[8, 0]], '%': [[2, 5], [8, 0]], + '2': [[9, 0]], '!': [[2, 5], [9, 0]], + '4': [[10, 0]], '#': [[2, 5], [10, 0]], + '6': [[11, 0]], '&': [[2, 5], [11, 0]], + '8': [[12, 0]], + + '`': [[0, 1]], '~': [[2, 5], [0, 1]], + 'y': [[1, 1]], 'Y': [[2, 5], [1, 1]], + 'w': [[2, 1]], 'W': [[2, 5], [2, 1]], + 'g': [[3, 1]], 'G': [[2, 5], [3, 1]], + 'l': [[4, 1]], 'L': [[2, 5], [4, 1]], + 'm': [[5, 1]], 'M': [[2, 5], [5, 1]], + '[': [[6, 1]], '{': [[2, 5], [6, 1]], '(': [[6, 1], [6, 1]], + ']': [[7, 1]], '}': [[2, 5], [7, 1]], ')': [[7, 1], [7, 1]], + 'f': [[8, 1]], 'F': [[2, 5], [8, 1]], + 'h': [[9, 1]], 'H': [[2, 5], [9, 1]], + 'c': [[10, 1]], 'C': [[2, 5], [10, 1]], + 'p': [[11, 1]], 'P': [[2, 5], [11, 1]], + 'x': [[12, 1]], 'X': [[2, 5], [12, 1]], + '\\': [[13, 1]], '|': [[2, 5], [13, 1]], + + '\t': [[0, 2]], + 'a': [[1, 2]], 'A': [[2, 5], [1, 2]], + 'o': [[2, 2]], 'O': [[2, 5], [2, 2]], + 'e': [[3, 2]], 'E': [[2, 5], [3, 2]], + 'i': [[4, 2]], 'I': [[2, 5], [4, 2]], + 'u': [[5, 2]], 'U': [[2, 5], [5, 2]], + 'd': [[8, 2]], 'D': [[2, 5], [8, 2]], + 'r': [[9, 2]], 'R': [[2, 5], [9, 2]], + 't': [[10, 2]], 'T': [[2, 5], [10, 2]], + 'n': [[11, 2]], 'N': [[2, 5], [11, 2]], + 's': [[12, 2]], 'S': [[2, 5], [12, 2]], + '=': [[13, 2]], '+': [[2, 5], [13, 2]], + + 'z': [[1, 3]], 'Z': [[2, 5], [1, 3]], + 'q': [[2, 3]], 'Q': [[2, 5], [2, 3]], + '\'': [[3, 3]], '"': [[2, 5], [3, 3]], + ',': [[4, 3]], '<': [[2, 5], [4, 3]], + '.': [[5, 3]], '>': [[2, 5], [5, 3]], + 'b': [[8, 3]], 'B': [[2, 5], [8, 3]], + 'k': [[9, 3]], 'K': [[2, 5], [9, 3]], + 'v': [[10, 3]], 'V': [[2, 5], [10, 3]], + 'j': [[11, 3]], 'J': [[2, 5], [11, 3]], + '/': [[12, 3]], '?': [[2, 5], [12, 3]], + + ':': [[4, 4]], ';': [[4, 4], [4, 4]], + '-': [[9, 4]], '_': [[2, 5], [9, 4]], + + ' ': [[10, 5]], + '\n': [[11, 5]], + + ## Layered things + # Hungarian + 'á': [[9, 5], [1, 2]], 'Á': [[2, 5], [9, 5], [1, 2]], + 'ó': [[9, 5], [2, 2]], 'Ó': [[2, 5], [9, 5], [2, 2]], + 'ő': [[9, 5], [2, 1]], 'Ő': [[2, 5], [9, 5], [2, 1]], + 'ö': [[9, 5], [2, 3]], 'Ö': [[2, 5], [9, 5], [2, 3]], + 'é': [[9, 5], [3, 2]], 'É': [[2, 5], [9, 5], [3, 2]], + 'ú': [[9, 5], [4, 2]], 'Ú': [[2, 5], [9, 5], [4, 2]], + 'ű': [[9, 5], [4, 1]], 'Ű': [[2, 5], [9, 5], [4, 1]], + 'ü': [[9, 5], [4, 3]], 'Ü': [[2, 5], [9, 5], [4, 3]], + 'í': [[9, 5], [5, 2]], 'Í': [[2, 5], [9, 5], [5, 2]], +} + +def lookup_char(layer, ch): + if ch in charmap: + return charmap[ch] + return None + +def process_char(layer, ch, out=sys.stdout): + keys = lookup_char(layer, ch) + if not keys: + print ("Unknown char: %s" % ch, file=sys.stderr) + else: + for (c, r) in keys: + print ("KL: col=%d, row=%d, pressed=1, layer=%s" % (r, c, layer), file=out) + print ("KL: col=%d, row=%d, pressed=0, layer=%s" % (r, c, layer), file=out) + +def process_file(fn, layer, out=sys.stdout): + with open(fn, "r") as f: + ch = f.read(1) + while ch: + process_char(layer, ch, out) + ch = f.read(1) + +if sys.argv[1] == '-': + out='/dev/stdin' +else: + out=sys.argv[1] + +if len(sys.argv) >= 2: + layer = 'ADORE' +else: + layer = sys.argv[2] + +process_file(out, layer = layer) From edc7441800af085cada407c0593e8f83fc67ec56 Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Sun, 18 Sep 2016 12:42:58 +0200 Subject: [PATCH 42/92] util/install_dependecies.sh: fix yum packages Signed-off-by: Antonio Murdaca --- util/install_dependencies.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/util/install_dependencies.sh b/util/install_dependencies.sh index 49ac86e072..936a865938 100755 --- a/util/install_dependencies.sh +++ b/util/install_dependencies.sh @@ -68,9 +68,8 @@ elif [[ -n "$(type -P yum)" ]]; then avr-libc \ dfu-programmer \ dfu-util \ - gcc-arm-none-eabi \ - binutils-arm-none-eabi \ - libnewlib-arm-none-eabi \ + arm-none-eabi-gcc-cs \ + arm-none-eabi-newlib \ git \ diffutils # The listed eabi pacackes do unfortunately not exist for CentOS, From 94af0194ddfe8f8a3069c926170d8995de5c1781 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Mon, 19 Sep 2016 13:22:34 +0200 Subject: [PATCH 43/92] - Updated dbroqua layout for kc60 --- keyboards/kc60/keymaps/dbroqua/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/kc60/keymaps/dbroqua/keymap.c b/keyboards/kc60/keymaps/dbroqua/keymap.c index e17827fad9..1b645ea938 100644 --- a/keyboards/kc60/keymaps/dbroqua/keymap.c +++ b/keyboards/kc60/keymaps/dbroqua/keymap.c @@ -34,9 +34,9 @@ const uint16_t PROGMEM fn_actions[] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Qwerty * ,-----------------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ` | Bksp| + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | * |-----------------------------------------------------------------------------------------+ - * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp | * |-----------------------------------------------------------------------------------------+ * | Caps/FN1| A | S | D | F | G | H | J | K | L | ; | ' | Enter | * |-----------------------------------------------------------------------------------------+ @@ -46,11 +46,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------------' */ [0] = KEYMAP( /* Basic QWERTY */ - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \ LT(_FNCAPS, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_FNRIGHTSHIFT), KC_UP, \ - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_BSPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_GRV, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT \ ), /* Layer 1 From 9a2e24fa98f90517a0a091b3ccd9de125457d09f Mon Sep 17 00:00:00 2001 From: dbroqua Date: Mon, 19 Sep 2016 13:36:36 +0200 Subject: [PATCH 44/92] - Removed HHKB like layout --- .../kc60/keymaps/dbroqua_hhkb_like/keymap.c | 103 ------------------ .../kc60/keymaps/dbroqua_hhkb_like/readme.md | 11 -- 2 files changed, 114 deletions(-) delete mode 100644 keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c delete mode 100644 keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md diff --git a/keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c b/keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c deleted file mode 100644 index 0c952327b9..0000000000 --- a/keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c +++ /dev/null @@ -1,103 +0,0 @@ -// This is the canonical layout file for the Quantum project. If you want to add another keyboard, -// this is the style you want to emulate. - -#include "kc60.h" - -#define _QWERTY 0 -#define _FNCAPS 1 -#define _FNRIGHTSHIFT 2 - -// Fillers to make layering more clear -#define ______ KC_TRNS -#define XXXXXXX KC_NO - -// Func macro definitions. -#define S_LED FUNC(0) -#define S_LEDI FUNC(1) -#define S_LEDD FUNC(2) - -// Enable these functions using FUNC(n) macro. -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_BACKLIGHT_TOGGLE(), - [1] = ACTION_BACKLIGHT_INCREASE(), - [2] = ACTION_BACKLIGHT_DECREASE() - }; - -/* - * | | | - * | | | - * | | | - * | | | - * | | - */ - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Qwerty - * ,-----------------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | - * |-----------------------------------------------------------------------------------------+ - * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp | - * |-----------------------------------------------------------------------------------------+ - * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter | - * |-----------------------------------------------------------------------------------------+ - * | Shift | Z | X | C | V | B | N | M | , | . | / | Up | FN2 | - * |-----------------------------------------------------------------------------------------+ - * | FN1 | Gui | Alt | Space | AltGr | Left | Down | Right | - * `-----------------------------------------------------------------------------------------' - */ - [0] = KEYMAP( /* Basic QWERTY */ - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \ - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \ - KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_FNRIGHTSHIFT), KC_UP, \ - LT(_FNCAPS, KC_CAPS), KC_LGUI, KC_LALT, KC_SPC, KC_GRV, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT \ - ), - -/* Layer 1 - * ,-----------------------------------------------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | Psc | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | Led | Led-| Led+| | Mute| Vol+| Vol-| | | | Play | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | Prev | Stop | Next | - * `-----------------------------------------------------------------------------------------' - */ - [_FNCAPS] = KEYMAP( /* Layer 1 */ - ______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, \ - ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ - ______, ______, ______, ______, ______, ______, ______, KC_PSCR,______, ______, ______, ______, ______, ______, \ - ______, ______, S_LED, S_LEDI, S_LEDD,______,KC_MUTE,KC_VOLU,KC_VOLD,______, ______, ______, ______,KC_MPLY, \ - ______, ______, ______, ______, KC_DEL, ______, KC_MPRV, KC_MSTP, KC_MNXT \ - ), - -/* Layer 2 - * ,-----------------------------------------------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | | | PgUp | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | Home | PgDown| End | - * `-----------------------------------------------------------------------------------------' - */ - [_FNRIGHTSHIFT] = KEYMAP( /* Layer 2 */ - ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ - ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ - ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ - ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_PGUP, \ - ______, ______, ______, ______, ______, ______, KC_HOME,KC_PGDN,KC_END \ - ), -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - return MACRO_NONE; -}; diff --git a/keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md b/keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md deleted file mode 100644 index c7850c37ce..0000000000 --- a/keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md +++ /dev/null @@ -1,11 +0,0 @@ -# Dbroqua HHKB like Layout - -* Online keyboard layout editor: *Coming soon* -* Online keyboard layout editor (caps layer): http://www.keyboard-layout-editor.com/#/gists/4136d4d1555d6f0d9403c21aaf50fd37 -* Online keyboard layout editor (fn2 layer): http://www.keyboard-layout-editor.com/#/gists/cf4955f73f339020dbb41c15364e7e4f - -# Programming Instructions: -Enter into programming mode and run the following command. -``` -$ sudo KEYMAP=dbroqua_hhkb_like make dfu -``` \ No newline at end of file From f0021c9cb9e30d47d5a3ab5ec75e59e626c3d244 Mon Sep 17 00:00:00 2001 From: "Jonathan A. Kollasch" Date: Mon, 19 Sep 2016 14:25:44 -0500 Subject: [PATCH 45/92] Add more shifted Dvorak key code definitions --- quantum/keymap_extras/keymap_dvorak.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/quantum/keymap_extras/keymap_dvorak.h b/quantum/keymap_extras/keymap_dvorak.h index 17f2059774..a0feed850d 100644 --- a/quantum/keymap_extras/keymap_dvorak.h +++ b/quantum/keymap_extras/keymap_dvorak.h @@ -70,6 +70,10 @@ #define DV_LCBR LSFT(DV_LBRC) #define DV_RCBR LSFT(DV_RBRC) +#define DV_DQUO LSFT(DV_QUOT) +#define DV_LABK LSFT(DV_COMM) +#define DV_RABK LSFT(DV_DOT) + #define DV_QUES LSFT(DV_SLSH) #define DV_PLUS LSFT(DV_EQL) #define DV_PIPE LSFT(DV_BSLS) From 86e85438d36014b6a6a2b20be4454b865374d47a Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Tue, 20 Sep 2016 15:45:50 -0400 Subject: [PATCH 46/92] Fixed Qwerty Fn layer to match documented design --- keyboards/planck/keymaps/impossible/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index e816f359a6..503976fa28 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -97,17 +97,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * | Ctrl | ~ | [ | PgUp | ] | | | - | Up | = | | F12 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | [ | ] | + * | Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | | | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| * |Alt/Tab| | | | | Fn/Spc| | | | | Menu |Adj/Ent| * `-----------------------------------------------------------------------------------------------' */ [_QW_FN] = { - {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11}, - {_______, KC_GRAVE, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, KC_MINUS, KC_EQUAL, KC_F12}, - {_______, XXXXXXX, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LBRACKET, KC_RBRACKET}, - {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, _______, KC_MENU, _______} + {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11}, + {_______, KC_GRAVE, KC_LBRC, KC_PGUP, KC_RBRC, XXXXXXX, XXXXXXX, KC_MINS, KC_UP, KC_EQUAL, XXXXXXX, KC_F12}, + {_______, KC_TAB, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, XXXXXXX, XXXXXXX}, + {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, _______, KC_MENU, _______} }, /* Plover layer (http://opensteno.org) From 6631abc1cb0e570271bcf33464e3af17b6fc0b87 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Tue, 20 Sep 2016 21:38:59 -0500 Subject: [PATCH 47/92] Made Serial and I2C not include the Other This saves 192 bytes --- keyboards/lets_split/config.h | 7 ++++++- keyboards/lets_split/i2c.c | 3 +++ keyboards/lets_split/matrix.c | 23 +++++++++++++++-------- keyboards/lets_split/rules.mk | 4 ++-- keyboards/lets_split/serial.c | 5 ++++- keyboards/lets_split/split_util.c | 8 ++++++-- 6 files changed, 36 insertions(+), 14 deletions(-) diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index ec99514aa3..f4d900accb 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -41,6 +41,11 @@ along with this program. If not, see . // #define USE_I2C +// Use serial if not using I2C +#ifndef USE_I2C +# define USE_SERIAL +#endif + // #define EE_HANDS #define I2C_MASTER_LEFT @@ -94,4 +99,4 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION -#endif \ No newline at end of file +#endif diff --git a/keyboards/lets_split/i2c.c b/keyboards/lets_split/i2c.c index c72789403e..084c890c40 100644 --- a/keyboards/lets_split/i2c.c +++ b/keyboards/lets_split/i2c.c @@ -6,6 +6,8 @@ #include #include "i2c.h" +#ifdef USE_I2C + // Limits the amount of we wait for any one i2c transaction. // Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is // 9 bits, a single transaction will take around 90μs to complete. @@ -157,3 +159,4 @@ ISR(TWI_vect) { // Reset everything, so we are ready for the next TWI interrupt TWCR |= (1<. #include "debug.h" #include "util.h" #include "matrix.h" -#include "i2c.h" -#include "serial.h" #include "split_util.h" #include "pro_micro.h" #include "config.h" +#ifdef USE_I2C +# include "i2c.h" +#else // USE_SERIAL +# include "serial.h" +#endif + #ifndef DEBOUNCE -# define DEBOUNCE 5 +# define DEBOUNCE 5 #endif #define ERROR_DISCONNECT_COUNT 5 @@ -145,6 +149,8 @@ uint8_t _matrix_scan(void) return 1; } +#ifdef USE_I2C + // Get rows from other half over i2c int i2c_transaction(void) { int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; @@ -176,7 +182,8 @@ i2c_error: // the cable is disconnceted, or something else went wrong return 0; } -#ifndef USE_I2C +#else // USE_SERIAL + int serial_transaction(void) { int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; @@ -199,7 +206,7 @@ uint8_t matrix_scan(void) #ifdef USE_I2C if( i2c_transaction() ) { -#else +#else // USE_SERIAL if( serial_transaction() ) { #endif // turn on the indicator led when halves are disconnected @@ -235,7 +242,7 @@ void matrix_slave_scan(void) { /* i2c_slave_buffer[i] = matrix[offset+i]; */ i2c_slave_buffer[i] = matrix[offset+i]; } -#else +#else // USE_SERIAL for (int i = 0; i < ROWS_PER_HAND; ++i) { serial_slave_buffer[i] = matrix[offset+i]; } @@ -290,7 +297,7 @@ static void init_cols(void) static matrix_row_t read_cols(void) { matrix_row_t result = 0; - for(int x = 0; x < MATRIX_COLS; x++) { + for(int x = 0; x < MATRIX_COLS; x++) { result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x); } return result; @@ -298,7 +305,7 @@ static matrix_row_t read_cols(void) static void unselect_rows(void) { - for(int x = 0; x < ROWS_PER_HAND; x++) { + for(int x = 0; x < ROWS_PER_HAND; x++) { _SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF); _SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF); } diff --git a/keyboards/lets_split/rules.mk b/keyboards/lets_split/rules.mk index 6961fbd556..6fde8a444c 100644 --- a/keyboards/lets_split/rules.mk +++ b/keyboards/lets_split/rules.mk @@ -52,7 +52,7 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT OPT_DEFS += -DBOOTLOADER_SIZE=4096 # Build Options -# change to "no" to disable the options, or define them in the Makefile in +# change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) @@ -71,4 +71,4 @@ RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -CUSTOM_MATRIX = yes \ No newline at end of file +CUSTOM_MATRIX = yes diff --git a/keyboards/lets_split/serial.c b/keyboards/lets_split/serial.c index f439c2f20b..6faed09ce0 100644 --- a/keyboards/lets_split/serial.c +++ b/keyboards/lets_split/serial.c @@ -10,9 +10,10 @@ #include #include #include - #include "serial.h" +#ifdef USE_SERIAL + // Serial pulse period in microseconds. Its probably a bad idea to lower this // value. #define SERIAL_DELAY 24 @@ -223,3 +224,5 @@ int serial_update_buffers(void) { sei(); return 0; } + +#endif diff --git a/keyboards/lets_split/split_util.c b/keyboards/lets_split/split_util.c index 65003a71a4..461921798f 100644 --- a/keyboards/lets_split/split_util.c +++ b/keyboards/lets_split/split_util.c @@ -6,11 +6,15 @@ #include #include "split_util.h" #include "matrix.h" -#include "i2c.h" -#include "serial.h" #include "keyboard.h" #include "config.h" +#ifdef USE_I2C +# include "i2c.h" +#else +# include "serial.h" +#endif + volatile bool isLeftHand = true; static void setup_handedness(void) { From b30e6c1c9e1c876ddf95fcc3bc727a04ca6f2abc Mon Sep 17 00:00:00 2001 From: IBNobody Date: Tue, 20 Sep 2016 21:46:33 -0500 Subject: [PATCH 48/92] Created I2C and Serial keymaps for unit testing Having a dedicated I2C keymap and a dedicated serial keymap will allow the testing suite to check both conditions. --- keyboards/lets_split/keymaps/i2c/config.h | 102 +++++++++ keyboards/lets_split/keymaps/i2c/keymap.c | 214 +++++++++++++++++++ keyboards/lets_split/keymaps/serial/config.h | 102 +++++++++ keyboards/lets_split/keymaps/serial/keymap.c | 214 +++++++++++++++++++ 4 files changed, 632 insertions(+) create mode 100644 keyboards/lets_split/keymaps/i2c/config.h create mode 100644 keyboards/lets_split/keymaps/i2c/keymap.c create mode 100644 keyboards/lets_split/keymaps/serial/config.h create mode 100644 keyboards/lets_split/keymaps/serial/keymap.c diff --git a/keyboards/lets_split/keymaps/i2c/config.h b/keyboards/lets_split/keymaps/i2c/config.h new file mode 100644 index 0000000000..2671fabf6d --- /dev/null +++ b/keyboards/lets_split/keymaps/i2c/config.h @@ -0,0 +1,102 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x3060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Wootpatoot +#define PRODUCT Lets Split +#define DESCRIPTION A split keyboard for the cheap makers + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 8 +#define MATRIX_COLS 6 + +// wiring of each half +#define MATRIX_ROW_PINS { B5, B4, E6, D7 } +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } + +#define CATERINA_BOOTLOADER + +#define USE_I2C + +// Use serial if not using I2C +#ifndef USE_I2C +# define USE_SERIAL +#endif + +// #define EE_HANDS + +#define I2C_MASTER_LEFT +// #define I2C_MASTER_RIGHT + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D4 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 8 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/lets_split/keymaps/i2c/keymap.c b/keyboards/lets_split/keymaps/i2c/keymap.c new file mode 100644 index 0000000000..0d2d94b672 --- /dev/null +++ b/keyboards/lets_split/keymaps/i2c/keymap.c @@ -0,0 +1,214 @@ +#include "lets_split.h" +#include "action_layer.h" +#include "eeconfig.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 _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = KEYMAP( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = KEYMAP( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = KEYMAP( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = KEYMAP( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} \ No newline at end of file diff --git a/keyboards/lets_split/keymaps/serial/config.h b/keyboards/lets_split/keymaps/serial/config.h new file mode 100644 index 0000000000..f4d900accb --- /dev/null +++ b/keyboards/lets_split/keymaps/serial/config.h @@ -0,0 +1,102 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x3060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Wootpatoot +#define PRODUCT Lets Split +#define DESCRIPTION A split keyboard for the cheap makers + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 8 +#define MATRIX_COLS 6 + +// wiring of each half +#define MATRIX_ROW_PINS { B5, B4, E6, D7 } +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } + +#define CATERINA_BOOTLOADER + +// #define USE_I2C + +// Use serial if not using I2C +#ifndef USE_I2C +# define USE_SERIAL +#endif + +// #define EE_HANDS + +#define I2C_MASTER_LEFT +// #define I2C_MASTER_RIGHT + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D4 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 8 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/lets_split/keymaps/serial/keymap.c b/keyboards/lets_split/keymaps/serial/keymap.c new file mode 100644 index 0000000000..0d2d94b672 --- /dev/null +++ b/keyboards/lets_split/keymaps/serial/keymap.c @@ -0,0 +1,214 @@ +#include "lets_split.h" +#include "action_layer.h" +#include "eeconfig.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 _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = KEYMAP( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = KEYMAP( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = KEYMAP( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = KEYMAP( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} \ No newline at end of file From 7a91cce869f7cda8a42bf071ba77ee6096772d20 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Wed, 21 Sep 2016 08:02:51 +0200 Subject: [PATCH 49/92] - Updated backlight levels for KC60 --- keyboards/kc60/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/kc60/config.h b/keyboards/kc60/config.h index c4a9b9ff82..29695d0b9d 100644 --- a/keyboards/kc60/config.h +++ b/keyboards/kc60/config.h @@ -62,7 +62,7 @@ along with this program. If not, see . //#define MATRIX_HAS_GHOST /* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 +#define BACKLIGHT_LEVELS 5 /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE From e1f131db8e59c6ed3471906d3a62457d593f51af Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Wed, 21 Sep 2016 10:11:42 +0200 Subject: [PATCH 50/92] restore each_tap callback --- quantum/process_keycode/process_tap_dance.c | 1 + 1 file changed, 1 insertion(+) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index 79ade4d000..6ae362c4c2 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -70,6 +70,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { action->state.keycode = keycode; action->state.count++; action->state.timer = timer_read(); + process_tap_dance_action_on_each_tap (action); if (last_td && last_td != keycode) { qk_tap_dance_action_t *paction = &tap_dance_actions[last_td - QK_TAP_DANCE]; From 0edc82f0300924394324e2f3c4d2f8f0008439db Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Wed, 21 Sep 2016 11:29:34 +0200 Subject: [PATCH 51/92] formatting --- quantum/process_keycode/process_tap_dance.h | 8 ++++---- readme.md | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h index d7b857bdc6..49b06e4508 100644 --- a/quantum/process_keycode/process_tap_dance.h +++ b/quantum/process_keycode/process_tap_dance.h @@ -39,15 +39,15 @@ typedef struct #define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) { \ .fn = { NULL, qk_tap_dance_pair_finished, qk_tap_dance_pair_reset }, \ - .user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 }) \ + .user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 }), \ } #define ACTION_TAP_DANCE_FN(user_fn) { \ - .fn = { NULL, user_fn, NULL } \ + .fn = { NULL, user_fn, NULL }, \ } -#define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset) { \ - .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset } \ +#define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset) { \ + .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset }, \ } extern qk_tap_dance_action_t tap_dance_actions[]; diff --git a/readme.md b/readme.md index ea20b5e017..a7320202b2 100644 --- a/readme.md +++ b/readme.md @@ -526,7 +526,7 @@ This array specifies what actions shall be taken when a tap-dance key is in acti * `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise. When the key is held, the appropriate keycode is registered: `kc1` when pressed and held, `kc2` when tapped once, then pressed and held. * `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the final tap count of the tap dance action. -* `ACTION_TAP_DANCE_FN_ADVANCED(on_each_tap_fn, on_dance_finished_fn, on_reset_fn)`: Calls the first specified function - defined in the user keymap - on every tap, the second function on when the dance action finishes (like the previous option), and the last function when the tap dance action resets. +* `ACTION_TAP_DANCE_FN_ADVANCED(on_each_tap_fn, on_dance_finished_fn, on_dance_reset_fn)`: Calls the first specified function - defined in the user keymap - on every tap, the second function on when the dance action finishes (like the previous option), and the last function when the tap dance action resets. The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise. From cda4b534fa4921c2d8f9884aa6a144333e7b07c4 Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Wed, 21 Sep 2016 11:29:43 +0200 Subject: [PATCH 52/92] add user_data field --- quantum/process_keycode/process_tap_dance.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h index 49b06e4508..f753cbba66 100644 --- a/quantum/process_keycode/process_tap_dance.h +++ b/quantum/process_keycode/process_tap_dance.h @@ -44,10 +44,12 @@ typedef struct #define ACTION_TAP_DANCE_FN(user_fn) { \ .fn = { NULL, user_fn, NULL }, \ + .user_data = NULL, \ } #define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset) { \ .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset }, \ + .user_data = NULL, \ } extern qk_tap_dance_action_t tap_dance_actions[]; From 9d629719cb0da23a115ec811359ccd9b749cf8fa Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Wed, 21 Sep 2016 14:41:37 +0000 Subject: [PATCH 53/92] Filled Impossible Layout documentation --- keyboards/planck/keymaps/impossible/readme.md | 91 ++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/impossible/readme.md b/keyboards/planck/keymaps/impossible/readme.md index de9680b498..af85d7603b 100644 --- a/keyboards/planck/keymaps/impossible/readme.md +++ b/keyboards/planck/keymaps/impossible/readme.md @@ -1,2 +1,91 @@ -# The Default Planck Layout +# The Impossible Layout +The Impossible Layout is named such because it manages to fit in both a numpad and an inverted-T arrow cluster into the same layer as the alpha keys. + +## Main layout + +The Impossible Layout places the middle column of the alphas onto where the punctuation keys were, moving he most used punctuation to be accessed by the thumbs. Because removing the middle columns fits with the Workman layout's philosopy, Workman is used as the basis for the layout. This means the layout should be very easy to learn for Workman users, and reasonable for Colemak users. Other space gains are made by combining keys that are only ever chorded with other non symbol keys (with function-layer alternatives where needed). + +### Alpha-numeric layer + +,-----------------------------------------------------------------------------------------------. +| Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +| A | S | H | T | G | N | E | O | I | 4 | 5 | 6 | +|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| +| Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +|Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 |Adj/Ent| +`-----------------------------------------------------------------------------------------------' + +### Function layer + +,-----------------------------------------------------------------------------------------------. +| ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +| Tab | [ | ] | - | Del | ' | ( | ) | F11 | F4 | F5 | F6 | +|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| +| Menu | | | = | \ | / | | | PgUp | F1 | F2 | F3 | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +|Alt/Tab| Gui | ~ |CTL/Bsp| Fn/Ent|SFT/Spc| ; | Home | PgDn | End | F10 |Adj/Ent| +`-----------------------------------------------------------------------------------------------' + +## Qwerty + +The Qwerty layer, mostly intended for gaming use, makes use of the doubled chorded/non-symbolic keys to obtain use of the entire alpha-numeric typing area. + +### Qwerty layer + +,-----------------------------------------------------------------------------------------------. +|Gui/Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | +|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| +| Ctrl | Q | W | E | R | T | Y | U | I | O | P | / | +|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| +| Shift | A | S | D | F | G | H | J | K | L | ; | " | +|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| +|Alt/Tab| Z | X | C | V | Fn/SPC| B | N | M | , | . |Adj/Ent| +`-----------------------------------------------------------------------------------------------' + +### Qwerty Fn Layer + +,-----------------------------------------------------------------------------------------------. +| Gui | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +| Ctrl | ~ | [ | PgUp | ] | | | - | Up | = | | F12 | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +| Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | | | +|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| +|Alt/Tab| | | | | Fn/Spc| | | | | Menu |Adj/Ent| +`-----------------------------------------------------------------------------------------------' + +## Stenography + +The Steno/Plover layer moves the number row below the regular keys, providing a much more comfortable placement for the thumb keys. Using this layout will require a slightly different dictionary to account for different keys being adjacent to the number row. + +### Steno Layer + +,-----------------------------------------------------------------------------------------------. +| S | T | P | H | * | F | P | L | T | D | | | +|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| +| S | K | W | R | * | R | B | G | S | Z | | | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +| # | # | # | # | | # | # | # | # | # | | | +|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| +| | | A | O | | E | U | | | | |Adj/Ent| +`-----------------------------------------------------------------------------------------------' + +## Adjustments and Options + +In order to switch between layouts and change other keyboard settings, an adjustment layer is accessible from the same position over any layout. + +### Adjustment Layer + +,-----------------------------------------------------------------------------------------------. +| | | | | | | | | Insert| PrtSc | Pause | RESET | +|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| +| | | | | | | | CapLk |Voice +| Audio |MIDIoff| | +|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| +| | | | | | | | ScrLk |Voice -| Music |MIDI on| | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +| | | | | | | | Numlk |Workman| Qwerty| Plover|Adj/Ent| +`-----------------------------------------------------------------------------------------------' From 073a1f21bb4ccf8dc47ec3757e64db97d4011ab8 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Wed, 21 Sep 2016 14:45:05 +0000 Subject: [PATCH 54/92] Corrected Impossible Layout readme tables --- keyboards/planck/keymaps/impossible/readme.md | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/readme.md b/keyboards/planck/keymaps/impossible/readme.md index af85d7603b..7b3c87b4ec 100644 --- a/keyboards/planck/keymaps/impossible/readme.md +++ b/keyboards/planck/keymaps/impossible/readme.md @@ -8,27 +8,17 @@ The Impossible Layout places the middle column of the alphas onto where the punc ### Alpha-numeric layer -,-----------------------------------------------------------------------------------------------. | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| | A | S | H | T | G | N | E | O | I | 4 | 5 | 6 | -|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 |Adj/Ent| -`-----------------------------------------------------------------------------------------------' ### Function layer -,-----------------------------------------------------------------------------------------------. | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| | Tab | [ | ] | - | Del | ' | ( | ) | F11 | F4 | F5 | F6 | -|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| | Menu | | | = | \ | / | | | PgUp | F1 | F2 | F3 | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| |Alt/Tab| Gui | ~ |CTL/Bsp| Fn/Ent|SFT/Spc| ; | Home | PgDn | End | F10 |Adj/Ent| -`-----------------------------------------------------------------------------------------------' ## Qwerty @@ -36,27 +26,17 @@ The Qwerty layer, mostly intended for gaming use, makes use of the doubled chord ### Qwerty layer -,-----------------------------------------------------------------------------------------------. |Gui/Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | -|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| | Ctrl | Q | W | E | R | T | Y | U | I | O | P | / | -|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| | Shift | A | S | D | F | G | H | J | K | L | ; | " | -|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| |Alt/Tab| Z | X | C | V | Fn/SPC| B | N | M | , | . |Adj/Ent| -`-----------------------------------------------------------------------------------------------' ### Qwerty Fn Layer -,-----------------------------------------------------------------------------------------------. | Gui | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| | Ctrl | ~ | [ | PgUp | ] | | | - | Up | = | | F12 | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| | Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | | | -|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| |Alt/Tab| | | | | Fn/Spc| | | | | Menu |Adj/Ent| -`-----------------------------------------------------------------------------------------------' ## Stenography @@ -64,15 +44,10 @@ The Steno/Plover layer moves the number row below the regular keys, providing a ### Steno Layer -,-----------------------------------------------------------------------------------------------. | S | T | P | H | * | F | P | L | T | D | | | -|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| | S | K | W | R | * | R | B | G | S | Z | | | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| | # | # | # | # | | # | # | # | # | # | | | -|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| | | | A | O | | E | U | | | | |Adj/Ent| -`-----------------------------------------------------------------------------------------------' ## Adjustments and Options @@ -80,12 +55,7 @@ In order to switch between layouts and change other keyboard settings, an adjust ### Adjustment Layer -,-----------------------------------------------------------------------------------------------. | | | | | | | | | Insert| PrtSc | Pause | RESET | -|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| | | | | | | | | CapLk |Voice +| Audio |MIDIoff| | -|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| | | | | | | | | ScrLk |Voice -| Music |MIDI on| | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| | | | | | | | | Numlk |Workman| Qwerty| Plover|Adj/Ent| -`-----------------------------------------------------------------------------------------------' From 9e6a493172da4f36df6b35307a5796ee8cb2cbec Mon Sep 17 00:00:00 2001 From: UnderSampled Date: Wed, 21 Sep 2016 18:55:14 +0000 Subject: [PATCH 55/92] Fixed Impossible Layout readme tables (again) --- keyboards/planck/keymaps/impossible/readme.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/keyboards/planck/keymaps/impossible/readme.md b/keyboards/planck/keymaps/impossible/readme.md index 7b3c87b4ec..02c719197e 100644 --- a/keyboards/planck/keymaps/impossible/readme.md +++ b/keyboards/planck/keymaps/impossible/readme.md @@ -8,6 +8,8 @@ The Impossible Layout places the middle column of the alphas onto where the punc ### Alpha-numeric layer +| | | | | | | | | | | | | +|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | | A | S | H | T | G | N | E | O | I | 4 | 5 | 6 | | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | @@ -15,6 +17,8 @@ The Impossible Layout places the middle column of the alphas onto where the punc ### Function layer +| | | | | | | | | | | | | +|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | | Tab | [ | ] | - | Del | ' | ( | ) | F11 | F4 | F5 | F6 | | Menu | | | = | \ | / | | | PgUp | F1 | F2 | F3 | @@ -26,6 +30,8 @@ The Qwerty layer, mostly intended for gaming use, makes use of the doubled chord ### Qwerty layer +| | | | | | | | | | | | | +|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| |Gui/Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | | Ctrl | Q | W | E | R | T | Y | U | I | O | P | / | | Shift | A | S | D | F | G | H | J | K | L | ; | " | @@ -33,6 +39,8 @@ The Qwerty layer, mostly intended for gaming use, makes use of the doubled chord ### Qwerty Fn Layer +| | | | | | | | | | | | | +|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| | Gui | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | | Ctrl | ~ | [ | PgUp | ] | | | - | Up | = | | F12 | | Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | | | @@ -44,6 +52,8 @@ The Steno/Plover layer moves the number row below the regular keys, providing a ### Steno Layer +| | | | | | | | | | | | | +|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| | S | T | P | H | * | F | P | L | T | D | | | | S | K | W | R | * | R | B | G | S | Z | | | | # | # | # | # | | # | # | # | # | # | | | @@ -55,6 +65,8 @@ In order to switch between layouts and change other keyboard settings, an adjust ### Adjustment Layer +| | | | | | | | | | | | | +|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| | | | | | | | | | Insert| PrtSc | Pause | RESET | | | | | | | | | CapLk |Voice +| Audio |MIDIoff| | | | | | | | | | ScrLk |Voice -| Music |MIDI on| | From d4309990472895bbbe82f7ba22ed33c16f928778 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Fri, 23 Sep 2016 00:55:15 +0200 Subject: [PATCH 56/92] Fix issue #772 Meh and Hyper not working --- tmk_core/common/action.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index 08ef22eb97..d485b46c77 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -155,9 +155,10 @@ void process_action(keyrecord_t *record, action_t action) action.key.mods<<4; if (event.pressed) { if (mods) { - if (IS_MOD(action.key.code)) { + if (IS_MOD(action.key.code) || action.key.code == KC_NO) { // e.g. LSFT(KC_LGUI): we don't want the LSFT to be weak as it would make it useless. - // this also makes LSFT(KC_LGUI) behave exactly the same as LGUI(KC_LSFT) + // This also makes LSFT(KC_LGUI) behave exactly the same as LGUI(KC_LSFT). + // Same applies for some keys like KC_MEH which are declared as MEH(KC_NO). add_mods(mods); } else { add_weak_mods(mods); @@ -168,7 +169,7 @@ void process_action(keyrecord_t *record, action_t action) } else { unregister_code(action.key.code); if (mods) { - if (IS_MOD(action.key.code)) { + if (IS_MOD(action.key.code) || action.key.code == KC_NO) { del_mods(mods); } else { del_weak_mods(mods); From 6e5142ca3ee7c45a0776d84ba667c5504dc85cd8 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Thu, 22 Sep 2016 22:05:12 -0400 Subject: [PATCH 57/92] Adds EPRM reset key --- keyboards/ergodox/keymaps/default/keymap.c | 12 ++++++++++-- keyboards/ergodox/keymaps/default/readme.md | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/keymaps/default/keymap.c b/keyboards/ergodox/keymaps/default/keymap.c index 1b80cb3a23..2f399bd181 100644 --- a/keyboards/ergodox/keymaps/default/keymap.c +++ b/keyboards/ergodox/keymaps/default/keymap.c @@ -7,6 +7,8 @@ #define SYMB 1 // symbols #define MDIA 2 // media keys +#define EPRM M(1) // Macro 1: Reset EEPROM + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer * @@ -62,7 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | . | 0 | = | | + * | EPRM | | | | | | | . | 0 | = | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | @@ -79,7 +81,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, @@ -149,6 +151,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); } break; + case 1: + if (record->event.pressed) { // For resetting EEPROM + eeconfig_init(); + } + break; } return MACRO_NONE; }; @@ -158,6 +165,7 @@ void matrix_init_user(void) { }; + // Runs constantly in the background, in a loop. void matrix_scan_user(void) { diff --git a/keyboards/ergodox/keymaps/default/readme.md b/keyboards/ergodox/keymaps/default/readme.md index 8f6dba45e9..f68138ed62 100644 --- a/keyboards/ergodox/keymaps/default/readme.md +++ b/keyboards/ergodox/keymaps/default/readme.md @@ -2,6 +2,8 @@ ## Changelog +* Sep 22, 2016: + * Created a new key in layer 1 (bottom-corner key) that resets the EEPROM. * Feb 2, 2016 (V1.1): * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). From fad54872667d493ccd95e2171addf6c6b22343b7 Mon Sep 17 00:00:00 2001 From: TerryMathews Date: Thu, 22 Sep 2016 23:33:22 -0400 Subject: [PATCH 58/92] Initial support for TADA68 --- keyboards/tada68/Makefile | 3 + keyboards/tada68/config.h | 94 +++++++++++++++++++++ keyboards/tada68/keymaps/default/Makefile | 21 +++++ keyboards/tada68/keymaps/default/keymap.c | 98 ++++++++++++++++++++++ keyboards/tada68/keymaps/default/readme.md | 1 + keyboards/tada68/readme.md | 4 + keyboards/tada68/rules.mk | 66 +++++++++++++++ keyboards/tada68/tada68.c | 30 +++++++ keyboards/tada68/tada68.h | 43 ++++++++++ 9 files changed, 360 insertions(+) create mode 100644 keyboards/tada68/Makefile create mode 100644 keyboards/tada68/config.h create mode 100644 keyboards/tada68/keymaps/default/Makefile create mode 100644 keyboards/tada68/keymaps/default/keymap.c create mode 100644 keyboards/tada68/keymaps/default/readme.md create mode 100644 keyboards/tada68/readme.md create mode 100644 keyboards/tada68/rules.mk create mode 100644 keyboards/tada68/tada68.c create mode 100644 keyboards/tada68/tada68.h diff --git a/keyboards/tada68/Makefile b/keyboards/tada68/Makefile new file mode 100644 index 0000000000..4e2a6f00fd --- /dev/null +++ b/keyboards/tada68/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/tada68/config.h b/keyboards/tada68/config.h new file mode 100644 index 0000000000..5c2b290624 --- /dev/null +++ b/keyboards/tada68/config.h @@ -0,0 +1,94 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0003 +#define MANUFACTURER TADA +#define PRODUCT TADA68 +#define DESCRIPTION QMK keyboard firmware for TADA68 with WS2812 support + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +// ROWS: Top to bottom, COLS: Left to right + +#define MATRIX_ROW_PINS {D0,D1,F6,F7,D5} +#define MATRIX_COL_PINS {F0,F1,E6,C7,C6,B7,D4,B1,B0,B5,B4,D7,D6,B3,F4} +#define UNUSED_PINS + +#define BACKLIGHT_PIN B6 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* Backlight configuration + */ +#define BACKLIGHT_LEVELS 4 + +/* Underlight configuration + */ + +#define RGB_DI_PIN F5 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 4 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/tada68/keymaps/default/Makefile b/keyboards/tada68/keymaps/default/Makefile new file mode 100644 index 0000000000..2a7ff27793 --- /dev/null +++ b/keyboards/tada68/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/tada68/keymaps/default/keymap.c b/keyboards/tada68/keymaps/default/keymap.c new file mode 100644 index 0000000000..da57c0343b --- /dev/null +++ b/keyboards/tada68/keymaps/default/keymap.c @@ -0,0 +1,98 @@ +#include "tada68.h" + + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// 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 _BL 0 +#define _FL 1 + +#define _______ KC_TRNS + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,----------------------------------------------------------------. + * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` | + * |----------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del | + * |----------------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp| + * |----------------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn| + * |----------------------------------------------------------------| + * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig | + * `----------------------------------------------------------------' + */ +[_BL] = KEYMAP_ANSI( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS,KC_DEL, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,KC_PGUP, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,KC_UP,KC_PGDN, \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(_FL),KC_RCTRL, KC_LEFT,KC_DOWN,KC_RGHT), + + /* Keymap _FL: Function Layer + * ,----------------------------------------------------------------. + * | | | | | | | | | | | | | | RESET| | + * |----------------------------------------------------------------| + * | | | | | | | | | | | |BL-|BL+|BL | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | F1|F2 | F3|F4 | F5| F6| F7| F8| | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | + * `----------------------------------------------------------------' + */ +[_FL] = KEYMAP_ANSI( + #ifdef RGBLIGHT_ENABLE + _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \ + _______,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______,_______,_______,_______, _______), + #else + _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______,_______,_______,_______, _______), + #endif +}; + +/*enum function_id { + //SHIFT_ESC, +}; + +const uint16_t PROGMEM fn_actions[] = { + //[0] = ACTION_FUNCTION(SHIFT_ESC), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + } +}*/ diff --git a/keyboards/tada68/keymaps/default/readme.md b/keyboards/tada68/keymaps/default/readme.md new file mode 100644 index 0000000000..36760d6b91 --- /dev/null +++ b/keyboards/tada68/keymaps/default/readme.md @@ -0,0 +1 @@ +# default TADA68 layout diff --git a/keyboards/tada68/readme.md b/keyboards/tada68/readme.md new file mode 100644 index 0000000000..552fdea529 --- /dev/null +++ b/keyboards/tada68/readme.md @@ -0,0 +1,4 @@ +TADA68 keyboard firmware +====================== + +TODO: to be updated. diff --git a/keyboards/tada68/rules.mk b/keyboards/tada68/rules.mk new file mode 100644 index 0000000000..1102584d8a --- /dev/null +++ b/keyboards/tada68/rules.mk @@ -0,0 +1,66 @@ + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150) +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID diff --git a/keyboards/tada68/tada68.c b/keyboards/tada68/tada68.c new file mode 100644 index 0000000000..24f89048cb --- /dev/null +++ b/keyboards/tada68/tada68.c @@ -0,0 +1,30 @@ +#include "tada68.h" +#include "led.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + matrix_init_user(); + led_init_ports(); +}; + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + matrix_scan_user(); +}; + +void led_init_ports(void) { + // * Set our LED pins as output + DDRB |= (1<<2); +} + +void led_set_kb(uint8_t usb_led) { + if (usb_led & (1< Date: Fri, 23 Sep 2016 14:20:05 -0400 Subject: [PATCH 59/92] Disable RGB led support until a suitable pin is located --- keyboards/tada68/config.h | 9 ++++++--- keyboards/tada68/rules.mk | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/keyboards/tada68/config.h b/keyboards/tada68/config.h index 5c2b290624..5d8757936d 100644 --- a/keyboards/tada68/config.h +++ b/keyboards/tada68/config.h @@ -66,12 +66,15 @@ along with this program. If not, see . /* Underlight configuration */ -#define RGB_DI_PIN F5 +/*#define RGB_DI_PIN E2 #define RGBLIGHT_TIMER -#define RGBLED_NUM 4 // Number of LEDs +#define RGBLED_NUM 2 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 -#define RGBLIGHT_VAL_STEP 17 +#define RGBLIGHT_VAL_STEP 17*/ +//Disabled while I figure out a suitable pin for RGB support. +//I've tried F5, D2, D3, and E2 but it's possible the end of my +//strand is bad. New LEDs on order. /* * Feature disable options diff --git a/keyboards/tada68/rules.mk b/keyboards/tada68/rules.mk index 1102584d8a..d8ec423655 100644 --- a/keyboards/tada68/rules.mk +++ b/keyboards/tada68/rules.mk @@ -58,7 +58,7 @@ EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) CONSOLE_ENABLE ?= yes # Console for debug(+400) COMMAND_ENABLE ?= yes # Commands for debug and configuration NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870) +RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality (+4870) BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150) MIDI_ENABLE ?= no # MIDI controls AUDIO_ENABLE ?= no From 1a96b2cdc8895bd9f219e6c793aeee6ff7ce81f6 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Fri, 23 Sep 2016 20:57:36 -0400 Subject: [PATCH 60/92] Disables sleep LED by default --- keyboards/ergodox/ez/rules.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keyboards/ergodox/ez/rules.mk b/keyboards/ergodox/ez/rules.mk index 37e554b304..a9715beb85 100644 --- a/keyboards/ergodox/ez/rules.mk +++ b/keyboards/ergodox/ez/rules.mk @@ -71,6 +71,8 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512 # comment out to disable the options. # +SLEEP_LED_ENABLE = no + ifndef QUANTUM_DIR include ../../../Makefile endif From f0441f08b87986f49479f1503b11a3d3f899d58e Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sun, 25 Sep 2016 16:32:06 +0200 Subject: [PATCH 61/92] - Added dbroqua layout for HHKB keyboard --- keyboards/hhkb/keymaps/dbroqua/keymap.c | 70 ++++++++++++++++++++++++ keyboards/hhkb/keymaps/dbroqua/readme.md | 9 +++ 2 files changed, 79 insertions(+) create mode 100644 keyboards/hhkb/keymaps/dbroqua/keymap.c create mode 100644 keyboards/hhkb/keymaps/dbroqua/readme.md diff --git a/keyboards/hhkb/keymaps/dbroqua/keymap.c b/keyboards/hhkb/keymaps/dbroqua/keymap.c new file mode 100644 index 0000000000..ef43aae281 --- /dev/null +++ b/keyboards/hhkb/keymaps/dbroqua/keymap.c @@ -0,0 +1,70 @@ +/* + * dbroqua HHKB Layout + */ +#include "hhkb.h" + +#define BASE 0 +#define FN 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* BASE Level: Default Layer + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + * |-----------------------------------------------------------------------------------------+ + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / | Left |Right| + * +-----------------------------------------------------------------------------------------+ + * | Gui | Alt | Space | AltGr | fn | + * `----------------------------------------------------------------´ + */ + [BASE] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LEFT, KC_RGHT, \ + KC_LGUI, KC_LALT, /* */ KC_SPC, KC_RALT, MO(FN) + ), + + /* BASE Level: Default Layer + * ,-----------------------------------------------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F0 | F11 | F12 | Ins | Del| + * |-----------------------------------------------------------------------------------------+ + * | Caps | | | | | | | | | | | Up | | | + * |-----------------------------------------------------------------------------------------+ + * | | Vol-| Vol+| Mute| | | |PrtSc| Home| PgUp| Left |Right| | + * |-----------------------------------------------------------------------------------------+ + * | | Prev| Play| Next| | | | | End |PgDwn| Down| Up | Down| + * +-----------------------------------------------------------------------------------------+ + * | | | | | | + * `----------------------------------------------------------------´ + */ + [FN] = KEYMAP( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, \ + KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_UP, KC_DOWN, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/hhkb/keymaps/dbroqua/readme.md b/keyboards/hhkb/keymaps/dbroqua/readme.md new file mode 100644 index 0000000000..0afebc84c8 --- /dev/null +++ b/keyboards/hhkb/keymaps/dbroqua/readme.md @@ -0,0 +1,9 @@ +# Dbroqua Layout + +* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/78eaf35e80bb714eea80cb4049dedb01 + +# Programming Instructions: +Enter into programming mode and run the following command. +``` +$ sudo KEYMAP=dbroqua make dfu +``` \ No newline at end of file From 77099c777aa34e07548f64928d5d233c4cf35a5e Mon Sep 17 00:00:00 2001 From: Jeremy Cowgar Date: Sun, 25 Sep 2016 12:23:59 -0400 Subject: [PATCH 62/92] =?UTF-8?q?Added=20Jeremy=E2=80=99s=20Atreus=20Layou?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/atreus/keymaps/jeremy/keymap.c | 66 +++++++++++++++++++++++ keyboards/atreus/keymaps/jeremy/readme.md | 45 ++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 keyboards/atreus/keymaps/jeremy/keymap.c create mode 100644 keyboards/atreus/keymaps/jeremy/readme.md diff --git a/keyboards/atreus/keymaps/jeremy/keymap.c b/keyboards/atreus/keymaps/jeremy/keymap.c new file mode 100644 index 0000000000..90ec6f9049 --- /dev/null +++ b/keyboards/atreus/keymaps/jeremy/keymap.c @@ -0,0 +1,66 @@ +// This is the personal keymap of Jeremy Cowgar (@jcowgar). It is written for the programmer. + +#include "atreus.h" +#include "action_layer.h" +#include "keymap_colemak.h" + +#define PREVENT_STUCK_MODIFIERS + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +#define ALPH 0 +#define NUMS 1 +#define CURS 2 +#define SYMB 3 +#define FKEY 4 + +// Some handy macros to keep the keymaps clean and easier to maintain +#define KM_SAVE LGUI(CM_S) +#define KM_CLSE LGUI(CM_W) +#define KM_OPEN LGUI(CM_O) + +#define KM_COPY LGUI(KC_C) +#define KM_CUT LGUI(KC_X) +#define KM_PAST LGUI(KC_V) +#define KM_UNDO LGUI(KC_Z) +#define KM_REDO LGUI(LSFT(KC_Z)) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[ALPH] = { + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P}, + {KC_A, LT(NUMS, KC_S), LT(FKEY, KC_D), KC_F, KC_G, KC_TRNS, KC_H, KC_J, LT(CURS, KC_K), LT(SYMB, KC_L), KC_SCLN}, + {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH}, + {KC_LCTL, KC_ESC, KC_NO, KC_LSFT, KC_SPC, KC_LGUI, KC_ENT, KC_RSFT, KC_NO, KC_ESC, KC_RCTL} +}, +[NUMS] = { + {KC_TRNS, KC_TRNS, KC_TRNS, KC_ASTR, KC_SLSH, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_SLSH}, + {KC_TRNS, KC_TRNS, KC_EQL, KC_PLUS, KC_MINS, KC_TRNS, KC_LPRN, KC_4, KC_5, KC_6, KC_ASTR}, + {KC_TRNS, KC_TRNS, KC_DOT, KC_COMM, CM_SCLN, KC_TRNS, KC_RPRN, KC_1, KC_2, KC_3, KC_MINS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_EQL, KC_PLUS} +}, +[CURS] = { + {KC_TRNS, KC_BSPC, KC_UP, KC_DELT, KC_PGUP, KC_TRNS, KC_TRNS, KM_SAVE, KC_TRNS, KM_OPEN, KC_TRNS}, + {KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KM_UNDO, KC_LALT, KC_TRNS, KC_LGUI, KC_TRNS}, + {KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_MPLY, KM_COPY, KM_REDO, KM_CLSE, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TAB, KM_CUT, KM_PAST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}, +[SYMB] = { + {KC_BSLS, KC_EXLM, KC_LABK, KC_RABK, CM_COLN, KC_TRNS, KC_UNDS, KC_DLR, KC_QUES, KC_TRNS, KC_PERC}, + {KC_AT, KC_AMPR, KC_LPRN, KC_RPRN, CM_SCLN, KC_TRNS, KC_COMM, KC_DOT, KC_QUOT, KC_TRNS, KC_TILD}, + {KC_HASH, KC_PIPE, KC_LCBR, KC_RCBR, KC_SLSH, KC_TRNS, KC_TRNS, KC_GRV, KC_DQT, KC_TRNS, KC_CIRC}, + {KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}, +[FKEY] = { + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F5, KC_F6, KC_F7, KC_F8}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}}; + +const uint16_t PROGMEM fn_actions[] = {}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) {} + + return MACRO_NONE; +}; diff --git a/keyboards/atreus/keymaps/jeremy/readme.md b/keyboards/atreus/keymaps/jeremy/readme.md new file mode 100644 index 0000000000..df0179a8e0 --- /dev/null +++ b/keyboards/atreus/keymaps/jeremy/readme.md @@ -0,0 +1,45 @@ +Jeremy's Atreus Key Mapping +=========================== + +I am a programmer by trade that suffers from the beginning stages of RSI. As a programmer I use letters, symbols and cursor navigation most often. To prevent strange finger gymnastics, I wrote a script to rank which non-letter characters occurred in my primary source projects most often and then placed these characters in the easiest to reach locations, for me. I made heavy use of momentary layer toggling. + +My layout is also geared toward a software based Colemak mapping. I would like it to be hardware, but I use my Laptop on the go frequently and thus my laptop keyboard. I have moved the keycaps to reflect the Colemak layout. My laptop is a MacBook Pro (2015). + +## Main Layers + +1. [Letters](http://www.keyboard-layout-editor.com/#/gists/6861cb9df09ce78efaddf8aa7471e3ac) +2. [Symbols](http://www.keyboard-layout-editor.com/#/gists/8956a18b508a78e93b9c38ec3fcccaa5) +3. [Navigation](http://www.keyboard-layout-editor.com/#/gists/6ed492b714a7f54eb1c5de09b87fd8c4) +4. [Numbers](http://www.keyboard-layout-editor.com/#/gists/399ceb5624e8388e48a3a5eacac8e973) +5. [Function Keys](http://www.keyboard-layout-editor.com/#/gists/7fd7dc24c7048316f3724b1893c64e89) + +## Notes + +### General + +Some characters can be accessed multiple ways. This was done because you may be in a given layer, such as numbers, where when doing math, you may need quick access to the parentheses characters for grouping. This prevents some layer switching. + +I own an ErgoDox and plan on porting this as a base layer, then using the extra keys the ErgoDox provides accordingly. My goal, though, is to be fully functional on this base setup and build everything into muscle memory. + +### Symbol Layer + +1. I placed characters that deal with an if statement close together, such as !, & and |. +2. All matching brace/bracket characters are together as well. + +### Number Layer + +1. Everything I did was a compromise when trying to mimic a ten-key. I did the best I could. +2. Operators are duplicated on the right and left. I do not find it comfortable to use my pinky much, so I tend to use my left hand for +, -, * and / but those were also placed on the right hand to mimic the ten-key. +3. Parentheses were added for typing on the calculator. + +### Cursor Layer + +1. It includes basic audio controls because they didn't really fit anywhere else +2. It contains basic file manipulation. I'm not sure that was a good idea. I do save all the time, but Cmd+S isn't exactly hard. +3. It contains the backspace and delete keys right on top of the left and right arrows. +4. Cmd and Opt keys are duplicated. This makes for very easy navigation, for example on a Mac, Opt+Left/Right moves word by word. It also backspaces or deletes word by word. + +### Function Layer + +1. Almost all other layers I saw grouped the F keys into a bunch of three. This only gives nine function keys in order if you attempt to stay as close to the home row as possible. I went with a group of four, which gives all twelve function keys to the right hand, one row below and above the home row. +2. I duplicated the Command and Option keys the same as on the cursor layer. This makes it dead easy to hit modified function keys such as Cmd+Opt+F5. It's also easy to toss in a Shift modifier in there with the right thumb since the bottom row is preserved. From c40ad11615b6cb1d08ec2d3b284d59df00c57c1f Mon Sep 17 00:00:00 2001 From: Dustin Date: Sun, 25 Sep 2016 19:04:20 -0700 Subject: [PATCH 63/92] Fix lets_split.c so that audio can be disabled Matching the use of `#ifdef AUDIO_ENABLE` used in `matrix_init_kb()` in order to compile firmware for the Let's Split keyboard without audio enabled. --- keyboards/lets_split/lets_split.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/keyboards/lets_split/lets_split.c b/keyboards/lets_split/lets_split.c index 574c116a75..c505d3a6e3 100644 --- a/keyboards/lets_split/lets_split.c +++ b/keyboards/lets_split/lets_split.c @@ -24,7 +24,9 @@ void matrix_init_kb(void) { }; void shutdown_user(void) { - PLAY_NOTE_ARRAY(tone_goodbye, false, 0); - _delay_ms(150); - stop_all_notes(); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); + #endif } From 04c0a1c3e2d9f81cd44dc7548f6135ca175edbe1 Mon Sep 17 00:00:00 2001 From: chwilk Date: Mon, 26 Sep 2016 01:04:33 -0500 Subject: [PATCH 64/92] Added ONEHAND_ENABLE to allow SWAP HANDS actions --- keyboards/ergodox/rules.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/ergodox/rules.mk b/keyboards/ergodox/rules.mk index ac63d4eff2..add64ec76f 100644 --- a/keyboards/ergodox/rules.mk +++ b/keyboards/ergodox/rules.mk @@ -26,3 +26,4 @@ SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work MIDI_ENABLE ?= no # MIDI controls UNICODE_ENABLE ?= yes # Unicode +ONEHAND_ENABLE ?= yes # Allow swapping hands of keyboard From 90fd0810dbd551b32e4be46f108b4974890299b9 Mon Sep 17 00:00:00 2001 From: chwilk Date: Mon, 26 Sep 2016 01:05:06 -0500 Subject: [PATCH 65/92] Updated kastyle keymap, including swap hands feature --- keyboards/ergodox/keymaps/kastyle/keymap.c | 98 ++++++++++++++-------- 1 file changed, 62 insertions(+), 36 deletions(-) diff --git a/keyboards/ergodox/keymaps/kastyle/keymap.c b/keyboards/ergodox/keymaps/kastyle/keymap.c index a920850039..4e3794a96f 100644 --- a/keyboards/ergodox/keymaps/kastyle/keymap.c +++ b/keyboards/ergodox/keymaps/kastyle/keymap.c @@ -1,3 +1,6 @@ +/* Setup to approximate a Kinesis Advantage with an eye to use in a + * Mac/OSX environment + * This version adds a hand swap feature to flip the keyboard */ #include "ergodox.h" #include "debug.h" #include "action_layer.h" @@ -18,10 +21,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * |Grv/L1| \ |AltShf| Left | Right| | Up | Down | [ | ] |Grv/L1| * `----------------------------------' `----------------------------------' * ,---------------. ,---------------. - * |Ctrl/Esc| Alt | | Alt |Ctrl/Esc| + * | LGUI |Al/Esc| |Al/Esc| RGUI | * ,------|--------|------| |------+--------+------. * | | | Home | | PgUp | | | * |Backsp| Del |------| |------| Enter | Space| @@ -31,33 +34,34 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* [BASE] = KEYMAP( // layer 0 : default - // left hand - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LGUI, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), - LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, - CTL_T(KC_ESC), ALT_T(KC_APP), - KC_HOME, - KC_BSPC,KC_DEL,KC_END, - // right hand - KC_APP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT, - MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, - KC_LALT, CTL_T(KC_ESC), - KC_PGUP, - KC_PGDN,KC_ENT, KC_SPC - ), + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LGUI, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + KC_FN1, KC_BSLS, LALT(KC_LSFT), KC_LEFT, KC_RGHT, + KC_LGUI, ALT_T(KC_ESC), + KC_HOME, + KC_BSPC, KC_DEL, KC_END, + // right hand + KC_APP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), KC_QUOT, + MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1, + ALT_T(KC_ESC), KC_RGUI, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC +), + /* Keymap 1: Symbol Layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * | PrScr | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * | ScrLk | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * | Pause | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -74,14 +78,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // SYMBOLS [SYMB] = KEYMAP( // left hand - KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, - KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, - KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS,KC_TRNS, - KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS, + KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_SLCK, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, + KC_PAUS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, + KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, // right hand KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, @@ -92,6 +96,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), + /* Keymap 2: Media and mouse keys * * ,--------------------------------------------------. ,--------------------------------------------------. @@ -135,10 +140,6 @@ KEYMAP( ), }; -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) -}; - const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function @@ -154,6 +155,31 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; +// swap-hands action needs a matrix to define the swap +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + /* Left hand, matrix positions */ + {{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}}, + {{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}}, + {{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}}, + {{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}}, + {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}}, + {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}}, + {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}}, + /* Right hand, matrix positions */ + {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}}, + {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}}, + {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}}, + {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}}, + {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}}, + {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}}, + {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}}, +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_SWAP_HANDS_TAP_KEY(KC_GRV) // FN1 - Tap = Grave/Tilde - Hold Momentary swap hands +}; + + // Runs just one time when the keyboard initializes. void matrix_init_user(void) { From e1bfe13090debb25db8e44048cd0055e3680513c Mon Sep 17 00:00:00 2001 From: chwilk Date: Mon, 26 Sep 2016 15:49:10 -0500 Subject: [PATCH 66/92] Moved hand_swap_config array so all keyboards get it defined --- keyboards/ergodox/ergodox.c | 24 ++++++++++++++++++++++ keyboards/ergodox/keymaps/kastyle/keymap.c | 21 ------------------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/keyboards/ergodox/ergodox.c b/keyboards/ergodox/ergodox.c index e69de29bb2..c88c1ad890 100644 --- a/keyboards/ergodox/ergodox.c +++ b/keyboards/ergodox/ergodox.c @@ -0,0 +1,24 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" + +// swap-hands action needs a matrix to define the swap +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + /* Left hand, matrix positions */ + {{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}}, + {{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}}, + {{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}}, + {{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}}, + {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}}, + {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}}, + {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}}, + /* Right hand, matrix positions */ + {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}}, + {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}}, + {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}}, + {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}}, + {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}}, + {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}}, + {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}}, +}; + diff --git a/keyboards/ergodox/keymaps/kastyle/keymap.c b/keyboards/ergodox/keymaps/kastyle/keymap.c index 4e3794a96f..4679966869 100644 --- a/keyboards/ergodox/keymaps/kastyle/keymap.c +++ b/keyboards/ergodox/keymaps/kastyle/keymap.c @@ -155,31 +155,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; -// swap-hands action needs a matrix to define the swap -const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { - /* Left hand, matrix positions */ - {{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}}, - {{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}}, - {{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}}, - {{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}}, - {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}}, - {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}}, - {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}}, - /* Right hand, matrix positions */ - {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}}, - {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}}, - {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}}, - {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}}, - {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}}, - {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}}, - {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}}, -}; - const uint16_t PROGMEM fn_actions[] = { [1] = ACTION_SWAP_HANDS_TAP_KEY(KC_GRV) // FN1 - Tap = Grave/Tilde - Hold Momentary swap hands }; - // Runs just one time when the keyboard initializes. void matrix_init_user(void) { From 32cc2f6bd90233401a3590b3f975304dac6e4805 Mon Sep 17 00:00:00 2001 From: chwilk Date: Tue, 27 Sep 2016 11:27:09 -0500 Subject: [PATCH 67/92] Added description of kastyle keymap --- keyboards/ergodox/keymaps/kastyle/readme.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 keyboards/ergodox/keymaps/kastyle/readme.md diff --git a/keyboards/ergodox/keymaps/kastyle/readme.md b/keyboards/ergodox/keymaps/kastyle/readme.md new file mode 100644 index 0000000000..944286a818 --- /dev/null +++ b/keyboards/ergodox/keymaps/kastyle/readme.md @@ -0,0 +1,14 @@ +The kastyle keymap was originally intended to remap the ErgoDox EZ to more +closely approximate the layout of a Kinesis Advantage. Notable changes +over the stock ErgoDox layout include: + + * Re-arragnement of tab, enter, space, and delete to match the Kinesis + * Addition of print screen, pause, etc. keys following the kines-ish keymap + on L1 + * GUI keys have replaced Ctrl on the thumb keys (for Mac use), and Alt keys + are mapped to allow Esc on tap (good for Vi users) + * Most notably, the addition of a momentary one-handed mode for quick and + easy access to keys on the other half of the keyboard, e.g. while using a + mouse in one hand, one may add text to a dialogue box with the other without + having to reach across the keyboard or remove one's hand from the mouse. + From 7bca9bc402b41990cd73291758ebcbbadc6a6fd0 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:09:40 +0100 Subject: [PATCH 68/92] added a toggle between Mac and Windows base layers (with swapped cmd and ctrl) --- keyboards/planck/keymaps/callum/keymap.c | 59 +++++++++++++++++++----- 1 file changed, 48 insertions(+), 11 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 6c34311339..b47f8eb05e 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -11,13 +11,15 @@ extern keymap_config_t keymap_config; // 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 _BASE 0 -#define _MOVE 1 -#define _SYMB 2 -#define _FUNC 3 +#define _MAC 0 +#define _WIN 1 +#define _MOVE 2 +#define _SYMB 3 +#define _FUNC 4 enum planck_keycodes { - BASE = SAFE_RANGE, + MAC = SAFE_RANGE, + WIN, MOVE, SYMB, FUNC, @@ -30,7 +32,7 @@ enum planck_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* BASE +/* BASE Mac * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | * |------+------+------+------+------+-------------+------+------+------+------+------| @@ -41,13 +43,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Func | Ctrl | Alt | GUI | Symb |Enter |Space | Move | GUI | Alt | Ctrl |Caps | * `-----------------------------------------------------------------------------------' */ -[_BASE] = { +[_MAC] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} }, +/* BASE Windows + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Bksp | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Func | GUI | Alt | Ctrl | Symb |Enter |Space | Move | Ctrl | Alt | GUI |Caps | + * `-----------------------------------------------------------------------------------' + */ +[_WIN] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, + {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, + {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_RALT, KC_RGUI, KC_CAPS} +}, + /* MOVE * ,-----------------------------------------------------------------------------------. * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | @@ -88,24 +108,41 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | * |-----------------------------------------------------------------------------------. - * | | Play | Prev | Next | BL+ | | | Lock | | | | | + * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | | | | | | + * | | Mute | Vol- | Vol+ | BL- | | | | | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | |Reset | * `-----------------------------------------------------------------------------------' */ [_FUNC] = { {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, - {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, _______, _______}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, _______, _______, _______, _______, _______}, + {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, MAC, _______}, + {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, _______, _______, _______, WIN, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } } }; +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { + case MAC: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_MAC); + } + return false; + break; + case WIN: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_WIN); + } + return false; + break; case MOVE: if (record->event.pressed) { layer_on(_MOVE); From f442348e50b50df37711af1e5f19c6a06f38d8dd Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:19:11 +0100 Subject: [PATCH 69/92] added close key for alt-f4 macro --- keyboards/planck/keymaps/callum/keymap.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index b47f8eb05e..56808aa8ca 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -23,7 +23,8 @@ enum planck_keycodes { MOVE, SYMB, FUNC, - LOCK + LOCK, + CLOSE }; // Fillers to make layering more clear @@ -110,7 +111,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------. * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | | | | Win | | + * | | Mute | Vol- | Vol+ | BL- | | |Close | | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | |Reset | * `-----------------------------------------------------------------------------------' @@ -118,7 +119,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FUNC] = { {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, MAC, _______}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, _______, _______, _______, WIN, _______}, + {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, CLOSE, _______, _______, WIN, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } } @@ -183,6 +184,16 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case CLOSE: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_F4); + } else { + unregister_code(KC_F4); + unregister_code(KC_LALT); + } + return false; + break; } return true; } From 0c243d0d5d9edde9b96bfa05c2a504b2cbebbc7c Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:47:11 +0100 Subject: [PATCH 70/92] updated readme --- keyboards/planck/keymaps/callum/keymap.c | 30 ++++----- keyboards/planck/keymaps/callum/readme.md | 75 ++++++++++++++++++++--- 2 files changed, 80 insertions(+), 25 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 56808aa8ca..f5a816f4ee 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -39,9 +39,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | Ctrl | Alt | GUI | Symb |Enter |Space | Move | GUI | Alt | Ctrl |Caps | + * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | * `-----------------------------------------------------------------------------------' */ [_MAC] = { @@ -57,9 +57,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | GUI | Alt | Ctrl | Symb |Enter |Space | Move | Ctrl | Alt | GUI |Caps | + * | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | * `-----------------------------------------------------------------------------------' */ [_WIN] = { @@ -71,11 +71,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* MOVE * ,-----------------------------------------------------------------------------------. - * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | + * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | | Left | Down |Right | | | Left | Down |Right | | Del | + * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | |Pg Up |Pg Dn | | |Pg Dn |Pg Up | | | | + * | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' @@ -89,9 +89,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* SYMB * ,-----------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | - * |-----------------------------------------------------------------------------------. - * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | + * |-----------------------------------------------------------------------------------| + * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | * |------+------+------+------+------+-------------+------+------+------+------+------| * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -107,13 +107,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* FUNC * ,-----------------------------------------------------------------------------------. - * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | - * |-----------------------------------------------------------------------------------. - * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | + * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | + * |-----------------------------------------------------------------------------------| + * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | |Close | | | Win | | + * | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | |Reset | + * | | | | | | | | | | | | Reset| * `-----------------------------------------------------------------------------------' */ [_FUNC] = { diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index b70de3f1e2..8125907655 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -6,38 +6,93 @@ This is a layout for the grid planck, built with a few ideals in mind: - The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible. - There should be two of every modifier (one on each side), otherwise certain long key combinations become hard to make. - Backspace should be in the “capslock position” in the colemak tradition. +- The keyboard should be usable on any operating system without software changes. For me this means being able to swap the `GUI` key and `Ctrl` key in firmware so that `Cmd-z,x,c,v,…` becomes `Ctrl-z,x,c,v,…` when swapping from macOS to Windows. -We have four layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. +We have four layers. A `BASE` layer (which is either `BASE Mac` or `BASE Windows`), in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. ## The `BASE` layer -![](http://i.imgur.com/tVNI3SE.png) +For Mac +``` +,-----------------------------------------------------------------------------------. +| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | +|------+------+------+------+------+-------------+------+------+------+------+------| +| Bksp | A | R | S | T | D | H | N | E | I | O | " | +|------+------+------+------+------+------|------+------+------+------+------+------| +| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| +|------+------+------+------+------+------+------+------+------+------+------+------| +| Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | +`-----------------------------------------------------------------------------------' +``` + +For Windows +``` + ,-----------------------------------------------------------------------------------. +| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | +|------+------+------+------+-------+-------------+------+------+------+------+------| +| Bksp | A | R | S | T | D | H | N | E | I | O | " | +|------+------+------+------+------+------|------+------+------+------+------+------| +| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| +|------+------+------+------+------+------+------+------+------+------+------+------| +| Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | +`-----------------------------------------------------------------------------------' +``` -This is the default layer; in [colemak](https://colemak.com). `esc` and `del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. +One of the two above layers is set as the default layer at any one time; see `FUNC`. The basic layout is [colemak](https://colemak.com). `Esc` and `Del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `Caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `Enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. -The `MOVE` and `SYMB` layers are reached by holding down the `move` and `symb` keys respectively. The `FUNC` layer is reached by holding down both the `move` and `symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. +The `MOVE` and `SYMB` layers are reached by holding down the `Move` and `Symb` keys respectively. The `FUNC` layer is reached by holding down both the `Move` and `Symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. ## The `MOVE` layer -![](http://i.imgur.com/KXRSuHT.png) +``` +,-----------------------------------------------------------------------------------. +| Esc | | Home | Up | End | | | Home | Up | End | | Esc | +|------+------+------+------+------+-------------+------+------+------+------+------| +| Del | | Left | Down | Right| | | Left | Down | Right| | Del | +|------+------+------+------+------+------|------+------+------+------+------+------| +| | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | | | | | | | | | +`-----------------------------------------------------------------------------------' +``` This is fairly self explanatory. I almost exclusively use the right hand cluster so that movement is a one handed affair, but the left hand cluster is there if it’s needed. -On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ticking *Use PC Style Home/End #2* and *Use PC Style PageUp/PageDown* so that `home` and `end` jump you to the beginning and end of the line respectively and so that `pg up` and `pg dn` move the cursor instead of just scrolling. +On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ticking *Use PC Style Home/End #2* and *Use PC Style PageUp/PageDown* so that `Home` and `End` jump you to the beginning and end of the line respectively and so that `Pg Up` and `Pg Dn` move the cursor instead of just scrolling. None of the modifiers are overwritten so that `shift-alt-arrows` etc work as expected. ## The `SYMB` layer -![](http://i.imgur.com/thh1ne2.png) +``` +,-----------------------------------------------------------------------------------. +| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | +|-----------------------------------------------------------------------------------| +| Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | +|------+------+------+------+------+-------------+------+------+------+------+------| +| | ~ | ` | + | = | | | \ | [ | ] | { | } | | +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | | | | | | | | | +`-----------------------------------------------------------------------------------' +``` The symbol layer has all the numbers and their usual corresponding symbols in the first two rows, with the symbols on the home row since I use them more frequently than the numbers. The third row contains all the remaining symbols, arranged roughly so that the most used symbols are accessible with the strongest fingers. -`esc` and `del` are repeated here since I wanted to be able to reach either, one handed, with either hand. +`Esc` and `Del` are repeated here since I wanted to be able to reach either, one handed, with either hand. Again none of the modifiers are overwritten so that shortcuts involving numbers or symbols work as expected. ## The `FUNC` layer -![](http://i.imgur.com/1VKFBBU.png) +``` +,-----------------------------------------------------------------------------------. +| F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | +|-----------------------------------------------------------------------------------| +| | Play | Prev | Next | BL+ | | | Lock | | | Mac | | +|------+------+------+------+------+------|------+------+------+------+------+------| +| | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | | | | | | | | Reset| +`-----------------------------------------------------------------------------------' +``` -The only things of note here are that `bl+` and `bl-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. And that `lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-ctrl-power`.) +`BL+` and `BL-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. `Lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-ctrl-power`.) `Close` sends `alt-f4` to make that shortcut easier to reach. `Mac` and `Win` set the default layer to the Mac and Windows `BASE` layers respecitevly. ## Other changes from the default I have LEDs and sound disabled, simply because I have no need of them. From 65f035933bc386ee2c78dda7c22419c36f441920 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:52:55 +0100 Subject: [PATCH 71/92] Update readme.md --- keyboards/planck/keymaps/callum/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index 8125907655..2e59c00d6d 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -26,9 +26,9 @@ For Mac For Windows ``` - ,-----------------------------------------------------------------------------------. +,-----------------------------------------------------------------------------------. | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+-------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Bksp | A | R | S | T | D | H | N | E | I | O | " | |------+------+------+------+------+------|------+------+------+------+------+------| | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| From 1c1aa729b1c2c996c3e58fcbcec9dfebb79261eb Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:55:27 +0100 Subject: [PATCH 72/92] Update readme.md --- keyboards/planck/keymaps/callum/readme.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index 2e59c00d6d..7a771130ab 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -15,9 +15,9 @@ For Mac ``` ,-----------------------------------------------------------------------------------. | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| |------+------+------+------+------+------+------+------+------+------+------+------| | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | @@ -30,7 +30,7 @@ For Windows | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | |------+------+------+------+------+------+------+------+------+------+------+------| | Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| |------+------+------+------+------+------+------+------+------+------+------+------| | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | @@ -45,9 +45,9 @@ The `MOVE` and `SYMB` layers are reached by holding down the `Move` and `Symb` k ``` ,-----------------------------------------------------------------------------------. | Esc | | Home | Up | End | | | Home | Up | End | | Esc | -|------+------+------+------+------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Del | | Left | Down | Right| | | Left | Down | Right| | Del | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | | @@ -64,9 +64,9 @@ None of the modifiers are overwritten so that `shift-alt-arrows` etc work as exp ``` ,-----------------------------------------------------------------------------------. | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | -|-----------------------------------------------------------------------------------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | -|------+------+------+------+------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | ~ | ` | + | = | | | \ | [ | ] | { | } | | |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | | @@ -83,9 +83,9 @@ Again none of the modifiers are overwritten so that shortcuts involving numbers ``` ,-----------------------------------------------------------------------------------. | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | -|-----------------------------------------------------------------------------------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | Reset| From d387534687145c473bf018677dea4916717affe4 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:59:36 +0100 Subject: [PATCH 73/92] fixed comments --- keyboards/planck/keymaps/callum/keymap.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index f5a816f4ee..751af9eb9f 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -36,9 +36,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* BASE Mac * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | @@ -54,9 +54,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* BASE Windows * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| * | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | @@ -72,9 +72,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* MOVE * ,-----------------------------------------------------------------------------------. * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | @@ -90,9 +90,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* SYMB * ,-----------------------------------------------------------------------------------. * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | - * |-----------------------------------------------------------------------------------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | @@ -108,9 +108,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* FUNC * ,-----------------------------------------------------------------------------------. * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | - * |-----------------------------------------------------------------------------------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | Reset| From 848bb6df4358b44e24b3791482a0944c78d18cdb Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 7 Sep 2016 20:45:23 +0100 Subject: [PATCH 74/92] changed RALT to LALT on Windows --- keyboards/planck/keymaps/callum/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 751af9eb9f..5754b17721 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -66,7 +66,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, - {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_RALT, KC_RGUI, KC_CAPS} + {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_LALT, KC_RGUI, KC_CAPS} }, /* MOVE From ddb8eb842d354f92b1cea12e43f571ea774744ad Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 28 Sep 2016 08:04:38 +0100 Subject: [PATCH 75/92] removed windows layer and updated brightness keys for macOS Sierra --- keyboards/planck/keymaps/callum/keymap.c | 90 ++++-------------------- 1 file changed, 14 insertions(+), 76 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 5754b17721..0ac1906bac 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -11,20 +11,15 @@ extern keymap_config_t keymap_config; // 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 _MAC 0 -#define _WIN 1 -#define _MOVE 2 -#define _SYMB 3 -#define _FUNC 4 +#define _BASE 0 +#define _MOVE 1 +#define _SYMB 2 +#define _FUNC 3 enum planck_keycodes { - MAC = SAFE_RANGE, - WIN, MOVE, SYMB, - FUNC, - LOCK, - CLOSE + FUNC }; // Fillers to make layering more clear @@ -33,7 +28,7 @@ enum planck_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* BASE Mac +/* BASE * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -44,31 +39,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | * `-----------------------------------------------------------------------------------' */ -[_MAC] = { +[_BASE] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} }, -/* BASE Windows - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Bksp | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | - * `-----------------------------------------------------------------------------------' - */ -[_WIN] = { - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, - {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, - {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_LALT, KC_RGUI, KC_CAPS} -}, - /* MOVE * ,-----------------------------------------------------------------------------------. * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | @@ -81,9 +58,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_MOVE] = { - {KC_ESC, _______, KC_HOME, KC_UP, KC_END, _______, _______, KC_HOME, KC_UP, KC_END, _______, KC_ESC}, - {KC_DEL, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_DEL}, - {_______, _______, _______, KC_PGUP, KC_PGDN, _______, _______, KC_PGDN, KC_PGUP, _______, _______, _______}, + {KC_ESC, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, KC_ESC}, + {KC_DEL, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, KC_DEL}, + {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, @@ -109,41 +86,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | + * | | Play | Prev | Next | BL+ | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | + * | | Mute | Vol- | Vol+ | BL- | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | Reset| * `-----------------------------------------------------------------------------------' */ [_FUNC] = { {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, - {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, MAC, _______}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, CLOSE, _______, _______, WIN, _______}, + {XXXXXXX, KC_MPLY, KC_MPRV, KC_MNXT, KC_F15, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_F14, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } } }; -void persistant_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { - case MAC: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_MAC); - } - return false; - break; - case WIN: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_WIN); - } - return false; - break; case MOVE: if (record->event.pressed) { layer_on(_MOVE); @@ -172,28 +132,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case LOCK: - if (record->event.pressed) { - register_code(KC_RSFT); - register_code(KC_RCTL); - register_code(KC_POWER); - } else { - unregister_code(KC_POWER); - unregister_code(KC_RCTL); - unregister_code(KC_RSFT); - } - return false; - break; - case CLOSE: - if (record->event.pressed) { - register_code(KC_LALT); - register_code(KC_F4); - } else { - unregister_code(KC_F4); - unregister_code(KC_LALT); - } - return false; - break; } return true; } From 65b0eff6d863d458464c35a8571071ad4a519af5 Mon Sep 17 00:00:00 2001 From: Chris McLennon Date: Wed, 28 Sep 2016 13:24:29 -0500 Subject: [PATCH 76/92] Contributing new keymap to Ergodox --- .../ergodox/keymaps/mclennon_osx/README.md | 5 + .../ergodox/keymaps/mclennon_osx/config.h | 93 +++++++++++ .../ergodox/keymaps/mclennon_osx/keymap.c | 144 ++++++++++++++++++ 3 files changed, 242 insertions(+) create mode 100644 keyboards/ergodox/keymaps/mclennon_osx/README.md create mode 100644 keyboards/ergodox/keymaps/mclennon_osx/config.h create mode 100644 keyboards/ergodox/keymaps/mclennon_osx/keymap.c diff --git a/keyboards/ergodox/keymaps/mclennon_osx/README.md b/keyboards/ergodox/keymaps/mclennon_osx/README.md new file mode 100644 index 0000000000..60980d043d --- /dev/null +++ b/keyboards/ergodox/keymaps/mclennon_osx/README.md @@ -0,0 +1,5 @@ +# Ergodox EZ for OS X + +This keymapping is designed to be reasonably familiar to an ordinary Mac keyboard while taking advantage of the Ergodox EZ's features. Caps lock instead enables a layer which allows a user to use HJKL as arrow keys and to control media. Shift and control have additional mappings on S and D to provide easier access while holding down caps lock. + +If you choose to compile this yourself, be sure to compile with `#define PREVENT_STUCK_MODIFIERS` in your `config.h`. Firmware built using [qmk_firmware](https://github.com/jackhumbert/qmk_firmware/). diff --git a/keyboards/ergodox/keymaps/mclennon_osx/config.h b/keyboards/ergodox/keymaps/mclennon_osx/config.h new file mode 100644 index 0000000000..99cbaf0003 --- /dev/null +++ b/keyboards/ergodox/keymaps/mclennon_osx/config.h @@ -0,0 +1,93 @@ +/* +Copyright 2012 Jun Wako +Copyright 2013 Oleg Kostyuk + +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x1307 +#define DEVICE_VER 0x0001 +#define MANUFACTURER ErgoDox EZ +#define PRODUCT ErgoDox EZ +#define DESCRIPTION t.m.k. keyboard firmware for Ergodox + +/* key matrix size */ +#define MATRIX_ROWS 14 +#define MATRIX_COLS 6 + +#define MOUSEKEY_DELAY 100 +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_MAX_SPEED 3 +#define MOUSEKEY_TIME_TO_MAX 10 + +#define TAPPING_TOGGLE 1 + +#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define ROWS (int []){ D0, D5, B5, B6 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 2 +#define TAPPING_TERM 200 +#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ + keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION +//#define DEBUG_MATRIX_SCAN_RATE + +// CUSTOM +#define PREVENT_STUCK_MODIFIERS + +#endif diff --git a/keyboards/ergodox/keymaps/mclennon_osx/keymap.c b/keyboards/ergodox/keymaps/mclennon_osx/keymap.c new file mode 100644 index 0000000000..627ff01e4a --- /dev/null +++ b/keyboards/ergodox/keymaps/mclennon_osx/keymap.c @@ -0,0 +1,144 @@ +// Media keys work on OSX, but not on Windows. +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // Default layer +#define AUXI 1 // Auxiliary layer + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ~` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | -_ | += | Bkspc | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L1 | | Del | Y | U | I | O | P | |\ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | L1 | A | S | D | F | G |------| |------| H | J | K | L | ;: | Enter | + * |--------+------+------+------+------+------| {[ | | }] |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | <, | >. | ?/ | "' | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |LCtrl | | | | Esc | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | |Power | | + * ,------|------|------| |------+--------+------. + * | | | | | | | | + * | LGui | LAlt |------| |------| Bkspc |Space | + * | | | | | Del | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(1), + MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, + KC_LCTL, KC_TRNS,KC_TRNS,KC_TRNS,KC_ESC, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_LGUI,KC_LALT,KC_TRNS, + + // right hand + KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, + KC_DELETE, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH, + KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_ENT, + KC_RBRC, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_QUOT, + KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_PWR, KC_TRNS, + KC_TRNS, + KC_DELETE, KC_BSPC, KC_SPC + ), +/* Keymap 1: Auxiliary Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | TRNS | | | Mute | VolDn| VolUp| Play | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | TRNS | |LShift| LCtrl| | |------| |------| LEFT | DOWN | UP |RIGHT | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LShift | | | | | | | | | MPrv | MNxt | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |LCtrl | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | LGui | LAlt |------| |------| Bkspc| Space| + * | | | | | Del | | | + * `--------------------' `--------------------' + */ +// AUXILIARY +[AUXI] = KEYMAP( + // left hand + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_LSHIFT,KC_LCTL, KC_TRNS, KC_TRNS, + KC_LSHIFT,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_LGUI, KC_LALT, KC_TRNS, + // right hand + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, + KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_TRNS, KC_TRNS, + KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_TRNS, KC_TRNS, + KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_PWR, KC_TRNS, + KC_TRNS, + KC_DELETE, KC_BSPC, KC_SPC +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(AUXI) // FN1 - Momentary Layer 1 (Auxiliary) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; From cce294df86be7c430f8764ae3330991e66138f43 Mon Sep 17 00:00:00 2001 From: Chris McLennon Date: Wed, 28 Sep 2016 14:44:41 -0500 Subject: [PATCH 77/92] Remove config.h --- .../ergodox/keymaps/mclennon_osx/config.h | 93 ------------------- 1 file changed, 93 deletions(-) delete mode 100644 keyboards/ergodox/keymaps/mclennon_osx/config.h diff --git a/keyboards/ergodox/keymaps/mclennon_osx/config.h b/keyboards/ergodox/keymaps/mclennon_osx/config.h deleted file mode 100644 index 99cbaf0003..0000000000 --- a/keyboards/ergodox/keymaps/mclennon_osx/config.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -Copyright 2012 Jun Wako -Copyright 2013 Oleg Kostyuk - -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 . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x1307 -#define DEVICE_VER 0x0001 -#define MANUFACTURER ErgoDox EZ -#define PRODUCT ErgoDox EZ -#define DESCRIPTION t.m.k. keyboard firmware for Ergodox - -/* key matrix size */ -#define MATRIX_ROWS 14 -#define MATRIX_COLS 6 - -#define MOUSEKEY_DELAY 100 -#define MOUSEKEY_INTERVAL 20 -#define MOUSEKEY_MAX_SPEED 3 -#define MOUSEKEY_TIME_TO_MAX 10 - -#define TAPPING_TOGGLE 1 - -#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } -#define ROWS (int []){ D0, D5, B5, B6 } - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 2 -#define TAPPING_TERM 200 -#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ - keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ -) - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -// #define NO_DEBUG - -/* disable print */ -// #define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION -//#define DEBUG_MATRIX_SCAN_RATE - -// CUSTOM -#define PREVENT_STUCK_MODIFIERS - -#endif From 8fa41f1ca1b35e4d0535bc643082ff4197b27f2d Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 28 Sep 2016 23:15:35 +0100 Subject: [PATCH 78/92] big restructure now I only have to consider macOS, also added mouse, more function keys, and some neat macros --- keyboards/planck/keymaps/callum/keymap.c | 139 +++++++++++++++++++---- 1 file changed, 116 insertions(+), 23 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 0ac1906bac..38c362fcbe 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -14,12 +14,19 @@ extern keymap_config_t keymap_config; #define _BASE 0 #define _MOVE 1 #define _SYMB 2 -#define _FUNC 3 +#define _MOUSE 3 +#define _FUNC 4 enum planck_keycodes { - MOVE, + MOVE = SAFE_RANGE, SYMB, - FUNC + FUNC, + CMDLEFT, + CMDRGHT, + BELOW, + ABOVE, + VOLUP, + VOLDN }; // Fillers to make layering more clear @@ -36,14 +43,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | + * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Func | * `-----------------------------------------------------------------------------------' */ [_BASE] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, - {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} + {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, FUNC } }, /* MOVE @@ -52,16 +59,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | + * | | | | Pg Up| Pg Dn| Above| | Pg Dn| Pg Up| | Caps | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | | | | Below| | | | | | | * `-----------------------------------------------------------------------------------' */ [_MOVE] = { - {KC_ESC, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, KC_ESC}, - {KC_DEL, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, KC_DEL}, - {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} + {KC_ESC, XXXXXXX, CMDLEFT, KC_UP, CMDRGHT, XXXXXXX, XXXXXXX, CMDLEFT, KC_UP, CMDRGHT, XXXXXXX, KC_ESC }, + {KC_DEL, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_CAPS, KC_DEL }, + {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, ABOVE, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______}, + {_______, _______, _______, _______, _______, BELOW, _______, _______, _______, _______, _______, _______} }, /* SYMB @@ -82,22 +89,40 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, +/* MOUSE + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_MOUSE] = { + {XXXXXXX, XXXXXXX, KC_ACL2, KC_ACL1, KC_ACL0, XXXXXXX, XXXXXXX, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN2, KC_BTN1, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX}, + {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_D, KC_WH_U, XXXXXXX, XXXXXXX, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + /* FUNC * ,-----------------------------------------------------------------------------------. - * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | + * | Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Vol+ | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Play | Prev | Next | BL+ | | | | | | | | + * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | Vol- | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | | | | | | + * | | F21 | F22 | F23 | F24 | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | Reset| + * | | | | | Prev | Mute | Play | Next | | | | | * `-----------------------------------------------------------------------------------' */ [_FUNC] = { - {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, - {XXXXXXX, KC_MPLY, KC_MPRV, KC_MNXT, KC_F15, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_F14, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } + {RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, VOLUP }, + {XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, VOLDN }, + {_______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______}, + {_______, _______, _______, _______, KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT, _______, _______, _______, _______} } }; @@ -107,20 +132,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case MOVE: if (record->event.pressed) { layer_on(_MOVE); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } else { layer_off(_MOVE); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } return false; break; case SYMB: if (record->event.pressed) { layer_on(_SYMB); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } else { layer_off(_SYMB); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } return false; break; @@ -132,6 +157,74 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case CMDLEFT: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_LEFT); + } else { + unregister_code(KC_LEFT); + unregister_code(KC_LGUI); + } + return false; + break; + case CMDRGHT: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_RGHT); + } else { + unregister_code(KC_RGHT); + unregister_code(KC_LGUI); + } + return false; + break; + case BELOW: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_RGHT); + unregister_code(KC_RGHT); + unregister_code(KC_LGUI); + register_code(KC_ENT); + unregister_code(KC_ENT); + } + return false; + break; + case ABOVE: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_LEFT); + unregister_code(KC_LEFT); + unregister_code(KC_LGUI); + register_code(KC_ENT); + unregister_code(KC_ENT); + register_code(KC_UP); + unregister_code(KC_UP); + } + return false; + break; + case VOLUP: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_LSFT); + register_code(KC_VOLU); + } else { + unregister_code(KC_VOLU); + unregister_code(KC_LSFT); + unregister_code(KC_LALT); + } + return false; + break; + case VOLDN: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_LSFT); + register_code(KC_VOLD); + } else { + unregister_code(KC_VOLD); + unregister_code(KC_LSFT); + unregister_code(KC_LALT); + } + return false; + break; } return true; } From 3d45860dc280c7595763256ecd4874220abf0ab2 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Wed, 28 Sep 2016 20:19:28 -0500 Subject: [PATCH 79/92] Updating Vision to beta layout. --- keyboards/vision_division/config.h | 19 +- .../vision_division/keymaps/default/Makefile | 26 +- .../vision_division/keymaps/default/config.h | 46 +- .../vision_division/keymaps/default/keymap.c | 914 +++++++++--------- keyboards/vision_division/matrix_types.h | 33 +- keyboards/vision_division/rules.mk | 2 +- keyboards/vision_division/vision_division.c | 40 + 7 files changed, 557 insertions(+), 523 deletions(-) diff --git a/keyboards/vision_division/config.h b/keyboards/vision_division/config.h index f50378ffa8..1f8466a546 100644 --- a/keyboards/vision_division/config.h +++ b/keyboards/vision_division/config.h @@ -26,10 +26,9 @@ along with this program. If not, see . /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION ROW2COL -// #define BACKLIGHT_PIN B7 -// #define BACKLIGHT_BREATHING -// #define BACKLIGHT_LEVELS 3 - +#define BACKLIGHT_PIN B7 +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 3 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ #define DEBOUNCING_DELAY 5 @@ -124,10 +123,18 @@ along with this program. If not, see . */ /* disable debug print */ -//#define NO_DEBUG +// #ifndef NO_DEBUG +// # define NO_DEBUG +// #endif /* disable print */ -//#define NO_PRINT +// #ifndef NO_PRINT +// # define NO_PRINT +// #endif + +/* Only print user print statements */ +// #define USER_PRINT + /* disable action features */ //#define NO_ACTION_LAYER diff --git a/keyboards/vision_division/keymaps/default/Makefile b/keyboards/vision_division/keymaps/default/Makefile index ecbe7e1ab2..5a930e85ed 100644 --- a/keyboards/vision_division/keymaps/default/Makefile +++ b/keyboards/vision_division/keymaps/default/Makefile @@ -2,19 +2,19 @@ # change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = yes # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = yes # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/vision_division/keymaps/default/config.h b/keyboards/vision_division/keymaps/default/config.h index 16740fb15b..efd43f41b4 100644 --- a/keyboards/vision_division/keymaps/default/config.h +++ b/keyboards/vision_division/keymaps/default/config.h @@ -4,25 +4,44 @@ #include "../../config.h" #include "matrix_types.h" - /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED -#define PRODUCT_ID GET_PID(NUMERIC_NORMAL, HOMING_MAX_TEENSY) #define DEVICE_VER 0x0001 #define MANUFACTURER IBNobody #define PRODUCT Vision Division #define DESCRIPTION Full / Split Keyboard - -#define MATRIX_ROWS 6 +#define MATRIX_ROWS 6 #define MATRIX_ROW_PINS { C2, C3, F4, F5, F6, F7 } -#define MATRIX_COLS GET_MATRIX_COLS(NUMERIC_NORMAL, HOMING_MAX_TEENSY) -#define MATRIX_COL_PINS GET_MATRIX_COL_PINS(NUMERIC_NORMAL, HOMING_MAX_TEENSY) +// !!! MAKE SURE THAT THE LEFT/RIGHT PCB DEFINES MATCH ON ALL OF THESE COLUMNS -#define UNUSED_PINS +// **LEFT** **RIGHT** +#define PRODUCT_ID GET_PID( NUMERIC_NORMAL, NUMERIC_MAX_TEENSY) +#define MATRIX_COLS GET_MATRIX_COLS( NUMERIC_NORMAL, NUMERIC_MAX_TEENSY) +#define MATRIX_COL_PINS GET_MATRIX_COL_PINS( NUMERIC_NORMAL, NUMERIC_MAX_TEENSY) -/*#define KEYMAP( \ +#define KEYMAP(MATRIX_LAYER, \ + k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \ + k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \ + k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \ + k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \ + k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \ + k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \ +) \ +KEYMAP_MASTER(MATRIX_LAYER, NUMERIC_NORMAL, NUMERIC_MAX_TEENSY, \ + k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, KC_NO, KC_NO, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \ + k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, KC_NO, KC_NO, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \ + k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, KC_NO, KC_NO, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \ + k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, KC_NO, KC_NO, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \ + k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, KC_NO, KC_NO, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \ + k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, KC_NO, KC_NO, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \ +) + +// Example Keymap Macros + +/* +#define KEYMAP(MATRIX_LAYER, \ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \ @@ -30,16 +49,18 @@ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k60B, k60C, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \ ) \ -KEYMAP_MASTER(NUMERIC_MAX_TEENSY, NUMERIC_MAX, \ +KEYMAP_MASTER(MATRIX_LAYER, NUMERIC_MAX_TEENSY, NUMERIC_MAX, \ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \ k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k60B, k60C, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \ -)*/ +) +*/ -#define KEYMAP( \ +/* +#define KEYMAP(MATRIX_LAYER, \ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, \ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, \ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, \ @@ -47,7 +68,7 @@ KEYMAP_MASTER(NUMERIC_MAX_TEENSY, NUMERIC_MAX, \ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, \ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B \ ) \ -KEYMAP_MASTER(NUMERIC_NORMAL, HOMING_MAX_TEENSY, \ +KEYMAP_MASTER(MATRIX_LAYER, NUMERIC_NORMAL, HOMING_MAX_TEENSY, \ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, KC_NO, KC_NO, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, KC_NO, \ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, KC_NO, KC_NO, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, KC_NO, \ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, KC_NO, KC_NO, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, KC_NO, \ @@ -55,5 +76,6 @@ KEYMAP_MASTER(NUMERIC_NORMAL, HOMING_MAX_TEENSY, \ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, KC_NO, KC_NO, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, KC_NO, \ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, KC_NO, KC_NO, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, KC_NO \ ) +*/ #endif \ No newline at end of file diff --git a/keyboards/vision_division/keymaps/default/keymap.c b/keyboards/vision_division/keymaps/default/keymap.c index b8cef9c759..64118abdce 100644 --- a/keyboards/vision_division/keymaps/default/keymap.c +++ b/keyboards/vision_division/keymaps/default/keymap.c @@ -8,46 +8,70 @@ #include "song_list.h" #endif -#define LAYER_QWERTY 0 -#define LAYER_COLEMAK 1 -#define LAYER_DVORAK 2 -#define LAYER_UPPER 3 -#define LAYER_LOWER 4 -#define LAYER_FUNCTION 5 -#define LAYER_MOUSE 6 -#define LAYER_ADJUST 7 - -#define MACRO_QWERTY 0 -#define MACRO_COLEMAK 1 -#define MACRO_DVORAK 2 -#define MACRO_UPPER 3 -#define MACRO_LOWER 4 -#define MACRO_FUNCTION 5 -#define MACRO_MOUSE 6 -#define MACRO_TIMBRE_1 7 -#define MACRO_TIMBRE_2 8 -#define MACRO_TIMBRE_3 9 -#define MACRO_TIMBRE_4 10 -#define MACRO_TEMPO_U 11 -#define MACRO_TEMPO_D 12 -#define MACRO_TONE_DEFAULT 13 -#define MACRO_MUSIC_TOGGLE 14 -#define MACRO_AUDIO_TOGGLE 16 -#define MACRO_INC_VOICE 18 -#define MACRO_DEC_VOICE 19 -#define MACRO_BACKLIGHT 20 -#define MACRO_BREATH_TOGGLE 21 -#define MACRO_BREATH_SPEED_INC 23 -#define MACRO_BREATH_SPEED_DEC 24 -#define MACRO_BREATH_DEFAULT 25 +enum keyboard_layers { + LAYER_QWERTY = 0, + LAYER_UPPER, + LAYER_LOWER, + LAYER_FUNCTION, + LAYER_MOUSE, + LAYER_ADJUST, +}; +enum keyboard_macros { + MACRO_QWERTY = 0, + MACRO_UPPER, + MACRO_LOWER, + MACRO_FUNCTION, + MACRO_MOUSE, + MACRO_TIMBRE_1, + MACRO_TIMBRE_2, + MACRO_TIMBRE_3, + MACRO_TIMBRE_4, + MACRO_TEMPO_U, + MACRO_TEMPO_D, + MACRO_TONE_DEFAULT, + MACRO_MUSIC_TOGGLE, + MACRO_AUDIO_TOGGLE, + MACRO_INC_VOICE, + MACRO_DEC_VOICE, + MACRO_BACKLIGHT, + MACRO_BREATH_TOGGLE, + MACRO_BREATH_SPEED_INC, + MACRO_BREATH_SPEED_DEC, + MACRO_BREATH_DEFAULT, + MACRO_MOUSE_MOVE_UL, + MACRO_MOUSE_MOVE_UR, + MACRO_MOUSE_MOVE_DL, + MACRO_MOUSE_MOVE_DR, + MACRO_HELP, + MACRO_HELP_1, + MACRO_HELP_2, + MACRO_HELP_3, + MACRO_HELP_4, + MACRO_HELP_5, + MACRO_HELP_6, + MACRO_HELP_7, + MACRO_HELP_8, + MACRO_HELP_9, + MACRO_HELP_0, + MACRO_GENERAL_1, + MACRO_GENERAL_2, + MACRO_GENERAL_3, + MACRO_GENERAL_4, + MACRO_GENERAL_5, + MACRO_CURSOR_UL, + MACRO_CURSOR_UR, + MACRO_CURSOR_DL, + MACRO_CURSOR_DR, + MACRO_MUTE_APP, + MACRO_COPY_CUT, +}; #define M_QWRTY M(MACRO_QWERTY) -#define M_COLMK M(MACRO_COLEMAK) -#define M_DVORK M(MACRO_DVORAK) #define M_UPPER M(MACRO_UPPER) #define M_LOWER M(MACRO_LOWER) #define M_FUNCT M(MACRO_FUNCTION) #define M_MOUSE M(MACRO_MOUSE) + #define TIMBR_1 M(MACRO_TIMBRE_1) #define TIMBR_2 M(MACRO_TIMBRE_2) #define TIMBR_3 M(MACRO_TIMBRE_3) @@ -55,15 +79,47 @@ #define TMPO_UP M(MACRO_TEMPO_U) #define TMPO_DN M(MACRO_TEMPO_D) #define TMPO_DF M(MACRO_TONE_DEFAULT) + +#define VC_UP M(MACRO_INC_VOICE) +#define VC_DOWN M(MACRO_DEC_VOICE) + #define M_BACKL M(MACRO_BACKLIGHT) #define M_BRTOG M(MACRO_BREATH_TOGGLE) #define M_BSPDU M(MACRO_BREATH_SPEED_INC) #define M_BSPDD M(MACRO_BREATH_SPEED_DEC) #define M_BDFLT M(MACRO_BREATH_DEFAULT) +#define M_MS_UL M(MACRO_MOUSE_MOVE_UL) +#define M_MS_UR M(MACRO_MOUSE_MOVE_UR) +#define M_MS_DL M(MACRO_MOUSE_MOVE_DL) +#define M_MS_DR M(MACRO_MOUSE_MOVE_DR) -#define VC_UP M(MACRO_INC_VOICE) -#define VC_DOWN M(MACRO_DEC_VOICE) +#define M_HELP M(MACRO_HELP) +#define M_HELP1 M(MACRO_HELP_1) +#define M_HELP2 M(MACRO_HELP_2) +#define M_HELP3 M(MACRO_HELP_3) +#define M_HELP4 M(MACRO_HELP_4) +#define M_HELP5 M(MACRO_HELP_5) +#define M_HELP6 M(MACRO_HELP_6) +#define M_HELP7 M(MACRO_HELP_7) +#define M_HELP8 M(MACRO_HELP_8) +#define M_HELP9 M(MACRO_HELP_9) +#define M_HELP0 M(MACRO_HELP_0) + +#define M_M1 M(MACRO_GENERAL_1) +#define M_M2 M(MACRO_GENERAL_2) +#define M_M3 M(MACRO_GENERAL_3) +#define M_M4 M(MACRO_GENERAL_4) +#define M_M5 M(MACRO_GENERAL_5) + +#define M_UL M(MACRO_CURSOR_UL) +#define M_UR M(MACRO_CURSOR_UR) +#define M_DL M(MACRO_CURSOR_DL) +#define M_DR M(MACRO_CURSOR_DR) + +#define M_MUTEA M(MACRO_MUTE_APP) + +#define M_CP_CT M(MACRO_COPY_CUT) #define SC_UNDO LCTL(KC_Z) @@ -77,6 +133,7 @@ #define SC_ACLS LALT(KC_F4) #define SC_CCLS LCTL(KC_F4) +#define TG_NKRO MAGIC_TOGGLE_NKRO #define OS_SHFT KC_FN0 #define _______ KC_TRNS @@ -84,208 +141,128 @@ #define ________________ _______, _______ #define XXXXXXXXXXXXXXXX XXXXXXX, XXXXXXX -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - -KEYMAP( \ - KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \ - KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \ - KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_TAB, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \ - KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_CAPS, KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, \ - KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX, \ - KC_KP_0, KC_KP_0, KC_PDOT, KC_PENT, KC_LCTL, KC_LCTL, XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, KC_SPC, KC_SPC, XXXXXXX, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ -) - - -// [LAYER_QWERTY] = { // QWERTY -// { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, -// { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, -// { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, -// { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, -// { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, -// }, - - -// /* Numeric Max / Homing Normal - Traditional -// * .-----------------------------------. .-----------------------------------. .-----------------_-----------------. .-----------------------------------. .--------------------------. -// * | | | | | | | | | | | | | | | | | | | | | | | | -// * '-----------------------------------' '-----------------------------------' '-----------------------------------' '-----------------------------------' '--------------------------' -// * .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .--------------------------. -// * | | | | | | ESC | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | | | | | | -// * |--------+--------+--------+--------| | -------+ -------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------| -// * | | | | | | TAB | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | | | | | | -// * |--------+--------+--------+ | o | -------+ -------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| '--------+--------+--------' -// * | | | | | o | CAPS | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | | -// * |--------+--------+--------+--------| o | -------+ -------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---+--------| .--------. -// * | | | | | | LSHIFT | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX | | | | -// * |--------+--------+--------+ | | -------+ -------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+--------+--------| .--------+--------+--------. -// * | | | | | LCTRL | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | | | | | | -// * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '--------------------------' -// */ - - -// /* QWERTY -// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. -// * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| -// * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| -// * | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| -// * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | -// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| -// * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | -// * '--------------------------------------------------------------------------------------------------------------------------------------' -// */ - -// [LAYER_QWERTY] = { // QWERTY -// { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, -// { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, -// { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, -// { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, -// { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, -// }, - -// /* COLEMAK -// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. -// * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| -// * | TAB | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ | DEL | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| -// * | BACKSP | A | R | S | T | D | H | N | E | I | O | ' | XXXXXX . ENTER | PG UP | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| -// * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | -// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| -// * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | -// * '--------------------------------------------------------------------------------------------------------------------------------------' -// */ - -// [LAYER_COLEMAK] = { // COLEMAK -// { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, -// { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, -// { KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, -// { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, -// { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, -// }, - -// /* DVORAK -// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. -// * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | XXXXXX . BACKSP | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| -// * | TAB | ' | , | . | P | Y | F | G | C | R | L | / | = | \ | DEL | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| -// * | CAPS | A | O | E | U | I | D | H | T | N | S | - | XXXXXX . ENTER | PG UP | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| -// * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN | -// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| -// * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | -// * '--------------------------------------------------------------------------------------------------------------------------------------' -// */ - -// [LAYER_DVORAK] = { // DVORAK -// { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_BSPC }, -// { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL }, -// { KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_ENT, KC_PGUP }, -// { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, -// { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, -// }, - -// /* UPPER -// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. -// * | PRINT | BR TOG | BR SP+ | BR SP- | BR RST | XXXXXX | XXXXXX | NUM LK | / | * | | NUM LK | SCR LK | XXXXXX . PAUSE | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| -// * | | F1 | F2 | F3 | F4 | | | 7 | 8 | 9 | - | | | | INS | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| -// * | CAP LK | F5 | F6 | F7 | F8 | | | 4 | 5 | 6 | + | | XXXXXX . | HOME | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| -// * | | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | ENTER | XXXXXX . | | END | -// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| -// * | | | | | | 0 | | RALT | . | ENTER | | | | | -// * '--------------------------------------------------------------------------------------------------------------------------------------' -// */ - -// [LAYER_UPPER] = { // UPPER -// { KC_PSCR, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, XXXXXXX, XXXXXXX, KC_SLCK, KC_PAUS, KC_PAUS }, -// { _______, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS }, -// { KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, ________________, KC_HOME }, -// { _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, ________________, _______, KC_END }, -// { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ }, -// }, - -// /* LOWER -// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. -// * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . BACKSP | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| -// * | | $ | { | [ | ( | % | # | ) | ] | } | @ | | | | INS | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| -// * | | ^ | * | + | - | / | \ | _ | ' | " | ` | | XXXXXX . | HOME | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| -// * | | | | & | ! | ~ | ; | : | = | < | > | ? | XXXXXX . | | END | -// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| -// * | | | | | | | | | | | | | | | -// * '--------------------------------------------------------------------------------------------------------------------------------------' -// */ - -// [LAYER_LOWER] = { // LOWER -// { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, -// { _______, KC_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, _______, _______, _______, KC_INS }, -// { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, _______, ________________, KC_HOME }, -// { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL, KC_LT, KC_GT, KC_QUES, ________________, _______, KC_END }, -// { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, -// }, - -// /* FUNCTION -// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. -// * | NUM LK | | | | | | | | | | | | | XXXXXX . | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| -// * | SCR LK | F13 | F14 | F15 | F16 | | | | | | | | | | | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| -// * | CAP LK | F17 | F18 | F19 | F20 | | | | | | | | XXXXXX . | | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| -// * | | F21 | F22 | F23 | F24 | | | | | | | XXXXXX . | VOL UP | MUTE | -// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| -// * | | | | | | PLAY/PAUSE | | | | | | PTRACK | VOL DN | NTRACK | -// * '--------------------------------------------------------------------------------------------------------------------------------------' -// */ - -// [LAYER_FUNCTION] = { // FUNCTION -// { KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX }, -// { KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, -// { KC_CAPS, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXX }, -// { _______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_VOLU, KC_MUTE }, -// { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT }, -// }, - -// #ifdef MOUSEKEY_ENABLE - -// [LAYER_MOUSE] = { // MOUSE -// { _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX }, -// { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, -// { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U }, -// { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_MS_U, KC_WH_D }, -// { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }, -// }, - -// #endif - -// [LAYER_ADJUST] = { // ADJUST -// { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MU_TOG, AU_TOG, ________________ }, -// { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, -// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, -// { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, ________________, MUV_IN, _______ }, -// { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, MUV_DE, _______ }, -// }, - - -// /* -// [LAYER_EMPTY] = { // LAYER -// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________ }, -// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, -// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, -// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, _______ }, -// { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, -// }, -// */ +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = +{ +/* LAYER = LAYER_QWERTY + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | FN | PRINT | SCR LK | PAUSE | | F1 | F2 | F3 | F4 | XXXXXX | F5 | F6 | F7 | F8 | XXXXXX | F9 | F10 | F11 | F12 | | VOL DN | MUTE | VOL UP | BACKLT | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | M1 | INS | HOME | PG UP | | ESC | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | = | BACKSP | | NUM LK | KP / | KP * | KP - | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | M2 | DEL | END | PG DN | | TAB | TAB | Q | W | E | R | T | Y | U | I | O | P | - | \ | | KP 7 | KP 8 | KP 9 | KP + | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | M3 | UL | UP | UR | | CAP LK | BACKSP | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | o | KP 4 | KP 5 | KP 6 | KP + | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | M4 | LEFT | CP/CT | RIGHT | | LSHIFT | LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT | RSHIFT | | KP 1 | KP 2 | KP 3 | KP Ent | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | M5 | DL | DOWN | DR | | LCTRL | XXXXXX | XXXXXX | LWIN | LALT | LOWER | SPACE . SPACE | UPPER | OSHIFT | RALT | APP | XXXXXX | RCTRL | | KP 0 | KP , | KP . | KP Ent | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' +*/ +KEYMAP(LAYER_QWERTY, \ + M_HELP , KC_PSCR, KC_SLCK, KC_PAUS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , XXXXXXX, KC_F5 , KC_F6 , KC_F7 , KC_F8 , XXXXXXX, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_VOLD, KC_MUTE, KC_VOLU, M_BACKL, \ + M_M1 , KC_INS , KC_HOME, KC_PGUP, KC_ESC , KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_EQL , KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \ + M_M2 , KC_DEL , KC_END , KC_PGDN, KC_TAB , KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_MINS, KC_BSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, \ + M_M3 , M_UL , KC_UP , M_UR , KC_CAPS, KC_BSPC, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, \ + M_M4 , KC_LEFT, M_CP_CT, KC_RGHT, KC_LSFT, KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_RSFT, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, \ + M_M5 , M_DL , KC_DOWN, M_DR , KC_LCTL, XXXXXXX, XXXXXXX, KC_LGUI, KC_LALT, M_LOWER, KC_SPC , KC_SPC , M_UPPER, OS_SHFT, KC_RALT, KC_APP , XXXXXXX, KC_RCTL, KC_KP_0, KC_PCMM, KC_PDOT, KC_PENT \ +), +/* LAYER = LAYER_LOWER + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | ______ | ______ | ______ | ______ | | F13 | F14 | F15 | F16 | XXXXXX | F17 | F18 | F19 | F20 | XXXXXX | F21 | F22 | F23 | F24 | | ______ | MUTE A | ______ | ______ | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | ______ | $ | { | [ | ( | % | # | ) | ] | } | @ | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | ______ | ^ | * | + | - | / | \ | _ | ' | " | ` | ______ | ______ | o | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | ______ | | | & | ! | ~ | ; | : | = | < | > | ? | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | XXXXXX | XXXXXX | ______ | ______ | ______ | ______ . ______ | LOWER | ______ | ______ | ______ | XXXXXX | ______ | | ______ | ______ | ______ | ______ | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' +*/ +KEYMAP(LAYER_LOWER, \ + _______, _______, _______, _______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______, M_MUTEA, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT , _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT , KC_GT , KC_QUES, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______ \ +), +/* LAYER = LAYER_UPPER + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | ______ | ______ | ______ | ______ | | F13 | F14 | F15 | F16 | XXXXXX | F17 | F18 | F19 | F20 | XXXXXX | F21 | F22 | F23 | F24 | | ______ | MUTE A | ______ | ______ | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | ______ | F1 | F2 | F3 | F4 | NUM LK | KP / | KP 7 | KP 8 | KP 9 | KP - | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | ______ | F5 | F6 | F7 | F8 | CAP LK | KP * | KP 4 | KP 5 | KP 6 | KP + | ______ | ______ | o | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | ______ | F9 | F10 | F11 | F12 | SCR LK | KP 0 | KP 1 | KP 2 | KP 3 | KP Ent | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | XXXXXX | XXXXXX | ______ | ______ | UPPER | KP 0 . KP 0 | ______ | RALT | KP . | KP Ent | XXXXXX | ______ | | ______ | ______ | ______ | ______ | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' +*/ +KEYMAP(LAYER_UPPER, \ + _______, _______, _______, _______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______, M_MUTEA, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_CAPS, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_SLCK, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, XXXXXXX, _______, _______, _______, _______, _______ \ +), +/* LAYER = LAYER_MOUSE + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | MS BT1 | MS AC0 | MS WHU | MS AC2 | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | MS BT2 | MS WHL | MS WHD | MS WHU | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | MS BT3 | MS UL | MS U | MS UR | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | o | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | MS BT4 | MS L | MS BT1 | MS R | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | MS BT5 | MS DL | MS D | MS DR | | ______ | ______ | ______ | ______ | ______ | ______ | ______ . ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' +*/ +KEYMAP(LAYER_MOUSE, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_BTN1, KC_ACL0, KC_WH_U, KC_ACL2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_BTN2, KC_WH_L, KC_WH_D, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_BTN3, M_MS_UL, KC_MS_U, M_MS_UR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_BTN4, KC_MS_L, KC_BTN1, KC_MS_R, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_BTN5, M_MS_DL, KC_MS_D, M_MS_DR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +), +/* LAYER = LAYER_ADJUST + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | HELP 1 | HELP 2 | HELP 3 | HELP 4 | XXXXXX | HELP 5 | HELP 6 | HELP 7 | HELP 8 | XXXXXX | HELP 9 | HELP 0 | XXXXXX | XXXXXX | | VOICE- | AUDIO | VOICE+ | MUSIC | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | o | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | RESET | XXXXXX | MOUSE | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER | XXXXXX . XXXXXX | LOWER | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' +*/ +KEYMAP(LAYER_ADJUST, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_HELP1, M_HELP2, M_HELP3, M_HELP4, XXXXXXX, M_HELP5, M_HELP6, M_HELP7, M_HELP8, XXXXXXX, M_HELP9, M_HELP0, XXXXXXX, XXXXXXX, MUV_DE , AU_TOG , MUV_IN , MU_TOG , \ + 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, 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, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ +), }; @@ -313,303 +290,290 @@ float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND); void persistant_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); } const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_MODS_ONESHOT(MOD_LSFT), + [0] = ACTION_MODS_ONESHOT(MOD_LSFT), }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - // MACRODOWN only works in this function - switch(id) + // MACRODOWN only works in this function + switch(id) + { + + case MACRO_HELP_1: + if (record->event.pressed) + { + uprint("H1"); + } + break; + + case MACRO_HELP_2: + if (record->event.pressed) + { + uprint("H2"); + } + break; + + case MACRO_HELP_3: + if (record->event.pressed) + { + uprint("H3"); + } + break; + + case MACRO_HELP_4: + if (record->event.pressed) + { + uprint("H4"); + } + break; + + case MACRO_HELP_5: + if (record->event.pressed) + { + uprint("H5"); + } + break; + + case MACRO_HELP_6: + if (record->event.pressed) + { + uprint("H6"); + } + break; + + case MACRO_HELP_7: + if (record->event.pressed) + { + uprint("H7"); + } + break; + + case MACRO_HELP_8: + if (record->event.pressed) { + uprint("H8"); + } + break; - // case MACRO_BREATH_TOGGLE: - // if (record->event.pressed) - // { - // breathing_toggle(); - // } - // break; + case MACRO_HELP_9: + if (record->event.pressed) + { + uprint("H9"); + } + break; - // case MACRO_BREATH_SPEED_INC: - // if (record->event.pressed) - // { - // breathing_speed_inc(1); - // } - // break; + case MACRO_BREATH_TOGGLE: + if (record->event.pressed) + { + breathing_toggle(); + } + break; - // case MACRO_BREATH_SPEED_DEC: - // if (record->event.pressed) - // { - // breathing_speed_dec(1); - // } - // break; + case MACRO_BREATH_SPEED_INC: + if (record->event.pressed) + { + breathing_speed_inc(1); + } + break; - // case MACRO_BREATH_DEFAULT: - // if (record->event.pressed) - // { - // breathing_defaults(); - // } - // break; + case MACRO_BREATH_SPEED_DEC: + if (record->event.pressed) + { + breathing_speed_dec(1); + } + break; - case MACRO_QWERTY: - if (record->event.pressed) - { - persistant_default_layer_set(1UL<event.pressed) + { + breathing_defaults(); + } + break; - case MACRO_COLEMAK: - if (record->event.pressed) - { - persistant_default_layer_set(1UL<event.pressed) + { + persistant_default_layer_set(1UL<event.pressed) - { - persistant_default_layer_set(1UL<event.pressed) + { + layer_on(LAYER_UPPER); + breathing_speed_set(2); + breathing_pulse(); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + } + else + { + layer_off(LAYER_UPPER); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + } + break; - case MACRO_UPPER: - if (record->event.pressed) - { - layer_on(LAYER_UPPER); - // breathing_speed_set(2); - // breathing_pulse(); - update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); - } - else - { - layer_off(LAYER_UPPER); - update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); - } - break; + case MACRO_LOWER: + if (record->event.pressed) + { + layer_on(LAYER_LOWER); + breathing_speed_set(2); + breathing_pulse(); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + } + else + { + layer_off(LAYER_LOWER); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + } + break; - case MACRO_LOWER: - if (record->event.pressed) - { - layer_on(LAYER_LOWER); - // breathing_speed_set(2); - // breathing_pulse(); - update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); - } - else - { - layer_off(LAYER_LOWER); - update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); - } - break; - - case MACRO_FUNCTION: - if (record->event.pressed) - { - // breathing_speed_set(3); - // breathing_enable(); - layer_on(LAYER_FUNCTION); - } - else - { - // breathing_speed_set(1); - // breathing_self_disable(); - layer_off(LAYER_FUNCTION); - } - break; + case MACRO_FUNCTION: + if (record->event.pressed) + { + breathing_speed_set(3); + breathing_enable(); + layer_on(LAYER_FUNCTION); + } + else + { + breathing_speed_set(1); + breathing_self_disable(); + layer_off(LAYER_FUNCTION); + } + break; #ifdef MOUSEKEY_ENABLE - case MACRO_MOUSE: - if (record->event.pressed) - { - layer_invert(LAYER_MOUSE); - } - break; + case MACRO_MOUSE: + if (record->event.pressed) + { + layer_invert(LAYER_MOUSE); + } + break; #endif /* MOUSEKEY_ENABLE */ #ifdef AUDIO_ENABLE - case MACRO_TIMBRE_1: - if (record->event.pressed) set_timbre(TIMBRE_12); - break; + case MACRO_TIMBRE_1: + if (record->event.pressed) set_timbre(TIMBRE_12); + break; - case MACRO_TIMBRE_2: - if (record->event.pressed) set_timbre(TIMBRE_25); - break; + case MACRO_TIMBRE_2: + if (record->event.pressed) set_timbre(TIMBRE_25); + break; - case MACRO_TIMBRE_3: - if (record->event.pressed) set_timbre(TIMBRE_50); - break; + case MACRO_TIMBRE_3: + if (record->event.pressed) set_timbre(TIMBRE_50); + break; - case MACRO_TIMBRE_4: - if (record->event.pressed) set_timbre(TIMBRE_75); - break; + case MACRO_TIMBRE_4: + if (record->event.pressed) set_timbre(TIMBRE_75); + break; - case MACRO_TEMPO_U: - if (record->event.pressed) increase_tempo(10); - break; + case MACRO_TEMPO_U: + if (record->event.pressed) increase_tempo(10); + break; - case MACRO_TEMPO_D: - if (record->event.pressed) decrease_tempo(10); - break; + case MACRO_TEMPO_D: + if (record->event.pressed) decrease_tempo(10); + break; - case MACRO_TONE_DEFAULT: - if (record->event.pressed) - { - set_timbre(TIMBRE_DEFAULT); - set_tempo(TEMPO_DEFAULT); - } - break; - -/* - case MACRO_AUDIO_TOGGLE: - if (record->event.pressed) - { - if (is_audio_on()) - { - audio_off(); - } - else - { - audio_on(); - PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO); - } - } - break; - - case MACRO_MUSIC_TOGGLE: - if (record->event.pressed) - { - if (IS_LAYER_ON(LAYER_MUSIC)) - { - layer_off(LAYER_MUSIC); - stop_all_notes(); - } - else - { - PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO); - layer_on(LAYER_MUSIC); - } - } - break; - case MACRO_INC_VOICE: - if (record->event.pressed) - { - #ifdef AUDIO_ENABLE - voice_iterate(); - PLAY_NOTE_ARRAY(music_scale, false, STACCATO); - #endif - } - break; - - case MACRO_DEC_VOICE: - if (record->event.pressed) - { - #ifdef AUDIO_ENABLE - voice_deiterate(); - PLAY_NOTE_ARRAY(music_scale, false, STACCATO); - #endif - } - break; -*/ + case MACRO_TONE_DEFAULT: + if (record->event.pressed) + { + set_timbre(TIMBRE_DEFAULT); + set_tempo(TEMPO_DEFAULT); + } + break; #endif /* AUDIO_ENABLE */ #ifdef BACKLIGHT_ENABLE - case MACRO_BACKLIGHT: - if (record->event.pressed) - { - backlight_step(); - } -#endif - - default: - break; - + case MACRO_BACKLIGHT: + if (record->event.pressed) + { + backlight_step(); } - return MACRO_NONE; -}; + break; +#endif /* BACKLIGHT_ENABLE */ + default: + break; + +} +return MACRO_NONE; +}; #ifdef AUDIO_ENABLE void matrix_init_user(void) { - set_voice(default_voice); - startup_user(); - println("Matrix Init"); + set_voice(default_voice); + startup_user(); + println("Matrix Init"); } void led_set_user(uint8_t usb_led) { - static uint8_t old_usb_led = 0; + static uint8_t old_usb_led = 0; - _delay_ms(10); // gets rid of tick + _delay_ms(10); // gets rid of tick - if (!is_playing_notes()) + if (!is_playing_notes()) + { + if ((usb_led & (1< Date: Wed, 28 Sep 2016 20:26:41 -0500 Subject: [PATCH 80/92] Fix #770, Fix #779 --- tmk_core/common/avr/bootloader.c | 8 ++++---- tmk_core/common/command.c | 3 --- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/tmk_core/common/avr/bootloader.c b/tmk_core/common/avr/bootloader.c index fb9bf2d1c3..ad547b9853 100644 --- a/tmk_core/common/avr/bootloader.c +++ b/tmk_core/common/avr/bootloader.c @@ -38,7 +38,7 @@ * | | | | * = = = = * | | 32KB-4KB | | 128KB-8KB - * 0x6000 +---------------+ 0x1FC00 +---------------+ + * 0x7000 +---------------+ 0x1E000 +---------------+ * | Bootloader | 4KB | Bootloader | 8KB * 0x7FFF +---------------+ 0x1FFFF +---------------+ * @@ -64,8 +64,8 @@ #define BOOTLOADER_START (FLASH_SIZE - BOOTLOADER_SIZE) -/* - * Entering the Bootloader via Software +/* + * Entering the Bootloader via Software * http://www.fourwalledcubicle.com/files/LUFA/Doc/120730/html/_page__software_bootloader_start.html */ #define BOOTLOADER_RESET_KEY 0xB007B007 @@ -137,7 +137,7 @@ void bootloader_jump_after_watchdog_reset(void) #if 0 /* Jumping To The Bootloader * http://www.pjrc.com/teensy/jump_to_bootloader.html - * + * * This method doen't work when using LUFA. idk why. * - needs to initialize more regisers or interrupt setting? */ diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c index fc5aad5c1d..f3e1bf6234 100644 --- a/tmk_core/common/command.c +++ b/tmk_core/common/command.c @@ -384,9 +384,6 @@ static bool command_common(uint8_t code) debug_mouse = true; } else { print("\ndebug: off\n"); - debug_matrix = false; - debug_keyboard = false; - debug_mouse = false; } break; From ce57b94908e4fb5a66190dc2a093c165aa4400f0 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Thu, 29 Sep 2016 07:47:30 +0100 Subject: [PATCH 81/92] added en-dash and gbp keys and updated readme --- keyboards/planck/keymaps/callum/keymap.c | 38 ++++-- keyboards/planck/keymaps/callum/readme.md | 149 +++++++++------------- 2 files changed, 91 insertions(+), 96 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 38c362fcbe..82ba83f4e4 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -25,6 +25,8 @@ enum planck_keycodes { CMDRGHT, BELOW, ABOVE, + DASH, + GBP, VOLUP, VOLDN }; @@ -55,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* MOVE * ,-----------------------------------------------------------------------------------. - * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | + * | Esc | | Cmd-L| Up | Cmd-R| | | Cmd-L| Up | Cmd-R| | Esc | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -73,9 +75,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* SYMB * ,-----------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | – | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | £ | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -83,19 +85,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_SYMB] = { - {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ESC }, - {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, DASH }, + {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, GBP }, {_______, KC_TILD, KC_GRV, KC_PLUS, KC_EQL, KC_PIPE, KC_BSLS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, /* MOUSE * ,-----------------------------------------------------------------------------------. - * | | | | | | | | | | | | | + * | | | ACC-2| ACC-1| ACC-0| | | SW-L | M-U | SW-R | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | MB-3 | MB-2 | MB-1 | | | M-L | M-D | M-R | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | | | | | | SW-D | SW-U | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' @@ -201,6 +203,26 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case DASH: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_MINS); + } else { + unregister_code(KC_MINS); + unregister_code(KC_LALT); + } + return false; + break; + case GBP: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_3); + } else { + unregister_code(KC_3); + unregister_code(KC_LALT); + } + return false; + break; case VOLUP: if (record->event.pressed) { register_code(KC_LALT); diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index 7a771130ab..b5997cd5ae 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -2,97 +2,70 @@ This is a layout for the grid planck, built with a few ideals in mind: -- Minimal response times should be maintained. i.e. keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided — they inevitably send their keycode later than a normal key, interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording. +- Minimal response times should be maintained. Keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided – they inevitably send their keycode later than a normal key – interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording as our only means of getting more than one symbol out of a single physical key. - The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible. - There should be two of every modifier (one on each side), otherwise certain long key combinations become hard to make. -- Backspace should be in the “capslock position” in the colemak tradition. -- The keyboard should be usable on any operating system without software changes. For me this means being able to swap the `GUI` key and `Ctrl` key in firmware so that `Cmd-z,x,c,v,…` becomes `Ctrl-z,x,c,v,…` when swapping from macOS to Windows. -We have four layers. A `BASE` layer (which is either `BASE Mac` or `BASE Windows`), in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. +We have five layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster and other movement keys; a `SYMB` layer, with numbers and symbols; a `FUNC` layer, with function keys and media keys; and a `MOUSE` layer, with mouse emulation. -## The `BASE` layer -For Mac ``` -,-----------------------------------------------------------------------------------. -| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| -|------+------+------+------+------+------+------+------+------+------+------+------| -| Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | -`-----------------------------------------------------------------------------------' +/* BASE + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Bksp | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Func | + * `-----------------------------------------------------------------------------------' + */ + +/* MOVE + * ,-----------------------------------------------------------------------------------. + * | Esc | | Cmd-L| Up | Cmd-R| | | Cmd-L| Up | Cmd-R| | Esc | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | Pg Up| Pg Dn| Above| | Pg Dn| Pg Up| | Caps | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | Below| | | | | | | + * `-----------------------------------------------------------------------------------' + */ + +/* SYMB + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | – | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | £ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ + +/* MOUSE + * ,-----------------------------------------------------------------------------------. + * | | | ACC-2| ACC-1| ACC-0| | | SW-L | M-U | SW-R | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | MB-3 | MB-2 | MB-1 | | | M-L | M-D | M-R | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | SW-D | SW-U | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ + +/* FUNC + * ,-----------------------------------------------------------------------------------. + * | Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Vol+ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | Vol- | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | F21 | F22 | F23 | F24 | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | Prev | Mute | Play | Next | | | | | + * `-----------------------------------------------------------------------------------' + */ ``` - -For Windows -``` -,-----------------------------------------------------------------------------------. -| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| -|------+------+------+------+------+------+------+------+------+------+------+------| -| Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | -`-----------------------------------------------------------------------------------' -``` - -One of the two above layers is set as the default layer at any one time; see `FUNC`. The basic layout is [colemak](https://colemak.com). `Esc` and `Del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `Caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `Enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. - -The `MOVE` and `SYMB` layers are reached by holding down the `Move` and `Symb` keys respectively. The `FUNC` layer is reached by holding down both the `Move` and `Symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. - -## The `MOVE` layer -``` -,-----------------------------------------------------------------------------------. -| Esc | | Home | Up | End | | | Home | Up | End | | Esc | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Del | | Left | Down | Right| | | Left | Down | Right| | Del | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | | | | | | | | | -`-----------------------------------------------------------------------------------' -``` - -This is fairly self explanatory. I almost exclusively use the right hand cluster so that movement is a one handed affair, but the left hand cluster is there if it’s needed. - -On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ticking *Use PC Style Home/End #2* and *Use PC Style PageUp/PageDown* so that `Home` and `End` jump you to the beginning and end of the line respectively and so that `Pg Up` and `Pg Dn` move the cursor instead of just scrolling. - -None of the modifiers are overwritten so that `shift-alt-arrows` etc work as expected. - -## The `SYMB` layer -``` -,-----------------------------------------------------------------------------------. -| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | ~ | ` | + | = | | | \ | [ | ] | { | } | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | | | | | | | | | -`-----------------------------------------------------------------------------------' -``` - -The symbol layer has all the numbers and their usual corresponding symbols in the first two rows, with the symbols on the home row since I use them more frequently than the numbers. The third row contains all the remaining symbols, arranged roughly so that the most used symbols are accessible with the strongest fingers. - -`Esc` and `Del` are repeated here since I wanted to be able to reach either, one handed, with either hand. - -Again none of the modifiers are overwritten so that shortcuts involving numbers or symbols work as expected. - -## The `FUNC` layer -``` -,-----------------------------------------------------------------------------------. -| F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | Play | Prev | Next | BL+ | | | Lock | | | Mac | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | | | | | | | | Reset| -`-----------------------------------------------------------------------------------' -``` - -`BL+` and `BL-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. `Lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-ctrl-power`.) `Close` sends `alt-f4` to make that shortcut easier to reach. `Mac` and `Win` set the default layer to the Mac and Windows `BASE` layers respecitevly. - -## Other changes from the default -I have LEDs and sound disabled, simply because I have no need of them. From 41227856f4bfe24151009b20c0c412fe33756a4a Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:09:40 +0100 Subject: [PATCH 82/92] added a toggle between Mac and Windows base layers (with swapped cmd and ctrl) --- keyboards/planck/keymaps/callum/keymap.c | 59 +++++++++++++++++++----- 1 file changed, 48 insertions(+), 11 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 6c34311339..b47f8eb05e 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -11,13 +11,15 @@ extern keymap_config_t keymap_config; // 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 _BASE 0 -#define _MOVE 1 -#define _SYMB 2 -#define _FUNC 3 +#define _MAC 0 +#define _WIN 1 +#define _MOVE 2 +#define _SYMB 3 +#define _FUNC 4 enum planck_keycodes { - BASE = SAFE_RANGE, + MAC = SAFE_RANGE, + WIN, MOVE, SYMB, FUNC, @@ -30,7 +32,7 @@ enum planck_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* BASE +/* BASE Mac * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | * |------+------+------+------+------+-------------+------+------+------+------+------| @@ -41,13 +43,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Func | Ctrl | Alt | GUI | Symb |Enter |Space | Move | GUI | Alt | Ctrl |Caps | * `-----------------------------------------------------------------------------------' */ -[_BASE] = { +[_MAC] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} }, +/* BASE Windows + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Bksp | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Func | GUI | Alt | Ctrl | Symb |Enter |Space | Move | Ctrl | Alt | GUI |Caps | + * `-----------------------------------------------------------------------------------' + */ +[_WIN] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, + {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, + {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_RALT, KC_RGUI, KC_CAPS} +}, + /* MOVE * ,-----------------------------------------------------------------------------------. * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | @@ -88,24 +108,41 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | * |-----------------------------------------------------------------------------------. - * | | Play | Prev | Next | BL+ | | | Lock | | | | | + * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | | | | | | + * | | Mute | Vol- | Vol+ | BL- | | | | | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | |Reset | * `-----------------------------------------------------------------------------------' */ [_FUNC] = { {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, - {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, _______, _______}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, _______, _______, _______, _______, _______}, + {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, MAC, _______}, + {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, _______, _______, _______, WIN, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } } }; +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { + case MAC: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_MAC); + } + return false; + break; + case WIN: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_WIN); + } + return false; + break; case MOVE: if (record->event.pressed) { layer_on(_MOVE); From b51f51c614e2bcd64202811510719f25345cb1ce Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:19:11 +0100 Subject: [PATCH 83/92] added close key for alt-f4 macro --- keyboards/planck/keymaps/callum/keymap.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index b47f8eb05e..56808aa8ca 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -23,7 +23,8 @@ enum planck_keycodes { MOVE, SYMB, FUNC, - LOCK + LOCK, + CLOSE }; // Fillers to make layering more clear @@ -110,7 +111,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------. * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | | | | Win | | + * | | Mute | Vol- | Vol+ | BL- | | |Close | | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | |Reset | * `-----------------------------------------------------------------------------------' @@ -118,7 +119,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FUNC] = { {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, MAC, _______}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, _______, _______, _______, WIN, _______}, + {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, CLOSE, _______, _______, WIN, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } } @@ -183,6 +184,16 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case CLOSE: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_F4); + } else { + unregister_code(KC_F4); + unregister_code(KC_LALT); + } + return false; + break; } return true; } From 6ad8a06c734caa378296d0cfe335feda7457ed61 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:47:11 +0100 Subject: [PATCH 84/92] updated readme --- keyboards/planck/keymaps/callum/keymap.c | 30 ++++----- keyboards/planck/keymaps/callum/readme.md | 75 ++++++++++++++++++++--- 2 files changed, 80 insertions(+), 25 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 56808aa8ca..f5a816f4ee 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -39,9 +39,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | Ctrl | Alt | GUI | Symb |Enter |Space | Move | GUI | Alt | Ctrl |Caps | + * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | * `-----------------------------------------------------------------------------------' */ [_MAC] = { @@ -57,9 +57,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | GUI | Alt | Ctrl | Symb |Enter |Space | Move | Ctrl | Alt | GUI |Caps | + * | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | * `-----------------------------------------------------------------------------------' */ [_WIN] = { @@ -71,11 +71,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* MOVE * ,-----------------------------------------------------------------------------------. - * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | + * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | | Left | Down |Right | | | Left | Down |Right | | Del | + * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | |Pg Up |Pg Dn | | |Pg Dn |Pg Up | | | | + * | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' @@ -89,9 +89,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* SYMB * ,-----------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | - * |-----------------------------------------------------------------------------------. - * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | + * |-----------------------------------------------------------------------------------| + * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | * |------+------+------+------+------+-------------+------+------+------+------+------| * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -107,13 +107,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* FUNC * ,-----------------------------------------------------------------------------------. - * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | - * |-----------------------------------------------------------------------------------. - * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | + * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | + * |-----------------------------------------------------------------------------------| + * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | |Close | | | Win | | + * | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | |Reset | + * | | | | | | | | | | | | Reset| * `-----------------------------------------------------------------------------------' */ [_FUNC] = { diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index b70de3f1e2..8125907655 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -6,38 +6,93 @@ This is a layout for the grid planck, built with a few ideals in mind: - The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible. - There should be two of every modifier (one on each side), otherwise certain long key combinations become hard to make. - Backspace should be in the “capslock position” in the colemak tradition. +- The keyboard should be usable on any operating system without software changes. For me this means being able to swap the `GUI` key and `Ctrl` key in firmware so that `Cmd-z,x,c,v,…` becomes `Ctrl-z,x,c,v,…` when swapping from macOS to Windows. -We have four layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. +We have four layers. A `BASE` layer (which is either `BASE Mac` or `BASE Windows`), in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. ## The `BASE` layer -![](http://i.imgur.com/tVNI3SE.png) +For Mac +``` +,-----------------------------------------------------------------------------------. +| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | +|------+------+------+------+------+-------------+------+------+------+------+------| +| Bksp | A | R | S | T | D | H | N | E | I | O | " | +|------+------+------+------+------+------|------+------+------+------+------+------| +| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| +|------+------+------+------+------+------+------+------+------+------+------+------| +| Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | +`-----------------------------------------------------------------------------------' +``` + +For Windows +``` + ,-----------------------------------------------------------------------------------. +| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | +|------+------+------+------+-------+-------------+------+------+------+------+------| +| Bksp | A | R | S | T | D | H | N | E | I | O | " | +|------+------+------+------+------+------|------+------+------+------+------+------| +| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| +|------+------+------+------+------+------+------+------+------+------+------+------| +| Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | +`-----------------------------------------------------------------------------------' +``` -This is the default layer; in [colemak](https://colemak.com). `esc` and `del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. +One of the two above layers is set as the default layer at any one time; see `FUNC`. The basic layout is [colemak](https://colemak.com). `Esc` and `Del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `Caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `Enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. -The `MOVE` and `SYMB` layers are reached by holding down the `move` and `symb` keys respectively. The `FUNC` layer is reached by holding down both the `move` and `symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. +The `MOVE` and `SYMB` layers are reached by holding down the `Move` and `Symb` keys respectively. The `FUNC` layer is reached by holding down both the `Move` and `Symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. ## The `MOVE` layer -![](http://i.imgur.com/KXRSuHT.png) +``` +,-----------------------------------------------------------------------------------. +| Esc | | Home | Up | End | | | Home | Up | End | | Esc | +|------+------+------+------+------+-------------+------+------+------+------+------| +| Del | | Left | Down | Right| | | Left | Down | Right| | Del | +|------+------+------+------+------+------|------+------+------+------+------+------| +| | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | | | | | | | | | +`-----------------------------------------------------------------------------------' +``` This is fairly self explanatory. I almost exclusively use the right hand cluster so that movement is a one handed affair, but the left hand cluster is there if it’s needed. -On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ticking *Use PC Style Home/End #2* and *Use PC Style PageUp/PageDown* so that `home` and `end` jump you to the beginning and end of the line respectively and so that `pg up` and `pg dn` move the cursor instead of just scrolling. +On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ticking *Use PC Style Home/End #2* and *Use PC Style PageUp/PageDown* so that `Home` and `End` jump you to the beginning and end of the line respectively and so that `Pg Up` and `Pg Dn` move the cursor instead of just scrolling. None of the modifiers are overwritten so that `shift-alt-arrows` etc work as expected. ## The `SYMB` layer -![](http://i.imgur.com/thh1ne2.png) +``` +,-----------------------------------------------------------------------------------. +| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | +|-----------------------------------------------------------------------------------| +| Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | +|------+------+------+------+------+-------------+------+------+------+------+------| +| | ~ | ` | + | = | | | \ | [ | ] | { | } | | +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | | | | | | | | | +`-----------------------------------------------------------------------------------' +``` The symbol layer has all the numbers and their usual corresponding symbols in the first two rows, with the symbols on the home row since I use them more frequently than the numbers. The third row contains all the remaining symbols, arranged roughly so that the most used symbols are accessible with the strongest fingers. -`esc` and `del` are repeated here since I wanted to be able to reach either, one handed, with either hand. +`Esc` and `Del` are repeated here since I wanted to be able to reach either, one handed, with either hand. Again none of the modifiers are overwritten so that shortcuts involving numbers or symbols work as expected. ## The `FUNC` layer -![](http://i.imgur.com/1VKFBBU.png) +``` +,-----------------------------------------------------------------------------------. +| F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | +|-----------------------------------------------------------------------------------| +| | Play | Prev | Next | BL+ | | | Lock | | | Mac | | +|------+------+------+------+------+------|------+------+------+------+------+------| +| | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | | | | | | | | Reset| +`-----------------------------------------------------------------------------------' +``` -The only things of note here are that `bl+` and `bl-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. And that `lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-ctrl-power`.) +`BL+` and `BL-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. `Lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-ctrl-power`.) `Close` sends `alt-f4` to make that shortcut easier to reach. `Mac` and `Win` set the default layer to the Mac and Windows `BASE` layers respecitevly. ## Other changes from the default I have LEDs and sound disabled, simply because I have no need of them. From ff09695897c4bdd705347e6427077e406413c26d Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:52:55 +0100 Subject: [PATCH 85/92] Update readme.md --- keyboards/planck/keymaps/callum/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index 8125907655..2e59c00d6d 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -26,9 +26,9 @@ For Mac For Windows ``` - ,-----------------------------------------------------------------------------------. +,-----------------------------------------------------------------------------------. | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+-------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Bksp | A | R | S | T | D | H | N | E | I | O | " | |------+------+------+------+------+------|------+------+------+------+------+------| | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| From c593564acab7a0b1cca2c90bd0b1ffd9def59f05 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:55:27 +0100 Subject: [PATCH 86/92] Update readme.md --- keyboards/planck/keymaps/callum/readme.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index 2e59c00d6d..7a771130ab 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -15,9 +15,9 @@ For Mac ``` ,-----------------------------------------------------------------------------------. | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| |------+------+------+------+------+------+------+------+------+------+------+------| | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | @@ -30,7 +30,7 @@ For Windows | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | |------+------+------+------+------+------+------+------+------+------+------+------| | Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| |------+------+------+------+------+------+------+------+------+------+------+------| | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | @@ -45,9 +45,9 @@ The `MOVE` and `SYMB` layers are reached by holding down the `Move` and `Symb` k ``` ,-----------------------------------------------------------------------------------. | Esc | | Home | Up | End | | | Home | Up | End | | Esc | -|------+------+------+------+------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Del | | Left | Down | Right| | | Left | Down | Right| | Del | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | | @@ -64,9 +64,9 @@ None of the modifiers are overwritten so that `shift-alt-arrows` etc work as exp ``` ,-----------------------------------------------------------------------------------. | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | -|-----------------------------------------------------------------------------------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | -|------+------+------+------+------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | ~ | ` | + | = | | | \ | [ | ] | { | } | | |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | | @@ -83,9 +83,9 @@ Again none of the modifiers are overwritten so that shortcuts involving numbers ``` ,-----------------------------------------------------------------------------------. | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | -|-----------------------------------------------------------------------------------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | Reset| From b2ecd296ae0dc366717fae8a6abb25c0639d6a43 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:59:36 +0100 Subject: [PATCH 87/92] fixed comments --- keyboards/planck/keymaps/callum/keymap.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index f5a816f4ee..751af9eb9f 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -36,9 +36,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* BASE Mac * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | @@ -54,9 +54,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* BASE Windows * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| * | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | @@ -72,9 +72,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* MOVE * ,-----------------------------------------------------------------------------------. * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | @@ -90,9 +90,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* SYMB * ,-----------------------------------------------------------------------------------. * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | - * |-----------------------------------------------------------------------------------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | @@ -108,9 +108,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* FUNC * ,-----------------------------------------------------------------------------------. * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | - * |-----------------------------------------------------------------------------------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | Reset| From 02635e5924ea5f3b1e970e115407f62c916c4476 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 7 Sep 2016 20:45:23 +0100 Subject: [PATCH 88/92] changed RALT to LALT on Windows --- keyboards/planck/keymaps/callum/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 751af9eb9f..5754b17721 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -66,7 +66,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, - {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_RALT, KC_RGUI, KC_CAPS} + {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_LALT, KC_RGUI, KC_CAPS} }, /* MOVE From fa2724360b831fffd3745bfe7b3ef50910b9132b Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 28 Sep 2016 08:04:38 +0100 Subject: [PATCH 89/92] removed windows layer and updated brightness keys for macOS Sierra --- keyboards/planck/keymaps/callum/keymap.c | 90 ++++-------------------- 1 file changed, 14 insertions(+), 76 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 5754b17721..0ac1906bac 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -11,20 +11,15 @@ extern keymap_config_t keymap_config; // 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 _MAC 0 -#define _WIN 1 -#define _MOVE 2 -#define _SYMB 3 -#define _FUNC 4 +#define _BASE 0 +#define _MOVE 1 +#define _SYMB 2 +#define _FUNC 3 enum planck_keycodes { - MAC = SAFE_RANGE, - WIN, MOVE, SYMB, - FUNC, - LOCK, - CLOSE + FUNC }; // Fillers to make layering more clear @@ -33,7 +28,7 @@ enum planck_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* BASE Mac +/* BASE * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -44,31 +39,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | * `-----------------------------------------------------------------------------------' */ -[_MAC] = { +[_BASE] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} }, -/* BASE Windows - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Bksp | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | - * `-----------------------------------------------------------------------------------' - */ -[_WIN] = { - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, - {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, - {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_LALT, KC_RGUI, KC_CAPS} -}, - /* MOVE * ,-----------------------------------------------------------------------------------. * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | @@ -81,9 +58,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_MOVE] = { - {KC_ESC, _______, KC_HOME, KC_UP, KC_END, _______, _______, KC_HOME, KC_UP, KC_END, _______, KC_ESC}, - {KC_DEL, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_DEL}, - {_______, _______, _______, KC_PGUP, KC_PGDN, _______, _______, KC_PGDN, KC_PGUP, _______, _______, _______}, + {KC_ESC, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, KC_ESC}, + {KC_DEL, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, KC_DEL}, + {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, @@ -109,41 +86,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | + * | | Play | Prev | Next | BL+ | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | + * | | Mute | Vol- | Vol+ | BL- | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | Reset| * `-----------------------------------------------------------------------------------' */ [_FUNC] = { {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, - {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, MAC, _______}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, CLOSE, _______, _______, WIN, _______}, + {XXXXXXX, KC_MPLY, KC_MPRV, KC_MNXT, KC_F15, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_F14, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } } }; -void persistant_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { - case MAC: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_MAC); - } - return false; - break; - case WIN: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_WIN); - } - return false; - break; case MOVE: if (record->event.pressed) { layer_on(_MOVE); @@ -172,28 +132,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case LOCK: - if (record->event.pressed) { - register_code(KC_RSFT); - register_code(KC_RCTL); - register_code(KC_POWER); - } else { - unregister_code(KC_POWER); - unregister_code(KC_RCTL); - unregister_code(KC_RSFT); - } - return false; - break; - case CLOSE: - if (record->event.pressed) { - register_code(KC_LALT); - register_code(KC_F4); - } else { - unregister_code(KC_F4); - unregister_code(KC_LALT); - } - return false; - break; } return true; } From c762ea975a4c66da484b4cd4879e41c1457d854a Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 28 Sep 2016 23:15:35 +0100 Subject: [PATCH 90/92] big restructure now I only have to consider macOS, also added mouse, more function keys, and some neat macros --- keyboards/planck/keymaps/callum/keymap.c | 139 +++++++++++++++++++---- 1 file changed, 116 insertions(+), 23 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 0ac1906bac..38c362fcbe 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -14,12 +14,19 @@ extern keymap_config_t keymap_config; #define _BASE 0 #define _MOVE 1 #define _SYMB 2 -#define _FUNC 3 +#define _MOUSE 3 +#define _FUNC 4 enum planck_keycodes { - MOVE, + MOVE = SAFE_RANGE, SYMB, - FUNC + FUNC, + CMDLEFT, + CMDRGHT, + BELOW, + ABOVE, + VOLUP, + VOLDN }; // Fillers to make layering more clear @@ -36,14 +43,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | + * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Func | * `-----------------------------------------------------------------------------------' */ [_BASE] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, - {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} + {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, FUNC } }, /* MOVE @@ -52,16 +59,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | + * | | | | Pg Up| Pg Dn| Above| | Pg Dn| Pg Up| | Caps | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | | | | Below| | | | | | | * `-----------------------------------------------------------------------------------' */ [_MOVE] = { - {KC_ESC, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, KC_ESC}, - {KC_DEL, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, KC_DEL}, - {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} + {KC_ESC, XXXXXXX, CMDLEFT, KC_UP, CMDRGHT, XXXXXXX, XXXXXXX, CMDLEFT, KC_UP, CMDRGHT, XXXXXXX, KC_ESC }, + {KC_DEL, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_CAPS, KC_DEL }, + {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, ABOVE, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______}, + {_______, _______, _______, _______, _______, BELOW, _______, _______, _______, _______, _______, _______} }, /* SYMB @@ -82,22 +89,40 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, +/* MOUSE + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_MOUSE] = { + {XXXXXXX, XXXXXXX, KC_ACL2, KC_ACL1, KC_ACL0, XXXXXXX, XXXXXXX, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN2, KC_BTN1, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX}, + {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_D, KC_WH_U, XXXXXXX, XXXXXXX, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + /* FUNC * ,-----------------------------------------------------------------------------------. - * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | + * | Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Vol+ | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Play | Prev | Next | BL+ | | | | | | | | + * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | Vol- | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | | | | | | + * | | F21 | F22 | F23 | F24 | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | Reset| + * | | | | | Prev | Mute | Play | Next | | | | | * `-----------------------------------------------------------------------------------' */ [_FUNC] = { - {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, - {XXXXXXX, KC_MPLY, KC_MPRV, KC_MNXT, KC_F15, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_F14, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } + {RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, VOLUP }, + {XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, VOLDN }, + {_______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______}, + {_______, _______, _______, _______, KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT, _______, _______, _______, _______} } }; @@ -107,20 +132,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case MOVE: if (record->event.pressed) { layer_on(_MOVE); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } else { layer_off(_MOVE); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } return false; break; case SYMB: if (record->event.pressed) { layer_on(_SYMB); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } else { layer_off(_SYMB); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } return false; break; @@ -132,6 +157,74 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case CMDLEFT: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_LEFT); + } else { + unregister_code(KC_LEFT); + unregister_code(KC_LGUI); + } + return false; + break; + case CMDRGHT: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_RGHT); + } else { + unregister_code(KC_RGHT); + unregister_code(KC_LGUI); + } + return false; + break; + case BELOW: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_RGHT); + unregister_code(KC_RGHT); + unregister_code(KC_LGUI); + register_code(KC_ENT); + unregister_code(KC_ENT); + } + return false; + break; + case ABOVE: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_LEFT); + unregister_code(KC_LEFT); + unregister_code(KC_LGUI); + register_code(KC_ENT); + unregister_code(KC_ENT); + register_code(KC_UP); + unregister_code(KC_UP); + } + return false; + break; + case VOLUP: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_LSFT); + register_code(KC_VOLU); + } else { + unregister_code(KC_VOLU); + unregister_code(KC_LSFT); + unregister_code(KC_LALT); + } + return false; + break; + case VOLDN: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_LSFT); + register_code(KC_VOLD); + } else { + unregister_code(KC_VOLD); + unregister_code(KC_LSFT); + unregister_code(KC_LALT); + } + return false; + break; } return true; } From 2f07ad8e8a3e69eb90488bcac0540fd81448e3d0 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Thu, 29 Sep 2016 07:47:30 +0100 Subject: [PATCH 91/92] added en-dash and gbp keys and updated readme --- keyboards/planck/keymaps/callum/keymap.c | 38 ++++-- keyboards/planck/keymaps/callum/readme.md | 149 +++++++++------------- 2 files changed, 91 insertions(+), 96 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 38c362fcbe..82ba83f4e4 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -25,6 +25,8 @@ enum planck_keycodes { CMDRGHT, BELOW, ABOVE, + DASH, + GBP, VOLUP, VOLDN }; @@ -55,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* MOVE * ,-----------------------------------------------------------------------------------. - * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | + * | Esc | | Cmd-L| Up | Cmd-R| | | Cmd-L| Up | Cmd-R| | Esc | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -73,9 +75,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* SYMB * ,-----------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | – | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | £ | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -83,19 +85,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_SYMB] = { - {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ESC }, - {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, DASH }, + {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, GBP }, {_______, KC_TILD, KC_GRV, KC_PLUS, KC_EQL, KC_PIPE, KC_BSLS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, /* MOUSE * ,-----------------------------------------------------------------------------------. - * | | | | | | | | | | | | | + * | | | ACC-2| ACC-1| ACC-0| | | SW-L | M-U | SW-R | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | MB-3 | MB-2 | MB-1 | | | M-L | M-D | M-R | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | | | | | | SW-D | SW-U | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' @@ -201,6 +203,26 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case DASH: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_MINS); + } else { + unregister_code(KC_MINS); + unregister_code(KC_LALT); + } + return false; + break; + case GBP: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_3); + } else { + unregister_code(KC_3); + unregister_code(KC_LALT); + } + return false; + break; case VOLUP: if (record->event.pressed) { register_code(KC_LALT); diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index 7a771130ab..b5997cd5ae 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -2,97 +2,70 @@ This is a layout for the grid planck, built with a few ideals in mind: -- Minimal response times should be maintained. i.e. keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided — they inevitably send their keycode later than a normal key, interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording. +- Minimal response times should be maintained. Keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided – they inevitably send their keycode later than a normal key – interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording as our only means of getting more than one symbol out of a single physical key. - The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible. - There should be two of every modifier (one on each side), otherwise certain long key combinations become hard to make. -- Backspace should be in the “capslock position” in the colemak tradition. -- The keyboard should be usable on any operating system without software changes. For me this means being able to swap the `GUI` key and `Ctrl` key in firmware so that `Cmd-z,x,c,v,…` becomes `Ctrl-z,x,c,v,…` when swapping from macOS to Windows. -We have four layers. A `BASE` layer (which is either `BASE Mac` or `BASE Windows`), in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. +We have five layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster and other movement keys; a `SYMB` layer, with numbers and symbols; a `FUNC` layer, with function keys and media keys; and a `MOUSE` layer, with mouse emulation. -## The `BASE` layer -For Mac ``` -,-----------------------------------------------------------------------------------. -| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| -|------+------+------+------+------+------+------+------+------+------+------+------| -| Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | -`-----------------------------------------------------------------------------------' +/* BASE + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Bksp | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Func | + * `-----------------------------------------------------------------------------------' + */ + +/* MOVE + * ,-----------------------------------------------------------------------------------. + * | Esc | | Cmd-L| Up | Cmd-R| | | Cmd-L| Up | Cmd-R| | Esc | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | Pg Up| Pg Dn| Above| | Pg Dn| Pg Up| | Caps | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | Below| | | | | | | + * `-----------------------------------------------------------------------------------' + */ + +/* SYMB + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | – | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | £ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ + +/* MOUSE + * ,-----------------------------------------------------------------------------------. + * | | | ACC-2| ACC-1| ACC-0| | | SW-L | M-U | SW-R | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | MB-3 | MB-2 | MB-1 | | | M-L | M-D | M-R | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | SW-D | SW-U | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ + +/* FUNC + * ,-----------------------------------------------------------------------------------. + * | Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Vol+ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | Vol- | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | F21 | F22 | F23 | F24 | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | Prev | Mute | Play | Next | | | | | + * `-----------------------------------------------------------------------------------' + */ ``` - -For Windows -``` -,-----------------------------------------------------------------------------------. -| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| -|------+------+------+------+------+------+------+------+------+------+------+------| -| Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | -`-----------------------------------------------------------------------------------' -``` - -One of the two above layers is set as the default layer at any one time; see `FUNC`. The basic layout is [colemak](https://colemak.com). `Esc` and `Del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `Caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `Enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. - -The `MOVE` and `SYMB` layers are reached by holding down the `Move` and `Symb` keys respectively. The `FUNC` layer is reached by holding down both the `Move` and `Symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. - -## The `MOVE` layer -``` -,-----------------------------------------------------------------------------------. -| Esc | | Home | Up | End | | | Home | Up | End | | Esc | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Del | | Left | Down | Right| | | Left | Down | Right| | Del | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | | | | | | | | | -`-----------------------------------------------------------------------------------' -``` - -This is fairly self explanatory. I almost exclusively use the right hand cluster so that movement is a one handed affair, but the left hand cluster is there if it’s needed. - -On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ticking *Use PC Style Home/End #2* and *Use PC Style PageUp/PageDown* so that `Home` and `End` jump you to the beginning and end of the line respectively and so that `Pg Up` and `Pg Dn` move the cursor instead of just scrolling. - -None of the modifiers are overwritten so that `shift-alt-arrows` etc work as expected. - -## The `SYMB` layer -``` -,-----------------------------------------------------------------------------------. -| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | ~ | ` | + | = | | | \ | [ | ] | { | } | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | | | | | | | | | -`-----------------------------------------------------------------------------------' -``` - -The symbol layer has all the numbers and their usual corresponding symbols in the first two rows, with the symbols on the home row since I use them more frequently than the numbers. The third row contains all the remaining symbols, arranged roughly so that the most used symbols are accessible with the strongest fingers. - -`Esc` and `Del` are repeated here since I wanted to be able to reach either, one handed, with either hand. - -Again none of the modifiers are overwritten so that shortcuts involving numbers or symbols work as expected. - -## The `FUNC` layer -``` -,-----------------------------------------------------------------------------------. -| F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | Play | Prev | Next | BL+ | | | Lock | | | Mac | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | | | | | | | | Reset| -`-----------------------------------------------------------------------------------' -``` - -`BL+` and `BL-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. `Lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-ctrl-power`.) `Close` sends `alt-f4` to make that shortcut easier to reach. `Mac` and `Win` set the default layer to the Mac and Windows `BASE` layers respecitevly. - -## Other changes from the default -I have LEDs and sound disabled, simply because I have no need of them. From 8d99140d1b80bf497b2198138d3f481e93b0fbab Mon Sep 17 00:00:00 2001 From: Adam Gausmann Date: Thu, 29 Sep 2016 14:46:10 -0500 Subject: [PATCH 92/92] Missing ifdef statement --- quantum/process_keycode/process_midi.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 8784e64f36..577dad43ac 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -7,7 +7,9 @@ int midi_offset = 7; bool process_midi(uint16_t keycode, keyrecord_t *record) { if (keycode == MI_ON && record->event.pressed) { midi_activated = true; +#ifdef AUDIO_ENABLE music_scale_user(); +#endif return false; } @@ -63,4 +65,4 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) { return false; } return true; -} \ No newline at end of file +}