keycodes.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. #pragma once
  2. /*
  3. Copyright 2018-2022 Eric Gebhart <e.a.gebhart@gmail.com>
  4. This program is free software: you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation, either version 2 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program. If not, see <http://www.gnu.org/licenses/>.
  14. */
  15. #include "quantum.h"
  16. #include "process_keycode/process_tap_dance.h"
  17. #include "eeconfig.h"
  18. #include "keymap_bepo.h"
  19. //#include "keymap_us_international.h"
  20. #include "keymap_us_international_linux.h"
  21. #include "lang.h"
  22. #include "ericgebhart.h"
  23. //#define ONESHOT_TAP_TOGGLE 2 /* Tapping this number of times holds the key until tapped once again. */
  24. // #define DEFAULT_LANG EN // US_INT // EN, BEPO, US_INT, EURkey
  25. #define KEY_NAME(NAME, ...) NAME,
  26. #define BLANK(...)
  27. bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
  28. enum userspace_custom_keycodes {
  29. // Get all the custom keys from the defs if we can.
  30. ALT_LOCAL_KEYS_START = SAFE_RANGE,
  31. #ifdef ALT_LOCAL_ENABLE
  32. #undef MK_KEY
  33. #define MK_KEY KEY_NAME
  34. #undef MK_SKEY
  35. #define MK_SKEY KEY_NAME
  36. #include "altlocal_keys.def"
  37. #undef MK_KEY
  38. #undef MK_SKEY
  39. #endif
  40. ALT_LOCAL_KEYS_END,
  41. #ifdef ACCENTED_KEYS_ENABLE
  42. #undef ACCENTED
  43. #define ACCENTED KEY_NAME
  44. #include "accented_keys.def"
  45. #undef ACCENTED
  46. #endif
  47. #ifdef TAP_HOLD_ENABLE
  48. #undef TP_TPL
  49. #define TP_TPL KEY_NAME
  50. #undef TP_SML
  51. #define TP_SML KEY_NAME
  52. #undef OPEN_OCL
  53. #define OPEN_OCL KEY_NAME
  54. #undef OPEN_OCL_ND
  55. #define OPEN_OCL_ND KEY_NAME
  56. #include "tap_hold.def"
  57. #undef OPEN_OCL
  58. #undef OPEN_OCL_ND
  59. #undef TP_TPL
  60. #undef TP_SML
  61. #endif
  62. #ifdef UNICODE_ENABLE
  63. #undef UC_STR
  64. #define UC_STR KEY_NAME
  65. #include "unicode.def"
  66. #undef UC_STR
  67. #endif
  68. #ifdef SEND_STRING_ENABLE
  69. #undef SEND_STR
  70. #define SEND_STR KEY_NAME
  71. #undef SEND_STR_DELAY
  72. #define SEND_STR_DELAY KEY_NAME
  73. #include "send_string.def"
  74. #undef SEND_STR
  75. #undef SEND_STR_DELAY
  76. #endif
  77. #ifdef SMART_LOCK_ENABLE
  78. #undef SMLM
  79. #define SMLM KEY_NAME
  80. #undef SMLL
  81. #define SMLL KEY_NAME
  82. #include "smart_lock.def"
  83. #undef SMLM
  84. #undef SMLL
  85. #endif
  86. #ifdef MOD_LOCK_ENABLE
  87. #undef IGNORE_KC
  88. #define IGNORE_KC BLANK
  89. #undef MODL
  90. #define MODL KEY_NAME
  91. #include "mod_lock.def"
  92. #undef IGNORE_KC
  93. #undef MODL
  94. #endif
  95. #undef IGNORE_KEY
  96. #define IGNORE_KEY BLANK
  97. #undef CANCEL_KEY
  98. #define CANCEL_KEY BLANK
  99. #undef ONESHOT
  100. #undef NSHOT
  101. #define ONESHOT KEY_NAME
  102. #define NSHOT KEY_NAME
  103. #ifdef NSHOT_ENABLE
  104. #include "nshot.def"
  105. #else
  106. TS_RCTL,
  107. TS_LCTL,
  108. #endif
  109. #ifdef ONESHOT_MOD_ENABLE
  110. #include "oneshot.def"
  111. #endif
  112. #undef IGNORE_KEY
  113. #undef CANCEL_KEY
  114. #undef ONESHOT
  115. #undef NSHOT
  116. #ifdef SWAPPER_ENABLE
  117. #undef SWAPPER_KEY
  118. #define SWAPPER_KEY KEY_NAME
  119. #include "swapper.def"
  120. #undef SWAPPER_KEY
  121. #endif
  122. #ifdef NOT_DEAD_ENABLE
  123. #undef NOT_DEAD
  124. #define NOT_DEAD KEY_NAME
  125. #include "not_dead.def"
  126. #undef NOT_DEAD
  127. #endif
  128. #include "custom_keys.def"
  129. NEW_SAFE_RANGE
  130. };
  131. #define FIRST_LAYER (BEGINNING_OF_BASE_LAYERS + 1)
  132. #define TL_DQUO TLKC(_DQUO)
  133. #define TL_QUOT TLKC(_QUOT)
  134. #define TL_COMM TLKC(_COMM)
  135. #define TL_DOT TLKC(_DOT)
  136. #define TL_SCLN TLKC(_SCLN)
  137. #define TL_SLSH TLKC(_SLSH)
  138. #define TL_EXLM TLKC(_EXLM)
  139. #define TL_MINS TLKC(_MINS)
  140. #define TL_LPRN TLKC(_LPRN)
  141. #define TL_LCBR TLKC(_LCBR)
  142. #ifdef SYMBOL_LAYER_ENABLE
  143. #define TL_DOT_SYMB LT(LN_SYMB, LANG_KC(TL_DOT))
  144. #endif
  145. #define BP_LT BP_LABK
  146. #define BP_GT BP_RABK
  147. #define BP_TAB KC_TAB
  148. #define US_GT US_RABK
  149. #define US_LT US_LABK
  150. #define US_TAB KC_TAB
  151. #define US_DCMM KC_COMM // us doesn't have this dead key.
  152. // this is odd, there is interplay between this and
  153. // the not-dead extension. - and tap-hold not-dead.
  154. #undef US_TILD
  155. #define US_TILD KC_TILD
  156. // redefine us_circ so we actually get a circ.
  157. #undef US_CIRC
  158. #define US_CIRC KC_CIRC
  159. #define US_EQUAL KC_EQUAL
  160. // redefine us_quote so we actually get a quote.
  161. #undef US_QUOT
  162. #define US_QUOT KC_QUOT
  163. #define US_PRINT_SCREEN KC_PRINT_SCREEN
  164. #define US_SCROLL_LOCK KC_SCROLL_LOCK
  165. #define US_PAUSE KC_PAUSE
  166. #define BP_PRINT_SCREEN KC_PRINT_SCREEN
  167. #define BP_SCROLL_LOCK KC_SCROLL_LOCK
  168. #define BP_PAUSE KC_PAUSE
  169. #define BP_F1 KC_F1
  170. #define BP_F2 KC_F2
  171. #define BP_F3 KC_F3
  172. #define BP_F4 KC_F4
  173. #define BP_F5 KC_F5
  174. #define BP_F6 KC_F6
  175. #define BP_F7 KC_F7
  176. #define BP_F8 KC_F8
  177. #define BP_F9 KC_F9
  178. #define BP_F10 KC_F10
  179. #define BP_F11 KC_F11
  180. #define BP_F12 KC_F12
  181. #define BP_TRNS KC_TRNS
  182. #define US_F1 KC_F1
  183. #define US_F2 KC_F2
  184. #define US_F3 KC_F3
  185. #define US_F4 KC_F4
  186. #define US_F5 KC_F5
  187. #define US_F6 KC_F6
  188. #define US_F7 KC_F7
  189. #define US_F8 KC_F8
  190. #define US_F9 KC_F9
  191. #define US_F10 KC_F10
  192. #define US_F11 KC_F11
  193. #define US_F12 KC_F12
  194. #define US_TRNS KC_TRNS
  195. #ifdef KEYPAD_LAYER_ENABLE
  196. #define TT_KEYPAD TT(LANG_N(_KEYPAD))
  197. #define MO_KEYPAD MO(LANG_N(_KEYPAD))
  198. #else
  199. #define TT_KEYPAD ___
  200. #define MO_KEYPAD ___
  201. #endif
  202. #ifdef SYMBOL_LAYER_ENABLE
  203. #define TT_SYMB TT(LANG_N(_SYMB))
  204. #define MO_SYMB MO(LANG_N(_SYMB))
  205. #define OSL_SYMB OSL(LANG_N(_SYMB))
  206. #else
  207. #define TT_SYMB ___
  208. #define MO_SYMB ___
  209. #define OSL_SYMB ___
  210. #endif
  211. #ifdef TOPROWS_LAYER_ENABLE
  212. #define TT_TOPROWS TT(LANG_N(_TOPROWS))
  213. #define MO_TOPROWS MO(LANG_N(_TOPROWS))
  214. #else
  215. #define TT_TOPROWS ___
  216. #define MO_TOPROWS ___
  217. #endif
  218. #ifdef RGB_LAYER_ENABLE
  219. #define MO_RGB MO(_RGB)
  220. #else
  221. #define MO_RGB ___
  222. #endif
  223. #ifdef ADJUST_LAYER_ENABLE
  224. #define MO_ADJUST MO(_ADJUST)
  225. #else
  226. #define MO_ADJUST ___
  227. #endif
  228. #ifdef ACCENTS_MORTE_LAYER_ENABLE
  229. //#define LN_ACCENTS_MORTE LANG_N(_ACCENTS_MORTE)
  230. #define OSL_ACCENTS_MORTE OSL(LANG_N(_ACCENTS_MORTE))
  231. #else
  232. #define OSL_ACCENTS_MORTE ___
  233. #endif
  234. #ifdef ACCENTS_LAYER_ENABLE
  235. #define LN_ACCENTS LANG_N(_ACCENTS)
  236. #define OSL_ACCENTS OSL(LN_ACCENTS)
  237. #else
  238. #define OSL_ACCENTS ___
  239. #endif
  240. #ifdef MORTE_LAYER_ENABLE
  241. #define LN_MORTE LANG_N(_MORTE)
  242. #define OSL_MORTE OSL(LN_MORTE)
  243. #else
  244. #define OSL_MORTE ___
  245. #endif
  246. #define CTLGUI_T(kc) MT(MOD_LGUI | MOD_LCTL, kc)
  247. #define SFTGUI_T(kc) MT(MOD_LGUI | MOD_LSFT, kc)
  248. #define ALTGUI_T(kc) MT(MOD_LGUI | MOD_LALT, kc)
  249. #define ALT_ENT ALGR_T(KC_ENT) // Alt oor nter
  250. #define CTL_ENT CTL_T(KC_ENT) // ctrl or space
  251. #define CTL_SPC CTL_T(KC_SPC) // ctrl or space
  252. #define CTL_BSPC CTL_T(KC_BSPC) // ctrl or backspace
  253. #define ALT_DEL ALT_T(KC_DEL) // Alt or delete
  254. #define GUI_ESC GUI_T(KC_ESC) // Gui or escape
  255. #define ALGR_SYMB ALGR_T(TG(LANG_N(_SYMB))) // Alt gre or toggle symbol layer
  256. // one shot on tap, or hold like usual
  257. #define OSLCTL_CTL CTL_T(OS_LCTL)
  258. #define OSLSFT_SFT SFT_T(OS_LSFT)
  259. #define OSLALT_ALT ALT_T(OS_LALT)
  260. #define OSLGUI_GUI GUI_T(OS_LGUI)
  261. /* miryoku */
  262. /* esc_media, space_navnm, tab_navm, ENT_SYM, BSPC_TOPR, del_fun */
  263. /* hands down */
  264. /* TL_COMM, TL_DOT_SYMB, GUI_ESC, ALT_ENT, SPC_TOPR, BSPC */
  265. // Lots of LT options. My thumb keys.
  266. #ifdef TOPROWS_LAYER_ENABLE
  267. #define LN_TOPROWS LANG_N(_TOPROWS)
  268. #else
  269. #define LN_TOPROWS KC_NO
  270. #endif
  271. #ifdef SYMBOL_LAYER_ENABLE
  272. # define LN_SYMB LANG_N(_SYMB)
  273. # define TH_LTR_SYM LT(LN_SYMB, THUMB_LETTER)
  274. #else
  275. # define TH_LTR_SYM THUMB_LETTER
  276. #endif
  277. #define TH_LTR_NAV LT(_NAV, THUMB_LETTER)
  278. #define LN_KEYPAD LANG_N(_KEYPAD)
  279. #define ACCENTS_RALT MT(MOD_RALT, OSL_ACCENTS)
  280. #define ACCENTS_CTL MT(MOD_LCTL, OSL_ACCENTS)
  281. #define ENT_SYM LT(LN_SYMB, KC_ENT)
  282. #define ENT_NAV LT(_NAV, KC_ENT)
  283. #define ENT_TOPR LT(LN_TOPROWS, KC_ENT)
  284. #define ESC_TOPR LT(LN_TOPROWS, KC_ESC)
  285. #define ESC_SYMB LT(LN_SYMB, KC_ESC)
  286. #define ESC_NUM LT(LN_KEYPAD, KC_ESC)
  287. #define ESC_MEDIA LT(_MEDIA, KC_ESC)
  288. #define DEL_FUN LT(_FUN, KC_DEL)
  289. #define TAB_NAVM LT(_NAVm, KC_TAB)
  290. #define TAB_NUM LT(LN_KEYPAD, KC_TAB)
  291. #define I_SYMB LT(LN_SYMB, KC_I)
  292. #define SPC_NAVm LT(_NAVm, KC_SPC)
  293. #define SPC_NAVnm LT(_NAVnm, KC_SPC)
  294. #define SPC_NAV LT(_NAV, KC_SPC)
  295. #define SPC_SYMB LT(LN_SYMB, KC_SPC)
  296. #define SPC_TOPR LT(LN_TOPROWS, KC_SPC)
  297. #define SPC_LAYR LT(_LAYERS, KC_SPC)
  298. #define SPC_ADJ LT(_ADJUST, KC_SPC)
  299. #define SPC_NUM LT(LN_KEYPAD, KC_SPC)
  300. #define BSPC_NAVm LT(_NAVm, KC_BSPC)
  301. #define BSPC_NAV LT(_NAV, KC_BSPC)
  302. #ifdef SYMBOL_LAYER_ENABLE
  303. #define BSPC_SYMB LT(LN_SYMB, KC_BSPC)
  304. #else
  305. #define BSPC_SYMB KC_BSPC
  306. #endif
  307. #define BSPC_TOPR LT(LN_TOPROWS, KC_BSPC)
  308. #define BSPC_NUM LT(LN_KEYPAD, KC_BSPC)
  309. #define BSPC_ALT MT(MOD_LALT, KC_BSPC)
  310. #define BSPC_MEDIA LT(_MEDIA, KC_BSPC)
  311. #define KC_BKTAB LSFT(KC_TAB)
  312. // layer toggles
  313. #define LAYER_OSL OSL(_LAYERS)
  314. #define SYM_OSL OSL(LN_SYMB)
  315. #define SYM_TG TG(LN_SYMB)
  316. #define SYM_MO MO(LN_SYMB)
  317. #define NAV_TG TG(_NAV)
  318. #define COMBO_REF_TG_EN TG(_COMBO_REF)
  319. #define NUM_OSL OSL(LN_KEYPAD)
  320. #define NUM_TO TO(LN_KEYPAD)
  321. #define FUN_OSL OSL(LN_FUNC)
  322. #define SYS_OSL OSL(LN_SYSTEM)
  323. #define SYS_TG TG(LN_SYSTEM)
  324. // Shortcuts
  325. #define S_CUT S(KC_DEL)
  326. #define S_COPY C(KC_INS)
  327. #define S_PASTE S(KC_INS)
  328. #define S_UNDO C(KC_Z)
  329. #define S_REDO C(KC_Y)
  330. #define S_SAVE C(KC_S)
  331. #define S_ALL C(KC_A)
  332. #define S_BACK A(KC_LEFT)
  333. #define S_FWD A(KC_RIGHT)
  334. #define C_BSPC C(KC_BSPC)
  335. #define SCREEN S(C(KC_PSCR))
  336. // One Shot Mods keycodes,
  337. #define KC_MLSF OSM(MOD_LSFT)
  338. #define KC_MRSF OSM(MOD_RSFT)
  339. #define OS_LGUI OSM(MOD_LGUI)
  340. #define OS_RGUI OSM(MOD_RGUI)
  341. #define OS_LSFT OSM(MOD_LSFT)
  342. #define OS_RSFT OSM(MOD_RSFT)
  343. #define OS_LCTL OSM(MOD_LCTL)
  344. #define OS_RCTL OSM(MOD_RCTL)
  345. #define OS_LALT OSM(MOD_LALT)
  346. #define OS_RALT OSM(MOD_RALT)
  347. #define ALT_APP ALT_T(KC_APP)
  348. #define MG_NKRO MAGIC_TOGGLE_NKRO
  349. #define UC_IRNY UC(0x2E2E)
  350. #define UC_CLUE UC(0x203D)
  351. //// TAP DANCE
  352. typedef struct {
  353. bool is_press_action;
  354. int state;
  355. } tdtap;
  356. enum {
  357. SINGLE_TAP = 1,
  358. SINGLE_HOLD = 2,
  359. DOUBLE_TAP = 3,
  360. DOUBLE_HOLD = 4,
  361. DOUBLE_SINGLE_TAP = 5, //send two single taps
  362. TRIPLE_TAP = 6,
  363. TRIPLE_HOLD = 7
  364. };
  365. //Tap Dance Declarations
  366. enum {
  367. TD_ESC_CAPS = 0,
  368. TD_TAB_BKTAB = 1,
  369. TD_MDIA_SYMB = 2,
  370. TD_HOME_END = 3,
  371. TD_XMONAD_ESC = 4,
  372. TD_DEF_LAYER_SW = 5,
  373. TD_DEF_OS_LAYER_SW = 6,
  374. TD_MOUSE_BTNS = 7,
  375. TD_DVORAK_BEPO = 8,
  376. TD_UP_HOME = 9,
  377. TD_DOWN_END = 10,
  378. TD_RIGHT_TAB = 11,
  379. TD_LEFT_BACKTAB = 12
  380. };
  381. // Tap dance
  382. #define TAB_BKTAB TD(TD_TAB_BKTAB) // Tab or backtab tapdance.
  383. #define MDIA_SYMB_KP_LAYERS TD(TD_MDIA_SYMB) // MDIA, symb, keypad, layouts layer tapdance toggle.
  384. #define DEF_LAYER_SW TD(TD_DEF_LAYER_SW) // dvorak, dvorak_on_bepo, bepo default layer
  385. #define DEF_OS_LAYER_SW TD(TD_DEF_OS_LAYER_SW) // dvorak, dvorak_on_bepo, bepo default layer
  386. #define HOME_END TD(TD_HOME_END) // home or end tapdance.
  387. #define XMONAD_ESC TD(TD_XMONAD_ESC) // Escape, dvorak, media or symb. - tap and hold tap dance. 1-4
  388. #define DVORAK_ET_BEPO TD(TD_DVORAK_BEPO) // Escape, dvorak, media or symb. - tap and hold tap dance. 1-4
  389. #define TDMOUSE_BTNS TD(TD_MOUSE_BTNS) // hmmm. 1-5
  390. #define RIGHT_TAB TD(TD_RIGHT_TAB) // Bad idea these 4. Maybe with good timing...
  391. #define LEFT_BACKTAB TD(TD_LEFT_BACKTAB)
  392. #define UP_HOME TD(TD_UP_HOME)
  393. #define DOWN_END TD(TD_DOWN_END) // No! Down Down Not End....
  394. // HOME ROW LAYER TOGGLE (LT) and Shift.
  395. // both sides of the home row have "shift, ___, media , symb, ___" and "___, symb, media, ___, shift".
  396. // so pinky fingers are shift when held and the index and second fingers are symbol and
  397. // media layers when held.
  398. // The most portable copy/paste keys (windows (mostly), linux, and some terminal emulators).
  399. // The KC_CCCV key takes care of the last two...
  400. #define MK_CUT LSFT(KC_DEL) // shift + delete
  401. #define MK_COPY LCTL(KC_INS) // ctrl + insert
  402. #define MK_PASTE LSFT(KC_INS) // shift + insert
  403. #define EOT LCTL(KC_D)
  404. #define NAK LCTL(KC_U)
  405. #define XPASTE LCTL(LSFT(KC_V))
  406. #define UNDO LCTL(KC_Z)
  407. #define XCOPY LCTL(LSFT(KC_C))
  408. #undef ___ //kint defines it as KC_NO
  409. #define ___ KC_TRNS
  410. #define XXX KC_NO
  411. #define ____ _TRNS
  412. // Blocking keys
  413. #define _X_ XXX
  414. #define ___X___ XXX
  415. #define ___X2___ XXX, XXX
  416. #define ___X3___ ___X2___, XXX
  417. #define ___X4___ ___X3___, XXX
  418. #define ___X5___ ___X4___, XXX
  419. #define ___X6___ ___X5___, XXX
  420. #define ___X12___ ___X6___, ___X6___
  421. #define ___X15___ ___X5___, ___X5___, ___X5___
  422. // Transparent keys
  423. #define ___2___ ___, ___
  424. #define ___3___ ___2___, ___
  425. #define ___4___ ___3___, ___
  426. #define ___5___ ___4___, ___
  427. #define ___6___ ___5___, ___
  428. #define ___10___ ___6___, ___4___
  429. #define ___12___ ___6___, ___6___
  430. #define ___14___ ___5___, ___4___, ___5___
  431. #define ___15___ ___5___, ___5___, ___5___
  432. #define ___16___ ___15___, ___
  433. #define ____2_ ____, ____
  434. #define ____3_ ____2_, ____
  435. #define ____4_ ____3_, ____
  436. #define ____5_ ____4_, ____
  437. #define ____6_ ____5_, ____
  438. #define ____10_ ____6_, ____4_
  439. #define ____12_ ____6_, ____6_
  440. #define ____14_ ____5_, ____4_, ____5_
  441. #define ____15_ ____5_, ____5_, ____5_
  442. #define ____16_ ____15_, ____
  443. int on_qwerty(void);
  444. #ifdef TAP_DANCES_ENABLE
  445. int cur_dance (qk_tap_dance_state_t *state);
  446. //for the x tap dance. Put it here so it can be used in any keymap
  447. void x_finished (qk_tap_dance_state_t *state, void *user_data);
  448. void x_reset (qk_tap_dance_state_t *state, void *user_data);
  449. #endif