From 8a7daf34a26fddcf1ddc5331cce7e160beea76c3 Mon Sep 17 00:00:00 2001 From: johannes Date: Fri, 3 Feb 2017 10:47:37 +0100 Subject: [PATCH 1/7] initial keymap --- keyboards/planck/config.h | 5 +- keyboards/planck/keymaps/johannes/Makefile | 25 +++++ keyboards/planck/keymaps/johannes/keymap.c | 100 ++++++++++++++++++++ keyboards/planck/keymaps/johannes/readme.md | 2 + 4 files changed, 129 insertions(+), 3 deletions(-) create mode 100644 keyboards/planck/keymaps/johannes/Makefile create mode 100644 keyboards/planck/keymaps/johannes/keymap.c create mode 100644 keyboards/planck/keymaps/johannes/readme.md diff --git a/keyboards/planck/config.h b/keyboards/planck/config.h index 5cf96bb88c..fe59d8b50a 100644 --- a/keyboards/planck/config.h +++ b/keyboards/planck/config.h @@ -32,10 +32,9 @@ along with this program. If not, see . #define MATRIX_COLS 12 /* Planck PCB default pin-out */ -#define MATRIX_ROW_PINS { D0, D5, B5, B6 } -#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define MATRIX_ROW_PINS { F4, F5, F6, F7 } +#define MATRIX_COL_PINS { B1, B3, B2, B6, B5, B4, D2, D7, C6, D4, D0, D1 } #define UNUSED_PINS - #define AUDIO_VOICES #define BACKLIGHT_PIN B7 diff --git a/keyboards/planck/keymaps/johannes/Makefile b/keyboards/planck/keymaps/johannes/Makefile new file mode 100644 index 0000000000..0c0632da09 --- /dev/null +++ b/keyboards/planck/keymaps/johannes/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 = no # 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 = 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. + +# 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/johannes/keymap.c b/keyboards/planck/keymaps/johannes/keymap.c new file mode 100644 index 0000000000..afbad2440c --- /dev/null +++ b/keyboards/planck/keymaps/johannes/keymap.c @@ -0,0 +1,100 @@ +#include "planck.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. + +// 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 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | super|shift | Space|Raise | lower| alt | | |fn | + * `-----------------------------------------------------------------------------------' + */ +[0] = { + {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_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, KC_LSHIFT, KC_SPC, M(2), M(1), KC_LALT, XXXXXXX, XXXXXXX, M(3)} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | { | } | + | | | Å | Ä | Ö | _ | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | \ | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Reset | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[1] = { + {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_LCBR, KC_RCBR, KC_PLUS, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_UNDS, KC_PIPE}, + {_______, _______, _______, _______, _______, _______, _______,_______, _______,_______, KC_BSLS, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | [ | ] | = | | left| down| up | right| - | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[2] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, + {_______, _______, KC_LBRC, KC_RBRC, KC_EQL, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_MINS, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PIPE, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +[3] = { + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 1: + if (record->event.pressed) { + layer_on(1); + } else { + layer_off(1); + } + break; + case 2: + if (record->event.pressed) { + layer_on(2); + } else { + layer_off(2); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/planck/keymaps/johannes/readme.md b/keyboards/planck/keymaps/johannes/readme.md new file mode 100644 index 0000000000..3a4824b5b4 --- /dev/null +++ b/keyboards/planck/keymaps/johannes/readme.md @@ -0,0 +1,2 @@ +# A more basic Planck Layout for copying + From f936a3d5c23c1562bdcd237fcba6bd4e5223f0b8 Mon Sep 17 00:00:00 2001 From: johannes Date: Fri, 3 Feb 2017 14:10:19 +0100 Subject: [PATCH 2/7] stuff --- keyboards/planck/keymaps/johannes/keymap.c | 38 ++++++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/johannes/keymap.c b/keyboards/planck/keymaps/johannes/keymap.c index afbad2440c..d6c0ca81fe 100644 --- a/keyboards/planck/keymaps/johannes/keymap.c +++ b/keyboards/planck/keymaps/johannes/keymap.c @@ -19,14 +19,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | super|shift | Space|Raise | lower| alt | | |fn | + * | | | | super|shift | Space|Raise | lower| alt | altgr| |fn | * `-----------------------------------------------------------------------------------' */ [0] = { {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_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, KC_LSHIFT, KC_SPC, M(2), M(1), KC_LALT, XXXXXXX, XXXXXXX, M(3)} + {XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, KC_LSHIFT, KC_SPC, M(2), M(1), KC_LALT, KC_RALT, XXXXXXX, M(3)} }, /* Lower @@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [1] = { {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_LCBR, KC_RCBR, KC_PLUS, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_UNDS, KC_PIPE}, + {_______, _______, KC_LCBR, KC_RCBR, KC_PLUS, _______, _______, M(4), M(5), M(6), KC_UNDS, _______}, {_______, _______, _______, _______, _______, _______, _______,_______, _______,_______, KC_BSLS, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, @@ -65,6 +65,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, +// Fn-layer [3] = { {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, @@ -94,6 +95,37 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } else { layer_off(2); } + break; + case 3: + if (record->event.pressed) { + layer_on(3); + } else { + layer_off(3); + } + break; + case 4: // å + if (record->event.pressed) { + register_code(KC_RALT); + register_code(KC_W); + } else { + unregister_code(KC_RALT); + } + break; + case 5: // ä + if (record->event.pressed) { + register_code(KC_RALT); + register_code(KC_Q); + } else { + unregister_code(KC_RALT); + } + break; + case 6: // ö + if (record->event.pressed) { + register_code(KC_RALT); + register_code(KC_P); + } else { + unregister_code(KC_RALT); + } break; } return MACRO_NONE; From 835adb7848f4a2d6feb848bdfab1e9990f5f430a Mon Sep 17 00:00:00 2001 From: Johannes Larsson Date: Wed, 12 Apr 2017 23:11:51 +0200 Subject: [PATCH 3/7] colemak layout maybe --- keyboards/planck/keymaps/johannes/keymap.c | 48 +++++++++++++++------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/keyboards/planck/keymaps/johannes/keymap.c b/keyboards/planck/keymaps/johannes/keymap.c index d6c0ca81fe..51c8f7a095 100644 --- a/keyboards/planck/keymaps/johannes/keymap.c +++ b/keyboards/planck/keymaps/johannes/keymap.c @@ -11,22 +11,40 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* 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 | + * `-----------------------------------------------------------------------------------' + */ +[0] = { + {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_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {TG(1), XXXXXXX, XXXXXXX, KC_LGUI, KC_LSHIFT, KC_SPC, M(2), M(1), KC_LALT, KC_RALT, XXXXXXX, M(3)} +}, + /* 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 | + * | Ctrl | Z | X | C | V | B | N | M | , | . | / |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | super|shift | Space|Raise | lower| alt | altgr| |fn | * `-----------------------------------------------------------------------------------' */ -[0] = { +[1] = { {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_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, KC_LSHIFT, KC_SPC, M(2), M(1), KC_LALT, KC_RALT, XXXXXXX, M(3)} + {_______, XXXXXXX, XXXXXXX, KC_LGUI, KC_LSHIFT, KC_SPC, M(2), M(1), KC_LALT, KC_RALT, XXXXXXX, M(3)} }, /* Lower @@ -40,9 +58,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Reset | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ -[1] = { +[2] = { {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_LCBR, KC_RCBR, KC_PLUS, _______, _______, M(4), M(5), M(6), KC_UNDS, _______}, + {_______, _______, KC_LCBR, KC_RCBR, KC_PLUS, _______, _______, RALT(KC_P), RALT(KC_Q), RALT(KC_P), KC_UNDS, _______}, {_______, _______, _______, _______, _______, _______, _______,_______, _______,_______, KC_BSLS, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, @@ -58,7 +76,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ -[2] = { +[3] = { {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, {_______, _______, KC_LBRC, KC_RBRC, KC_EQL, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_MINS, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PIPE, _______}, @@ -66,7 +84,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, // Fn-layer -[3] = { +[4] = { {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, @@ -83,25 +101,25 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) { case 1: - if (record->event.pressed) { - layer_on(1); - } else { - layer_off(1); - } - break; - case 2: if (record->event.pressed) { layer_on(2); } else { layer_off(2); } break; - case 3: + case 2: if (record->event.pressed) { layer_on(3); } else { layer_off(3); } + break; + case 3: + if (record->event.pressed) { + layer_on(4); + } else { + layer_off(4); + } break; case 4: // å if (record->event.pressed) { From 53b094934f2ddd9133da6482176ee214d4fbb86a Mon Sep 17 00:00:00 2001 From: Johannes Larsson Date: Mon, 22 May 2017 15:25:53 +0200 Subject: [PATCH 4/7] matrix layout --- keyboards/planck/config.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/planck/config.h b/keyboards/planck/config.h index 5cf96bb88c..50438a5d5a 100644 --- a/keyboards/planck/config.h +++ b/keyboards/planck/config.h @@ -32,8 +32,8 @@ along with this program. If not, see . #define MATRIX_COLS 12 /* Planck PCB default pin-out */ -#define MATRIX_ROW_PINS { D0, D5, B5, B6 } -#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define MATRIX_ROW_PINS { F4, F5, F6, F7 } +#define MATRIX_COL_PINS { B1, B3, B2, B6, B5, B4, E6, D7, C6, D4, D0, D1 } #define UNUSED_PINS #define AUDIO_VOICES From 690957cdbd77307b7f1c17acb70ab839eac86e3d Mon Sep 17 00:00:00 2001 From: Johannes Larsson Date: Wed, 24 May 2017 19:00:56 +0200 Subject: [PATCH 5/7] media keys and stuff --- keyboards/planck/config.h | 2 +- keyboards/planck/keymaps/johannes/keymap.c | 71 +++++----------------- 2 files changed, 15 insertions(+), 58 deletions(-) diff --git a/keyboards/planck/config.h b/keyboards/planck/config.h index 50438a5d5a..1311bb09b6 100644 --- a/keyboards/planck/config.h +++ b/keyboards/planck/config.h @@ -33,7 +33,7 @@ along with this program. If not, see . /* Planck PCB default pin-out */ #define MATRIX_ROW_PINS { F4, F5, F6, F7 } -#define MATRIX_COL_PINS { B1, B3, B2, B6, B5, B4, E6, D7, C6, D4, D0, D1 } +#define MATRIX_COL_PINS { B1, B3, B2, B6, B5, B4, D2, D7, C6, D4, D0, D1 } #define UNUSED_PINS #define AUDIO_VOICES diff --git a/keyboards/planck/keymaps/johannes/keymap.c b/keyboards/planck/keymaps/johannes/keymap.c index 51c8f7a095..13bb11798d 100644 --- a/keyboards/planck/keymaps/johannes/keymap.c +++ b/keyboards/planck/keymaps/johannes/keymap.c @@ -8,6 +8,10 @@ // Fillers to make layering more clear #define _______ KC_TRNS #define XXXXXXX KC_NO +#define QWERTY 0 +#define LOWER 1 +#define RAISE 2 +#define FUNCTION 3 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -21,13 +25,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' - */ + * [0] = { {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_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, {TG(1), XXXXXXX, XXXXXXX, KC_LGUI, KC_LSHIFT, KC_SPC, M(2), M(1), KC_LALT, KC_RALT, XXXXXXX, M(3)} -}, +},*/ /* Qwerty * ,-----------------------------------------------------------------------------------. @@ -40,11 +44,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | super|shift | Space|Raise | lower| alt | altgr| |fn | * `-----------------------------------------------------------------------------------' */ -[1] = { +[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_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {_______, XXXXXXX, XXXXXXX, KC_LGUI, KC_LSHIFT, KC_SPC, M(2), M(1), KC_LALT, KC_RALT, XXXXXXX, M(3)} + {_______, XXXXXXX, LT(FUNCTION, KC_MPLY), KC_LGUI, KC_LSHIFT, KC_SPC, MO(RAISE), MO(LOWER), KC_LALT, KC_RALT, XXXXXXX, MO(FUNCTION)} }, /* Lower @@ -58,9 +62,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Reset | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ -[2] = { +[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_LCBR, KC_RCBR, KC_PLUS, _______, _______, RALT(KC_P), RALT(KC_Q), RALT(KC_P), KC_UNDS, _______}, + {_______, _______, KC_LCBR, KC_RCBR, KC_PLUS, _______, _______, RALT(KC_W), RALT(KC_Q), RALT(KC_P), KC_UNDS, _______}, {_______, _______, _______, _______, _______, _______, _______,_______, _______,_______, KC_BSLS, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, @@ -76,7 +80,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ -[3] = { +[RAISE] = { {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, {_______, _______, KC_LBRC, KC_RBRC, KC_EQL, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_MINS, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PIPE, _______}, @@ -84,11 +88,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, // Fn-layer -[4] = { +[FUNCTION] = { {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_MEDIA_PREV_TRACK, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_MEDIA_NEXT_TRACK, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, KC_AUDIO_MUTE, _______, _______, _______, _______} }, }; @@ -99,52 +103,5 @@ const uint16_t PROGMEM fn_actions[] = { const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - switch(id) { - case 1: - if (record->event.pressed) { - layer_on(2); - } else { - layer_off(2); - } - break; - case 2: - if (record->event.pressed) { - layer_on(3); - } else { - layer_off(3); - } - break; - case 3: - if (record->event.pressed) { - layer_on(4); - } else { - layer_off(4); - } - break; - case 4: // å - if (record->event.pressed) { - register_code(KC_RALT); - register_code(KC_W); - } else { - unregister_code(KC_RALT); - } - break; - case 5: // ä - if (record->event.pressed) { - register_code(KC_RALT); - register_code(KC_Q); - } else { - unregister_code(KC_RALT); - } - break; - case 6: // ö - if (record->event.pressed) { - register_code(KC_RALT); - register_code(KC_P); - } else { - unregister_code(KC_RALT); - } - break; - } return MACRO_NONE; }; From e4f1b238b3242c63bed332f3ca3c4bcfccc9ca14 Mon Sep 17 00:00:00 2001 From: Johannes Larsson Date: Wed, 24 May 2017 21:24:13 +0200 Subject: [PATCH 6/7] revert changes to config.h --- keyboards/planck/config.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/planck/config.h b/keyboards/planck/config.h index 1311bb09b6..5cf96bb88c 100644 --- a/keyboards/planck/config.h +++ b/keyboards/planck/config.h @@ -32,8 +32,8 @@ along with this program. If not, see . #define MATRIX_COLS 12 /* Planck PCB default pin-out */ -#define MATRIX_ROW_PINS { F4, F5, F6, F7 } -#define MATRIX_COL_PINS { B1, B3, B2, B6, B5, B4, D2, D7, C6, D4, D0, D1 } +#define MATRIX_ROW_PINS { D0, D5, B5, B6 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } #define UNUSED_PINS #define AUDIO_VOICES From 6d08de5c67c8b9bf50ca319922a028b93c6a3f35 Mon Sep 17 00:00:00 2001 From: Johannes Larsson Date: Wed, 24 May 2017 21:35:31 +0200 Subject: [PATCH 7/7] readme, media keys fix --- keyboards/planck/keymaps/johannes/keymap.c | 40 +++++++----------- .../planck/keymaps/johannes/planck-layout.png | Bin 0 -> 19661 bytes keyboards/planck/keymaps/johannes/readme.md | 6 ++- 3 files changed, 21 insertions(+), 25 deletions(-) create mode 100644 keyboards/planck/keymaps/johannes/planck-layout.png diff --git a/keyboards/planck/keymaps/johannes/keymap.c b/keyboards/planck/keymaps/johannes/keymap.c index 13bb11798d..a3376518ba 100644 --- a/keyboards/planck/keymaps/johannes/keymap.c +++ b/keyboards/planck/keymaps/johannes/keymap.c @@ -15,24 +15,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* 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 | - * `-----------------------------------------------------------------------------------' - * -[0] = { - {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_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {TG(1), XXXXXXX, XXXXXXX, KC_LGUI, KC_LSHIFT, KC_SPC, M(2), M(1), KC_LALT, KC_RALT, XXXXXXX, M(3)} -},*/ - /* Qwerty * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | @@ -41,14 +23,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | Ctrl | Z | X | C | V | B | N | M | , | . | / |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | super|shift | Space|Raise | lower| alt | altgr| |fn | + * | | alt |play/p| super|shift | Space|Raise | lower| alt | altgr| |fn | * `-----------------------------------------------------------------------------------' */ [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_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {_______, XXXXXXX, LT(FUNCTION, KC_MPLY), KC_LGUI, KC_LSHIFT, KC_SPC, MO(RAISE), MO(LOWER), KC_LALT, KC_RALT, XXXXXXX, MO(FUNCTION)} + {_______, KC_LALT, LT(FUNCTION, KC_MPLY), KC_LGUI, KC_LSHIFT, KC_SPC, MO(RAISE), MO(LOWER), KC_LALT, KC_RALT, XXXXXXX, MO(FUNCTION)} }, /* Lower @@ -59,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | | | | | | | | | | | \ | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Reset | | | | | | | | | | | + * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ [LOWER] = { @@ -87,12 +69,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, -// Fn-layer +/* Fn + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 ' + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | prev | vol.d| vo.up| next | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | mute | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | CAPS | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ [FUNCTION] = { {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_MEDIA_PREV_TRACK, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_MEDIA_NEXT_TRACK, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, KC_AUDIO_MUTE, _______, _______, _______, _______} + {_______, _______, _______, _______, _______, _______, _______, KC_AUDIO_MUTE, _______, _______, _______, _______}, + {_______, _______, _______, _______, KC_CAPS, _______, _______, _______, _______, _______, _______, _______} }, }; diff --git a/keyboards/planck/keymaps/johannes/planck-layout.png b/keyboards/planck/keymaps/johannes/planck-layout.png new file mode 100644 index 0000000000000000000000000000000000000000..e863b802cd8c2bd06c85a1d0fd1d047382884ecb GIT binary patch literal 19661 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