1
0
Fork 0

[Keymap] Update personal userspace and keymaps (now with 4 spaces!) (#5774)

* Add FnLk to Melody96 bottom row

* Update conditional in userspace makefile

Thanks @drashna

* Add F keys to Melody96 Fn layer

* Add FN_ESC alias to userspace

* Update KBD6X keymap

* Fix RGB_MATRIX_ENABLE constant name in #if

* Remove trailing \ from LAYOUT macro calls

* Set RGB mode on EEPROM reset in KBD6X

* Swap right and middle mouse buttons in KBD6X

* Rearrange RGB controls in KBD6X

* Update keycode aliases, replace CLEAR with DEL_NXT in KBD6X

Add Clear to KBD6X as RCtrl+`

* Convert code to 4 space indents

* Tweak RCTRL layer functionality

* Replace NUMPAD custom keycode with layer state logic

* Update RGB_MATRIX_ENABLE check

Co-Authored-By: vomindoraan <vomindoraan@gmail.com>
This commit is contained in:
Konstantin Đorđević 2019-05-06 17:41:45 +02:00 committed by Drashna Jaelre
parent 8a9c90ad78
commit cb1935aaff
12 changed files with 414 additions and 411 deletions

View file

@ -2,91 +2,95 @@
#include "konstantin.h" #include "konstantin.h"
enum keycodes_keymap { enum keycodes_keymap {
RCTRL = RANGE_KEYMAP, RCTRL = RANGE_KEYMAP,
}; };
enum layers_keymap { enum layers_keymap {
L_RCTRL = L_RANGE_KEYMAP, L_RCTRL = L_RANGE_KEYMAP,
}; };
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { void eeconfig_init_keymap(void) {
switch (keycode) { rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL);
case RCTRL: }
if (record->event.pressed) {
layer_on(L_RCTRL);
register_code(KC_RCTRL);
} else {
layer_off(L_RCTRL);
unregister_code(KC_RCTRL);
}
return false;
default: bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
return true; switch (keycode) {
} case RCTRL:
if (record->event.pressed) {
register_code(KC_RCTRL);
layer_on(L_RCTRL);
} else {
unregister_code(KC_RCTRL);
layer_off(L_RCTRL);
}
return false;
default:
return true;
}
} }
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base layer /* Base layer
* *
* Esc 1 2 3 4 5 6 7 8 9 0 - = \ ` * Esc 1 2 3 4 5 6 7 8 9 0 - = \ `
* *
* Tab Q W E R T Y U I O P [ ] Bspc * Tab Q W E R T Y U I O P [ ] Bspc
* *
* LCtCps A S D F G H J K L ; ' Enter * LCtCps A S D F G H J K L ; ' Enter
* *
* LShiftFn Z X C V B N M , . / RShiftFnL * LShiftFn Z X C V B N M , . / RShiftFnL
* *
* LGuLAlt Space RAlGuRCt * LGuLAlt Space RAlGuRCt
* *
*/ */
[L_BASE] = LAYOUT( [L_BASE] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
LCT_CPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, LCT_CPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
LSFT_FN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, FN_FNLK, LSFT_FN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, FN_FNLK,
XXXXXXX, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, RCTRL, XXXXXXX XXXXXXX, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, RCTRL, XXXXXXX
), ),
/* Function layer /* Function layer
* *
* F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12PScIns * F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12PScIns
* *
* Hom EndPgU M1 M M2 M3 Del * Hom EndPgU M1 M M3 M2 Del
* *
* PgD MWM M M * PgD MWM M M
* *
* MutVo-Vo+PlyPrvNxtMWMWM4 M5 * MutVo-Vo+PlyPrvNxtMWMWM4 M5
* *
* DPRDstNA MW MAcl2 * MW MAcl2
* *
*/ */
[L_FN] = LAYOUT( [L_FN] = LAYOUT(
_______, 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_PSCR, KC_INS, _______, 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_PSCR, KC_INS,
_______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, KC_DEL, _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN3, KC_BTN2, KC_DEL,
_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, _______,
_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_MPRV, KC_MNXT, KC_WH_L, KC_WH_R, KC_BTN4, KC_BTN5, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_MPRV, KC_MNXT, KC_WH_L, KC_WH_R, KC_BTN4, KC_BTN5, _______, _______,
XXXXXXX, DST_P_R, DST_N_A, KC_WH_D, KC_ACL2, _______, XXXXXXX XXXXXXX, _______, _______, KC_WH_D, KC_ACL2, _______, XXXXXXX
), ),
/* RCtrl layer /* RCtrl layer
* *
* * Clr
* *
* TopMvBtmPrT Clear * TopMvBtmTPr DelNx
* *
* MvMvMvNxT * MvMvMvTNx
* *
* * RTgRV-RV+
* *
* DtRDstA * DPRDstNA
* *
*/ */
[L_RCTRL] = LAYOUT( [L_RCTRL] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CLEAR,
_______, TOP, MV_UP, BOTTOM, PRV_TAB, _______, _______, _______, _______, _______, _______, _______, _______, CLEAR, _______, TOP, MV_UP, BOTTOM, TAB_PRV, _______, _______, _______, _______, _______, _______, _______, _______, DEL_NXT,
_______, MV_LEFT, MV_DOWN, MV_RGHT, NXT_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, MV_LEFT, MV_DOWN, MV_RGHT, TAB_NXT, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
XXXXXXX, DST_REM, DST_ADD, _______, _______, _______, XXXXXXX XXXXXXX, DST_P_R, DST_N_A, _______, _______, _______, XXXXXXX
), ),
}; };

View file

@ -1,11 +1,11 @@
BOOTMAGIC_ENABLE = no BOOTMAGIC_ENABLE = no
COMMAND_ENABLE = yes COMMAND_ENABLE = yes
CONSOLE_ENABLE = yes CONSOLE_ENABLE = no
EXTRAKEY_ENABLE = yes EXTRAKEY_ENABLE = yes
MOUSEKEY_ENABLE = yes MOUSEKEY_ENABLE = yes
NKRO_ENABLE = yes NKRO_ENABLE = yes
TAP_DANCE_ENABLE = yes TAP_DANCE_ENABLE = yes
UNICODEMAP_ENABLE = yes UNICODEMAP_ENABLE = no
BACKLIGHT_ENABLE = no BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = no RGBLIGHT_ENABLE = yes

View file

@ -2,77 +2,77 @@
#include "konstantin.h" #include "konstantin.h"
static const hsv_t *colors[] = { &GODSPEED_BLUE, &GODSPEED_YELLOW }; static const hsv_t *colors[] = { &GODSPEED_BLUE, &GODSPEED_YELLOW };
static size_t cnum = sizeof colors / sizeof *colors; static const size_t cnum = sizeof colors / sizeof *colors;
static size_t cidx = 0; static size_t cidx = 0;
void eeconfig_init_keymap(void) {
rgblight_sethsv(colors[cidx]->h, colors[cidx]->s, colors[cidx]->v);
}
enum keycodes_keymap { enum keycodes_keymap {
RGB_SET = RANGE_KEYMAP, RGB_SET = RANGE_KEYMAP,
}; };
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { void eeconfig_init_keymap(void) {
switch (keycode) { rgblight_sethsv(colors[cidx]->h, colors[cidx]->s, colors[cidx]->v);
case RGB_SET: }
if (record->event.pressed) {
cidx = (cidx + 1) % cnum;
rgblight_sethsv(colors[cidx]->h, colors[cidx]->s, colors[cidx]->v);
}
return false;
default: bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
return true; switch (keycode) {
} case RGB_SET:
if (record->event.pressed) {
cidx = (cidx + 1) % cnum;
rgblight_sethsv(colors[cidx]->h, colors[cidx]->s, colors[cidx]->v);
}
return false;
default:
return true;
}
} }
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base layer /* Base layer
* *
* EscF1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12PScInsHomEndPgUPgD * EscF1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12PScInsHomEndPgUPgD
* *
* ` 1 2 3 4 5 6 7 8 9 0 - = \ DelNLkP/ P* P- * ` 1 2 3 4 5 6 7 8 9 0 - = \ DelNLkP/ P* P-
* *
* Tab Q W E R T Y U I O P [ ] Bspc P7 P8 P9 * Tab Q W E R T Y U I O P [ ] Bspc P7 P8 P9
* P+ * P+
* FnCaps A S D F G H J K L ; ' Enter P4 P5 P6 * FnCaps A S D F G H J K L ; ' Enter P4 P5 P6
* *
* LSftRAG Z X C V B N M , . / RShift P1 P2 P3 * LSftRAG Z X C V B N M , . / RShift P1 P2 P3
* PEn * PEn
* LCtlLGuiLAlt Space RAlGuRCtrl P0 P. * LCtlLGuiLAlt Space RAGFnLRCt P0 P.
* *
*/ */
[L_BASE] = LAYOUT( \ [L_BASE] = LAYOUT(
KC_ESC, 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_PSCR, KC_INS, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_ESC, 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_PSCR, KC_INS, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_P7, KC_P8, KC_P9, XXXXXXX, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_P7, KC_P8, KC_P9, XXXXXXX,
FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
KC_LSFT, RAL_RGU, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXXX, KC_LSFT, RAL_RGU, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXXX,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, XXXXXXX, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, FN_FNLK, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
), ),
/* Function layer /* Function layer
* *
* SysSLkPauBrkTopBtm * SysSLkPauBrkTopBtm
* *
* RTg ÷ × * F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12 RTg ÷ ×
* *
* M4 M2 M M1 M3 M5 UCM StpPlyPrvNxtClearRH+RS+RV+ * M4 M2 M M1 M3 M5 UCM StpPlyPrvNxtClearRH+RS+RV+
* RSt * RSt
* M M M MW RH-RS-RV- * M M M MW RH-RS-RV-
* *
* MA0MA2MWMW Vo-Vo+Mut PgURMRRMSRMB * MA0MA2MWMW Vo-Vo+Mut PgURMRRMSRMB
* RMP * RMP
* DtPRDtNA MW App HomPgDEndRM-RM+ * DtPRDtNA MW AppHomPgDEndRM-RM+
* *
*/ */
[L_FN] = LAYOUT( \ [L_FN] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SYSR, KC_SLCK, KC_PAUS, KC_BRK, TOP, BOTTOM, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SYSR, KC_SLCK, KC_PAUS, KC_BRK, TOP, BOTTOM,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, DIVIDE, TIMES, MINUS, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, DIVIDE, TIMES, MINUS,
KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, UC_MOD, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, UC_MOD, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX,
_______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SET, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SET,
_______, _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, KC_PGUP, RGB_M_R, RGB_M_SN,RGB_M_B, XXXXXXX, _______, _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, KC_PGUP, RGB_M_R, RGB_M_SN,RGB_M_B, XXXXXXX,
_______, DST_P_R, DST_N_A, KC_WH_D, _______, XXXXXXX, KC_APP, KC_HOME, KC_PGDN, KC_END, RGB_RMOD,RGB_MOD, RGB_M_P _______, DST_P_R, DST_N_A, KC_WH_D, _______, _______, KC_APP, KC_HOME, KC_PGDN, KC_END, RGB_RMOD,RGB_MOD, RGB_M_P
), ),
}; };

View file

@ -2,66 +2,66 @@
#include "konstantin.h" #include "konstantin.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base layer /* Base layer
* *
* Esc 1 2 3 4 5 6 7 8 9 0 - = \ ` PSc * Esc 1 2 3 4 5 6 7 8 9 0 - = \ ` PSc
* *
* Tab Q W E R T Y U I O P [ ] Bspc Del * Tab Q W E R T Y U I O P [ ] Bspc Del
* *
* FnCaps A S D F G H J K L ; ' Enter PgU * FnCaps A S D F G H J K L ; ' Enter PgU
* *
* LShift Z X C V B N M , . / RCtRSf PgD * LShift Z X C V B N M , . / RCtRSf PgD
* *
* LCtlLGuiLAlt Space RAlGFnLk * LCtlLGuiLAlt Space RAlGFnLk
* *
*/ */
[L_BASE] = LAYOUT_truefox( \ [L_BASE] = LAYOUT_truefox(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_PSCR, \ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_PSCR,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL,
FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \ FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RCT_RSF, KC_UP, KC_PGDN, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RCT_RSF, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, FN_FNLK, KC_LEFT, KC_DOWN, KC_RGHT \ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, FN_FNLK, KC_LEFT, KC_DOWN, KC_RGHT
), ),
/* Function layer /* Function layer
* *
* F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12NumSLkPau * F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12NumSLkPau
* *
* M4 M2 M M1 M3 M5 UCM StpPlyPrvNxtClearIns * M4 M2 M M1 M3 M5 UCM StpPlyPrvNxtClearIns
* *
* M M M MW Top * M M M MW Top
* *
* MA0MA2MWMW Vo-Vo+Mut App PgUBtm * MA0MA2MWMW Vo-Vo+Mut App PgUBtm
* *
* DtPRDtNA MW HomPgDEnd * DtPRDtNA MW HomPgDEnd
* *
*/ */
[L_FN] = LAYOUT_truefox( \ [L_FN] = LAYOUT_truefox(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, NUMPAD, KC_SLCK, KC_PAUS, \ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, NUMPAD, KC_SLCK, KC_PAUS,
KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, UC_MOD, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR, KC_INS, \ KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, UC_MOD, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR, KC_INS,
_______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, TOP, \ _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, TOP,
_______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_APP, KC_PGUP, BOTTOM, \ _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_APP, KC_PGUP, BOTTOM,
_______, DST_P_R, DST_N_A, KC_WH_D, _______, _______, KC_HOME, KC_PGDN, KC_END \ _______, DST_P_R, DST_N_A, KC_WH_D, _______, _______, KC_HOME, KC_PGDN, KC_END
), ),
/* Numpad layer /* Numpad layer
* *
* P7 P8 P9 P- = Num * P7 P8 P9 P- = Num
* *
* P4 P5 P6 P+ ( ) * P4 P5 P6 P+ ( )
* *
* P1 P2 P3 P* × PEnter * P1 P2 P3 P* × PEnter
* *
* P0 P0 , P. P/ ÷ * P0 P0 , P. P/ ÷
* *
* *
* *
*/ */
[L_NUMPAD] = LAYOUT_truefox( \ [L_NUMPAD] = LAYOUT_truefox(
_______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, MINUS, EQUALS, NUMPAD, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, MINUS, EQUALS, NUMPAD, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, L_PAREN, R_PAREN, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, L_PAREN, R_PAREN, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PAST, TIMES, KC_PENT, _______, \ _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PAST, TIMES, KC_PENT, _______,
_______, _______, _______, _______, _______, _______, KC_P0, KC_P0, COMMA, KC_PDOT, KC_PSLS, DIVIDE, _______, _______, \ _______, _______, _______, _______, _______, _______, KC_P0, KC_P0, COMMA, KC_PDOT, KC_PSLS, DIVIDE, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______ \ _______, _______, _______, _______, _______, _______, _______, _______, _______
), ),
}; };

View file

@ -4,107 +4,99 @@ __attribute__((weak))
void keyboard_pre_init_keymap(void) {} void keyboard_pre_init_keymap(void) {}
void keyboard_pre_init_user(void) { void keyboard_pre_init_user(void) {
keyboard_pre_init_keymap(); keyboard_pre_init_keymap();
} }
__attribute__((weak)) __attribute__((weak))
void eeconfig_init_keymap(void) {} void eeconfig_init_keymap(void) {}
void eeconfig_init_user(void) { void eeconfig_init_user(void) {
eeconfig_init_keymap(); eeconfig_init_keymap();
} }
__attribute__((weak)) __attribute__((weak))
void keyboard_post_init_keymap(void) {} void keyboard_post_init_keymap(void) {}
void keyboard_post_init_user(void) { void keyboard_post_init_user(void) {
keyboard_post_init_keymap(); keyboard_post_init_keymap();
} }
__attribute__((weak)) __attribute__((weak))
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
return true; return true;
} }
bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!process_record_keymap(keycode, record)) { if (!process_record_keymap(keycode, record)) {
return false;
}
#ifdef LAYER_NUMPAD
void toggle_numpad(void) {
layer_invert(L_NUMPAD);
bool numpad = IS_LAYER_ON(L_NUMPAD), num_lock = IS_HOST_LED_ON(USB_LED_NUM_LOCK);
if (num_lock != numpad) {
tap_code(KC_NLCK); // Toggle Num Lock to match layer state
}
}
#endif
switch (keycode) {
case CLEAR:
if (record->event.pressed) {
SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
}
return false;
case DST_P_R:
(record->event.pressed ? register_code16 : unregister_code16)(
(get_mods() & DST_MOD_MASK) ? DST_REM : DST_PRV
);
return false;
case DST_N_A:
(record->event.pressed ? register_code16 : unregister_code16)(
(get_mods() & DST_MOD_MASK) ? DST_ADD : DST_NXT
);
return false;
#ifdef LAYER_FN
static bool fn_lock;
case FN_FNLK:
if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
fn_lock = !IS_LAYER_ON(L_FN); // Fn layer will be toggled after this
}
return true;
#endif
#ifdef LAYER_NUMPAD
case NUMPAD:
if (record->event.pressed) {
toggle_numpad();
}
return false;
#endif
case KC_ESC:
if (record->event.pressed) {
#ifdef LAYER_NUMPAD
if (IS_LAYER_ON(L_NUMPAD)) {
toggle_numpad();
return false; return false;
} }
switch (keycode) {
case CLEAR:
if (record->event.pressed) {
SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
}
return false;
case DST_P_R:
(record->event.pressed ? register_code16 : unregister_code16)(
(get_mods() & DST_MOD_MASK) ? DST_REM : DST_PRV
);
return false;
case DST_N_A:
(record->event.pressed ? register_code16 : unregister_code16)(
(get_mods() & DST_MOD_MASK) ? DST_ADD : DST_NXT
);
return false;
#ifdef LAYER_FN
static bool fn_lock;
case FN_FNLK:
if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
fn_lock = !IS_LAYER_ON(L_FN); // Fn layer will be toggled after this
}
return true;
#endif
case KC_ESC:
if (record->event.pressed) {
#ifdef LAYER_NUMPAD // Disable Numpad layer before Fn layer
if (IS_LAYER_ON(L_NUMPAD)) {
layer_off(L_NUMPAD);
return false;
}
#endif #endif
#ifdef LAYER_FN #ifdef LAYER_FN
if (IS_LAYER_ON(L_FN) && fn_lock) { if (IS_LAYER_ON(L_FN) && fn_lock) {
layer_off(L_FN); layer_off(L_FN);
return fn_lock = false; return fn_lock = false;
} }
#endif #endif
} }
return true; return true;
default: default:
return true; return true;
} }
} }
__attribute__((weak)) __attribute__((weak))
uint32_t layer_state_set_keymap(uint32_t state) { uint32_t layer_state_set_keymap(uint32_t state) {
return state; return state;
} }
uint32_t layer_state_set_user(uint32_t state) { uint32_t layer_state_set_user(uint32_t state) {
return layer_state_set_keymap(state); state = layer_state_set_keymap(state);
#ifdef LAYER_NUMPAD
bool numpad = state & 1UL<<L_NUMPAD;
bool num_lock = IS_HOST_LED_ON(USB_LED_NUM_LOCK);
if (numpad != num_lock) {
tap_code(KC_NLCK); // Toggle Num Lock to match Numpad layer state
}
#endif
return state;
} }

View file

@ -1,20 +1,25 @@
#pragma once #pragma once
#include "quantum.h" #include "quantum.h"
#if defined(RGBLIGHT_ENABLE) || defined(RGBMATRIX_ENABLE) #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
#include "rgb.h" #include "rgb.h"
#endif #endif
#ifdef TAP_DANCE_ENABLE #ifdef TAP_DANCE_ENABLE
#include "tap_dance.h" #include "tap_dance.h"
#endif #endif
#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) #if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)
#include "unicode.h" #include "unicode.h"
#endif #endif
#ifdef LAYER_FN #ifdef LAYER_FN
#define FN MO(L_FN) #define FN MO(L_FN)
#define FN_CAPS LT(L_FN, KC_CAPS) #define FN_CAPS LT(L_FN, KC_CAPS)
#define FN_FNLK TT(L_FN) #define FN_ESC LT(L_FN, KC_ESC)
#define FN_FNLK TT(L_FN)
#endif
#ifdef LAYER_NUMPAD
#define NUMPAD TG(L_NUMPAD)
#endif #endif
#define KC_SYSR LALT(KC_PSCR) #define KC_SYSR LALT(KC_PSCR)
@ -27,50 +32,49 @@
#define MV_RGHT LCTL(KC_RGHT) #define MV_RGHT LCTL(KC_RGHT)
#define TOP LCTL(KC_HOME) #define TOP LCTL(KC_HOME)
#define BOTTOM LCTL(KC_END) #define BOTTOM LCTL(KC_END)
#define PRV_TAB LCTL(KC_PGUP) #define TAB_PRV LCTL(KC_PGUP)
#define NXT_TAB LCTL(KC_PGDN) #define TAB_NXT LCTL(KC_PGDN)
#define DEL_PRV LCTL(KC_BSPC)
#define DEL_NXT LCTL(KC_DEL)
#define DST_ADD LCTL(LGUI(KC_D)) #define DST_ADD LCTL(LGUI(KC_D))
#define DST_REM LCTL(LGUI(KC_F4)) #define DST_REM LCTL(LGUI(KC_F4))
#define DST_PRV LCTL(LGUI(KC_LEFT)) #define DST_PRV LCTL(LGUI(KC_LEFT))
#define DST_NXT LCTL(LGUI(KC_RGHT)) #define DST_NXT LCTL(LGUI(KC_RGHT))
#ifndef DST_MOD_MASK #ifndef DST_MOD_MASK
#define DST_MOD_MASK MOD_MASK_CTRL #define DST_MOD_MASK MOD_MASK_SHIFT
#endif #endif
#define LCT_CPS LCTL_T(KC_CAPS) #define LCT_CPS LCTL_T(KC_CAPS)
#ifdef SEND_STRING_CLEAN #ifdef SEND_STRING_CLEAN
#undef SEND_STRING #undef SEND_STRING
#define SEND_STRING(string) { \ #define SEND_STRING(string) { \
uint8_t ss_mods = get_mods(); \ uint8_t ss_mods = get_mods(); \
clear_mods(); \ clear_mods(); \
send_string_P(PSTR(string)); \ send_string_P(PSTR(string)); \
set_mods(ss_mods); \ set_mods(ss_mods); \
} }
#endif #endif
enum keycodes_user { enum keycodes_user {
CLEAR = SAFE_RANGE, CLEAR = SAFE_RANGE,
DST_P_R, DST_P_R,
DST_N_A, DST_N_A,
#ifdef LAYER_NUMPAD
NUMPAD,
#endif
RANGE_KEYMAP, RANGE_KEYMAP,
}; };
enum layers_user { enum layers_user {
L_BASE, L_BASE,
#ifdef LAYER_FN #ifdef LAYER_FN
L_FN, L_FN,
#endif #endif
#ifdef LAYER_NUMPAD #ifdef LAYER_NUMPAD
L_NUMPAD, L_NUMPAD,
#endif #endif
L_RANGE_KEYMAP, L_RANGE_KEYMAP,
}; };
void keyboard_pre_init_keymap(void); void keyboard_pre_init_keymap(void);

View file

@ -3,15 +3,15 @@
#include "quantum.h" #include "quantum.h"
typedef struct { typedef struct {
uint16_t h; // 0360 uint16_t h; // 0360
uint8_t s; // 0255 uint8_t s; // 0255
uint8_t v; // 0255 uint8_t v; // 0255
} hsv_t; } hsv_t;
typedef struct { typedef struct {
uint8_t r; // 0255 uint8_t r; // 0255
uint8_t g; // 0255 uint8_t g; // 0255
uint8_t b; // 0255 uint8_t b; // 0255
} rgb_t; } rgb_t;
extern const hsv_t GODSPEED_BLUE; extern const hsv_t GODSPEED_BLUE;

View file

@ -1,12 +1,15 @@
SRC += konstantin.c SRC += konstantin.c
ifneq (,$(filter yes,$(RGBLIGHT_ENABLE) $(RGB_MATRIX_ENABLE))) # if either is yes ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
SRC += rgb.c SRC += rgb.c
endif
ifneq ($(strip $(RGB_MATRIX_ENABLE)), no)
SRC += rgb.c
endif endif
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
SRC += tap_dance.c SRC += tap_dance.c
endif endif
ifneq (,$(filter yes,$(UNICODE_ENABLE) $(UNICODEMAP_ENABLE))) # if either is yes ifneq (,$(filter yes,$(UNICODE_ENABLE) $(UNICODEMAP_ENABLE)))
SRC += unicode.c SRC += unicode.c
endif endif
EXTRAFLAGS += -flto EXTRAFLAGS += -flto

View file

@ -1,117 +1,117 @@
#include "tap_dance.h" #include "tap_dance.h"
#include "konstantin.h" #include "konstantin.h"
#define ACTION_TAP_DANCE_DOUBLE_MOD(mod1, mod2) { \ #define ACTION_TAP_DANCE_DOUBLE_MOD(mod1, mod2) { \
.fn = { td_double_mod_each, NULL, td_double_mod_reset }, \ .fn = { td_double_mod_each, NULL, td_double_mod_reset }, \
.user_data = &(qk_tap_dance_pair_t){ mod1, mod2 }, \ .user_data = &(qk_tap_dance_pair_t){ mod1, mod2 }, \
} }
void td_double_mod_each(qk_tap_dance_state_t *state, void *user_data) { void td_double_mod_each(qk_tap_dance_state_t *state, void *user_data) {
qk_tap_dance_pair_t *data = (qk_tap_dance_pair_t *)user_data; qk_tap_dance_pair_t *data = (qk_tap_dance_pair_t *)user_data;
// Single tap → mod1, double tap → mod2, triple tap etc. → mod1+mod2 // Single tap → mod1, double tap → mod2, triple tap etc. → mod1+mod2
if (state->count == 1 || state->count == 3) { if (state->count == 1 || state->count == 3) {
register_code(data->kc1); register_code(data->kc1);
} else if (state->count == 2) { } else if (state->count == 2) {
unregister_code(data->kc1); unregister_code(data->kc1);
register_code(data->kc2); register_code(data->kc2);
} }
// Prevent tap dance from sending the mods as weak mods // Prevent tap dance from sending the mods as weak mods
state->weak_mods &= ~(MOD_BIT(data->kc1) | MOD_BIT(data->kc2)); state->weak_mods &= ~(MOD_BIT(data->kc1) | MOD_BIT(data->kc2));
} }
void td_double_mod_reset(qk_tap_dance_state_t *state, void *user_data) { void td_double_mod_reset(qk_tap_dance_state_t *state, void *user_data) {
qk_tap_dance_pair_t *data = (qk_tap_dance_pair_t *)user_data; qk_tap_dance_pair_t *data = (qk_tap_dance_pair_t *)user_data;
if (state->count == 1 || state->count >= 3) { if (state->count == 1 || state->count >= 3) {
unregister_code(data->kc1); unregister_code(data->kc1);
} }
if (state->count >= 2) { if (state->count >= 2) {
unregister_code(data->kc2); unregister_code(data->kc2);
} }
} }
#define ACTION_TAP_DANCE_MOD_LAYER(mod, layer) { \ #define ACTION_TAP_DANCE_MOD_LAYER(mod, layer) { \
.fn = { td_mod_layer_each, NULL, td_mod_layer_reset }, \ .fn = { td_mod_layer_each, NULL, td_mod_layer_reset }, \
.user_data = &(qk_tap_dance_dual_role_t){ mod, layer }, \ .user_data = &(qk_tap_dance_dual_role_t){ mod, layer }, \
} }
void td_mod_layer_each(qk_tap_dance_state_t *state, void *user_data) { void td_mod_layer_each(qk_tap_dance_state_t *state, void *user_data) {
qk_tap_dance_dual_role_t *data = (qk_tap_dance_dual_role_t *)user_data; qk_tap_dance_dual_role_t *data = (qk_tap_dance_dual_role_t *)user_data;
// Single tap → mod, double tap → layer, triple tap etc. → mod+layer // Single tap → mod, double tap → layer, triple tap etc. → mod+layer
if (state->count == 1 || state->count == 3) { if (state->count == 1 || state->count == 3) {
register_code(data->kc); register_code(data->kc);
} else if (state->count == 2) { } else if (state->count == 2) {
unregister_code(data->kc); unregister_code(data->kc);
// Prevent tap dance from sending the mod as a weak mod // Prevent tap dance from sending the mod as a weak mod
state->weak_mods &= ~MOD_BIT(data->kc); state->weak_mods &= ~MOD_BIT(data->kc);
layer_on(data->layer); layer_on(data->layer);
} }
} }
void td_mod_layer_reset(qk_tap_dance_state_t *state, void *user_data) { void td_mod_layer_reset(qk_tap_dance_state_t *state, void *user_data) {
qk_tap_dance_dual_role_t *data = (qk_tap_dance_dual_role_t *)user_data; qk_tap_dance_dual_role_t *data = (qk_tap_dance_dual_role_t *)user_data;
if (state->count == 1 || state->count >= 3) { if (state->count == 1 || state->count >= 3) {
unregister_code(data->kc); unregister_code(data->kc);
} }
if (state->count >= 2) { if (state->count >= 2) {
layer_off(data->layer); layer_off(data->layer);
} }
} }
#define ACTION_TAP_DANCE_LAYER_MOD(layer, mod) { \ #define ACTION_TAP_DANCE_LAYER_MOD(layer, mod) { \
.fn = { td_layer_mod_each, NULL, td_layer_mod_reset }, \ .fn = { td_layer_mod_each, NULL, td_layer_mod_reset }, \
.user_data = &(qk_tap_dance_layer_mod_t){ layer, mod, 0, 0 }, \ .user_data = &(qk_tap_dance_layer_mod_t){ layer, mod, 0, 0 }, \
} }
typedef struct { typedef struct {
uint8_t layer; uint8_t layer;
uint16_t kc; uint16_t kc;
bool layer_on; // Layer state when tap dance started bool layer_on; // Layer state when tap dance started
bool started; bool started;
} qk_tap_dance_layer_mod_t; } qk_tap_dance_layer_mod_t;
void td_layer_mod_each(qk_tap_dance_state_t *state, void *user_data) { void td_layer_mod_each(qk_tap_dance_state_t *state, void *user_data) {
qk_tap_dance_layer_mod_t *data = (qk_tap_dance_layer_mod_t *)user_data; qk_tap_dance_layer_mod_t *data = (qk_tap_dance_layer_mod_t *)user_data;
if (!data->started) { if (!data->started) {
data->layer_on = IS_LAYER_ON(data->layer); data->layer_on = IS_LAYER_ON(data->layer);
data->started = true; data->started = true;
} }
// Single tap → layer, double tap → mod, triple tap etc. → layer+mod // Single tap → layer, double tap → mod, triple tap etc. → layer+mod
if (state->count == 1 || state->count == 3) { if (state->count == 1 || state->count == 3) {
layer_on(data->layer); layer_on(data->layer);
} else if (state->count == 2) { } else if (state->count == 2) {
if (!data->layer_on) { if (!data->layer_on) {
layer_off(data->layer); layer_off(data->layer);
}
register_code(data->kc);
} }
register_code(data->kc);
}
} }
void td_layer_mod_reset(qk_tap_dance_state_t *state, void *user_data) { void td_layer_mod_reset(qk_tap_dance_state_t *state, void *user_data) {
qk_tap_dance_layer_mod_t *data = (qk_tap_dance_layer_mod_t *)user_data; qk_tap_dance_layer_mod_t *data = (qk_tap_dance_layer_mod_t *)user_data;
if ((state->count == 1 || state->count >= 3) && !data->layer_on) { if ((state->count == 1 || state->count >= 3) && !data->layer_on) {
layer_off(data->layer); layer_off(data->layer);
} }
if (state->count >= 2) { if (state->count >= 2) {
unregister_code(data->kc); unregister_code(data->kc);
} }
data->started = false; data->started = false;
} }
qk_tap_dance_action_t tap_dance_actions[] = { qk_tap_dance_action_t tap_dance_actions[] = {
[TD_DST_A_R] = ACTION_TAP_DANCE_DOUBLE(DST_ADD, DST_REM), [TD_DST_A_R] = ACTION_TAP_DANCE_DOUBLE(DST_ADD, DST_REM),
[TD_RAL_LAL] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RALT, KC_LALT), [TD_RAL_LAL] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RALT, KC_LALT),
[TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RALT, KC_RGUI), [TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RALT, KC_RGUI),
[TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RCTL, KC_RSFT), [TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RCTL, KC_RSFT),
[TD_LSFT_FN] = ACTION_TAP_DANCE_MOD_LAYER(KC_LSFT, L_FN), [TD_LSFT_FN] = ACTION_TAP_DANCE_MOD_LAYER(KC_LSFT, L_FN),
[TD_RCTL_FN] = ACTION_TAP_DANCE_MOD_LAYER(KC_RCTL, L_FN), [TD_RCTL_FN] = ACTION_TAP_DANCE_MOD_LAYER(KC_RCTL, L_FN),
[TD_FN_RCTL] = ACTION_TAP_DANCE_LAYER_MOD(L_FN, KC_RCTL), [TD_FN_RCTL] = ACTION_TAP_DANCE_LAYER_MOD(L_FN, KC_RCTL),
}; };

View file

@ -13,13 +13,13 @@
#define FN_RCTL TD(TD_FN_RCTL) #define FN_RCTL TD(TD_FN_RCTL)
enum tap_dance { enum tap_dance {
TD_DST_A_R, TD_DST_A_R,
TD_RAL_LAL, TD_RAL_LAL,
TD_RAL_RGU, TD_RAL_RGU,
TD_RCT_RSF, TD_RCT_RSF,
TD_LSFT_FN, TD_LSFT_FN,
TD_RCTL_FN, TD_RCTL_FN,
TD_FN_RCTL, TD_FN_RCTL,
}; };

View file

@ -2,6 +2,6 @@
#ifdef UNICODEMAP_ENABLE #ifdef UNICODEMAP_ENABLE
const uint32_t PROGMEM unicode_map[] = { const uint32_t PROGMEM unicode_map[] = {
FOREACH_UNICODE(UCM_ENTRY) FOREACH_UNICODE(UCM_ENTRY)
}; };
#endif #endif

View file

@ -3,13 +3,13 @@
#include "quantum.h" #include "quantum.h"
#define FOREACH_UNICODE(M) \ #define FOREACH_UNICODE(M) \
M(COMMA, 0x002C) \ M(COMMA, 0x002C) \
M(L_PAREN, 0x0028) \ M(L_PAREN, 0x0028) \
M(R_PAREN, 0x0029) \ M(R_PAREN, 0x0029) \
M(EQUALS, 0x003D) \ M(EQUALS, 0x003D) \
M(TIMES, 0x00D7) \ M(TIMES, 0x00D7) \
M(DIVIDE, 0x00F7) \ M(DIVIDE, 0x00F7) \
M(MINUS, 0x2212) M(MINUS, 0x2212)
#define UC_KEYCODE(name, code) name = UC(code), #define UC_KEYCODE(name, code) name = UC(code),
@ -19,16 +19,16 @@
#if defined(UNICODE_ENABLE) #if defined(UNICODE_ENABLE)
enum unicode_keycodes { enum unicode_keycodes {
FOREACH_UNICODE(UC_KEYCODE) FOREACH_UNICODE(UC_KEYCODE)
}; };
#elif defined(UNICODEMAP_ENABLE) #elif defined(UNICODEMAP_ENABLE)
enum unicode_names { enum unicode_names {
FOREACH_UNICODE(UCM_NAME) FOREACH_UNICODE(UCM_NAME)
}; };
extern const uint32_t PROGMEM unicode_map[]; extern const uint32_t PROGMEM unicode_map[];
enum unicode_keycodes { enum unicode_keycodes {
FOREACH_UNICODE(UCM_KEYCODE) FOREACH_UNICODE(UCM_KEYCODE)
}; };
#endif #endif