aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshela <shelaf@users.noreply.github.com>2020-08-05 12:19:27 +0900
committerGitHub <noreply@github.com>2020-08-04 20:19:27 -0700
commit62c0146419a3a51614e200cfbddef69d14fde6f4 (patch)
tree53cbbbb2597f6da425118ed301fd6d38b065f55f
parent7b85962673e40633d9c36e4a36bedd80a601a0ac (diff)
downloadqmk_firmware-62c0146419a3a51614e200cfbddef69d14fde6f4.tar.gz
qmk_firmware-62c0146419a3a51614e200cfbddef69d14fde6f4.zip
[Keymap] Update my keymap (#9849)
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/action_pseudo.c (renamed from keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.c)84
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/action_pseudo.h27
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.h15
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/config.h38
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/keymap.c483
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/keymap_jis2us.h71
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/readme.md76
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/rules.mk4
8 files changed, 581 insertions, 217 deletions
diff --git a/keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.c b/keyboards/hhkb/ansi/keymaps/shela/action_pseudo.c
index a15f5e5e0..2ba8b3e50 100644
--- a/keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.c
+++ b/keyboards/hhkb/ansi/keymaps/shela/action_pseudo.c
@@ -1,27 +1,42 @@
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
1#include "quantum.h" 17#include "quantum.h"
2#include "command.h" 18#include "command.h"
3#include "action_pseudo_lut.h" 19#include "action_pseudo.h"
4 20
5static uint8_t send_key_shift_bit[SHIFT_BIT_SIZE]; 21static uint8_t send_key_shift_bit[SHIFT_BIT_SIZE];
6 22
7/* 23/*
8 * Pseudo layout action. 24 * Action Pseudo Process.
9 * This action converts a keycode in order to output the character according to the keymap you specified 25 * Gets the keycode in the same position of the specified layer.
10 * still your keyboard layout recognized wrongly on your OS. 26 * The keycode is sent after conversion according to the conversion keymap.
11 * Memo: Using other layer keymap to get keycode
12 */ 27 */
13void action_pseudo_lut(keyrecord_t *record, uint8_t base_keymap_id, const uint16_t (*keymap)[2]) { 28void action_pseudo_process(keyrecord_t *record, uint8_t base_layer, const uint16_t (*keymap)[2]) {
14 uint8_t prev_shift; 29 uint8_t prev_shift;
15 uint16_t keycode; 30 uint16_t keycode;
16 uint16_t pseudo_keycode; 31 uint16_t pseudo_keycode;
17 32
18 /* get keycode from keymap you specified */ 33 /* Get keycode from specified layer */
19 keycode = keymap_key_to_keycode(base_keymap_id, record->event.key); 34 keycode = keymap_key_to_keycode(base_layer, record->event.key);
20 35
21 prev_shift = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); 36 prev_shift = get_mods() & MOD_MASK_SHIFT;
22 37
23 if (record->event.pressed) { 38 if (record->event.pressed) {
24 /* when magic commands entered, keycode does not converted */ 39 /* If magic commands entered, keycode is not converted */
25 if (IS_COMMAND()) { 40 if (IS_COMMAND()) {
26 if (prev_shift) { 41 if (prev_shift) {
27 add_shift_bit(keycode); 42 add_shift_bit(keycode);
@@ -38,25 +53,21 @@ void action_pseudo_lut(keyrecord_t *record, uint8_t base_keymap_id, const uint16
38 if (IS_LSFT(pseudo_keycode)) { 53 if (IS_LSFT(pseudo_keycode)) {
39 register_code(QK_LSFT ^ pseudo_keycode); 54 register_code(QK_LSFT ^ pseudo_keycode);
40 } else { 55 } else {
41 /* delete shift mod temporarily */ 56 /* Delete shift mod temporarily */
42 del_mods(prev_shift); 57 unregister_mods(prev_shift);
43 send_keyboard_report();
44 register_code(pseudo_keycode); 58 register_code(pseudo_keycode);
45 add_mods(prev_shift); 59 register_mods(prev_shift);
46 send_keyboard_report();
47 } 60 }
48 } else { 61 } else {
49 pseudo_keycode = convert_keycode(keymap, keycode, false); 62 pseudo_keycode = convert_keycode(keymap, keycode, false);
50 dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode); 63 dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
51 64
52 if (IS_LSFT(pseudo_keycode)) { 65 if (IS_LSFT(pseudo_keycode)) {
53 add_weak_mods(MOD_BIT(KC_LSFT)); 66 register_weak_mods(MOD_LSFT);
54 send_keyboard_report();
55 register_code(QK_LSFT ^ pseudo_keycode); 67 register_code(QK_LSFT ^ pseudo_keycode);
56 /* on Windows, prevent key repeat to avoid unintended output */ 68 /* Prevent key repeat to avoid unintended output on Windows */
57 unregister_code(QK_LSFT ^ pseudo_keycode); 69 unregister_code(QK_LSFT ^ pseudo_keycode);
58 del_weak_mods(MOD_BIT(KC_LSFT)); 70 unregister_weak_mods(MOD_LSFT);
59 send_keyboard_report();
60 } else { 71 } else {
61 register_code(pseudo_keycode); 72 register_code(pseudo_keycode);
62 } 73 }
@@ -78,9 +89,9 @@ void action_pseudo_lut(keyrecord_t *record, uint8_t base_keymap_id, const uint16
78 } 89 }
79} 90}
80 91
81uint16_t convert_keycode(const uint16_t (*keymap)[2], uint16_t keycode, bool shift_modded) 92/* Convert keycode according to the keymap */
82{ 93uint16_t convert_keycode(const uint16_t (*keymap)[2], uint16_t keycode, bool shift_modded) {
83 uint16_t pseudo_keycode; 94 uint16_t pseudo_keycode = 0x00; /* default value */
84 95
85 switch (keycode) { 96 switch (keycode) {
86 case KC_A ... KC_CAPSLOCK: 97 case KC_A ... KC_CAPSLOCK:
@@ -97,23 +108,18 @@ uint16_t convert_keycode(const uint16_t (*keymap)[2], uint16_t keycode, bool shi
97 pseudo_keycode = keymap[keycode][0]; 108 pseudo_keycode = keymap[keycode][0];
98 } 109 }
99#endif 110#endif
100 /* if undefined, use got keycode as it is */
101 if (pseudo_keycode == 0x00) {
102 if (shift_modded) {
103 pseudo_keycode = S(keycode);
104 } else {
105 pseudo_keycode = keycode;
106 }
107 }
108 break;
109 default:
110 if (shift_modded) {
111 pseudo_keycode = S(keycode);
112 } else {
113 pseudo_keycode = keycode;
114 }
115 break; 111 break;
116 } 112 }
113
114 /* If pseudo keycode is the default value, use the keycode as it is */
115 if (pseudo_keycode == 0x00) {
116 if (shift_modded) {
117 pseudo_keycode = S(keycode);
118 } else {
119 pseudo_keycode = keycode;
120 }
121 }
122
117 return pseudo_keycode; 123 return pseudo_keycode;
118} 124}
119 125
diff --git a/keyboards/hhkb/ansi/keymaps/shela/action_pseudo.h b/keyboards/hhkb/ansi/keymaps/shela/action_pseudo.h
new file mode 100644
index 000000000..7c3d38fa0
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/shela/action_pseudo.h
@@ -0,0 +1,27 @@
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
17#pragma once
18
19#define SHIFT_BIT_SIZE (0xE7 / 8 + 1) /* 1bit per 1key */
20#define IS_LSFT(kc) ((QK_LSFT & (kc)) == QK_LSFT)
21
22void action_pseudo_process(keyrecord_t *, uint8_t, const uint16_t (*)[2]);
23uint16_t convert_keycode(const uint16_t (*)[2], uint16_t, bool);
24
25uint8_t get_shift_bit(uint16_t);
26void add_shift_bit(uint16_t);
27void del_shift_bit(uint16_t);
diff --git a/keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.h b/keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.h
deleted file mode 100644
index 681252440..000000000
--- a/keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.h
+++ /dev/null
@@ -1,15 +0,0 @@
1#ifndef ACTION_PSEUDO_LUT_H
2#define ACTION_PSEUDO_LUT_H
3
4#define SHIFT_BIT_SIZE (0xE7 / 8 + 1) // 1bit per 1key
5
6#define IS_LSFT(kc) ((QK_LSFT & (kc)) == QK_LSFT)
7
8void action_pseudo_lut(keyrecord_t *, uint8_t, const uint16_t (*)[2]);
9uint16_t convert_keycode(const uint16_t (*)[2], uint16_t, bool);
10
11uint8_t get_shift_bit(uint16_t);
12void add_shift_bit(uint16_t);
13void del_shift_bit(uint16_t);
14
15#endif
diff --git a/keyboards/hhkb/ansi/keymaps/shela/config.h b/keyboards/hhkb/ansi/keymaps/shela/config.h
index 08cc1fb46..25794900c 100644
--- a/keyboards/hhkb/ansi/keymaps/shela/config.h
+++ b/keyboards/hhkb/ansi/keymaps/shela/config.h
@@ -1,12 +1,38 @@
1#ifndef CONFIG_SHELA_H 1/* Copyright 2020 shela
2#define CONFIG_SHELA_H 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
17#pragma once
3 18
4#include "../../config.h" 19#include "../../config.h"
5 20
21/* USB Device descriptor parameter */
22#undef VENDOR_ID
23#define VENDOR_ID 0x0853
24#undef PRODUCT_ID
25#define PRODUCT_ID 0x0100
26#undef DEVICE_VER
27#define DEVICE_VER 0x0102
28#undef MANUFACTURER
29#define MANUFACTURER Topre Corporation
30#undef PRODUCT
31#define PRODUCT HHKB Professional
32
6#undef TAPPING_TERM 33#undef TAPPING_TERM
7#define TAPPING_TERM 230 34#define TAPPING_TERM 210
35#define SPFN_TAPPING_TERM 190 /* SpaceFN tapping term */
8 36
9#define ONESHOT_TAP_TOGGLE 2 37#define ONESHOT_TAP_TOGGLE 3
10#define ONESHOT_TIMEOUT 2000 38#define ONESHOT_TIMEOUT 2000
11
12#endif
diff --git a/keyboards/hhkb/ansi/keymaps/shela/keymap.c b/keyboards/hhkb/ansi/keymaps/shela/keymap.c
index 3971e8f94..f63b99a4f 100644
--- a/keyboards/hhkb/ansi/keymaps/shela/keymap.c
+++ b/keyboards/hhkb/ansi/keymaps/shela/keymap.c
@@ -1,186 +1,433 @@
1/* 1/* Copyright 2020 shela
2 * HHKB Pro 2 US Layout for 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/>.
3 */ 15 */
16
4#include QMK_KEYBOARD_H 17#include QMK_KEYBOARD_H
5#include "keymap_jis2us.h" 18#include "keymap_jis2us.h"
6#include "action_pseudo_lut.h" 19#include "action_pseudo.h"
20
21// clang-format off
22enum keyboard_layers {
23 _QWERTY = 0,
24 _DVORAK,
25 _COLEMAK,
26 _PSEUDO,
27 _TENKEY,
28 _MOUSE,
29 _HHKB,
30 _SPACE_FN
31};
7 32
8enum keymap_layout 33enum custom_keycodes {
9{ 34 QWERTY = SAFE_RANGE,
10 BASE = 0,
11 PSEUDO_US,
12 DVORAK, 35 DVORAK,
13 MOUSE, 36 COLEMAK,
37 PSEUDO,
14 TENKEY, 38 TENKEY,
15 HHKB, 39 MOUSE,
16 SPACE_FN, 40 L_INNER,
41 R_INNER,
42 L_OUTER,
43 R_OUTER,
44 PSE_FN,
45 MACMODE,
46 DYNAMIC_MACRO_RANGE
17}; 47};
48// clang-format on
18 49
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 50/* Additional custom keycodes */
51#define MO_HHKB MO(_HHKB)
52#define LT_SPFN LT(_SPACE_FN, KC_SPC)
53#define DM_STA1 DYN_REC_START1
54#define DM_PLY1 DYN_MACRO_PLAY1
55
56/* User settings structure for the EEPROM */
57typedef union {
58 uint32_t raw;
59 struct {
60 uint8_t base_layer : 8;
61 bool mac_mode : 1;
62 };
63} user_config_t;
64
65user_config_t user_config;
66static uint8_t base_layer = _QWERTY;
67static bool mac_mode = false;
68static bool l_long_pressed = false;
69static bool l_pressed = false;
70static uint16_t l_time = 0;
71static bool r_long_pressed = false;
72static bool r_pressed = false;
73static uint16_t r_time = 0;
20 74
21 /* Layer 0: Default Layer 75static uint16_t l_inner = KC_NO;
76static uint16_t l_outer = KC_NO;
77static uint16_t r_inner = KC_NO;
78static uint16_t r_outer = KC_NO;
79
80// clang-format off
81const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
82 /* Qwerty Layer
22 * ,-----------------------------------------------------------------------------------------. 83 * ,-----------------------------------------------------------------------------------------.
23 * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ` | BSp | 84 * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ` | BS |
24 * |-----------------------------------------------------------------------------------------| 85 * |-----------------------------------------------------------------------------------------|
25 * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | 86 * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
26 * |-----------------------------------------------------------------------------------------| 87 * |-----------------------------------------------------------------------------------------|
27 * | Control | A | S | D | F | G | H | J | K | L | ; | ' | Enter | 88 * | LControl | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
28 * |-----------------------------------------------------------------------------------------| 89 * |-----------------------------------------------------------------------------------------|
29 * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | 90 * | LShift | Z | X | C | V | B | N | M | , | . | / | RShift |HHKB |
30 * `-----------------------------------------------------------------------------------------' 91 * `-----------------------------------------------------------------------------------------'
31 * |LAlt | LGui | SpaceFN | RGui |RAlt | 92 * |LOutr| LInner | SpaceFN | RInner |ROutr|
32 * `-----------------------------------------------------------------' 93 * `-----------------------------------------------------------------'
33 */ 94 */
34 [BASE] = 95 [_QWERTY] = LAYOUT(
35 LAYOUT(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, 96 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,
36 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, 97 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,
37 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, 98 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,
38 OSM(MOD_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), 99 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,
39 KC_LALT, KC_LGUI, LT(SPACE_FN, KC_SPACE), KC_RGUI, KC_RALT), 100 L_OUTER, L_INNER, LT_SPFN, R_INNER, R_OUTER
40 101 ),
41 /* Layer 1: Pseudo US Layout Layer 102
103 /* Dvorak Layer
42 * ,-----------------------------------------------------------------------------------------. 104 * ,-----------------------------------------------------------------------------------------.
43 * | Esc | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | BSp | 105 * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | ` | BS |
44 * |-----------------------------------------------------------------------------------------| 106 * |-----------------------------------------------------------------------------------------|
45 * | Tab | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | 107 * | Tab | ' | , | . | P | Y | F | G | C | R | L | / | = | \ |
46 * |-----------------------------------------------------------------------------------------| 108 * |-----------------------------------------------------------------------------------------|
47 * | Control | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Enter | 109 * | LControl | A | O | E | U | I | D | H | T | N | S | - | Enter |
48 * |-----------------------------------------------------------------------------------------| 110 * |-----------------------------------------------------------------------------------------|
49 * | Shift | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Shift | Fn0 | 111 * | LShift | ; | Q | J | K | X | B | M | W | V | Z | RShift |HHKB |
50 * `-----------------------------------------------------------------------------------------' 112 * `-----------------------------------------------------------------------------------------'
51 * |LGui | Fn3 | SpaceFN | Fn4 |RGui | 113 * |LOutr| LInner | SpaceFN | RInner |ROutr|
52 * `-----------------------------------------------------------------' 114 * `-----------------------------------------------------------------'
53 */ 115 */
54 [PSEUDO_US] = 116 [_DVORAK] = LAYOUT(
55 LAYOUT(KC_ESC, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_BSPC, 117 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,
56 KC_TAB, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, 118 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,
57 KC_LCTL, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_ENT, 119 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,
58 KC_LSFT, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_RSFT, MO(HHKB), 120 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,
59 KC_LGUI, MT(MOD_LALT, KC_MHEN), LT(SPACE_FN, KC_SPACE), MT(MOD_RALT, KC_KANA), KC_RGUI), 121 L_OUTER, L_INNER, LT_SPFN, R_INNER, R_OUTER
60 122 ),
61 /* Layer 2: Dvorak Layer 123
124 /* Colemak Layer
62 * ,-----------------------------------------------------------------------------------------. 125 * ,-----------------------------------------------------------------------------------------.
63 * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | ` | BSp | 126 * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ` | BS |
64 * |-----------------------------------------------------------------------------------------| 127 * |-----------------------------------------------------------------------------------------|
65 * | Tab | ' | , | . | P | Y | F | G | C | R | L | / | = | \ | 128 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ |
66 * |-----------------------------------------------------------------------------------------| 129 * |-----------------------------------------------------------------------------------------|
67 * | Control | A | O | E | U | I | D | H | T | N | S | - | Enter | 130 * | LControl | A | R | S | T | D | H | N | E | I | O | ' | Enter |
68 * |-----------------------------------------------------------------------------------------| 131 * |-----------------------------------------------------------------------------------------|
69 * | Shift | ; | Q | J | K | X | B | M | W | V | Z | Shift | Fn0 | 132 * | LShift | Z | X | C | V | B | K | M | , | . | / | RShift |HHKB |
70 * `-----------------------------------------------------------------------------------------' 133 * `-----------------------------------------------------------------------------------------'
71 * |LAlt | LGui | SpaceFN | RGui |RAlt | 134 * |LOutr| LInner | SpaceFN | RInner |ROutr|
72 * `-----------------------------------------------------------------' 135 * `-----------------------------------------------------------------'
73 */ 136 */
74 [DVORAK] = 137 [_COLEMAK] = LAYOUT(
75 LAYOUT(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, 138 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,
76 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, 139 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,
77 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, 140 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,
78 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), 141 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,
79 KC_LALT, KC_LGUI, LT(SPACE_FN, KC_SPACE), KC_RGUI, KC_RALT), 142 L_OUTER, L_INNER, LT_SPFN, R_INNER, R_OUTER
80 143 ),
81 /* Layer 3: Mouse layer 144
145 /* Pseudo Layer
82 * ,-----------------------------------------------------------------------------------------. 146 * ,-----------------------------------------------------------------------------------------.
83 * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | | 147 * | Esc |PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn| BS |
84 * |-----------------------------------------------------------------------------------------| 148 * |-----------------------------------------------------------------------------------------|
85 * | | | | | | | MwL | MwD | MwU | MwR | | | | | 149 * | Tab |PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn| PseFn |
86 * |-----------------------------------------------------------------------------------------| 150 * |-----------------------------------------------------------------------------------------|
87 * | | | | | | | McL | McD | McU | McR | | | | 151 * | Control |PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn| Enter |
88 * |-----------------------------------------------------------------------------------------| 152 * |-----------------------------------------------------------------------------------------|
89 * | | | | | | | Mb1 | Mb2 | Mb3 | | | | Fn0 | 153 * | Shift |PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn|PseFn| Shift |HHKB |
90 * `-----------------------------------------------------------------------------------------' 154 * `-----------------------------------------------------------------------------------------'
91 * | | | Mb1 | | | 155 * |LOutr| LInner | SpaceFN | RInner |ROutr|
92 * `-----------------------------------------------------------------' 156 * `-----------------------------------------------------------------'
93 */ 157 */
94 [MOUSE] = 158 [_PSEUDO] = LAYOUT(
95 LAYOUT(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, KC_NO, KC_TRNS, 159 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,
96 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_NO, KC_NO, KC_NO, KC_NO, 160 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,
97 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NO, KC_NO, KC_TRNS, 161 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,
98 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_BTN2, KC_BTN3, KC_NO, KC_NO, KC_TRNS, MO(HHKB), 162 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,
99 KC_TRNS, KC_TRNS, KC_BTN1, KC_TRNS, KC_TRNS), 163 L_OUTER, L_INNER, LT_SPFN, R_INNER, R_OUTER
100 164 ),
101 /* Layer 4: Tenkey layer 165
166 /* Tenkey layer
102 * ,-----------------------------------------------------------------------------------------. 167 * ,-----------------------------------------------------------------------------------------.
103 * | Esc | | | | | | | | | | / | * | - | | BSp | 168 * | Esc | | | | | | | | | | / | * | - | | BS |
104 * |-----------------------------------------------------------------------------------------| 169 * |-----------------------------------------------------------------------------------------|
105 * | | | | | | | | | | 7 | 8 | 9 | + | | 170 * | Tab | | | | | | | | | 7 | 8 | 9 | + | |
106 * |-----------------------------------------------------------------------------------------| 171 * |-----------------------------------------------------------------------------------------|
107 * | | | | | | | | | | 4 | 5 | 6 | Enter | 172 * | LControl | | | | | | | | | 4 | 5 | 6 | Enter |
108 * |-----------------------------------------------------------------------------------------| 173 * |-----------------------------------------------------------------------------------------|
109 * | | | | | | | | | 1 | 2 | 3 | + | Fn0 | 174 * | LShift | | | | | | | | 1 | 2 | 3 | + |HHKB |
110 * `-----------------------------------------------------------------------------------------' 175 * `-----------------------------------------------------------------------------------------'
111 * | | | SpaceFN | 0 | . | 176 * |LOutr| LInner | SpaceFN | 0 | . |
112 * `-----------------------------------------------------------------' 177 * `-----------------------------------------------------------------'
113 */ 178 */
114 [TENKEY] = 179 [_TENKEY] = LAYOUT(
115 LAYOUT(KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSLS, KC_PAST, KC_PMNS, KC_NO, KC_BSPC, 180 KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSLS, KC_PAST, KC_PMNS, XXXXXXX, KC_BSPC,
116 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_NO, 181 KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_PPLS, XXXXXXX,
117 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_4, KC_KP_5, KC_KP_6, KC_PENT, 182 KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P4, KC_P5, KC_P6, KC_PENT,
118 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_PPLS, MO(HHKB), 183 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P1, KC_P2, KC_P3, KC_PPLS, MO_HHKB,
119 KC_TRNS, KC_TRNS, LT(SPACE_FN, KC_SPACE), KC_KP_0, KC_PDOT), 184 L_OUTER, L_INNER, LT_SPFN, KC_P0, KC_PDOT
120 185 ),
121 /* Layer 5: HHKB mode (HHKB Fn) 186
187 /* Mouse layer
122 * ,-----------------------------------------------------------------------------------------. 188 * ,-----------------------------------------------------------------------------------------.
123 * | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | 189 * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | BS |
124 * |-----------------------------------------------------------------------------------------| 190 * |-----------------------------------------------------------------------------------------|
125 * | Caps | Fn5 | Fn6 | Fn7 | Fn8 | Fn9 | | | Psc | Slk | Pus | Up | | BSp | 191 * | Tab | | | | | | WhL | WhD | WhU | WhR | | | | |
126 * |-----------------------------------------------------------------------------------------| 192 * |-----------------------------------------------------------------------------------------|
127 * | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | 193 * | LControl | | | | | | MsL | MsD | MsU | MsR | | | Enter |
128 * |-----------------------------------------------------------------------------------------| 194 * |-----------------------------------------------------------------------------------------|
129 * | | | | | | | + | - | End | PgD | Dow | | | 195 * | LShift | | | | | | Mb1 | Mb2 | Mb3 | | | RShift |HHKB |
130 * `-----------------------------------------------------------------------------------------' 196 * `-----------------------------------------------------------------------------------------'
131 * | | | | | | 197 * |LOutr| LInner | Mb1 | RInner |ROutr|
198 * `-----------------------------------------------------------------'
199 */
200 [_MOUSE] = LAYOUT(
201 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,
202 KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
203 KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, XXXXXXX, XXXXXXX, KC_ENT,
204 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, KC_BTN3, XXXXXXX, XXXXXXX, KC_RSFT, MO_HHKB,
205 L_OUTER, L_INNER, KC_BTN1, R_INNER, R_OUTER
206 ),
207
208 /* HHKB Layer
209 * ,-----------------------------------------------------------------------------------------.
210 * |Power| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
211 * |-----------------------------------------------------------------------------------------|
212 * | Caps |Qwert|Dvork|Colmk|Psedo|Tenky|Mouse| |PScr |SLck |Paus | Up | | Clear |
213 * |-----------------------------------------------------------------------------------------|
214 * | |VolD |VolU |Mute |Ejct | | * | / |Home |PgUp |Left |Rght | Enter |
215 * |-----------------------------------------------------------------------------------------|
216 * | |Sta1 |Ply1 | | Mac | | + | - | End |PgDn |Down | | |
217 * `-----------------------------------------------------------------------------------------'
218 * | | | Space | | |
132 * `-----------------------------------------------------------------' 219 * `-----------------------------------------------------------------'
133 */ 220 */
134 [HHKB] = 221 [_HHKB] = LAYOUT(
135 LAYOUT(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, 222 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,
136 KC_CAPS, DF(BASE), DF(PSEUDO_US), DF(MOUSE), DF(TENKEY), DF(DVORAK), KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, 223 KC_CAPS, QWERTY, DVORAK, COLEMAK, PSEUDO, TENKEY, MOUSE, XXXXXXX, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, XXXXXXX, KC_NLCK,
137 KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, 224 _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, XXXXXXX, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
138 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, 225 _______, DM_STA1, DM_PLY1, XXXXXXX, MACMODE, XXXXXXX, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
139 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 226 _______, _______, KC_SPC, _______, _______
140 227 ),
141 /* Layer 6: SpaceFN 228
229 /* SpaceFN Layer
142 * ,-----------------------------------------------------------------------------------------. 230 * ,-----------------------------------------------------------------------------------------.
143 * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | Del | 231 * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | Del |
144 * |-----------------------------------------------------------------------------------------| 232 * |-----------------------------------------------------------------------------------------|
145 * | | Hom | Up | End | | | | Hom | End | | Psc | Slk | Pau | Ins | 233 * | |Home | Up | End | | | |Home | End | |PScr |SLck |Paus | Ins |
146 * |-----------------------------------------------------------------------------------------| 234 * |-----------------------------------------------------------------------------------------|
147 * | | Lef | Dow | Rig | PgU | | Lef | Dow | Up | Rig | | | | 235 * | |Left |Down |Rght |PgUp | |Left |Down | Up |Rght | | | |
148 * |-----------------------------------------------------------------------------------------| 236 * |-----------------------------------------------------------------------------------------|
149 * | | | | PgD | | Spc | | PgD | PgU | | | | | 237 * | | | |PgDn | | Spc | |PgDn |PgUp | | | | |
150 * `-----------------------------------------------------------------------------------------' 238 * `-----------------------------------------------------------------------------------------'
151 * | | | | | | 239 * | | | | | |
152 * `-----------------------------------------------------------------' 240 * `-----------------------------------------------------------------'
153 */ 241 */
154 [SPACE_FN] = 242 [_SPACE_FN] = LAYOUT(
155 LAYOUT(KC_TRNS, 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_NO, KC_DEL, 243 _______, 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,
156 KC_TRNS, KC_HOME, KC_UP, KC_END, KC_NO, KC_NO, KC_NO, KC_HOME, KC_END, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS, 244 _______, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
157 KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGUP, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO, KC_TRNS, 245 _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGUP, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, _______,
158 KC_TRNS, KC_NO, KC_NO, KC_PGDN, KC_NO, KC_SPC, KC_NO, KC_PGDN, KC_PGUP, KC_NO, KC_NO, KC_TRNS, KC_NO, 246 _______, XXXXXXX, XXXXXXX, KC_PGDN, XXXXXXX, KC_SPC, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______, XXXXXXX,
159 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 247 _______, _______, _______, _______, _______
248 ),
160}; 249};
250// clang-format on
161 251
162/* 252void set_mac_mode_keys(bool mac_mode) {
163 * user defined action function 253 if (mac_mode) {
164 */ 254 l_inner = KC_LCMD;
165enum function_id 255 l_outer = KC_LOPT;
166{ 256 r_inner = KC_RCMD;
167 PSEUDO_US_FUNCTION, 257 r_outer = KC_ROPT;
168}; 258 } else {
259 l_inner = KC_LALT;
260 l_outer = KC_LGUI;
261 r_inner = KC_RALT;
262 r_outer = KC_RGUI;
263 }
264}
265
266void keyboard_post_init_user(void) {
267 user_config.raw = eeconfig_read_user();
268 mac_mode = user_config.mac_mode;
269 base_layer = user_config.base_layer;
270 set_mac_mode_keys(mac_mode);
271}
272
273/* Set default values for the EEPROM */
274void eeconfig_init_user(void) {
275 user_config.raw = 0;
276 user_config.base_layer = _QWERTY;
277 user_config.mac_mode = false;
278 eeconfig_update_user(user_config.raw);
279 base_layer = _QWERTY;
280 mac_mode = false;
281 set_mac_mode_keys(mac_mode);
282}
169 283
170void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) 284void persistent_default_layer_set(uint8_t layer) {
171{ 285 set_single_persistent_default_layer(layer);
286 user_config.base_layer = layer;
287 eeconfig_update_user(user_config.raw);
288 base_layer = layer;
289}
172 290
173 switch (id) 291bool process_record_user(uint16_t keycode, keyrecord_t *record) {
174 { 292 switch (keycode) {
175 case PSEUDO_US_FUNCTION: 293 case QWERTY:
176 action_pseudo_lut(record, BASE, keymap_jis2us); 294 if (record->event.pressed) {
177 break; 295 persistent_default_layer_set(_QWERTY);
296 }
297 return false;
298 case DVORAK:
299 if (record->event.pressed) {
300 persistent_default_layer_set(_DVORAK);
301 }
302 return false;
303 case COLEMAK:
304 if (record->event.pressed) {
305 persistent_default_layer_set(_COLEMAK);
306 }
307 return false;
308 case PSEUDO:
309 if (record->event.pressed) {
310 if (l_pressed && !l_long_pressed) {
311 register_code(l_inner);
312 l_long_pressed = true;
313 }
314 if (r_pressed && !r_long_pressed) {
315 register_code(r_inner);
316 r_long_pressed = true;
317 }
318 set_single_persistent_default_layer(_PSEUDO);
319 }
320 return false;
321 case TENKEY:
322 if (record->event.pressed) {
323 default_layer_set(1U << _TENKEY);
324 }
325 return false;
326 case MOUSE:
327 if (record->event.pressed) {
328 default_layer_set(1U << _MOUSE);
329 }
330 return false;
331 case L_INNER:
332 if (record->event.pressed) {
333 l_pressed = true;
334 l_time = record->event.time;
335 } else {
336 if (l_pressed) {
337 if (l_long_pressed) {
338 unregister_code(l_inner);
339 l_long_pressed = false;
340 } else {
341 if (TIMER_DIFF_16(record->event.time, l_time) < TAPPING_TERM) {
342 if (mac_mode) {
343 register_code(KC_LANG2);
344 unregister_code(KC_LANG2);
345 } else {
346 register_code(KC_MHEN);
347 unregister_code(KC_MHEN);
348 }
349 } else {
350 register_code(l_inner);
351 unregister_code(l_inner);
352 }
353 }
354 l_pressed = false;
355 }
356 }
357 return false;
358 case R_INNER:
359 if (record->event.pressed) {
360 r_pressed = true;
361 r_time = record->event.time;
362 } else {
363 if (r_pressed) {
364 if (r_long_pressed) {
365 unregister_code(r_inner);
366 r_long_pressed = false;
367 } else {
368 if (TIMER_DIFF_16(record->event.time, r_time) < TAPPING_TERM) {
369 if (mac_mode) {
370 register_code(KC_LANG1);
371 unregister_code(KC_LANG1);
372 } else {
373 register_code(KC_KANA);
374 unregister_code(KC_KANA);
375 }
376 } else {
377 register_code(r_inner);
378 unregister_code(r_inner);
379 }
380 }
381 r_pressed = false;
382 }
383 }
384 return false;
385 case L_OUTER:
386 if (record->event.pressed) {
387 register_code(l_outer);
388 } else {
389 unregister_code(l_outer);
390 }
391 return false;
392 case R_OUTER:
393 if (record->event.pressed) {
394 register_code(r_outer);
395 } else {
396 unregister_code(r_outer);
397 }
398 return false;
399 case MACMODE:
400 if (record->event.pressed) {
401 /* Toggle Mac mode value */
402 mac_mode = !mac_mode;
403 user_config.mac_mode = mac_mode;
404 eeconfig_update_user(user_config.raw);
405 set_mac_mode_keys(mac_mode);
406 }
407 return false;
408 case PSE_FN:
409 action_pseudo_process(record, base_layer, keymap_jis2us);
410 return false;
411 default:
412 if (record->event.pressed) {
413 if (l_pressed && !l_long_pressed) {
414 register_code(l_inner);
415 l_long_pressed = true;
416 }
417 if (r_pressed && !r_long_pressed) {
418 register_code(r_inner);
419 r_long_pressed = true;
420 }
421 }
178 } 422 }
423 return true;
179} 424}
180 425
181/* 426uint16_t get_tapping_term(uint16_t keycode) {
182 * Fn action definition 427 switch (keycode) {
183 */ 428 case LT_SPFN:
184const uint16_t PROGMEM fn_actions[] = { 429 return SPFN_TAPPING_TERM;
185 [1] = ACTION_FUNCTION(PSEUDO_US_FUNCTION), 430 default:
186}; 431 return TAPPING_TERM;
432 }
433}
diff --git a/keyboards/hhkb/ansi/keymaps/shela/keymap_jis2us.h b/keyboards/hhkb/ansi/keymaps/shela/keymap_jis2us.h
index edc1e6d86..916a403eb 100644
--- a/keyboards/hhkb/ansi/keymaps/shela/keymap_jis2us.h
+++ b/keyboards/hhkb/ansi/keymaps/shela/keymap_jis2us.h
@@ -1,32 +1,49 @@
1#ifndef LAYOUT_JIS2US_H 1/* Copyright 2020 shela
2#define LAYOUT_JIS2US_H 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 */
3 16
4/* keymap for convert from JIS to US */ 17#pragma once
18
19#include "keymap_jp.h"
20
21// clang-format off
22/* Keymap for converting JIS to US */
5const uint16_t PROGMEM keymap_jis2us[][2] = { 23const uint16_t PROGMEM keymap_jis2us[][2] = {
6 [KC_A ... KC_CAPS] = { 0x00, 0x00 }, /* default value */ 24 [KC_A ... KC_CAPS] = { 0x00, 0x00 }, /* default value */
7 25
8 [KC_1] = { KC_1, KC_EXLM }, /* 1 and ! -> 1 and ! */ 26 [KC_1] = { KC_1, JP_EXLM }, /* 1 and ! -> 1 and ! */
9 [KC_2] = { KC_2, KC_LBRC }, /* 2 and " -> 2 and @ */ 27 [KC_2] = { KC_2, JP_AT }, /* 2 and " -> 2 and @ */
10 [KC_3] = { KC_3, KC_HASH }, /* 3 and # -> 3 and # */ 28 [KC_3] = { KC_3, JP_HASH }, /* 3 and # -> 3 and # */
11 [KC_4] = { KC_4, KC_DLR }, /* 4 and $ -> 4 and $ */ 29 [KC_4] = { KC_4, JP_DLR }, /* 4 and $ -> 4 and $ */
12 [KC_5] = { KC_5, KC_PERC }, /* 5 and % -> 5 and % */ 30 [KC_5] = { KC_5, JP_PERC }, /* 5 and % -> 5 and % */
13 [KC_6] = { KC_6, KC_EQL }, /* 6 and & -> 6 and ^ */ 31 [KC_6] = { KC_6, JP_CIRC }, /* 6 and & -> 6 and ^ */
14 [KC_7] = { KC_7, KC_CIRC }, /* 7 and ' -> 7 and & */ 32 [KC_7] = { KC_7, JP_AMPR }, /* 7 and ' -> 7 and & */
15 [KC_8] = { KC_8, KC_DQT }, /* 8 and ( -> 8 and * */ 33 [KC_8] = { KC_8, JP_ASTR }, /* 8 and ( -> 8 and * */
16 [KC_9] = { KC_9, KC_ASTR }, /* 9 and ) -> 9 and ( */ 34 [KC_9] = { KC_9, JP_LPRN }, /* 9 and ) -> 9 and ( */
17 [KC_0] = { KC_0, KC_LPRN }, /* 0 and (no assign) -> 0 and ) */ 35 [KC_0] = { KC_0, JP_RPRN }, /* 0 -> 0 and ) */
18 [KC_MINS] = { KC_MINS, S(KC_RO) }, /* - and = -> - and _ */ 36 [KC_MINS] = { JP_MINS, JP_UNDS }, /* - and = -> - and _ */
19 [KC_EQL] = { KC_UNDS, KC_COLN }, /* ^ and ~ -> = and + */ 37 [KC_EQL] = { JP_EQL, JP_PLUS }, /* ^ and ~ -> = and + */
20 [KC_LBRC] = { KC_RBRC, KC_RCBR }, /* @ and ` -> [ and { */ 38 [KC_LBRC] = { JP_LBRC, JP_LCBR }, /* @ and ` -> [ and { */
21 [KC_RBRC] = { KC_BSLS, KC_PIPE }, /* [ and { -> ] and } */ 39 [KC_RBRC] = { JP_RBRC, JP_RCBR }, /* [ and { -> ] and } */
22 [KC_BSLS] = { KC_JYEN, S(KC_JYEN) }, /* ] and } -> / and | */ 40 [KC_BSLS] = { JP_YEN, JP_PIPE }, /* ] and } -> \ and | */
23 [KC_NUHS] = { KC_NUHS, S(KC_NUHS) }, /* (no assign) */ 41 [KC_NUHS] = { JP_YEN, JP_PIPE }, /* ] and } -> \ and | */
24 [KC_SCLN] = { KC_SCLN, KC_QUOT }, /* ; and + -> ; and : */ 42 [KC_SCLN] = { JP_SCLN, JP_COLN }, /* ; and + -> ; and : */
25 [KC_QUOT] = { KC_AMPR, KC_AT }, /* : and * -> ' and " */ 43 [KC_QUOT] = { JP_QUOT, JP_DQT }, /* : and * -> ' and " */
26 [KC_GRV] = { KC_LCBR, KC_PLUS }, /* (no assign) -> ` and ~ */ 44 [KC_GRV] = { JP_GRV, JP_TILD }, /* Han/Zen -> ` and ~ */
27 [KC_COMM] = { KC_COMM, KC_LT }, /* , and < -> , and < */ 45 [KC_COMM] = { JP_COMM, JP_LT }, /* , and < -> , and < */
28 [KC_DOT] = { KC_DOT, KC_GT }, /* . and > -> . and > */ 46 [KC_DOT] = { JP_DOT, JP_GT }, /* . and > -> . and > */
29 [KC_SLSH] = { KC_SLSH, KC_QUES }, /* / and ? -> / and ? */ 47 [KC_SLSH] = { JP_SLSH, JP_QUES }, /* / and ? -> / and ? */
30}; 48};
31 49// clang-format on
32#endif
diff --git a/keyboards/hhkb/ansi/keymaps/shela/readme.md b/keyboards/hhkb/ansi/keymaps/shela/readme.md
index 5a06a8363..ad0b627cb 100644
--- a/keyboards/hhkb/ansi/keymaps/shela/readme.md
+++ b/keyboards/hhkb/ansi/keymaps/shela/readme.md
@@ -1,14 +1,68 @@
1# Shela's HHKB Layout 1# Shela's keymap for HHKB Pro 2 US Layout with Alternate Controller
2 2
3Layer 0: US Layout 3## Layers
4Layer 1: Pseudo US Layout
5Layer 2: Dvorak Layout
6Layer 3: Mouse
7Layer 4: Tenkey
8Layer 5: HHKB Fn Key
9Layer 6: SpaceFN
10 4
11## Pseudo US Layout 5Layer 1: Qwerty Layer
6Layer 2: Dvorak Layer
7Layer 3: Colemak Layer
8Layer 4: Pseudo US Layer
9Layer 5: Tenkey Layer
10Layer 6: Mouse Layer
11Layer 7: HHKB Fn Layer
12Layer 8: SpaceFN Layer
12 13
13On japanese Windows, HHKB Professional 2 US layout model recognized wrongly as JIS layout without changing OS settings. 14### Qwerty/Dvorak/Colemak Layer
14But, you can use HHKB like a US layout keyboard as it is. 15
16Basic keymap layer for each keyboard layout.
17
18### Pseudo US Layer
19
20A layer that can be used with the same physical layout as the previously activated basic (Qwerty/Dvorak/Colemak) keymap layer, with the keyboard still configured as a Japanese keyboard on the OS.
21
22This is useful when using virtual environments and remote desktops, because you can use Japanese Windows with the same keyboard without changing the OS keyboard settings. Also, when using the keyboard as a US keyboard on Windows OS, all keys existing only on Japanese keyboards are ignored and it is not possible to assign these keys to the desired function of any application. You can avoid such problems.
23
24### Tenkey/Mouse Layer
25
26Tenkey (numeric keypad) and mouse layers. For the Tenkey to work, Numlock must be turned on in the OS.
27
28### HHKB Fn Layer
29
30A layer that is equivalent to Fn key of Happy Hacking Keyboard. There are also some layer switching keys and special function keys.
31
32### SpaceFN Layer
33
34Customized [SpaceFN](https://geekhack.org/index.php?topic=51069.0) layer. There are left-hand and right-hand Arrows/Home/End/PageUp/PageDown keys. Frequently used keys in HHKB Fn layer are configured to this layer and can be used as an alternative layer to the HHKB Fn layer.
35
36## Special function keycodes
37
38### Pseudo US keycode
39
40A special keycode that implements Pseudo US Layout.
41
42### Mac mode keycode
43
44A special keycode that toggles Mac mode. When Mac mode is enabled, the keymap of the Left Inner/Outer and Right Inner/Outer keys are changed for macOS. See _Left Inner/Outer, Right Inner/Outer keys_ for details.
45
46### Left Inner/Outer, Right Inner/Outer keycodes
47
48If you tap a Mod-Tap key and another key within the time specified by TAPPING_TERM, QMK interprets these keys as if they were pressed at the same time even if they were not pressed simultaneously. Therefore, for fast typists, Mod-Tap can accidentally send a keycode with modifier. These special keycodes allow you to work around this issue and change the keymap in Mac mode.
49
50These keys work as follows:
51
52Mac mode: Disabled
53
54| Key | Keycode | Tap | Hold |
55| ----------- | ------- | ------- | ------- |
56| Left Inner | L_INNER | KC_MHEN | KC_LALT |
57| Left Outer | L_OUTER | KC_LGUI | KC_LGUI |
58| Right Inner | R_INNER | KC_KANA | KC_RALT |
59| Right Outer | R_OUTER | KC_RGUI | KC_RGUI |
60
61Mac mode: Enabled
62
63| Key | Keycode | Tap | Hold |
64| ----------- | ------- | -------- | ------- |
65| Left Inner | L_INNER | KC_LANG2 | KC_LCMD |
66| Left Outer | L_OUTER | KC_LOPT | KC_LOPT |
67| Right Inner | R_INNER | KC_LANG1 | KC_RCMD |
68| Right Outer | R_OUTER | KC_ROPT | KC_ROPT |
diff --git a/keyboards/hhkb/ansi/keymaps/shela/rules.mk b/keyboards/hhkb/ansi/keymaps/shela/rules.mk
index d0586bda6..84f6395a4 100644
--- a/keyboards/hhkb/ansi/keymaps/shela/rules.mk
+++ b/keyboards/hhkb/ansi/keymaps/shela/rules.mk
@@ -1 +1,3 @@
1SRC += action_pseudo_lut.c 1DYNAMIC_MACRO_ENABLE = yes
2
3SRC += action_pseudo.c