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"
31 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
32 [BASE] = KEYMAP( // layer 0 : default
34 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL,
35 KC_BSLS,KC_Q, KC_W, KC_E, KC_R, KC_T, TG(MOUS),
36 KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G,
37 KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, MO(SYMB),
38 KC_EQL,KC_GRV, KC_BSLS,KC_LEFT,KC_RGHT,
41 KC_BSPC,KC_LCTL, KC_END,
43 TG(NUMP), KC_6,KC_7, KC_8, KC_9, KC_0, KC_MINS,
44 KC_LBRC,KC_Y,KC_U, KC_I, KC_O, KC_P, KC_RBRC,
45 KC_H,KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,
46 TG(SYMB), KC_N,KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,
47 KC_UP, KC_DOWN,KC_LEFT, KC_RGHT,KC_RGUI,
50 KC_PGDN,KC_ENT, KC_SPC
53 [SYMB] = KEYMAP( // layer 1 : function and symbol keys
55 KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
56 KC_TRNS,KC_LBRC,KC_RBRC,KC_LBRC,KC_RBRC,KC_SCLN,KC_TRNS,
57 KC_TRNS,KC_BSLS,KC_SLSH,KC_9 ,KC_0 ,KC_SCLN,
58 KC_TRNS,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_TRNS,
59 TG(FNXN),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
62 KC_TRNS,KC_TRNS,KC_TRNS,
64 KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PWR ,
65 KC_TRNS,KC_TRNS,KC_EQL ,KC_EQL ,KC_MINS,KC_MINS,KC_VOLU,
66 KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,KC_TRNS,KC_VOLD,
67 KC_FN5 ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MUTE,
68 KC_MRWD,KC_MSTP,KC_MPLY,KC_MPRV,KC_MNXT,
71 KC_TRNS,KC_TRNS,KC_TRNS
73 [MOUS] = KEYMAP( // layer 2 : Mouse
75 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
76 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS ,
77 KC_TRNS,KC_BTN4,KC_BTN2,KC_BTN3,KC_BTN1,KC_TRNS,
78 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
79 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
82 KC_TRNS,KC_TRNS,KC_TRNS,
84 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
85 KC_TRNS,KC_ACL0,KC_TRNS,KC_WH_D,KC_WH_U,KC_TRNS,KC_TRNS,
86 KC_ACL1,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,KC_TRNS,
87 KC_TRNS,KC_ACL2,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
88 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
91 KC_TRNS,KC_TRNS,KC_TRNS
94 [FNXN] = KEYMAP( // layer 3 : keyboard functions
96 RESET,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
97 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_FN5,
98 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,
103 KC_TRNS,KC_TRNS,KC_TRNS,
105 KC_FN5, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
106 KC_FN5, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
107 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,
112 KC_TRNS,KC_TRNS,KC_TRNS
115 [NUMP] = KEYMAP( // layer 4: numpad
117 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
118 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
119 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,
124 KC_TRNS,KC_TRNS,KC_TRNS,
126 KC_FN5,KC_NLCK, KC_PSLS,KC_PAST,KC_PAST,KC_PMNS,KC_BSPC,
127 KC_FN5 ,KC_NO, KC_P7, KC_P8, KC_P9, KC_PMNS,KC_BSPC,
128 KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS,KC_PENT,
129 KC_FN5 ,KC_NO, KC_P1, KC_P2, KC_P3, KC_PPLS,KC_PENT,
130 KC_P0, KC_PDOT,KC_SLSH,KC_PENT,KC_PENT,
133 KC_TRNS,KC_TRNS,KC_TRNS
136 const uint16_t PROGMEM fn_actions[] = {
137 [0] = ACTION_LAYER_SET(BASE, ON_PRESS), // FN0 - push Layer0
138 [1] = ACTION_LAYER_MOMENTARY(SYMB), // FN1 - switch to Layer1
139 [2] = ACTION_LAYER_SET(MOUS, ON_PRESS), // FN2 - push Layer2
140 [3] = ACTION_LAYER_SET(FNXN, ON_PRESS), // FN3 - push Layer3
141 [4] = ACTION_LAYER_SET(NUMP, ON_PRESS), // FN4 - push Layer4
142 [5] = ACTION_LAYER_SET(BASE, ON_PRESS), // FN5 - push Layer0
143 [6] = ACTION_LAYER_SET(SYMB, ON_PRESS), // FN6 - push Layer1
146 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
148 // MACRODOWN only works in this function
151 if (record->event.pressed) {
152 register_code(KC_RSFT);
154 unregister_code(KC_RSFT);
161 // Runs just one time when the keyboard initializes.
162 void matrix_init_user(void) {
166 // Runs constantly in the background, in a loop.
167 void matrix_scan_user(void) {