1 /* Copyright 2015-2017 Jack Humbert
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 #include QMK_KEYBOARD_H
19 extern keymap_config_t keymap_config
;
23 OVL_L
, // Left overlay
24 OVL_R
, // Right overlay
25 OVL_C
, // Corner overlay
26 OVL_N
, // Number overlay
27 OVL_F
, // F-key overlay
30 enum planck_keycodes
{
36 const uint16_t PROGMEM keymaps
[][MATRIX_ROWS
][MATRIX_COLS
] = {
38 [DVORAK
] = LAYOUT_planck_grid(
39 KC_TAB
, KC_QUOT
, KC_COMM
, KC_DOT
, KC_P
, KC_Y
, KC_F
, KC_G
, KC_C
, KC_R
, KC_L
, OSL(OVL_C
),
40 KC_ESC
, KC_A
, KC_O
, KC_E
, KC_U
, KC_I
, KC_D
, KC_H
, KC_T
, KC_N
, KC_S
, KC_ENT
,
41 KC_LSFT
, KC_SCLN
, KC_Q
, KC_J
, KC_K
, KC_X
, KC_B
, KC_M
, KC_W
, KC_V
, KC_Z
, KC_RSFT
,
42 KC_LGUI
, MO(OVL_N
), KC_LCTL
, KC_RCTL
, KC_BSPC
, MO(OVL_L
), MO(OVL_R
), KC_SPC
, KC_LALT
, MO(OVL_F
), KC_RALT
, KC_RGUI
45 [OVL_L
] = LAYOUT_planck_grid(
46 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_RGHT
, _______
,
47 _______
, KC_UNDS
, KC_MINS
, KC_BSLS
, KC_SLSH
, KC_PLUS
, KC_DLR
, KC_LEFT
, KC_EQL
, KC_LCBR
, KC_RCBR
, _______
,
48 _______
, KC_SCLN
, _______
, _______
, _______
, _______
, _______
, _______
, KC_GRV
, KC_HASH
, KC_PIPE
, _______
,
49 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
52 [OVL_R
] = LAYOUT_planck_grid(
53 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
,
54 _______
, KC_LBRC
, KC_RBRC
, KC_LPRN
, KC_RPRN
, KC_EXLM
, KC_CIRC
, KC_QUES
, KC_PERC
, KC_AMPR
, KC_ASTR
, _______
,
55 _______
, KC_TILD
, KC_AT
, KC_DOWN
, KC_UP
, _______
, _______
, _______
, _______
, _______
, _______
, _______
,
56 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
59 [OVL_C
] = LAYOUT_planck_grid(
60 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_END
, _______
,
61 _______
, UMLT_A
, UMLT_O
, _______
, UMLT_U
, _______
, _______
, KC_HOME
, _______
, _______
, _______
, _______
,
62 _______
, _______
, _______
, KC_PGDN
, KC_PGUP
, _______
, _______
, _______
, _______
, _______
, _______
, _______
,
63 _______
, _______
, _______
, _______
, KC_DEL
, _______
, _______
, KC_INS
, _______
, _______
, _______
, _______
66 [OVL_N
] = LAYOUT_planck_grid(
67 _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_7
, KC_8
, KC_9
, _______
, _______
,
68 _______
, KC_PLUS
, KC_UNDS
, KC_LPRN
, KC_RPRN
, _______
, _______
, KC_4
, KC_5
, KC_6
, _______
, _______
,
69 _______
, KC_ASTR
, KC_SLSH
, _______
, _______
, _______
, _______
, KC_1
, KC_2
, KC_3
, KC_EQL
, _______
,
70 _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_0
, _______
, _______
, _______
, _______
73 [OVL_F
] = LAYOUT_planck_grid(
74 _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_F7
, KC_F8
, KC_F9
, _______
, _______
,
75 _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_F4
, KC_F5
, KC_F6
, _______
, _______
,
76 _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_F1
, KC_F2
, KC_F3
, _______
, _______
,
77 _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_F10
, KC_F11
, KC_F12
, _______
, _______
82 static bool is_left_shift_pressed
= false;
83 static bool is_right_shift_pressed
= false;
85 // This will only work on linux with xkbmap option "compose:prsc"
86 void press_umlaut_of(uint16_t keycode
) {
87 bool is_shift_pressed
= (is_left_shift_pressed
|| is_right_shift_pressed
);
88 register_code(KC_PSCREEN
);
89 unregister_code(KC_PSCREEN
);
90 if (!is_shift_pressed
) {
91 register_code(KC_LSFT
);
93 register_code(KC_QUOT
);
94 unregister_code(KC_QUOT
);
95 if (!is_shift_pressed
) {
96 unregister_code(KC_LSFT
);
98 register_code(keycode
);
99 unregister_code(keycode
);
102 bool process_record_user(uint16_t keycode
, keyrecord_t
*record
) {
105 is_left_shift_pressed
= record
->event
.pressed
;
108 is_right_shift_pressed
= record
->event
.pressed
;
111 if (record
->event
.pressed
) {
112 press_umlaut_of(KC_A
);
116 if (record
->event
.pressed
) {
117 press_umlaut_of(KC_O
);
121 if (record
->event
.pressed
) {
122 press_umlaut_of(KC_U
);