keymap.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  1. /* Copyright 2020 shela
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  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. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include QMK_KEYBOARD_H
  17. #include "keymap_jis2us.h"
  18. #include "action_pseudo.h"
  19. // clang-format off
  20. enum keyboard_layers {
  21. _QWERTY = 0,
  22. _DVORAK,
  23. _COLEMAK,
  24. _PSEUDO,
  25. _TENKEY,
  26. _MOUSE,
  27. _HHKB,
  28. _SPACE_FN
  29. };
  30. enum custom_keycodes {
  31. QWERTY = SAFE_RANGE,
  32. DVORAK,
  33. COLEMAK,
  34. PSEUDO,
  35. TENKEY,
  36. MOUSE,
  37. L_INNER,
  38. R_INNER,
  39. L_OUTER,
  40. R_OUTER,
  41. PSE_FN,
  42. MACMODE,
  43. DYNAMIC_MACRO_RANGE
  44. };
  45. // clang-format on
  46. /* Additional custom keycodes */
  47. #define MO_HHKB MO(_HHKB)
  48. #define LT_SPFN LT(_SPACE_FN, KC_SPC)
  49. #define DM_STA1 DYN_REC_START1
  50. #define DM_PLY1 DYN_MACRO_PLAY1
  51. /* User settings structure for the EEPROM */
  52. typedef union {
  53. uint32_t raw;
  54. struct {
  55. uint8_t base_layer : 8;
  56. bool mac_mode : 1;
  57. };
  58. } user_config_t;
  59. user_config_t user_config;
  60. static uint8_t base_layer = _QWERTY;
  61. static bool mac_mode = false;
  62. static bool l_long_pressed = false;
  63. static bool l_pressed = false;
  64. static uint16_t l_time = 0;
  65. static bool r_long_pressed = false;
  66. static bool r_pressed = false;
  67. static uint16_t r_time = 0;
  68. static uint16_t l_inner = KC_NO;
  69. static uint16_t l_outer = KC_NO;
  70. static uint16_t r_inner = KC_NO;
  71. static uint16_t r_outer = KC_NO;
  72. // clang-format off
  73. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  74. /* Qwerty Layer
  75. * ,-----------------------------------------------------------------------------------------.
  76. * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ` | BS |
  77. * |-----------------------------------------------------------------------------------------|
  78. * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
  79. * |-----------------------------------------------------------------------------------------|
  80. * | LControl | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
  81. * |-----------------------------------------------------------------------------------------|
  82. * | LShift | Z | X | C | V | B | N | M | , | . | / | RShift |HHKB |
  83. * `-----------------------------------------------------------------------------------------'
  84. * |LOutr| LInner | SpaceFN | RInner |ROutr|
  85. * `-----------------------------------------------------------------'
  86. */
  87. [_QWERTY] = LAYOUT(
  88. KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
  89. 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,
  90. KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
  91. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO_HHKB,
  92. L_OUTER, L_INNER, LT_SPFN, R_INNER, R_OUTER
  93. ),
  94. /* Dvorak Layer
  95. * ,-----------------------------------------------------------------------------------------.
  96. * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | ` | BS |
  97. * |-----------------------------------------------------------------------------------------|
  98. * | Tab | ' | , | . | P | Y | F | G | C | R | L | / | = | \ |
  99. * |-----------------------------------------------------------------------------------------|
  100. * | LControl | A | O | E | U | I | D | H | T | N | S | - | Enter |
  101. * |-----------------------------------------------------------------------------------------|
  102. * | LShift | ; | Q | J | K | X | B | M | W | V | Z | RShift |HHKB |
  103. * `-----------------------------------------------------------------------------------------'
  104. * |LOutr| LInner | SpaceFN | RInner |ROutr|
  105. * `-----------------------------------------------------------------'
  106. */
  107. [_DVORAK] = LAYOUT(
  108. KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_GRV, KC_BSPC,
  109. KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS,
  110. KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT,
  111. KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, MO_HHKB,
  112. L_OUTER, L_INNER, LT_SPFN, R_INNER, R_OUTER
  113. ),
  114. /* Colemak Layer
  115. * ,-----------------------------------------------------------------------------------------.
  116. * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ` | BS |
  117. * |-----------------------------------------------------------------------------------------|
  118. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ |
  119. * |-----------------------------------------------------------------------------------------|
  120. * | LControl | A | R | S | T | D | H | N | E | I | O | ' | Enter |
  121. * |-----------------------------------------------------------------------------------------|
  122. * | LShift | Z | X | C | V | B | K | M | , | . | / | RShift |HHKB |
  123. * `-----------------------------------------------------------------------------------------'
  124. * |LOutr| LInner | SpaceFN | RInner |ROutr|
  125. * `-----------------------------------------------------------------'
  126. */
  127. [_COLEMAK] = LAYOUT(
  128. KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
  129. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS,
  130. KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT,
  131. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO_HHKB,
  132. L_OUTER, L_INNER, LT_SPFN, R_INNER, R_OUTER
  133. ),
  134. /* Pseudo Layer
  135. * ,-----------------------------------------------------------------------------------------.
  136. * | Esc |PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn| BS |
  137. * |-----------------------------------------------------------------------------------------|
  138. * | Tab |PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn| PseFn |
  139. * |-----------------------------------------------------------------------------------------|
  140. * | Control |PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn| Enter |
  141. * |-----------------------------------------------------------------------------------------|
  142. * | Shift |PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn| Shift |HHKB |
  143. * `-----------------------------------------------------------------------------------------'
  144. * |LOutr| LInner | SpaceFN | RInner |ROutr|
  145. * `-----------------------------------------------------------------'
  146. */
  147. [_PSEUDO] = LAYOUT(
  148. KC_ESC, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, KC_BSPC,
  149. KC_TAB, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN,
  150. KC_LCTL, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, KC_ENT,
  151. KC_LSFT, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, PSE_FN, KC_RSFT, MO_HHKB,
  152. L_OUTER, L_INNER, LT_SPFN, R_INNER, R_OUTER
  153. ),
  154. /* Tenkey layer
  155. * ,-----------------------------------------------------------------------------------------.
  156. * | Esc | | | | | | | | | | / | * | - | | BS |
  157. * |-----------------------------------------------------------------------------------------|
  158. * | Tab | | | | | | | | | 7 | 8 | 9 | + | |
  159. * |-----------------------------------------------------------------------------------------|
  160. * | LControl | | | | | | | | | 4 | 5 | 6 | Enter |
  161. * |-----------------------------------------------------------------------------------------|
  162. * | LShift | | | | | | | | 1 | 2 | 3 | + |HHKB |
  163. * `-----------------------------------------------------------------------------------------'
  164. * |LOutr| LInner | SpaceFN | 0 | . |
  165. * `-----------------------------------------------------------------'
  166. */
  167. [_TENKEY] = LAYOUT(
  168. KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSLS, KC_PAST, KC_PMNS, XXXXXXX, KC_BSPC,
  169. KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_PPLS, XXXXXXX,
  170. KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P4, KC_P5, KC_P6, KC_PENT,
  171. KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P1, KC_P2, KC_P3, KC_PPLS, MO_HHKB,
  172. L_OUTER, L_INNER, LT_SPFN, KC_P0, KC_PDOT
  173. ),
  174. /* Mouse layer
  175. * ,-----------------------------------------------------------------------------------------.
  176. * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | BS |
  177. * |-----------------------------------------------------------------------------------------|
  178. * | Tab | | | | | | WhL | WhD | WhU | WhR | | | | |
  179. * |-----------------------------------------------------------------------------------------|
  180. * | LControl | | | | | | MsL | MsD | MsU | MsR | | | Enter |
  181. * |-----------------------------------------------------------------------------------------|
  182. * | LShift | | | | | | Mb1 | Mb2 | Mb3 | | | RShift |HHKB |
  183. * `-----------------------------------------------------------------------------------------'
  184. * |LOutr| LInner | Mb1 | RInner |ROutr|
  185. * `-----------------------------------------------------------------'
  186. */
  187. [_MOUSE] = LAYOUT(
  188. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_BSPC,
  189. KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  190. KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, XXXXXXX, XXXXXXX, KC_ENT,
  191. KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, KC_BTN3, XXXXXXX, XXXXXXX, KC_RSFT, MO_HHKB,
  192. L_OUTER, L_INNER, KC_BTN1, R_INNER, R_OUTER
  193. ),
  194. /* HHKB Layer
  195. * ,-----------------------------------------------------------------------------------------.
  196. * |Power| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
  197. * |-----------------------------------------------------------------------------------------|
  198. * | Caps |Qwert|Dvork|Colmk|Psedo|Tenky|Mouse| |PScr |SLck |Paus | Up | | Clear |
  199. * |-----------------------------------------------------------------------------------------|
  200. * | |VolD |VolU |Mute |Ejct | | * | / |Home |PgUp |Left |Rght | Enter |
  201. * |-----------------------------------------------------------------------------------------|
  202. * | |Sta1 |Ply1 | | Mac | | + | - | End |PgDn |Down | | |
  203. * `-----------------------------------------------------------------------------------------'
  204. * | | | Space | | |
  205. * `-----------------------------------------------------------------'
  206. */
  207. [_HHKB] = LAYOUT(
  208. KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
  209. KC_CAPS, QWERTY, DVORAK, COLEMAK, PSEUDO, TENKEY, MOUSE, XXXXXXX, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, XXXXXXX, KC_NLCK,
  210. _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, XXXXXXX, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
  211. _______, DM_STA1, DM_PLY1, XXXXXXX, MACMODE, XXXXXXX, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
  212. _______, _______, KC_SPC, _______, _______
  213. ),
  214. /* SpaceFN Layer
  215. * ,-----------------------------------------------------------------------------------------.
  216. * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | Del |
  217. * |-----------------------------------------------------------------------------------------|
  218. * | |Home | Up | End | | | |Home | End | |PScr |SLck |Paus | Ins |
  219. * |-----------------------------------------------------------------------------------------|
  220. * | |Left |Down |Rght |PgUp | |Left |Down | Up |Rght | | | |
  221. * |-----------------------------------------------------------------------------------------|
  222. * | | | |PgDn | | Spc | |PgDn |PgUp | | | | |
  223. * `-----------------------------------------------------------------------------------------'
  224. * | | | | | |
  225. * `-----------------------------------------------------------------'
  226. */
  227. [_SPACE_FN] = LAYOUT(
  228. _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_DEL,
  229. _______, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
  230. _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGUP, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, _______,
  231. _______, XXXXXXX, XXXXXXX, KC_PGDN, XXXXXXX, KC_SPC, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______, XXXXXXX,
  232. _______, _______, _______, _______, _______
  233. ),
  234. };
  235. // clang-format on
  236. void set_mac_mode_keys(bool mac_mode) {
  237. if (mac_mode) {
  238. l_inner = KC_LCMD;
  239. l_outer = KC_LOPT;
  240. r_inner = KC_RCMD;
  241. r_outer = KC_ROPT;
  242. } else {
  243. l_inner = KC_LALT;
  244. l_outer = KC_LGUI;
  245. r_inner = KC_RALT;
  246. r_outer = KC_RGUI;
  247. }
  248. }
  249. void keyboard_post_init_user(void) {
  250. user_config.raw = eeconfig_read_user();
  251. mac_mode = user_config.mac_mode;
  252. base_layer = user_config.base_layer;
  253. set_mac_mode_keys(mac_mode);
  254. }
  255. /* Set default values for the EEPROM */
  256. void eeconfig_init_user(void) {
  257. user_config.raw = 0;
  258. user_config.base_layer = _QWERTY;
  259. user_config.mac_mode = false;
  260. eeconfig_update_user(user_config.raw);
  261. base_layer = _QWERTY;
  262. mac_mode = false;
  263. set_mac_mode_keys(mac_mode);
  264. }
  265. void persistent_default_layer_set(uint8_t layer) {
  266. set_single_persistent_default_layer(layer);
  267. user_config.base_layer = layer;
  268. eeconfig_update_user(user_config.raw);
  269. base_layer = layer;
  270. }
  271. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  272. switch (keycode) {
  273. case QWERTY:
  274. if (record->event.pressed) {
  275. persistent_default_layer_set(_QWERTY);
  276. }
  277. return false;
  278. case DVORAK:
  279. if (record->event.pressed) {
  280. persistent_default_layer_set(_DVORAK);
  281. }
  282. return false;
  283. case COLEMAK:
  284. if (record->event.pressed) {
  285. persistent_default_layer_set(_COLEMAK);
  286. }
  287. return false;
  288. case PSEUDO:
  289. if (record->event.pressed) {
  290. if (l_pressed && !l_long_pressed) {
  291. register_code(l_inner);
  292. l_long_pressed = true;
  293. }
  294. if (r_pressed && !r_long_pressed) {
  295. register_code(r_inner);
  296. r_long_pressed = true;
  297. }
  298. // set_single_persistent_default_layer(_PSEUDO);
  299. }
  300. return false;
  301. case TENKEY:
  302. if (record->event.pressed) {
  303. default_layer_set(1U << _TENKEY);
  304. }
  305. return false;
  306. case MOUSE:
  307. if (record->event.pressed) {
  308. default_layer_set(1U << _MOUSE);
  309. }
  310. return false;
  311. case L_INNER:
  312. if (record->event.pressed) {
  313. l_pressed = true;
  314. l_time = record->event.time;
  315. } else {
  316. if (l_pressed) {
  317. if (l_long_pressed) {
  318. unregister_code(l_inner);
  319. l_long_pressed = false;
  320. } else {
  321. if (TIMER_DIFF_16(record->event.time, l_time) < TAPPING_TERM) {
  322. if (mac_mode) {
  323. register_code(KC_LANG2);
  324. unregister_code(KC_LANG2);
  325. } else {
  326. register_code(KC_MHEN);
  327. unregister_code(KC_MHEN);
  328. }
  329. } else {
  330. register_code(l_inner);
  331. unregister_code(l_inner);
  332. }
  333. }
  334. l_pressed = false;
  335. }
  336. }
  337. return false;
  338. case R_INNER:
  339. if (record->event.pressed) {
  340. r_pressed = true;
  341. r_time = record->event.time;
  342. } else {
  343. if (r_pressed) {
  344. if (r_long_pressed) {
  345. unregister_code(r_inner);
  346. r_long_pressed = false;
  347. } else {
  348. if (TIMER_DIFF_16(record->event.time, r_time) < TAPPING_TERM) {
  349. if (mac_mode) {
  350. register_code(KC_LANG1);
  351. unregister_code(KC_LANG1);
  352. } else {
  353. register_code(KC_KANA);
  354. unregister_code(KC_KANA);
  355. }
  356. } else {
  357. register_code(r_inner);
  358. unregister_code(r_inner);
  359. }
  360. }
  361. r_pressed = false;
  362. }
  363. }
  364. return false;
  365. case L_OUTER:
  366. if (record->event.pressed) {
  367. register_code(l_outer);
  368. } else {
  369. unregister_code(l_outer);
  370. }
  371. return false;
  372. case R_OUTER:
  373. if (record->event.pressed) {
  374. register_code(r_outer);
  375. } else {
  376. unregister_code(r_outer);
  377. }
  378. return false;
  379. case MACMODE:
  380. if (record->event.pressed) {
  381. /* Toggle Mac mode value */
  382. mac_mode = !mac_mode;
  383. user_config.mac_mode = mac_mode;
  384. eeconfig_update_user(user_config.raw);
  385. set_mac_mode_keys(mac_mode);
  386. }
  387. return false;
  388. case PSE_FN:
  389. if (record->event.pressed) {
  390. if (l_pressed && !l_long_pressed) {
  391. register_code(l_inner);
  392. l_long_pressed = true;
  393. }
  394. if (r_pressed && !r_long_pressed) {
  395. register_code(r_inner);
  396. r_long_pressed = true;
  397. }
  398. }
  399. action_pseudo_process(record, base_layer, keymap_jis2us);
  400. return false;
  401. default:
  402. if (record->event.pressed) {
  403. if (l_pressed && !l_long_pressed) {
  404. register_code(l_inner);
  405. l_long_pressed = true;
  406. }
  407. if (r_pressed && !r_long_pressed) {
  408. register_code(r_inner);
  409. r_long_pressed = true;
  410. }
  411. }
  412. }
  413. return true;
  414. }
  415. uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
  416. switch (keycode) {
  417. case LT_SPFN:
  418. return SPFN_TAPPING_TERM;
  419. default:
  420. return TAPPING_TERM;
  421. }
  422. }