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 | 154 +++++++++---------- 1 file changed, 69 insertions(+), 85 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,49 +171,36 @@ void persistant_default_layer_set(uint16_t default_layer) { bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { - case QWERTY: + case WORKMAN: if (record->event.pressed) { #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + PLAY_NOTE_ARRAY(tone_workman, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistant_default_layer_set(1UL<<_WORKMAN); } return false; break; - case BACKLIT: + case QWERTY: if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - } else { - unregister_code(KC_RSFT); + persistant_default_layer_set(1UL<<_QWERTY); } 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 | 458 ++++++++++++++------------ keyboards/planck/keymaps/pvc/keymap.c | 106 ++++-- 4 files changed, 336 insertions(+), 241 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 }, +/* 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 } }, - -/* 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_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,61 +272,101 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { - case MACRO_BREATH_TOGGLE: + case MACRO_HELP_1: if (record->event.pressed) { - breathing_toggle(); + uprintf("1"); } break; - case MACRO_BREATH_SPEED_INC: + case MACRO_HELP_2: if (record->event.pressed) { - breathing_speed_inc(1); + uprintf("2"); } break; - case MACRO_BREATH_SPEED_DEC: + case MACRO_HELP_3: if (record->event.pressed) { - breathing_speed_dec(1); + uprintf("3"); } break; - case MACRO_BREATH_DEFAULT: + case MACRO_HELP_4: if (record->event.pressed) { - breathing_defaults(); + uprintf("4"); } break; - case MACRO_QWERTY: + case MACRO_HELP_5: 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("8"); + } + break; + + case MACRO_HELP_9: + if (record->event.pressed) + { + uprintf("9"); + } + break; + + case MACRO_BREATH_TOGGLE: + if (record->event.pressed) + { + breathing_toggle(); + } + break; + + case MACRO_BREATH_SPEED_INC: + if (record->event.pressed) + { + breathing_speed_inc(1); + } + break; + + case MACRO_BREATH_SPEED_DEC: + if (record->event.pressed) + { + breathing_speed_dec(1); + } + break; + + case MACRO_BREATH_DEFAULT: + if (record->event.pressed) + { + breathing_defaults(); + } + break; + + case MACRO_QWERTY: + if (record->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 +++++++++++++++++- keyboards/handwired/retro_refit/Makefile | 3 + .../{ => 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/Makefile | 3 - keyboards/retro_refit/readme.md | 26 ---- keyboards/vision_division/readme.md | 6 + 11 files changed, 179 insertions(+), 32 deletions(-) create mode 100644 keyboards/handwired/retro_refit/Makefile 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/Makefile 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/handwired/retro_refit/Makefile b/keyboards/handwired/retro_refit/Makefile new file mode 100644 index 0000000000..191c6bb664 --- /dev/null +++ b/keyboards/handwired/retro_refit/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + 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/Makefile b/keyboards/retro_refit/Makefile deleted file mode 100644 index 4e2a6f00fd..0000000000 --- a/keyboards/retro_refit/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifndef MAKEFILE_INCLUDED - include ../../Makefile -endif \ No newline at end of file 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 | 381 ++++++++---------- 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, 616 insertions(+), 475 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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 D5=r*J literal 93893 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 diff --git a/keyboards/ergodox/keymaps/algernon/images/base-layer.png b/keyboards/ergodox/keymaps/algernon/images/base-layer.png index 7ea57aae38e3833b2f8932cc83f3063b95785588..2a981a4706c6cb719c05f95a9b476f781d1c2294 100644 GIT binary patch literal 102142 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%0D`~mx$kQG~ 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 EiAZ?2R`sI*BO+iJbgi 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�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 Z|BMfpRh#Y%&J|?<0#8>zmvv4FO#mw&Ym)!~ literal 137912 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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 (record->event.pressed) { - kf_timers[code] = timer_read (); + if (!shifted[idx]) { + kc = idx + KC_1; } else { - uint8_t kc_base; - - if (from_appsel) { - from_appsel = false; + switch (id) { + case A_8: + case A_9: + shifted[idx] = false; return; - } - if (kf_timers[code] && timer_elapsed (kf_timers[code]) > TAPPING_TERM) { - // Long press - kc_base = KC_F1; - } else { - kc_base = KC_1; + 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; } - kf_timers[code] = 0; - code += kc_base; + } - register_code (code); - unregister_code (code); + if (record->event.pressed) { + register_code (kc); + } else { + 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() -def main(opts): + 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 | 81 +++++++++++++++++++---- 2 files changed, 83 insertions(+), 28 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) - -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. - -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. +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 | +`-----------------------------------------------------------------------------------' +``` + +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 -![](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) - -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`.) +``` +,-----------------------------------------------------------------------------------. +| 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 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 | 940 +++++++++--------- keyboards/vision_division/matrix_types.h | 33 +- keyboards/vision_division/rules.mk | 2 +- keyboards/vision_division/vision_division.c | 40 + 7 files changed, 570 insertions(+), 536 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_HELP_9: + if (record->event.pressed) + { + uprint("H9"); + } + break; + + case MACRO_BREATH_TOGGLE: + if (record->event.pressed) + { + breathing_toggle(); + } + break; + + case MACRO_BREATH_SPEED_INC: + if (record->event.pressed) + { + breathing_speed_inc(1); + } + break; + + case MACRO_BREATH_SPEED_DEC: + if (record->event.pressed) + { + breathing_speed_dec(1); + } + break; + + case MACRO_BREATH_DEFAULT: + if (record->event.pressed) + { + breathing_defaults(); + } + break; + + case MACRO_QWERTY: + if (record->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_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_BREATH_TOGGLE: - // if (record->event.pressed) - // { - // breathing_toggle(); - // } - // break; - - // case MACRO_BREATH_SPEED_INC: - // if (record->event.pressed) - // { - // breathing_speed_inc(1); - // } - // break; - - // case MACRO_BREATH_SPEED_DEC: - // if (record->event.pressed) - // { - // breathing_speed_dec(1); - // } - // break; - - // case MACRO_BREATH_DEFAULT: - // if (record->event.pressed) - // { - // breathing_defaults(); - // } - // break; - - case MACRO_QWERTY: - 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_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_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_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_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_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_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_TEMPO_U: + if (record->event.pressed) increase_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; #endif /* AUDIO_ENABLE */ #ifdef BACKLIGHT_ENABLE - case MACRO_BACKLIGHT: - if (record->event.pressed) - { - backlight_step(); - } -#endif + case MACRO_BACKLIGHT: + if (record->event.pressed) + { + backlight_step(); + } + break; +#endif /* BACKLIGHT_ENABLE */ - default: - break; + default: + break; - } - return MACRO_NONE; +} +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 | 81 +++++++++++++++++++---- 2 files changed, 83 insertions(+), 28 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) - -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. - -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. +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 | +`-----------------------------------------------------------------------------------' +``` + +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 -![](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) - -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`.) +``` +,-----------------------------------------------------------------------------------. +| 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 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 +}