1
0
Fork 0

Add personal userspace, update keymaps (#4845)

* Add kbd6x:konstantin keymap

* Prevent tap dance from sending LShift as a weak mod in KBD6X

* Move config.h and rules.mk definitions into userspace

* Add UC_WIN to UNICODE_SELECTED_MODES

* Temporarily use Bootmagic until Command is fixed

* Move common behavior from keyboards into userspace

* Update kbd6x:konstantin keymap and userspace

* Make a RCTRL layer in kbd6x:konstantin

* Make KC_ESC turn off layers

* KC_ESC turns L_FN off only if it was locked on

* Add missing record->event.pressed checks

* Move numpad toggling logic into function

* Disable Bootmagic, enable KEYBOARD_SHARED_EP with Command
This commit is contained in:
Konstantin Đorđević 2019-01-14 18:09:47 +01:00 committed by MechMerlin
parent ee96b7a89d
commit 9105bf2434
13 changed files with 400 additions and 169 deletions

View file

@ -1,136 +1,5 @@
#include QMK_KEYBOARD_H
#define TOP LCTL(KC_HOME)
#define BOTTOM LCTL(KC_END)
#define DSKTP_L LCTL(LGUI(KC_LEFT))
#define DSKTP_R LCTL(LGUI(KC_RGHT))
#define FN MO(L_FN)
#define FN_CAPS LT(L_FN, KC_CAPS)
#define FN_FNLK TT(L_FN)
#define DESKTOP TD(TD_DESKTOP)
#define FN_RCTL TD(TD_FN_RCTL)
#define RAL_LAL TD(TD_RAL_LAL)
#define RAL_RGU TD(TD_RAL_RGU)
#define RCT_RSF TD(TD_RCT_RSF)
#define COMMA UC(0x002C)
#define L_PAREN UC(0x0028)
#define R_PAREN UC(0x0029)
#define EQUALS UC(0x003D)
#define TIMES UC(0x00D7)
#define DIVIDE UC(0x00F7)
#define MINUS UC(0x2212)
enum layers {
L_BASE,
L_FN,
L_NUMPAD,
};
enum custom_keycodes {
CLEAR = SAFE_RANGE,
NUMPAD,
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case CLEAR:
if (record->event.pressed) {
SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
}
return false;
case NUMPAD:
if (record->event.pressed) {
layer_invert(L_NUMPAD);
bool num_lock = host_keyboard_leds() & 1<<USB_LED_NUM_LOCK;
if (num_lock != (bool)IS_LAYER_ON(L_NUMPAD)) {
tap_code(KC_NLCK); // Toggle Num Lock to match layer state.
}
}
return false;
default:
return true;
}
}
struct {
bool fn_on; // Layer state when tap dance started
bool started;
} td_fn_rctrl_data;
void td_fn_rctrl_each(qk_tap_dance_state_t *state, void *user_data) {
if (!td_fn_rctrl_data.started) {
td_fn_rctrl_data.fn_on = IS_LAYER_ON(L_FN);
td_fn_rctrl_data.started = true;
}
// Single tap → Fn, double tap → RCtrl, triple tap etc. → Fn+RCtrl
if (state->count == 1 || state->count == 3) {
layer_on(L_FN);
} else if (state->count == 2) {
if (!td_fn_rctrl_data.fn_on) {
layer_off(L_FN);
}
register_code(KC_RCTL);
}
}
void td_fn_rctrl_reset(qk_tap_dance_state_t *state, void *user_data) {
if ((state->count == 1 || state->count > 2) && !td_fn_rctrl_data.fn_on) {
layer_off(L_FN);
}
if (state->count >= 2) {
unregister_code(KC_RCTL);
}
td_fn_rctrl_data.started = false;
}
#define ACTION_TAP_DANCE_DOUBLE_MODS(mod1, mod2) { \
.fn = { td_double_mods_each, NULL, td_double_mods_reset }, \
.user_data = &(qk_tap_dance_pair_t){ mod1, mod2 }, \
}
void td_double_mods_each(qk_tap_dance_state_t *state, void *user_data) {
qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data;
// Single tap → mod1, double tap → mod2, triple tap etc. → mod1+mod2
if (state->count == 1 || state->count == 3) {
register_code(mods->kc1);
} else if (state->count == 2) {
unregister_code(mods->kc1);
register_code(mods->kc2);
}
// Prevent tap dance from sending kc1 and kc2 as weak mods
state->weak_mods &= ~(MOD_BIT(mods->kc1) | MOD_BIT(mods->kc2));
}
void td_double_mods_reset(qk_tap_dance_state_t *state, void *user_data) {
qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data;
if (state->count == 1 || state->count > 2) {
unregister_code(mods->kc1);
}
if (state->count >= 2) {
unregister_code(mods->kc2);
}
}
enum tap_dance {
TD_DESKTOP,
TD_FN_RCTL,
TD_RAL_LAL,
TD_RAL_RGU,
TD_RCT_RSF,
};
qk_tap_dance_action_t tap_dance_actions[] = {
[TD_DESKTOP] = ACTION_TAP_DANCE_DOUBLE(LCTL(LGUI(KC_D)), LCTL(LGUI(KC_F4))), // Add/close virtual desktop
[TD_FN_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(td_fn_rctrl_each, NULL, td_fn_rctrl_reset),
[TD_RAL_LAL] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_LALT),
[TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_RGUI),
[TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RCTL, KC_RSFT),
};
#include "konstantin.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base layer
@ -141,9 +10,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*
* FnCaps A S D F G H J K L ; ' Enter PgU
*
* LShift Z X C V B N M , . / CtlSft PgD
* LShift Z X C V B N M , . / RCtRSf PgD
*
* LCtlLGuiLAlt Space AlGuFnLk
* LCtlLGuiLAlt Space RAlGFnLk
*
*/
[L_BASE] = LAYOUT_truefox( \
@ -177,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Numpad layer
*
* Num P7 P8 P9 P- = Num
* P7 P8 P9 P- = Num
*
* P4 P5 P6 P+ ( )
*
@ -189,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*
*/
[L_NUMPAD] = LAYOUT_truefox( \
NUMPAD, _______, _______, _______, _______, _______, _______, 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_P1, KC_P2, KC_P3, KC_PAST, TIMES, KC_PENT, _______, \
_______, _______, _______, _______, _______, _______, KC_P0, KC_P0, COMMA, KC_PDOT, KC_PSLS, DIVIDE, _______, _______, \