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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