@ -3,8 +3,14 @@
# define _______ KC_TRNS
# define XXXXXXX KC_NO
# define LC LCTL
# define C(kc) LCTL(KC_##kc)
# define RA(kc) RALT(KC_##kc)
# define KC_SLCT KC_SELECT
# define MEDAPP LT(MEDIA, KC_APP)
# undef S
# define S(kc) LSFT(KC_##kc)
uint8_t current_layer_global = 255 ;
enum layers {
DEFAULT ,
@ -38,25 +44,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_BSLS , KC_DEL , KC_END , KC_PGDN , KC_P7 , KC_P8 , KC_P9 , KC_PPLS , \
F ( 0 ) , 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 , \
F ( 8 ) , KC_NUBS , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , F ( 9 ) , KC_UP , KC_P1 , KC_P2 , KC_P3 , KC_PENT , \
F ( 1 ) , KC_LGUI , F ( 3 ) , LT ( MISC , KC_SPC ) , F ( 4 ) , F ( 5 ) , LT ( MED IA, KC_ APP) , F ( 2 ) , KC_LEFT , KC_DOWN , KC_RGHT , KC_P0 , KC_PDOT ) ,
F ( 1 ) , KC_LGUI , F ( 3 ) , LT ( MISC , KC_SPC ) , F ( 4 ) , F ( 5 ) , MED APP, F ( 2 ) , KC_LEFT , KC_DOWN , KC_RGHT , KC_P0 , KC_PDOT ) ,
/* Layer 1: Programming Layer 1, emulating US l ayout */
[ PROG1 ] = KEYMAP ( \
KC_ESC , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
M ( GRV ) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KC_SLSH , S ( KC_0 ) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______ , _______ , _______ , _______ , _______ , _______ , KC_Z , _______ , _______ , _______ , _______ , RALT ( KC_8 ) , RALT ( KC_9 ) , RALT ( KC_ MINS) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , S ( KC_ COMM) , S ( KC_ BSLS) , _______ , _______ , _______ , _______ , \
MO ( PROG2 ) , _______ , KC_Y , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , S ( KC_7 ) , MO ( PROG2 ) , _______ , _______ , _______ , _______ , _______ , \
M ( GRV ) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KC_SLSH , S ( 0 ) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______ , _______ , _______ , _______ , _______ , _______ , KC_Z , _______ , _______ , _______ , _______ , RA ( 8 ) , RA ( 9 ) , RA ( MINS) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , S ( COMM) , S ( BSLS) , _______ , _______ , _______ , _______ , \
MO ( PROG2 ) , _______ , KC_Y , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , S ( 7 ) , MO ( PROG2 ) , _______ , _______ , _______ , _______ , _______ , \
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ) ,
/* Layer 2: programming layer 2
all keys that are not FN keys are sent as LSFT + key on this layer
*/
[ PROG2 ] = KEYMAP ( \
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
RA LT ( KC_ RBRC) , _______ , RA LT ( KC_ Q) , KC_BSLS , _______ , _______ , M ( CFLEX ) , S ( KC_6 ) , S ( KC_RBRC ) , S ( KC_8 ) , S ( KC_9 ) , S ( KC_SLSH ) , KC_RBRC , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , RALT ( KC_7 ) , RALT ( KC_0 ) , RALT ( KC_ NUBS) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , S ( KC_DOT) , S ( KC_2 ) , _______ , _______ , _______ , _______ , \
_______ , S ( KC_ NUBS) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KC_NUBS , S ( KC_ NUBS) , S ( KC_ MINS) , _______ , _______ , _______ , _______ , _______ , _______ , \
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ) , \
RA ( RBRC) , _______ , RA ( Q) , KC_BSLS , _______ , _______ , M ( CFLEX ) , S ( 6 ) , S ( RBRC ) , S ( 8 ) , S ( 9 ) , S ( SLSH ) , KC_RBRC , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , RA ( 7 ) , RA ( 0 ) , RA ( NUBS) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , S ( DOT) , S ( 2 ) , _______ , _______ , _______ , _______ , \
_______ , S ( NUBS) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KC_NUBS , S ( NUBS) , S ( MINS) , _______ , _______ , _______ , _______ , _______ , _______ , \
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ) ,
/* Layer 3: media layer */
[ MEDIA ] = KEYMAP ( \
KC_PWR , KC_SLEP , KC_WAKE , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , \
@ -67,12 +73,12 @@ RALT(KC_RBRC), _______,RALT(KC_Q),KC_BSLS,_______,_______,M(CFLEX),S(KC_6),S(K
XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , _______ , XXXXXXX , KC_MRWD , KC_MSTP , KC_MFFD , XXXXXXX , XXXXXXX ) ,
/* Layer 4: Mouse layer */
[ MOUSE1 ] = KEYMAP ( \
F ( 6 ) , XXXXXXX, XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , \
XXXXXXX, KC_ACL0 , KC_ACL1 , KC_ACL2 , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , KC_BSPC , KC_INS , KC_HOME , KC_PGUP , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , \
XXXXXXX, KC_BTN4 , KC_WH_D , KC_MS_U , KC_WH_U , XXXXXXX , KC_Y , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , KC_DEL , KC_END , KC_PGDN , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , \
F ( 0 ) , KC_BTN5 , KC_MS_L , KC_MS_D , KC_MS_R , F ( 7 ) , KC_WH_L , KC_WH_D , KC_WH_U , KC_WH_R , XXXXXXX , XXXXXXX , KC_BTN1 , XXXXXXX , XXXXXXX , XXXXXXX , \
MO ( MOUSE2 ) , XXXXXXX, LC ( KC_Y ) , LC ( KC_X ) , LC ( KC_C ) , LC ( KC_V ) , XXXXXXX , KC_BTN2 , KC_BTN3 , LC ( KC_PGUP ) , LC ( KC_PGDN ) , XXXXXXX , KC_RSFT , KC_UP , XXXXXXX , XXXXXXX , XXXXXXX , KC_PENT , \
KC_LCTL , KC_LGUI , KC_LALT , KC_BTN1 , KC_RALT , KC_RGUI , KC_APP , KC_RCTL , KC_LEFT , KC_DOWN , KC_RGHT , XXXXXXX , XXXXXXX ) ,
F ( 6 ) , _______, _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______, KC_ACL0 , KC_ACL1 , KC_ACL2 , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______, KC_BTN4 , KC_WH_D , KC_MS_U , KC_WH_U , _______ , C ( Z ) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______ , KC_BTN5 , KC_MS_L , KC_MS_D , KC_MS_R , F ( 7 ) , KC_WH_L , KC_WH_D , KC_WH_U , KC_WH_R , _______ , _______ , _______ , _______ , _______ , _______ , \
MO ( MOUSE2 ) , _______, C ( Y ) , C ( X ) , C ( C ) , C ( V ) , _______ , KC_BTN2 , KC_BTN3 , C ( PGUP ) , C ( PGDN ) , _______ , KC_RSFT , _______ , _______ , _______ , _______ , _______ , \
KC_LCTL , _______ , KC_LALT , KC_BTN1 , KC_RALT , KC_RGUI , KC_APP , KC_RCTL , _______ , _______ , _______ , _______ , _______ ) ,
/* Layer 5: Mouse layer 2*/
[ MOUSE2 ] = KEYMAP ( \
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
@ -83,21 +89,21 @@ RALT(KC_RBRC), _______,RALT(KC_Q),KC_BSLS,_______,_______,M(CFLEX),S(KC_6),S(K
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ) ,
/* Layer 6: Misc layer */
[ MISC ] = KEYMAP ( \
XXXXXXX, KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_F21 , KC_F22 , KC_F23 , KC_F24 , XXXXXXX , XXXXXXX , XXXXXXX , \
XXXXXXX, XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , \
XXXXXXX, KC_SLCT , LC ( KC_W ) , KC_UP , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , KC_BSPC , KC_DEL , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , \
XXXXXXX, XXXXXXX , KC_LEFT , KC_DOWN , KC_RGHT , XXXXXXX , KC_HOME , KC_PGDN , KC_PGUP , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , \
KC_LSFT , XXXXXXX, LC ( KC_Y ) , LC ( KC_X ) , LC ( KC_C ) , LC ( KC_V ) , KC_SPC , KC_END , XXXXXXX , LC ( KC_PGUP ) , LC ( KC_PGDN ) , XXXXXXX , KC_RSFT , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , \
KC_LCTL, KC_LGUI , KC_LALT , LT ( MISC , KC_SPC ) , KC_RALT , KC_RGUI , KC_APP , KC_RCTL , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ) ,
_______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______ , _______ , _______ , \
_______, _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______, KC_SLCT , C ( W ) , KC_UP , _______ , _______ , _______ , _______ , KC_BSPC , KC_DEL , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______, _______ , KC_LEFT , KC_DOWN , KC_RGHT , _______ , KC_HOME , KC_PGDN , KC_PGUP , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
KC_LSFT , _______, C ( Y ) , C ( X ) , C ( C ) , C ( V ) , KC_SPC , KC_END , _______ , C ( PGUP ) , C ( PGDN ) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______, _______ , _______ , LT ( MISC , KC_SPC ) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ) ,
} ;
const uint16_t PROGMEM fn_actions [ ] = {
[ 0 ] = ACTION_LAYER_TAP_TOGGLE ( MOUSE1 ) , // t oggle enab le mouse layer (4)
[ 0 ] = ACTION_LAYER_TAP_TOGGLE ( MOUSE1 ) , // t ap-t oggle mouse layer (4)
[ 1 ] = ACTION_FUNCTION_TAP ( LCTRL_BRACKET ) , // tap to print [
[ 2 ] = ACTION_FUNCTION_TAP ( RCTRL_BRACKET ) , // tap to print ]
[ 3 ] = ACTION_FUNCTION_TAP ( LALT_CURLY ) , // tap to print {
[ 4 ] = ACTION_FUNCTION_TAP ( RALT_CURLY ) , // tap to print }
[ 5 ] = ACTION_LAYER_TAP_TOGGLE ( PROG1 ) , // toggle programming layer 1 (1)
[ 5 ] = ACTION_LAYER_TAP_TOGGLE ( PROG1 ) , // tap- toggle programming layer 1
[ 6 ] = ACTION_LAYER_SET_CLEAR ( DEFAULT ) ,
[ 7 ] = ACTION_FUNCTION_TAP ( CTRL_CLICK ) ,
[ 8 ] = ACTION_FUNCTION_TAP ( LSHFT_PAREN ) , // tap to print (
@ -126,7 +132,22 @@ void matrix_init_user(void) {
}
void matrix_scan_user ( void ) {
uint8_t layer ;
layer = biton32 ( layer_state ) ;
if ( current_layer_global ! = layer ) {
current_layer_global = layer ;
// unset CAPSLOCK and SCROLL LOCK LEDs
led_set_kb ( host_keyboard_leds ( ) & ~ ( 1 < < USB_LED_CAPS_LOCK ) ) ;
led_set_kb ( host_keyboard_leds ( ) & ~ ( 1 < < USB_LED_SCROLL_LOCK ) ) ;
// set SCROLL LOCK LED when the mouse layer is active, CAPS LOCK when PROG layer is active
if ( layer = = MOUSE1 | | layer = = MOUSE2 ) {
led_set_kb ( host_keyboard_leds ( ) | ( 1 < < USB_LED_SCROLL_LOCK ) ) ;
} else if ( layer = = PROG1 | | layer = = PROG2 ) {
led_set_kb ( host_keyboard_leds ( ) | ( 1 < < USB_LED_CAPS_LOCK ) ) ;
}
}
}
void led_set_user ( uint8_t usb_led ) {
@ -209,6 +230,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
keycode = = KC_BSLS | |
keycode = = KC_GRV
) ) {
// LSFT is the modifier for this layer, so we set LSFT for every key to get the expected behavior
if ( record - > event . pressed ) {
register_mods ( MOD_LSFT ) ;
} else {