diff options
Diffstat (limited to 'users/ericgebhart/extensions/keycodes.h')
-rwxr-xr-x | users/ericgebhart/extensions/keycodes.h | 523 |
1 files changed, 523 insertions, 0 deletions
diff --git a/users/ericgebhart/extensions/keycodes.h b/users/ericgebhart/extensions/keycodes.h new file mode 100755 index 0000000000..a3c5d72a09 --- /dev/null +++ b/users/ericgebhart/extensions/keycodes.h @@ -0,0 +1,523 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart <e.a.gebhart@gmail.com> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "quantum.h" +#include "process_keycode/process_tap_dance.h" +#include "eeconfig.h" +#include "keymap_bepo.h" +//#include "keymap_us_international.h" +#include "keymap_us_international_linux.h" +#include "lang.h" +#include "ericgebhart.h" + +//#define ONESHOT_TAP_TOGGLE 2 /* Tapping this number of times holds the key until tapped once again. */ + +// #define DEFAULT_LANG EN // US_INT // EN, BEPO, US_INT, EURkey + +#define KEY_NAME(NAME, ...) NAME, +#define BLANK(...) + +bool process_record_secrets(uint16_t keycode, keyrecord_t *record); + +enum userspace_custom_keycodes { + // Get all the custom keys from the defs if we can. + ALT_LOCAL_KEYS_START = SAFE_RANGE, +#ifdef ALT_LOCAL_ENABLE +#undef MK_KEY +#define MK_KEY KEY_NAME +#undef MK_SKEY +#define MK_SKEY KEY_NAME +#include "altlocal_keys.def" +#undef MK_KEY +#undef MK_SKEY +#endif + ALT_LOCAL_KEYS_END, + +#ifdef ACCENTED_KEYS_ENABLE +#undef ACCENTED +#define ACCENTED KEY_NAME +#include "accented_keys.def" +#undef ACCENTED +#endif + +#ifdef TAP_HOLD_ENABLE +#undef TP_TPL +#define TP_TPL KEY_NAME +#undef TP_SML +#define TP_SML KEY_NAME +#undef OPEN_OCL +#define OPEN_OCL KEY_NAME +#undef OPEN_OCL_ND +#define OPEN_OCL_ND KEY_NAME +#include "tap_hold.def" +#undef OPEN_OCL +#undef OPEN_OCL_ND +#undef TP_TPL +#undef TP_SML +#endif + +#ifdef UNICODE_ENABLE +#undef UC_STR +#define UC_STR KEY_NAME +#include "unicode.def" +#undef UC_STR +#endif + +#ifdef SEND_STRING_ENABLE +#undef SEND_STR +#define SEND_STR KEY_NAME +#undef SEND_STR_DELAY +#define SEND_STR_DELAY KEY_NAME +#include "send_string.def" +#undef SEND_STR +#undef SEND_STR_DELAY +#endif + +#ifdef SMART_LOCK_ENABLE +#undef SMLM +#define SMLM KEY_NAME +#undef SMLL +#define SMLL KEY_NAME +#include "smart_lock.def" +#undef SMLM +#undef SMLL +#endif + +#ifdef MOD_LOCK_ENABLE +#undef IGNORE_KC +#define IGNORE_KC BLANK +#undef MODL +#define MODL KEY_NAME +#include "mod_lock.def" +#undef IGNORE_KC +#undef MODL +#endif + + +#undef IGNORE_KEY +#define IGNORE_KEY BLANK +#undef CANCEL_KEY +#define CANCEL_KEY BLANK +#undef ONESHOT +#undef NSHOT +#define ONESHOT KEY_NAME +#define NSHOT KEY_NAME + +#ifdef NSHOT_ENABLE +#include "nshot.def" +#else + TS_RCTL, + TS_LCTL, +#endif + +#ifdef ONESHOT_MOD_ENABLE +#include "oneshot.def" +#endif + +#undef IGNORE_KEY +#undef CANCEL_KEY +#undef ONESHOT +#undef NSHOT + +#ifdef SWAPPER_ENABLE +#undef SWAPPER_KEY +#define SWAPPER_KEY KEY_NAME +#include "swapper.def" +#undef SWAPPER_KEY +#endif + +#ifdef NOT_DEAD_ENABLE +#undef NOT_DEAD +#define NOT_DEAD KEY_NAME +#include "not_dead.def" +#undef NOT_DEAD +#endif + +#include "custom_keys.def" + NEW_SAFE_RANGE +}; + +#define FIRST_LAYER (BEGINNING_OF_BASE_LAYERS + 1) + +#define TL_DQUO TLKC(_DQUO) +#define TL_QUOT TLKC(_QUOT) +#define TL_COMM TLKC(_COMM) +#define TL_DOT TLKC(_DOT) +#define TL_SCLN TLKC(_SCLN) +#define TL_SLSH TLKC(_SLSH) +#define TL_EXLM TLKC(_EXLM) +#define TL_MINS TLKC(_MINS) +#define TL_LPRN TLKC(_LPRN) +#define TL_LCBR TLKC(_LCBR) +#ifdef SYMBOL_LAYER_ENABLE +#define TL_DOT_SYMB LT(LN_SYMB, LANG_KC(TL_DOT)) +#endif + + +#define BP_LT BP_LABK +#define BP_GT BP_RABK +#define BP_TAB KC_TAB +#define US_GT US_RABK +#define US_LT US_LABK +#define US_TAB KC_TAB +#define US_DCMM KC_COMM // us doesn't have this dead key. + +// this is odd, there is interplay between this and +// the not-dead extension. - and tap-hold not-dead. +#undef US_TILD +#define US_TILD KC_TILD +// redefine us_circ so we actually get a circ. +#undef US_CIRC +#define US_CIRC KC_CIRC +#define US_EQUAL KC_EQUAL +// redefine us_quote so we actually get a quote. +#undef US_QUOT +#define US_QUOT KC_QUOT + +#define US_PRINT_SCREEN KC_PRINT_SCREEN +#define US_SCROLL_LOCK KC_SCROLL_LOCK +#define US_PAUSE KC_PAUSE +#define BP_PRINT_SCREEN KC_PRINT_SCREEN +#define BP_SCROLL_LOCK KC_SCROLL_LOCK +#define BP_PAUSE KC_PAUSE + +#define BP_F1 KC_F1 +#define BP_F2 KC_F2 +#define BP_F3 KC_F3 +#define BP_F4 KC_F4 +#define BP_F5 KC_F5 +#define BP_F6 KC_F6 +#define BP_F7 KC_F7 +#define BP_F8 KC_F8 +#define BP_F9 KC_F9 +#define BP_F10 KC_F10 +#define BP_F11 KC_F11 +#define BP_F12 KC_F12 +#define BP_TRNS KC_TRNS + +#define US_F1 KC_F1 +#define US_F2 KC_F2 +#define US_F3 KC_F3 +#define US_F4 KC_F4 +#define US_F5 KC_F5 +#define US_F6 KC_F6 +#define US_F7 KC_F7 +#define US_F8 KC_F8 +#define US_F9 KC_F9 +#define US_F10 KC_F10 +#define US_F11 KC_F11 +#define US_F12 KC_F12 +#define US_TRNS KC_TRNS + +#ifdef KEYPAD_LAYER_ENABLE +#define TT_KEYPAD TT(LANG_N(_KEYPAD)) +#define MO_KEYPAD MO(LANG_N(_KEYPAD)) +#else +#define TT_KEYPAD ___ +#define MO_KEYPAD ___ +#endif + +#ifdef SYMBOL_LAYER_ENABLE +#define TT_SYMB TT(LANG_N(_SYMB)) +#define MO_SYMB MO(LANG_N(_SYMB)) +#define OSL_SYMB OSL(LANG_N(_SYMB)) +#else +#define TT_SYMB ___ +#define MO_SYMB ___ +#define OSL_SYMB ___ +#endif + +#ifdef TOPROWS_LAYER_ENABLE +#define TT_TOPROWS TT(LANG_N(_TOPROWS)) +#define MO_TOPROWS MO(LANG_N(_TOPROWS)) +#else +#define TT_TOPROWS ___ +#define MO_TOPROWS ___ +#endif + +#ifdef RGB_LAYER_ENABLE +#define MO_RGB MO(_RGB) +#else +#define MO_RGB ___ +#endif + +#ifdef ADJUST_LAYER_ENABLE +#define MO_ADJUST MO(_ADJUST) +#else +#define MO_ADJUST ___ +#endif + +#ifdef ACCENTS_MORTE_LAYER_ENABLE +//#define LN_ACCENTS_MORTE LANG_N(_ACCENTS_MORTE) +#define OSL_ACCENTS_MORTE OSL(LANG_N(_ACCENTS_MORTE)) +#else +#define OSL_ACCENTS_MORTE ___ +#endif + +#ifdef ACCENTS_LAYER_ENABLE +#define LN_ACCENTS LANG_N(_ACCENTS) +#define OSL_ACCENTS OSL(LN_ACCENTS) +#else +#define OSL_ACCENTS ___ +#endif + +#ifdef MORTE_LAYER_ENABLE +#define LN_MORTE LANG_N(_MORTE) +#define OSL_MORTE OSL(LN_MORTE) +#else +#define OSL_MORTE ___ +#endif + +#define CTLGUI_T(kc) MT(MOD_LGUI | MOD_LCTL, kc) +#define SFTGUI_T(kc) MT(MOD_LGUI | MOD_LSFT, kc) +#define ALTGUI_T(kc) MT(MOD_LGUI | MOD_LALT, kc) + +#define ALT_ENT ALGR_T(KC_ENT) // Alt oor nter +#define CTL_ENT CTL_T(KC_ENT) // ctrl or space +#define CTL_SPC CTL_T(KC_SPC) // ctrl or space +#define CTL_BSPC CTL_T(KC_BSPC) // ctrl or backspace +#define ALT_DEL ALT_T(KC_DEL) // Alt or delete +#define GUI_ESC GUI_T(KC_ESC) // Gui or escape +#define ALGR_SYMB ALGR_T(TG(LANG_N(_SYMB))) // Alt gre or toggle symbol layer + +// one shot on tap, or hold like usual +#define OSLCTL_CTL CTL_T(OS_LCTL) +#define OSLSFT_SFT SFT_T(OS_LSFT) +#define OSLALT_ALT ALT_T(OS_LALT) +#define OSLGUI_GUI GUI_T(OS_LGUI) + +/* miryoku */ +/* esc_media, space_navnm, tab_navm, ENT_SYM, BSPC_TOPR, del_fun */ +/* hands down */ +/* TL_COMM, TL_DOT_SYMB, GUI_ESC, ALT_ENT, SPC_TOPR, BSPC */ + +// Lots of LT options. My thumb keys. +#ifdef TOPROWS_LAYER_ENABLE +#define LN_TOPROWS LANG_N(_TOPROWS) +#else +#define LN_TOPROWS KC_NO +#endif + +#ifdef SYMBOL_LAYER_ENABLE +# define LN_SYMB LANG_N(_SYMB) +# define TH_LTR_SYM LT(LN_SYMB, THUMB_LETTER) +#else +# define TH_LTR_SYM THUMB_LETTER +#endif + +#define TH_LTR_NAV LT(_NAV, THUMB_LETTER) + +#define LN_KEYPAD LANG_N(_KEYPAD) + +#define ACCENTS_RALT MT(MOD_RALT, OSL_ACCENTS) +#define ACCENTS_CTL MT(MOD_LCTL, OSL_ACCENTS) +#define ENT_SYM LT(LN_SYMB, KC_ENT) +#define ENT_NAV LT(_NAV, KC_ENT) +#define ENT_TOPR LT(LN_TOPROWS, KC_ENT) + +#define ESC_TOPR LT(LN_TOPROWS, KC_ESC) +#define ESC_SYMB LT(LN_SYMB, KC_ESC) +#define ESC_NUM LT(LN_KEYPAD, KC_ESC) +#define ESC_MEDIA LT(_MEDIA, KC_ESC) + +#define DEL_FUN LT(_FUN, KC_DEL) +#define TAB_NAVM LT(_NAVm, KC_TAB) +#define TAB_NUM LT(LN_KEYPAD, KC_TAB) +#define I_SYMB LT(LN_SYMB, KC_I) + +#define SPC_NAVm LT(_NAVm, KC_SPC) +#define SPC_NAVnm LT(_NAVnm, KC_SPC) +#define SPC_NAV LT(_NAV, KC_SPC) +#define SPC_SYMB LT(LN_SYMB, KC_SPC) +#define SPC_TOPR LT(LN_TOPROWS, KC_SPC) +#define SPC_LAYR LT(_LAYERS, KC_SPC) +#define SPC_ADJ LT(_ADJUST, KC_SPC) +#define SPC_NUM LT(LN_KEYPAD, KC_SPC) + +#define BSPC_NAVm LT(_NAVm, KC_BSPC) +#define BSPC_NAV LT(_NAV, KC_BSPC) +#ifdef SYMBOL_LAYER_ENABLE +#define BSPC_SYMB LT(LN_SYMB, KC_BSPC) +#else +#define BSPC_SYMB KC_BSPC +#endif +#define BSPC_TOPR LT(LN_TOPROWS, KC_BSPC) +#define BSPC_NUM LT(LN_KEYPAD, KC_BSPC) +#define BSPC_ALT MT(MOD_LALT, KC_BSPC) +#define BSPC_MEDIA LT(_MEDIA, KC_BSPC) + +#define KC_BKTAB LSFT(KC_TAB) + +// layer toggles +#define LAYER_OSL OSL(_LAYERS) +#define SYM_OSL OSL(LN_SYMB) +#define SYM_TG TG(LN_SYMB) +#define SYM_MO MO(LN_SYMB) +#define NAV_TG TG(_NAV) +#define COMBO_REF_TG_EN TG(_COMBO_REF) +#define NUM_OSL OSL(LN_KEYPAD) +#define NUM_TO TO(LN_KEYPAD) +#define FUN_OSL OSL(LN_FUNC) +#define SYS_OSL OSL(LN_SYSTEM) +#define SYS_TG TG(LN_SYSTEM) + +// Shortcuts +#define S_CUT S(KC_DEL) +#define S_COPY C(KC_INS) +#define S_PASTE S(KC_INS) +#define S_UNDO C(KC_Z) +#define S_REDO C(KC_Y) +#define S_SAVE C(KC_S) +#define S_ALL C(KC_A) +#define S_BACK A(KC_LEFT) +#define S_FWD A(KC_RIGHT) +#define C_BSPC C(KC_BSPC) +#define SCREEN S(C(KC_PSCR)) + +// One Shot Mods keycodes, +#define KC_MLSF OSM(MOD_LSFT) +#define KC_MRSF OSM(MOD_RSFT) +#define OS_LGUI OSM(MOD_LGUI) +#define OS_RGUI OSM(MOD_RGUI) +#define OS_LSFT OSM(MOD_LSFT) +#define OS_RSFT OSM(MOD_RSFT) +#define OS_LCTL OSM(MOD_LCTL) +#define OS_RCTL OSM(MOD_RCTL) +#define OS_LALT OSM(MOD_LALT) +#define OS_RALT OSM(MOD_RALT) +#define ALT_APP ALT_T(KC_APP) + +#define MG_NKRO MAGIC_TOGGLE_NKRO + +#define UC_IRNY UC(0x2E2E) +#define UC_CLUE UC(0x203D) + + +//// TAP DANCE + +typedef struct { + bool is_press_action; + int state; +} tdtap; + +enum { + SINGLE_TAP = 1, + SINGLE_HOLD = 2, + DOUBLE_TAP = 3, + DOUBLE_HOLD = 4, + DOUBLE_SINGLE_TAP = 5, //send two single taps + TRIPLE_TAP = 6, + TRIPLE_HOLD = 7 +}; + +//Tap Dance Declarations +enum { + TD_ESC_CAPS = 0, + TD_TAB_BKTAB = 1, + TD_MDIA_SYMB = 2, + TD_HOME_END = 3, + TD_XMONAD_ESC = 4, + TD_DEF_LAYER_SW = 5, + TD_DEF_OS_LAYER_SW = 6, + TD_MOUSE_BTNS = 7, + TD_DVORAK_BEPO = 8, + TD_UP_HOME = 9, + TD_DOWN_END = 10, + TD_RIGHT_TAB = 11, + TD_LEFT_BACKTAB = 12 +}; + + +// Tap dance +#define TAB_BKTAB TD(TD_TAB_BKTAB) // Tab or backtab tapdance. +#define MDIA_SYMB_KP_LAYERS TD(TD_MDIA_SYMB) // MDIA, symb, keypad, layouts layer tapdance toggle. +#define DEF_LAYER_SW TD(TD_DEF_LAYER_SW) // dvorak, dvorak_on_bepo, bepo default layer +#define DEF_OS_LAYER_SW TD(TD_DEF_OS_LAYER_SW) // dvorak, dvorak_on_bepo, bepo default layer +#define HOME_END TD(TD_HOME_END) // home or end tapdance. +#define XMONAD_ESC TD(TD_XMONAD_ESC) // Escape, dvorak, media or symb. - tap and hold tap dance. 1-4 +#define DVORAK_ET_BEPO TD(TD_DVORAK_BEPO) // Escape, dvorak, media or symb. - tap and hold tap dance. 1-4 +#define TDMOUSE_BTNS TD(TD_MOUSE_BTNS) // hmmm. 1-5 +#define RIGHT_TAB TD(TD_RIGHT_TAB) // Bad idea these 4. Maybe with good timing... +#define LEFT_BACKTAB TD(TD_LEFT_BACKTAB) +#define UP_HOME TD(TD_UP_HOME) +#define DOWN_END TD(TD_DOWN_END) // No! Down Down Not End.... + +// HOME ROW LAYER TOGGLE (LT) and Shift. +// both sides of the home row have "shift, ___, media , symb, ___" and "___, symb, media, ___, shift". +// so pinky fingers are shift when held and the index and second fingers are symbol and +// media layers when held. + +// The most portable copy/paste keys (windows (mostly), linux, and some terminal emulators). +// The KC_CCCV key takes care of the last two... +#define MK_CUT LSFT(KC_DEL) // shift + delete +#define MK_COPY LCTL(KC_INS) // ctrl + insert +#define MK_PASTE LSFT(KC_INS) // shift + insert +#define EOT LCTL(KC_D) +#define NAK LCTL(KC_U) +#define XPASTE LCTL(LSFT(KC_V)) +#define UNDO LCTL(KC_Z) +#define XCOPY LCTL(LSFT(KC_C)) + +#undef ___ //kint defines it as KC_NO +#define ___ KC_TRNS +#define XXX KC_NO +#define ____ _TRNS + +// Blocking keys +#define _X_ XXX +#define ___X___ XXX +#define ___X2___ XXX, XXX +#define ___X3___ ___X2___, XXX +#define ___X4___ ___X3___, XXX +#define ___X5___ ___X4___, XXX +#define ___X6___ ___X5___, XXX +#define ___X12___ ___X6___, ___X6___ +#define ___X15___ ___X5___, ___X5___, ___X5___ + +// Transparent keys +#define ___2___ ___, ___ +#define ___3___ ___2___, ___ +#define ___4___ ___3___, ___ +#define ___5___ ___4___, ___ +#define ___6___ ___5___, ___ +#define ___10___ ___6___, ___4___ +#define ___12___ ___6___, ___6___ +#define ___14___ ___5___, ___4___, ___5___ +#define ___15___ ___5___, ___5___, ___5___ +#define ___16___ ___15___, ___ + +#define ____2_ ____, ____ +#define ____3_ ____2_, ____ +#define ____4_ ____3_, ____ +#define ____5_ ____4_, ____ +#define ____6_ ____5_, ____ +#define ____10_ ____6_, ____4_ +#define ____12_ ____6_, ____6_ +#define ____14_ ____5_, ____4_, ____5_ +#define ____15_ ____5_, ____5_, ____5_ +#define ____16_ ____15_, ____ + +int on_qwerty(void); + +#ifdef TAP_DANCES_ENABLE +int cur_dance (qk_tap_dance_state_t *state); + +//for the x tap dance. Put it here so it can be used in any keymap +void x_finished (qk_tap_dance_state_t *state, void *user_data); +void x_reset (qk_tap_dance_state_t *state, void *user_data); +#endif |