aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrupa <rdeadwyler@ns1.com>2020-11-10 00:04:46 -0500
committerGitHub <noreply@github.com>2020-11-10 16:04:46 +1100
commita9f65b760a49744b13d822ab359876a52779bd9e (patch)
treef5e64f0d55df4f170e05f5f9d26218388102e628
parent53f11668a3399ff1bdf82902a7717832831219bf (diff)
downloadqmk_firmware-a9f65b760a49744b13d822ab359876a52779bd9e.tar.gz
qmk_firmware-a9f65b760a49744b13d822ab359876a52779bd9e.zip
userspace and keymap changes for rupa (#10489)
* userspace and keymap changes for rupa * remove layout wrappers and blocker rows from wrappers handle this in keymaps for now
-rw-r--r--keyboards/tada68/keymaps/rupa/config.h7
-rwxr-xr-xkeyboards/tada68/keymaps/rupa/keymap.c71
-rwxr-xr-xkeyboards/tada68/keymaps/rupa/readme.md8
-rw-r--r--keyboards/tada68/keymaps/rupa/rules.mk1
-rw-r--r--users/rupa/config.h3
-rw-r--r--[-rwxr-xr-x]users/rupa/process_records.c118
-rw-r--r--[-rwxr-xr-x]users/rupa/process_records.h0
-rw-r--r--users/rupa/readme.md7
-rw-r--r--users/rupa/rules.mk2
-rw-r--r--[-rwxr-xr-x]users/rupa/rupa.c43
-rw-r--r--[-rwxr-xr-x]users/rupa/rupa.h50
-rw-r--r--[-rwxr-xr-x]users/rupa/unicode.c167
-rw-r--r--[-rwxr-xr-x]users/rupa/unicode.h52
-rw-r--r--users/rupa/wrappers.h122
14 files changed, 519 insertions, 132 deletions
diff --git a/keyboards/tada68/keymaps/rupa/config.h b/keyboards/tada68/keymaps/rupa/config.h
index ddbf0ab66..e1a6eb1a2 100644
--- a/keyboards/tada68/keymaps/rupa/config.h
+++ b/keyboards/tada68/keymaps/rupa/config.h
@@ -1,10 +1,3 @@
1#pragma once 1#pragma once
2 2
3#define GRAVE_ESC_ALT_OVERRIDE 3#define GRAVE_ESC_ALT_OVERRIDE
4
5/* disable features */
6//#define NO_ACTION_LAYER
7//#define NO_ACTION_TAPPING
8//#define NO_ACTION_ONESHOT
9#define NO_ACTION_MACRO
10#define NO_ACTION_FUNCTION
diff --git a/keyboards/tada68/keymaps/rupa/keymap.c b/keyboards/tada68/keymaps/rupa/keymap.c
index 3a8a55056..ce95673af 100755
--- a/keyboards/tada68/keymaps/rupa/keymap.c
+++ b/keyboards/tada68/keymaps/rupa/keymap.c
@@ -1,45 +1,38 @@
1#include "rupa.h" 1#include "rupa.h"
2 2
3#define LAYOUT_65_ansi_wrapper(...) LAYOUT_65_ansi(__VA_ARGS__)
4
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 5const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4 /* Keymap _QWERTY: (Base Layer) Default Layer 6 [_QWERTY] = LAYOUT_65_ansi_wrapper(
5 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐ 7 ____65_QWERTY______________ROW1,
6 * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│~ `│ 8 ____65_QWERTY______________ROW2,
7 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ 9 ____65_QWERTY______________ROW3,
8 * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │Del│ 10 ____65_QWERTY______________ROW4,
9 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ 11 ____65_QWERTY______________ROW5
10 * │ Fn │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgU│
11 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
12 * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │PgD│
13 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
14 * │Ctrl│Alt │Gui │ Space │Fn │Alt│Ctl│ ← │ ↓ │ → │
15 * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
16 */
17 [_QWERTY] = LAYOUT_65_ansi(
18 KC_GESC, 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_BSPC, KC_GRV,
19 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, KC_DEL,
20 RAISE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
21 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
22 KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, RAISE, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
23 ), 12 ),
24 13 [_RAISE] = LAYOUT_65_ansi_wrapper(
25 /* Keymap _RAISE: Function Layer 14 ____65_RAISE_______________ROW1,
26 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐ 15 ____65_RAISE_______________ROW2,
27 * │LOD│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Del │Hme│ 16 ____65_RAISE_______________ROW3,
28 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ 17 ____65_RAISE_______________ROW4,
29 * │VSN│U_s│U_f│U_m│ │ │uni│ │ ॐ │ │♩ ♪│♫ ♬│★ ☆ │Ins│ 18 ____65_RAISE_______________ROW5
30 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ 19 ),
31 * │ │ │ │ │ │ │ │ │ │ │ │ │ ✓ │End│ 20 [_LOWER] = LAYOUT_65_ansi_wrapper(
32 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ 21 ____65_LOWER_______________ROW1,
33 * RShift │ ⸮ │Rup│Brt│Bls│Blt│ │Mut│V- │V+ │‽ ☭│ McL│M↑ │McR 22 ____65_LOWER_______________ROW2,
34 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤ 23 ____65_LOWER_______________ROW3,
35 * │RCtl│RAlt│RGui│ │ │ │CAP│M← │M↓ │M→ │ 24 ____65_LOWER_______________ROW4,
36 * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘ 25 ____65_LOWER_______________ROW5
37 */ 26 ),
38 [_RAISE] = LAYOUT_65_ansi( 27 [_ADJUST] = LAYOUT_65_ansi_wrapper(
39 LOD, 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_DEL, KC_HOME, 28 ____65_ADJUST______________ROW1,
40 _______, VRSN, U_SCRPT, U_FRACT, U_MONOS, _______, _______, UC_MOD, _______, X(OM), _______, XP(M4,M8), XP(M8B,M16), XP(STB, STW), KC_INS, 29 ____65_ADJUST___________BL_ROW2,
41 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, X(CHEK), KC_END, 30 ____65_ADJUST______________ROW3,
42 OS_RSFT, X(IRNY), RUPA, BL_BRTG, BL_STEP, BL_TOGG, _______, KC_MUTE, KC_VOLD, KC_VOLU, XP(IBNG,HAS), KC_BTN1, KC_MS_U, KC_BTN2, 31 ____65_ADJUST______________ROW4,
43 OS_RCTL, OS_RALT, OS_RGUI, _______, _______, _______, KC_CAPS, KC_MS_L, KC_MS_D, KC_MS_R 32 ____65_ADJUST______________ROW5
44 ), 33 ),
45}; 34};
35
36layer_state_t layer_state_set_user(layer_state_t state) {
37 return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
38}
diff --git a/keyboards/tada68/keymaps/rupa/readme.md b/keyboards/tada68/keymaps/rupa/readme.md
index 77629131a..eea966fdb 100755
--- a/keyboards/tada68/keymaps/rupa/readme.md
+++ b/keyboards/tada68/keymaps/rupa/readme.md
@@ -2,9 +2,7 @@
2 2
3i've swapped the lufa-ms bootloader for caterina 3i've swapped the lufa-ms bootloader for caterina
4 4
5most everything is in my userspace dir 5most everything is in my [userspace](../../../../users/rupa/)
6
7console mode is on, and there's barely any room left!
8 6
9* win/alt -> alt/cmd 7* win/alt -> alt/cmd
10* alt/fn -> fn/alt 8* alt/fn -> fn/alt
@@ -16,6 +14,6 @@ fn layer:
16 * rotate mute/vol 14 * rotate mute/vol
17 * backlight -> breathing, step, toggle 15 * backlight -> breathing, step, toggle
18 * swap home and ins 16 * swap home and ins
19 * unicode chars sprinkled around 17 * unicode chars and strings sprinkled around
20 * script mode! 18 * script modes!
21 * (one-shot) right versions of shift/ctl/alt/gui (not working quite right yet) 19 * (one-shot) right versions of shift/ctl/alt/gui (not working quite right yet)
diff --git a/keyboards/tada68/keymaps/rupa/rules.mk b/keyboards/tada68/keymaps/rupa/rules.mk
index df6f5674b..1777fc10a 100644
--- a/keyboards/tada68/keymaps/rupa/rules.mk
+++ b/keyboards/tada68/keymaps/rupa/rules.mk
@@ -1,4 +1,3 @@
1BOOTLOADER = caterina 1BOOTLOADER = caterina
2 2
3UNICODEMAP_ENABLE = yes
4CONSOLE_ENABLE = yes 3CONSOLE_ENABLE = yes
diff --git a/users/rupa/config.h b/users/rupa/config.h
index 902405204..723d9b3b5 100644
--- a/users/rupa/config.h
+++ b/users/rupa/config.h
@@ -5,4 +5,7 @@
5#define ONESHOT_TAP_TOGGLE 5 5#define ONESHOT_TAP_TOGGLE 5
6#define ONESHOT_TIMEOUT 5000 6#define ONESHOT_TIMEOUT 5000
7 7
8#undef TAP_CODE_DELAY
8#define TAP_CODE_DELAY 5 //DEFAULT: 100 9#define TAP_CODE_DELAY 5 //DEFAULT: 100
10
11//#define UNICODE_SCRIPT_MODE_ENABLE
diff --git a/users/rupa/process_records.c b/users/rupa/process_records.c
index 2d7231010..2d23e3401 100755..100644
--- a/users/rupa/process_records.c
+++ b/users/rupa/process_records.c
@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
17 17
18#include "rupa.h" 18#include "rupa.h"
19 19
20font_t *translator = NULL; 20uint16_t processed_keycode;
21 21
22__attribute__((weak)) 22__attribute__((weak))
23bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { 23bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
@@ -25,47 +25,93 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
25} 25}
26 26
27bool process_record_user(uint16_t keycode, keyrecord_t *record) { 27bool process_record_user(uint16_t keycode, keyrecord_t *record) {
28 bool is_shifted = get_mods()&MOD_MASK_SHIFT; 28 if (record->event.pressed) {
29 bool is_pressed = record->event.pressed;
30 29
31 switch(keycode) { 30 processed_keycode = keycode;
32 case VRSN: 31 // mask out mod taps
33 if (is_pressed) { 32 if (
33 (keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) ||
34 (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)
35 ) {
36 processed_keycode &= 0xFF;
37 }
38
39 bool is_shifted = (get_mods() | get_oneshot_mods() | get_weak_mods()) & MOD_MASK_SHIFT;
40 switch(processed_keycode) {
41 case VRSN:
34 send_string_with_delay_P(PSTR( 42 send_string_with_delay_P(PSTR(
35 "# " QMK_KEYBOARD "/" QMK_KEYMAP ":" QMK_VERSION " " QMK_BUILDDATE "\n" 43 "# " QMK_KEYBOARD "/" QMK_KEYMAP ":" QMK_VERSION " " QMK_BUILDDATE "\n"
36 ), TAP_CODE_DELAY); 44 ), TAP_CODE_DELAY);
37 } 45 return false;
38 return false;
39 46
40 case LOD: 47 case BUGS:
41 case RUPA: 48 return u_xp(is_shifted, "ᙙᙖ", "ଳ");
42 if (is_pressed) { 49 case CATS:
43 if (keycode == LOD) { 50 return u_xp(is_shifted, "ⓛ ᆽ ⓛ ", "ㅇㅅㅇ");
44 send_unicode_string((is_shifted ? "¯\\_(ツ)_/¯" : "ಠ_ಠ")); 51 case DANCE:
45 } else if (keycode == RUPA) { 52 return u_x(dance(is_shifted));
46 send_unicode_string((is_shifted ? "Śrīrūpa" : "rūpa")); 53 case DICE:
47 } 54 return u_x(d6());
48 } 55 case DOMO:
49 return false; 56 return u_xp(is_shifted, "(シ_ _)シ", "m(_ _)m");
57 case FART:
58 return u_x("⊥ʶ∀Ⅎ");
59 case FLIP:
60 return u_x(flip(is_shifted));
61 case HUGS:
62 return u_xp(is_shifted, "(づ ̄ ³ ̄)づ", "(っಠ‿ಠ)っ");
63 case JOY:
64 return u_x(joy(is_shifted));
65 case RNDM:
66 return false;
67 case KISS:
68 return u_xp(is_shifted, "꒒ ০ ⌵ ୧ ♡", "( ˘ ³˘)♥");
69 case LOD:
70 return u_xp(is_shifted, "( ͡ಠ ʖ̯ ͡ಠ)", "ಠ_ಠ");
71 case MUSIC:
72 return u_xp(is_shifted, "(˳˘ ɜ˘)˳ ♬ ♪♫", "(´▽`)ノ♫");
73 case RUPA:
74 return u_xp(is_shifted, "Śrīrūpa", "rūpa");
75 case SHRUG:
76 return u_xp(is_shifted, "⋌ ༼ •̀ ⌂ •́ ༽⋋", "¯\\_(ツ)_/¯");
77 case TADA:
78 return u_xp(is_shifted, "☆ *・゜゚・*(^O^)/*・゜゚・*☆", "\\(゜ロ\\)Ξ(//ロ゜)//");
79 case WAT:
80 return u_xp(is_shifted, "༼ ຶཽཀ ຶཽ༽", "ヽ༼⊙_⊙༽ノ");
81 case YUNO:
82 return u_xp(is_shifted, "o(^^o)", "щ(゜ロ゜щ)");
83 case ZALGO:
84 set_combined_mode(CM_ZALGO);
85 break;
86 case ZZZZZ:
87 cycle_combined_mode();
88 break;
50 89
51 // script modes 90#if defined(UNICODE_SCRIPT_MODE_ENABLE)
52 case U_FRACT: 91 // script modes
53 case U_MONOS: 92 case U_FRACT:
54 case U_SCRPT: 93 return set_script_mode(F_FRACT);
55 if (is_pressed) { 94 case U_ITALI:
56 if (keycode == U_SCRPT) { 95 return set_script_mode(F_ITALI);
57 translator = (translator == &script_bold ? NULL : &script_bold); 96 case U_MONOS:
58 } else if (keycode == U_FRACT) { 97 return set_script_mode(F_MONOS);
59 translator = (translator == &fraktu_bold ? NULL : &fraktu_bold); 98 case U_NORML:
60 } else if (keycode == U_MONOS) { 99 return set_script_mode(F_NORML);
61 translator = (translator == &monosp_bold ? NULL : &monosp_bold); 100 case U_SANSI:
62 } 101 return set_script_mode(F_SANSI);
63 } 102 case U_SANSN:
64 return true; 103 return set_script_mode(F_SANSN);
104 case U_SCRPT:
105 return set_script_mode(F_SCRPT);
65 106
66 default: 107 default:
67 if (is_pressed && translator != NULL) { 108 if (get_script_mode() != NULL) {
68 return script_mode_translate(translator, is_shifted, keycode); 109 return script_mode_translate(is_shifted, processed_keycode);
110 }
111 if (combined_mode != CM_NULL && combined_text(processed_keycode)) {
112 return false;
113 }
114#endif
69 } 115 }
70 } 116 }
71 return process_record_keymap(keycode, record); 117 return process_record_keymap(keycode, record);
diff --git a/users/rupa/process_records.h b/users/rupa/process_records.h
index 7c7fe491b..7c7fe491b 100755..100644
--- a/users/rupa/process_records.h
+++ b/users/rupa/process_records.h
diff --git a/users/rupa/readme.md b/users/rupa/readme.md
new file mode 100644
index 000000000..b6c2dd1f7
--- /dev/null
+++ b/users/rupa/readme.md
@@ -0,0 +1,7 @@
1# rupa's userspace
2
3* rupa.c has some unicode script mode stuff
4* unicode.c has my unicode map
5* process_record.c has my keycode handler
6
7my keymap is in [keyboards/tada68](../../keyboards/tada68/keymaps/rupa/)
diff --git a/users/rupa/rules.mk b/users/rupa/rules.mk
index c4f147d91..ed33e85f3 100644
--- a/users/rupa/rules.mk
+++ b/users/rupa/rules.mk
@@ -1,3 +1,5 @@
1UNICODEMAP_ENABLE = yes
2LTO_ENABLE = yes
1SRC += rupa.c \ 3SRC += rupa.c \
2 process_records.c \ 4 process_records.c \
3 unicode.c 5 unicode.c
diff --git a/users/rupa/rupa.c b/users/rupa/rupa.c
index 60fec3caf..85de5c16f 100755..100644
--- a/users/rupa/rupa.c
+++ b/users/rupa/rupa.c
@@ -18,14 +18,46 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
18#include <print.h> 18#include <print.h>
19#include "rupa.h" 19#include "rupa.h"
20 20
21#if defined(UNICODE_SCRIPT_MODE_ENABLE)
22const font_t * translator = NULL;
23
21// https://en.wikipedia.org/wiki/Mathematical_Alphanumeric_Symbols 24// https://en.wikipedia.org/wiki/Mathematical_Alphanumeric_Symbols
22font_t script_bold = {0x1D4D0, 0x1D4EA, 0x1D7CE}; // with bold numbers 25static const font_t *fonts_map[] = {
23font_t fraktu_bold = {0x1D56C, 0x1D586, 0x1D7D8}; // with doublestruck numbers 26 [F_FRACT] = &(font_t){0x1D56C, 0x1D586, 0x1D7D8}, // fraktur/doublestruck numbers
24font_t monosp_bold = {0x1D670, 0x1D68A, 0x1D7F6}; 27 [F_ITALI] = &(font_t){0x1D468, 0x1D482, 0x1D7CE}, // italic/bold numbers
28 [F_MONOS] = &(font_t){0x1D670, 0x1D68A, 0x1D7F6}, // monospace
29 [F_NORML] = &(font_t){0x1D400, 0x1D41A, 0x00030}, // normal!
30 [F_SANSI] = &(font_t){0x1D63C, 0x1D656, 0x1D7EC}, // sans 1talic/sans bold numbers
31 [F_SANSN] = &(font_t){0x1D5D4, 0x1D5EE, 0x1D7E2}, // sans normal/sans numbers
32 [F_SCRPT] = &(font_t){0x1D4D0, 0x1D4EA, 0x1D7CE}, // script/bold numbers
33};
34
35/*
36font_t doublestruc = {0x1D538, 0x1D552, 0x1D7D8};
37uint_32 []snowflakes = {
38 // doublestruck
39 0x1D53B, // C
40 0x1D540, // H
41 0x1D546, // N
42 0x1D548, // P
43 0x1D549, // Q
44 0x1D54A, // R
45 0x1D552, // Z
46};
47*/
48
49const font_t *get_script_mode(void) {
50 return translator;
51}
52bool set_script_mode(int fc) {
53 translator = translator == fonts_map[fc] ? NULL : fonts_map[fc];
54 dprintf("set_script_mode: %u %b\n", fc, translator != NULL);
55 return true;
56}
25 57
26// Maps A-Z, a-z, and 0-9 to other unicode ranges. We also map space to EN 58// Maps A-Z, a-z, and 0-9 to other unicode ranges. We also map space to EN
27// SPACE for some reason :) 59// SPACE for some reason :)
28uint32_t map_alnum(font_t *f, bool is_shifted, uint32_t keycode) { 60uint32_t map_alnum(const font_t *f, bool is_shifted, uint32_t keycode) {
29 switch (keycode) { 61 switch (keycode) {
30 case KC_SPACE: 62 case KC_SPACE:
31 return (is_shifted ? 0 : 0x2002); // EN SPACE 63 return (is_shifted ? 0 : 0x2002); // EN SPACE
@@ -40,10 +72,11 @@ uint32_t map_alnum(font_t *f, bool is_shifted, uint32_t keycode) {
40 } 72 }
41} 73}
42 74
43bool script_mode_translate(font_t *translator, bool is_shifted, uint32_t keycode) { 75bool script_mode_translate(bool is_shifted, uint32_t keycode) {
44 uint32_t translated = map_alnum(translator, is_shifted, keycode); 76 uint32_t translated = map_alnum(translator, is_shifted, keycode);
45 if (translated == 0) return true; 77 if (translated == 0) return true;
46 dprintf("script_mode_translate: %u => %d\n", keycode, translated); 78 dprintf("script_mode_translate: %u => %d\n", keycode, translated);
47 register_unicode(translated); 79 register_unicode(translated);
48 return false; 80 return false;
49} 81}
82#endif
diff --git a/users/rupa/rupa.h b/users/rupa/rupa.h
index 9be3a2d62..cfe873ffc 100755..100644
--- a/users/rupa/rupa.h
+++ b/users/rupa/rupa.h
@@ -20,19 +20,55 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
20#include "version.h" 20#include "version.h"
21#include "process_records.h" 21#include "process_records.h"
22#include "unicode.h" 22#include "unicode.h"
23#include "wrappers.h"
23 24
24enum userspace_layers { 25enum userspace_layers {
25 _QWERTY = 0, 26 _QWERTY = 0,
27 _LOWER,
26 _RAISE, 28 _RAISE,
29 _ADJUST
27}; 30};
28 31
29enum userspace_custom_keycodes { 32enum userspace_custom_keycodes {
30 VRSN = SAFE_RANGE, 33 VRSN = SAFE_RANGE,
34 BUGS,
35 CATS,
36 DANCE,
37 DICE,
38 DOMO,
39 FART,
40 FLIP,
41 HUGS,
42 JOY,
43 KISS,
31 LOD, 44 LOD,
45 MUSIC,
46 RNDM,
32 RUPA, 47 RUPA,
48 SHRUG,
49 TADA,
33 U_FRACT, 50 U_FRACT,
51 U_ITALI,
34 U_MONOS, 52 U_MONOS,
53 U_NORML,
54 U_SANSI,
55 U_SANSN,
35 U_SCRPT, 56 U_SCRPT,
57 WAT,
58 YUNO,
59 ZALGO,
60 ZZZZZ,
61 NEXT_SAFE_RANGE
62};
63
64enum userspace_font_choices {
65 F_FRACT = 0,
66 F_ITALI,
67 F_MONOS,
68 F_NORML,
69 F_SANSI,
70 F_SANSN,
71 F_SCRPT
36}; 72};
37 73
38typedef struct font_t { 74typedef struct font_t {
@@ -41,14 +77,6 @@ typedef struct font_t {
41 uint32_t zero_glyph; 77 uint32_t zero_glyph;
42} font_t; 78} font_t;
43 79
44font_t fraktu_bold; 80const font_t* get_script_mode(void);
45font_t monosp_bold; 81bool set_script_mode(int fc);
46font_t script_bold; 82bool script_mode_translate(bool is_shifted, uint32_t keycode);
47
48bool script_mode_translate(font_t *translator, bool is_shifted, uint32_t keycode);
49
50#define RAISE MO(_RAISE)
51#define OS_RGUI OSM(MOD_RGUI)
52#define OS_RALT OSM(MOD_RALT)
53#define OS_RCTL OSM(MOD_RCTL)
54#define OS_RSFT OSM(MOD_RSFT)
diff --git a/users/rupa/unicode.c b/users/rupa/unicode.c
index 89a0d4766..2302a9555 100755..100644
--- a/users/rupa/unicode.c
+++ b/users/rupa/unicode.c
@@ -17,26 +17,155 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
17 17
18#include "unicode.h" 18#include "unicode.h"
19 19
20combined_mode_t combined_mode = CM_NULL;
21bool _seeded = false;
22
20#if defined(UNICODEMAP_ENABLE) 23#if defined(UNICODEMAP_ENABLE)
21const uint32_t PROGMEM unicode_map[] = { 24const uint32_t PROGMEM unicode_map[] = {
22 [CHEK] = 0x2713, // ✓ 25 [CCIR] = 0x20DD, // COMBINING CIRCLE ⃝
23 /* 26 [CENT] = 0x00A2, // ¢
24 [DI1] = 0x2680, // ⚀ 27 [CHEK] = 0x2713, // ✓
25 [DI2] = 0x2681, // ⚁ 28 [CKEY] = 0x20E3, // COMBINING KEYCAP ⃣
26 [DI3] = 0x2682, // ⚂ 29 [CUI] = 0x26A0, // ⚠
27 [DI4] = 0x2683, // ⚃ 30 [ECKS] = 0x2716, // ✖
28 [DI5] = 0x2684, // ⚄ 31 [EFF] = 0x017F, // ſ
29 [DI6] = 0x2685, // ⚅ 32 [HAS] = 0x262D, // ☭
30 */ 33 [HUN] = 0x1F4AF, // 💯
31 [HAS] = 0x262D, // ☭ 34 [IBNG] = 0x203D, // ‽
32 [IBNG] = 0x203D, // ‽ 35 [IRNY] = 0x2E2E, // ⸮
33 [IRNY] = 0x2E2E, // ⸮ 36 [LALL] = 0x2200, // ∀
34 [M4] = 0x2669, // ♩ 37 [LELM] = 0x2208, // ∈
35 [M8] = 0x266A, // ♪ 38 [LEXI] = 0x2203, // ∃
36 [M8B] = 0x266B, // ♫ 39 [LPRO] = 0x22A2, // ⊢
37 [M16] = 0x266C, // ♬ 40 [M4] = 0x2669, // ♩
38 [OM] = 0x0950, // ॐ 41 [M8] = 0x266A, // ♪
39 [STB] = 0x2605, // ★ 42 [M8B] = 0x266B, // ♫
40 [STW] = 0x2606, // ☆ 43 [M16] = 0x266C, // ♬
44 [NEG] = 0x20E0, // COMBINING NO ⃠
45 [NOPE] = 0x1F6AB, // 🚫
46 [NUM] = 0x2116, // №
47 [OM] = 0x0950, // ॐ
48 [SMB] = 0x263A, // ☻
49 [SMW] = 0x263B, // ☺
50 [STB] = 0x2605, // ★
51 [STOP] = 0x26D4, // ⛔
52 [STW] = 0x2606, // ☆
41}; 53};
42#endif 54#endif
55
56const char *d6_map[] = {
57 "⚀", "⚁", "⚂", "⚃", "⚄", "⚅"
58};
59const char *dance_map[] = {
60 "〜( ̄▽ ̄〜)",
61 "(〜 ̄▽ ̄)〜"
62};
63const char *dance_more_map[] = {
64 "ƪ(˘⌣˘)┐",
65 "┌(˘⌣˘)ʃ"
66};
67const char *flip_map[] = {
68 "(╯°□°)╯︵ ┻━━┻",
69 "(ノ-_-)ノ・・ ┻━━┻",
70 "(ノꐦ⊙曲ఠ)ノ彡┻━┻"
71};
72const char *flip_back_map[] = {
73 "┬──┬◡ノ(° -°ノ)",
74 "┬──┬ノ( ゜-゜ノ)",
75 "┬──┬ノ(ಠ_ಠノ)"
76};
77const char *joy_map[] = {
78 "ᕕ( ᐛ )ᕗ ",
79 "٩(ˊᗜˋ*)و",
80 "٩( ᐛ )و"
81};
82const char *joy_harder_map[] = {
83 "\\\ ٩( ᐛ )و //",
84 "✧*。٩(ˊᗜˋ*)و✧*。"
85};
86
87const char *choice(const char *choices[], int size) {
88 if (_seeded == false) {
89 srand(timer_read32());
90 dprintf("_seeded the roll\n");
91 _seeded = true;
92 }
93 return choices[rand() % size];
94}
95
96const char *d6(void) {
97 return choice(d6_map, 6);
98}
99const char *dance(bool more) {
100 if (more) {
101 return choice(dance_more_map, 2);
102 }
103 return choice(dance_map, 2);
104}
105const char *flip(bool flip_back) {
106 if (flip_back) {
107 return choice(flip_back_map, 3);
108 }
109 return choice(flip_map, 3);
110}
111const char *joy(bool harder) {
112 if (harder) {
113 return choice(joy_harder_map, 2);
114 }
115 return choice(joy_map, 3);
116}
117
118bool u_x(const char *text) {
119 send_unicode_string(text);
120 return false;
121};
122bool u_xp(bool is_shifted, const char *shifted, const char *plain) {
123 send_unicode_string(is_shifted ? shifted : plain);
124 return false;
125};
126
127void zalgo(void) {
128 int number = (rand() % (8 + 1 - 2)) + 2;
129 unsigned int index;
130 for (index=0; index<number; index++) {
131 uint16_t hex = (rand() % (0x036F + 1 - 0x0300)) + 0x0300;
132 register_hex(hex);
133 }
134}
135
136bool combined_text(uint16_t keycode) {
137 if (keycode < KC_A || (keycode > KC_0 && keycode < KC_MINUS) || keycode > KC_SLASH) {
138 return false;
139 }
140 tap_code(keycode);
141 unicode_input_start();
142 switch (combined_mode) {
143 case CM_CIRCLE:
144 register_hex(0x20DD);
145 break;
146 case CM_NO:
147 register_hex(0x20E0);
148 break;
149 case CM_KEYCAP:
150 register_hex(0x20E3);
151 break;
152 case CM_ZALGO:
153 zalgo();
154 break;
155 default:
156 break;
157 }
158 unicode_input_finish();
159 return true;
160}
161
162void cycle_combined_mode(void) {
163 if (combined_mode++ >= CM_MAX - 1) {
164 combined_mode = CM_NULL;
165 }
166}
167
168combined_mode_t set_combined_mode(combined_mode_t mode) {
169 combined_mode = combined_mode == mode ? CM_NULL : mode;
170 return combined_mode;
171}
diff --git a/users/rupa/unicode.h b/users/rupa/unicode.h
index 0c067bd91..92303b13f 100755..100644
--- a/users/rupa/unicode.h
+++ b/users/rupa/unicode.h
@@ -20,24 +20,58 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
20 20
21#if defined(UNICODEMAP_ENABLE) 21#if defined(UNICODEMAP_ENABLE)
22enum unicode_names { 22enum unicode_names {
23 CHEK, 23 CCIR, // COMBINING ⃝
24 /* 24 CENT, // ¢
25 DI1, // ⚀ 25 CHEK, // ✓
26 DI2, // ⚁ 26 CKEY, // COMBINING ⃣
27 DI3, // ⚂ 27 CUI, // ⚠
28 DI4, // ⚃ 28 ECKS, // ✖
29 DI5, // ⚄ 29 EFF, // ſ
30 DI6, // ⚅
31 */
32 HAS, // ☭ 30 HAS, // ☭
31 HUN, // 💯
33 IBNG, // ‽ 32 IBNG, // ‽
34 IRNY, // ⸮ 33 IRNY, // ⸮
34 LALL, // ∀
35 LELM, // ∈
36 LEXI, // ∃
37 LPRO, // ⊢
35 M4, // ♩ 38 M4, // ♩
36 M8, // ♪ 39 M8, // ♪
37 M8B, // ♫ 40 M8B, // ♫
38 M16, // ♬ 41 M16, // ♬
42 NEG, // COMBINING ⃠
43 NOPE, // 🚫
44 NUM, // №
39 OM, // ॐ 45 OM, // ॐ
46 SMB, // ☻
47 SMW, // ☺
40 STB, // ★ 48 STB, // ★
49 STOP, // ⛔
41 STW, // ☆ 50 STW, // ☆
42}; 51};
43#endif 52#endif
53
54typedef enum combined_modes {
55 CM_NULL = 0,
56 CM_CIRCLE,
57 CM_NO,
58 CM_KEYCAP,
59 CM_ZALGO,
60 CM_MAX
61} combined_mode_t;
62
63combined_mode_t combined_mode;
64
65// random choices
66const char * d6(void);
67const char * dance(bool more);
68const char * flip(bool back);
69const char * joy(bool harder);
70
71// like X and XP
72bool u_x(const char *text);
73bool u_xp(bool is_shifted, const char * shifted, const char *plain);
74
75bool combined_text(uint16_t keycode);
76void cycle_combined_mode(void);
77combined_mode_t set_combined_mode(combined_mode_t mode);
diff --git a/users/rupa/wrappers.h b/users/rupa/wrappers.h
new file mode 100644
index 000000000..c5cae464b
--- /dev/null
+++ b/users/rupa/wrappers.h
@@ -0,0 +1,122 @@
1/*
2Copyright 2020 rupa <rupa@lrrr.us> @rupa
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19#include "rupa.h"
20
21#define LOWER MO(_LOWER)
22#define RAISE MO(_RAISE)
23#define OS_RGUI OSM(MOD_RGUI)
24#define OS_RALT OSM(MOD_RALT)
25#define OS_RCTL OSM(MOD_RCTL)
26#define OS_RSFT OSM(MOD_RSFT)
27
28#define G_LWR LT(_LOWER, KC_G)
29
30#if defined(UNICODEMAP_ENABLE)
31# define CSHAPES XP(CCIR,CKEY)
32# define CUIDADO XP(CUI,HAS)
33# define NOPENAH XP(NOPE,STOP)
34# define MUSIC_A XP(M4,M8)
35# define MUSIC_B XP(M8B,M16)
36# define SMILE XP(SMB,SMW)
37# define STARS XP(STB,STW)
38# define YEPYEP XP(CHEK,HUN)
39#endif
40
41/* _QWERTY
42 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
43 * │Es~│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│~ `│
44 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
45 * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │Del│
46 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
47 * │RAISE │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgU│
48 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
49 * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │PgD│
50 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
51 * │Ctrl│Alt │Gui │ Space │RAI│LOW│CAP│ ← │ ↓ │ → │
52 * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
53 */
54#define ____65_QWERTY______________ROW1 KC_GESC, 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_BSPC, KC_GRV
55#define ____65_QWERTY______________ROW2 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, KC_DEL
56#define ____65_QWERTY______________ROW3 RAISE, KC_A, KC_S, KC_D, KC_F, G_LWR, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP
57#define ____65_QWERTY______________ROW4 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN
58#define ____65_QWERTY______________ROW5 KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, RAISE, LOWER, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT
59
60/* _RAISE
61 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
62 * │ ` │ ‽ │ ⸮ │ │ ¢ │ │ │ │★ │ │ ☻ │ ⃠ │CSH│ Del │Hme│
63 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
64 * │ │ │WAT│ ∃ │Rup│TAD│YUN│ │ ∈ │ ॐ │ │♩ ♪│♫ ♬│ │Ins│
65 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
66 * │ │ ∀ │ ſ │ ⚂ │FRT│ │HUG│JOY│KSS│LOD│ │NO!│ ✓ 💯 │End│
67 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
68 * │ RShift │⚠ ☭│ ✖ │CAT│BOW│BUG│ № │MUS│DNC│ ⊢ │SHR│ McL│M↑ │McR│
69 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
70 * │RCtl│RAlt│RGui│ FLIP │ │ │ │M← │M↓ │M→ │
71 * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
72 */
73#define ____65_RAISE_______________ROW1 KC_GRV, X(IBNG), X(IRNY), _______, X(CENT), _______, _______, _______, STARS, _______, SMILE, X(NEG), CSHAPES, KC_DEL, KC_HOME
74#define ____65_RAISE_______________ROW2 _______, _______, WAT, X(LEXI), RUPA, TADA, YUNO, _______, X(LELM), X(OM), _______, MUSIC_A, MUSIC_B, _______, KC_INS
75#define ____65_RAISE_______________ROW3 _______, X(LALL), X(EFF), DICE, FART, _______, HUGS, JOY, KISS, LOD, _______, NOPENAH, YEPYEP, KC_END
76#define ____65_RAISE_______________ROW4 OS_RSFT, CUIDADO, X(ECKS), CATS, DOMO, BUGS, X(NUM), MUSIC, DANCE, X(LPRO), SHRUG, KC_BTN1, KC_MS_U, KC_BTN2
77#define ____65_RAISE_______________ROW5 OS_RCTL, OS_RALT, OS_RGUI, FLIP, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
78
79/* _LOWER
80 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
81 * │ │ │ │ │ │ │ │ │ │ │ │ │zzz│ │ │
82 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
83 * │ │u_f│u_i│u_m│u_n│usi│usn│u_s│ │ │PRT│ │ │ │ │
84 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
85 * │ │ │SLK│PAU│ │ │ │ │ │ │ │ │ │ │
86 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
87 * │ │ZAL│ │CAP│VSN│ │NLK│ │ │ │ │ │ │ │
88 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
89 * │ │ │ │ │ │ │ │ ← │ ↓ │ → │
90 * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
91 */
92#define ____65_LOWER_______________ROW1 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ZZZZZ, _______, _______
93#define ____65_LOWER_______________ROW2 _______, U_FRACT, U_ITALI, U_MONOS, U_NORML, U_SANSI, U_SANSN, U_SCRPT, _______, _______, KC_PSCR, _______, _______, _______, _______
94#define ____65_LOWER_______________ROW3 _______, _______, KC_SLCK, KC_PAUS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
95#define ____65_LOWER_______________ROW4 _______, ZALGO , _______, KC_CAPS, VRSN, _______, KC_NLCK, _______, _______, _______, _______, _______, _______, _______
96#define ____65_LOWER_______________ROW5 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
97
98/* _ADJUST
99 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
100 * │ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ │ │
101 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
102 * │ │r x│r m│rh+│rh-│rs+│rs-│rv+│rv-│ra+│ra-│ │ │RESET│ │
103 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
104 * │ │ │ │ │ │ │ │ │ │ │ │ │EEP RSET│ │
105 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
106 * │ │ │ │ │ │ │ │Mut│V- │V+ │ │U MODE│ │ │
107 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
108 * │ │ │ │ │ │ │ │ │ │ │
109 * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
110 */
111#define ____65_ADJUST______________ROW1 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______
112#define ____65_ADJUST______________ROW2 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______
113#define ____65_ADJUST______________ROW3 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, _______
114#define ____65_ADJUST______________ROW4 _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, UC_MOD, _______, _______
115#define ____65_ADJUST______________ROW5 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
116
117#define ____65_ADJUST__________RGB_ROW2 _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, _______, _______, RESET, _______
118#define ____65_ADJUST__________RGB_ROW3 _______, RGB_M_P, RGB_M_B, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, _______
119
120#define ____65_ADJUST___________BL_ROW2 _______, BL_TOGG, BL_BRTG, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______
121
122// clang-format on