2 Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
3 Jun Wako <wakojun@gmail.com>
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
21 #include "action_layer.h"
23 #include "keymap_plover.h"
33 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
34 [BASE] = KEYMAP( // layer 0 : default
36 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL,
37 KC_BSLS,KC_Q, KC_W, KC_E, KC_R, KC_T, TG(MOUS),
38 KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G,
39 KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, MO(SYMB),
40 KC_EQL,KC_GRV, KC_BSLS,KC_LEFT,KC_RGHT,
43 KC_BSPC,KC_LCTL, KC_END,
45 TG(NUMP), KC_6,KC_7, KC_8, KC_9, KC_0, KC_MINS,
46 KC_LBRC,KC_Y,KC_U, KC_I, KC_O, KC_P, KC_RBRC,
47 KC_H,KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,
48 TG(SYMB), KC_N,KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,
49 KC_UP, KC_DOWN,KC_LEFT, KC_RGHT,KC_RGUI,
52 KC_PGDN,KC_ENT, KC_SPC
55 [SYMB] = KEYMAP( // layer 1 : function and symbol keys
57 TG(PLVR),KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
58 KC_TRNS,KC_LBRC,KC_RBRC,KC_LBRC,KC_RBRC,KC_SCLN,KC_TRNS,
59 KC_TRNS,KC_BSLS,KC_SLSH,KC_9 ,KC_0 ,KC_SCLN,
60 KC_TRNS,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_TRNS,
61 TG(FNXN),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
64 KC_TRNS,KC_TRNS,KC_TRNS,
66 KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PWR ,
67 KC_TRNS,KC_TRNS,KC_EQL ,KC_EQL ,KC_MINS,KC_MINS,KC_VOLU,
68 KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,KC_TRNS,KC_VOLD,
69 KC_FN5 ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MUTE,
70 KC_MRWD,KC_MSTP,KC_MPLY,KC_MPRV,KC_MNXT,
73 KC_TRNS,KC_TRNS,KC_TRNS
75 [MOUS] = KEYMAP( // layer 2 : Mouse
77 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
78 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS ,
79 KC_TRNS,KC_BTN4,KC_BTN2,KC_BTN3,KC_BTN1,KC_TRNS,
80 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
81 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
84 KC_TRNS,KC_TRNS,KC_TRNS,
86 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
87 KC_TRNS,KC_ACL0,KC_TRNS,KC_WH_D,KC_WH_U,KC_TRNS,KC_TRNS,
88 KC_ACL1,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,KC_TRNS,
89 KC_TRNS,KC_ACL2,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
90 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
93 KC_TRNS,KC_TRNS,KC_TRNS
96 [FNXN] = KEYMAP( // layer 3 : keyboard functions
98 RESET,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
99 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_FN5,
100 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
101 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_FN5,
102 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
105 KC_TRNS,KC_TRNS,KC_TRNS,
107 KC_FN5, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
108 KC_FN5, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
109 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
110 KC_FN5, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
111 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
114 KC_TRNS,KC_TRNS,KC_TRNS
117 [NUMP] = KEYMAP( // layer 4: numpad
119 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
120 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
121 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
122 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
123 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
126 KC_TRNS,KC_TRNS,KC_TRNS,
128 KC_FN5,KC_NLCK, KC_PSLS,KC_PAST,KC_PAST,KC_PMNS,KC_BSPC,
129 KC_FN5 ,KC_NO, KC_P7, KC_P8, KC_P9, KC_PMNS,KC_BSPC,
130 KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS,KC_PENT,
131 KC_FN5 ,KC_NO, KC_P1, KC_P2, KC_P3, KC_PPLS,KC_PENT,
132 KC_P0, KC_PDOT,KC_SLSH,KC_PENT,KC_PENT,
135 KC_TRNS,KC_TRNS,KC_TRNS
137 /* Keymap 8: Steno for Plover
139 * ,--------------------------------------------------. ,----------------------------------------
140 * | | | | | | | BASE | | | | | | |
141 * |--------+------+------+------+------+-------------| |------+------+------+------+------+-----
142 * | | # | # | # | # | # | # | | # | # | # | # | # | #
143 * |--------+------+------+------+------+------| | | |------+------+------+------+-----
144 * | | | T | P | H | |------| |------| | F | P | L | T
145 * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+-----
146 * | | | K | W | R | | | | | | R | B | G | S
147 * `--------+------+------+------+------+-------------' `-------------+------+------+------+-----
148 * | | | | | | | | | |
149 * `----------------------------------' `--------------------------
150 * ,-------------. ,-------------.
152 * ,------|------|------| |------+------+------.
154 * | A | O |------| |------| E | U |
156 * `--------------------' `--------------------'
161 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_FN0,
162 KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
163 KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
164 KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
165 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
171 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
172 PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
173 PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
174 PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
175 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
181 const uint16_t PROGMEM fn_actions[] = {
182 [0] = ACTION_LAYER_SET(BASE, ON_PRESS), // FN0 - push Layer0
183 [1] = ACTION_LAYER_MOMENTARY(SYMB), // FN1 - switch to Layer1
184 [2] = ACTION_LAYER_SET(MOUS, ON_PRESS), // FN2 - push Layer2
185 [3] = ACTION_LAYER_SET(FNXN, ON_PRESS), // FN3 - push Layer3
186 [4] = ACTION_LAYER_SET(NUMP, ON_PRESS), // FN4 - push Layer4
187 [5] = ACTION_LAYER_SET(BASE, ON_PRESS), // FN5 - push Layer0
188 [6] = ACTION_LAYER_SET(SYMB, ON_PRESS), // FN6 - push Layer1
189 [6] = ACTION_LAYER_SET(PLVR, ON_PRESS), // FN7 - push Layer5
192 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
194 // MACRODOWN only works in this function
197 if (record->event.pressed) {
198 register_code(KC_RSFT);
200 unregister_code(KC_RSFT);
207 // Runs just one time when the keyboard initializes.
208 void matrix_init_user(void) {
212 // Runs constantly in the background, in a loop.
213 void matrix_scan_user(void) {