mirror of
https://github.com/Keychron/qmk_firmware.git
synced 2024-11-30 20:56:32 +06:00
327 lines
12 KiB
C
327 lines
12 KiB
C
#include "ergotravel.h"
|
||
#include "action_layer.h"
|
||
#include "eeconfig.h"
|
||
#include "mousekey.h"
|
||
#include "process_unicode.h"
|
||
extern keymap_config_t keymap_config;
|
||
|
||
#define _QWERTY 0
|
||
#define _NUMBERS 1
|
||
#define _SYMBOLS 2
|
||
#define _CODING 3
|
||
#define _NAVIGATION 4
|
||
#define _ADJUST 16
|
||
|
||
enum custom_keycodes {
|
||
QWERTY = SAFE_RANGE,
|
||
ADJUST,
|
||
CODING_SPACE,
|
||
NUMBERS_SPACE,
|
||
SYMBOLS_SPACE,
|
||
NAVIGATE_SPACE,
|
||
TABLE_FLIP,
|
||
RESET_TABLE,
|
||
SHRUG,
|
||
LOOK_OF_DISAPPROVAL
|
||
};
|
||
|
||
#define KC_ KC_TRNS
|
||
|
||
#define KC_ADJT MO(_ADJUST)
|
||
#define KC_RST RESET
|
||
#define KC_BL_S BL_STEP
|
||
#define KC_DBUG DEBUG
|
||
#define KC_RTOG RGB_TOG
|
||
#define KC_RMOD RGB_MOD
|
||
#define KC_RHUI RGB_HUI
|
||
#define KC_RHUD RGB_HUD
|
||
#define KC_RSAI RGB_SAI
|
||
#define KC_RSAD RGB_SAD
|
||
#define KC_RVAI RGB_VAI
|
||
#define KC_RVAD RGB_VAD
|
||
|
||
#define KC_RSEN MT(MOD_RSFT, KC_ENT) // Tap for enter, hold for right shift
|
||
|
||
#define KC_LCCA MT(MOD_LCTL, KC_CAPS) // Tap for caps lock, hold for left control
|
||
#define KC_SHDE MT(MOD_LSFT, KC_DEL) // Tap for delete, hold for left shift
|
||
|
||
#define KC_NAVI MO(_NAVIGATION)
|
||
|
||
#define KC_COSP CODING_SPACE
|
||
#define KC_NUSP NUMBERS_SPACE
|
||
#define KC_SYSP SYMBOLS_SPACE
|
||
#define KC_NASP NAVIGATE_SPACE
|
||
|
||
#define KC_FLIP TABLE_FLIP
|
||
#define KC_TSET RESET_TABLE
|
||
#define KC_SRUG SHRUG
|
||
#define KC_DISA LOOK_OF_DISAPPROVAL
|
||
#define KC_RST RESET
|
||
|
||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||
|
||
[_QWERTY] = LAYOUT_kc(
|
||
//,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
|
||
TAB , Q , W , E , R , T ,HOME, PGUP, Y , U , I , O , P ,BSPC,
|
||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||
LCCA, A , S , D , F , G ,END , PGDN, H , J , K , L ,SCLN,QUOT,
|
||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||
SHDE, Z , X , C , V , B ,LGUI, RALT, N , M ,COMM,DOT ,SLSH,RSEN,
|
||
//|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
|
||
ESC ,ADJT,LALT,ENT ,NUSP,NASP, SYSP,COSP,RCTL,NAVI,ADJT,DEL
|
||
//`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
|
||
),
|
||
|
||
[_NUMBERS] = LAYOUT_kc(
|
||
//,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
|
||
GRAVE, 1 , 2 , 3 , 4 , 5 ,MPLY, VOLU, 6 , 7 , 8 , 9 , 0 , ,
|
||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||
, , , , , ,MNXT, VOLD,FLIP,TSET,SRUG,DISA, , ,
|
||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||
, , , , , , , , , , , , , ,
|
||
//|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
|
||
, , , , , , , , , , ,
|
||
//`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
|
||
),
|
||
|
||
[_SYMBOLS] = LAYOUT_kc(
|
||
//,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
|
||
GRAVE,EXLM, AT ,HASH,DLR ,PERC,MPLY, VOLU,CIRC,AMPR,ASTR,LPRN,RPRN,BSLS,
|
||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||
, , , , , ,MNXT, VOLD, , , , , , ,
|
||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||
, , , , , , , , , , , , , ,
|
||
//|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
|
||
, , , , , , , , , , ,
|
||
//`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
|
||
),
|
||
|
||
[_CODING] = LAYOUT_kc(
|
||
//,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
|
||
, , ,LCBR,RCBR, ,MPLY, VOLU, ,AMPR,PIPE,DLR , , ,
|
||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||
, , ,LPRN,RPRN, ,MNXT, VOLD, ,UNDS,MINS,ASTR, , ,
|
||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||
, , ,LBRC,RBRC, , , , ,PLUS,EQL , , , ,
|
||
//|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
|
||
, , , , , , , , , , ,
|
||
//`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
|
||
),
|
||
|
||
[_NAVIGATION] = LAYOUT_kc(
|
||
//,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
|
||
, , , UP , , ,MPLY, VOLU,WH_U,BTN1,MS_U,BTN1, , ,
|
||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||
, ,LEFT,DOWN,RGHT, ,MNXT, VOLD,WH_D,MS_L,MS_D,MS_R, , ,
|
||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||
, , , , , , , , , , , , , ,
|
||
//|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
|
||
, , , , , , , , , , ,
|
||
//`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
|
||
),
|
||
|
||
[_ADJUST] = LAYOUT_kc(
|
||
//,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
|
||
F1 ,F2 ,F3 ,F4 ,F5 ,F6 , , ,F7 ,F8 ,F9 ,F10 ,F11 ,F12 ,
|
||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||
,RTOG,RVAI,RHUI,RSAI, , , , , , , , , ,
|
||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||
,RMOD,RVAD,RHUD,RSAD, , , ,RST , , , , , ,
|
||
//|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
|
||
, , , , , , , , , , ,
|
||
//`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
|
||
)
|
||
|
||
};
|
||
|
||
|
||
#ifdef AUDIO_ENABLE
|
||
float tone_qwerty[][2] = SONG(QWERTY_SOUND);
|
||
#endif
|
||
|
||
void persistent_default_layer_set(uint16_t default_layer) {
|
||
eeconfig_update_default_layer(default_layer);
|
||
default_layer_set(default_layer);
|
||
}
|
||
|
||
uint16_t custom_lt_timer;
|
||
keypos_t prv_key_pressed;
|
||
// Runs just one time when the keyboard initializes.
|
||
void matrix_init_user(void) {
|
||
// set_unicode_input_mode(UC_LNX); // Linux
|
||
set_unicode_input_mode(UC_OSX); // Mac OSX
|
||
// set_unicode_input_mode(UC_WIN); // Windows (with registry key, see wiki)
|
||
//set_unicode_input_mode(UC_WINC); // Windows (with WinCompose, see wiki)
|
||
};
|
||
|
||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||
|
||
if(record->event.pressed) prv_key_pressed = record->event.key;
|
||
#define IS_KEYPOS_SAME(keyone,keytwo) ((keyone.col==keytwo.col)&&(keyone.row==keytwo.row))
|
||
#define ANOTHER_KEY_PRESSED (!IS_KEYPOS_SAME(prv_key_pressed, record->event.key))
|
||
|
||
inline void tap(uint16_t keycode) {
|
||
register_code(keycode);
|
||
unregister_code(keycode);
|
||
};
|
||
|
||
inline void swapInput(void) {
|
||
register_code(KC_LGUI);
|
||
tap(KC_SPC);
|
||
unregister_code(KC_LGUI);
|
||
};
|
||
|
||
switch (keycode) {
|
||
case QWERTY:
|
||
if (record->event.pressed) {
|
||
#ifdef AUDIO_ENABLE
|
||
PLAY_SONG(tone_qwerty);
|
||
#endif
|
||
persistent_default_layer_set(1UL<<_QWERTY);
|
||
}
|
||
return false;
|
||
break;
|
||
case CODING_SPACE:
|
||
if (record->event.pressed) {
|
||
custom_lt_timer = timer_read();
|
||
layer_on(_CODING);
|
||
} else {
|
||
layer_off(_CODING);
|
||
if (timer_elapsed(custom_lt_timer)<150 && (!ANOTHER_KEY_PRESSED)) {
|
||
register_code(KC_SPC);
|
||
unregister_code(KC_SPC);
|
||
}
|
||
}
|
||
return false;
|
||
break;
|
||
case NUMBERS_SPACE:
|
||
if (record->event.pressed) {
|
||
custom_lt_timer = timer_read();
|
||
layer_on(_NUMBERS);
|
||
} else {
|
||
layer_off(_NUMBERS);
|
||
if (timer_elapsed(custom_lt_timer)<150 && (!ANOTHER_KEY_PRESSED)) {
|
||
register_code(KC_SPC);
|
||
unregister_code(KC_SPC);
|
||
}
|
||
}
|
||
return false;
|
||
break;
|
||
case SYMBOLS_SPACE:
|
||
if (record->event.pressed) {
|
||
custom_lt_timer = timer_read();
|
||
layer_on(_SYMBOLS);
|
||
} else {
|
||
layer_off(_SYMBOLS);
|
||
if (timer_elapsed(custom_lt_timer)<150 && (!ANOTHER_KEY_PRESSED)) {
|
||
register_code(KC_SPC);
|
||
unregister_code(KC_SPC);
|
||
}
|
||
}
|
||
return false;
|
||
break;
|
||
case NAVIGATE_SPACE:
|
||
if (record->event.pressed) {
|
||
custom_lt_timer = timer_read();
|
||
layer_on(_NAVIGATION);
|
||
} else {
|
||
layer_off(_NAVIGATION);
|
||
if (timer_elapsed(custom_lt_timer)<150 && (!ANOTHER_KEY_PRESSED)) {
|
||
register_code(KC_SPC);
|
||
unregister_code(KC_SPC);
|
||
}
|
||
}
|
||
return false;
|
||
break;
|
||
case TABLE_FLIP:
|
||
if (record->event.pressed) {
|
||
swapInput();
|
||
|
||
register_code(KC_RSFT);
|
||
tap(KC_9);
|
||
unregister_code(KC_RSFT);
|
||
process_unicode((0x256F|QK_UNICODE), record); // Arm
|
||
process_unicode((0x00B0|QK_UNICODE), record); // Eye
|
||
process_unicode((0x25A1|QK_UNICODE), record); // Mouth
|
||
process_unicode((0x00B0|QK_UNICODE), record); // Eye
|
||
register_code(KC_RSFT);
|
||
tap(KC_0);
|
||
unregister_code(KC_RSFT);
|
||
process_unicode((0x256F|QK_UNICODE), record); // Arm
|
||
tap(KC_SPC);
|
||
process_unicode((0x0361|QK_UNICODE), record); // Flippy
|
||
tap(KC_SPC);
|
||
process_unicode((0x253B|QK_UNICODE), record); // Table
|
||
process_unicode((0x2501|QK_UNICODE), record); // Table
|
||
process_unicode((0x253B|QK_UNICODE), record); // Table
|
||
|
||
swapInput();
|
||
}
|
||
return false;
|
||
break;
|
||
case RESET_TABLE: // ┬──┬ ノ( ゜-゜ノ)
|
||
if (record->event.pressed) {
|
||
swapInput();
|
||
|
||
process_unicode((0x252C|QK_UNICODE), record); // Table
|
||
process_unicode((0x2500|QK_UNICODE), record); // Table
|
||
process_unicode((0x2500|QK_UNICODE), record); // Table
|
||
process_unicode((0x252C|QK_UNICODE), record); // Table
|
||
tap(KC_SPC);
|
||
process_unicode((0x30CE|QK_UNICODE), record); // Arm
|
||
register_code(KC_RSFT);
|
||
tap(KC_9);
|
||
unregister_code(KC_RSFT);
|
||
tap(KC_SPC);
|
||
process_unicode((0x309C|QK_UNICODE), record); // Eye
|
||
tap(KC_MINS);
|
||
process_unicode((0x309C|QK_UNICODE), record); // Eye
|
||
process_unicode((0x30CE|QK_UNICODE), record); // Arm
|
||
register_code(KC_RSFT);
|
||
tap(KC_0);
|
||
unregister_code(KC_RSFT);
|
||
|
||
swapInput();
|
||
}
|
||
return false;
|
||
break;
|
||
case SHRUG: // ¯\_(ツ)_/¯
|
||
if (record->event.pressed) {
|
||
swapInput();
|
||
|
||
process_unicode((0x00AF|QK_UNICODE), record); // Hand
|
||
tap(KC_BSLS); // Arm
|
||
register_code(KC_RSFT);
|
||
tap(KC_UNDS); // Arm
|
||
tap(KC_LPRN); // Head
|
||
unregister_code(KC_RSFT);
|
||
process_unicode((0x30C4|QK_UNICODE), record); // Face
|
||
register_code(KC_RSFT);
|
||
tap(KC_RPRN); // Head
|
||
tap(KC_UNDS); // Arm
|
||
unregister_code(KC_RSFT);
|
||
tap(KC_SLSH); // Arm
|
||
process_unicode((0x00AF|QK_UNICODE), record); // Hand
|
||
|
||
swapInput();
|
||
}
|
||
return false;
|
||
break;
|
||
case LOOK_OF_DISAPPROVAL: // ಠ_ಠ
|
||
if(record->event.pressed){
|
||
swapInput();
|
||
|
||
process_unicode((0x0CA0|QK_UNICODE), record); // Eye
|
||
register_code(KC_RSFT);
|
||
tap(KC_MINS);
|
||
unregister_code(KC_RSFT);
|
||
process_unicode((0x0CA0|QK_UNICODE), record); // Eye
|
||
|
||
swapInput();
|
||
}
|
||
return false;
|
||
break;
|
||
}
|
||
return true;
|
||
}
|