diff options
Diffstat (limited to 'users/bocaj/send_unicode.c')
| -rw-r--r-- | users/bocaj/send_unicode.c | 106 | 
1 files changed, 106 insertions, 0 deletions
| diff --git a/users/bocaj/send_unicode.c b/users/bocaj/send_unicode.c new file mode 100644 index 0000000000..b1290f6319 --- /dev/null +++ b/users/bocaj/send_unicode.c @@ -0,0 +1,106 @@ +// Written by konstantin: vomindoraan +#include "send_unicode.h" +#include <ctype.h> +#include <string.h> + +__attribute__((weak)) +void send_unicode_hex_string(const char* str) { +  if (!str) { return; } // Safety net + +  while (*str) { +    // Find the next code point (token) in the string +    for (; *str == ' '; str++); +    size_t n = strcspn(str, " "); // Length of the current token +    char code_point[n+1]; +    strncpy(code_point, str, n); +    code_point[n] = '\0'; // Make sure it's null-terminated + +    // Normalize the code point: make all hex digits lowercase +    for (char *p = code_point; *p; p++) { +      *p = tolower((unsigned char)*p); +    } + +    // Send the code point as a Unicode input string +    unicode_input_start(); +    send_string(code_point); +    unicode_input_finish(); + +    str += n; // Move to the first ' ' (or '\0') after the current token +  } +} + +// (ノಠ痊ಠ)ノ彡┻━┻ +//   send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B"); + +//Old code +// (╯°□°)╯ ︵ ┻━┻ +      #if 0 +      register_code(KC_RSFT); +      tap(KC_9); +      unregister_code(KC_RSFT); +      process_unicode((0x256F | QK_UNICODE), record); // Arm +      process_unicode((0x00B0 | QK_UNICODE), record); // Eye +      process_unicode((0x25A1 | QK_UNICODE), record); // Mouth +      process_unicode((0x00B0 | QK_UNICODE), record); // Eye +      register_code(KC_RSFT); +      tap(KC_0); +      unregister_code(KC_RSFT); +      process_unicode((0x256F | QK_UNICODE), record); // Arm +      tap(KC_SPC); +      process_unicode((0x0361 | QK_UNICODE), record); // Flippy +      tap(KC_SPC); +      process_unicode((0x253B | QK_UNICODE), record); // Table +      process_unicode((0x2501 | QK_UNICODE), record); // Table +      process_unicode((0x253B | QK_UNICODE), record); // Table +      #endif + + +// If you need a good converter: https://r12a.github.io/app-conversion/ +uint8_t saved_mods; + +void unicode_input_start (void) { +  // save current mods +  saved_mods = get_mods(); // Save current mods +  clear_mods(); // Unregister mods to start from a clean state + +  switch(get_unicode_input_mode()) { +  case UC_OSX: +    register_code(KC_LALT); +    break; +  case UC_LNX: +    register_code(KC_LCTL); +    register_code(KC_LSFT); +    register_code(KC_U); +    unregister_code(KC_U); +    unregister_code(KC_LSFT); +    unregister_code(KC_LCTL); +    break; +  case UC_WIN: +    register_code(KC_LALT); +    register_code(KC_PPLS); +    unregister_code(KC_PPLS); +    break; +  case UC_WINC: +    register_code(KC_RALT); +    unregister_code(KC_RALT); +    register_code(KC_U); +    unregister_code(KC_U); +    break; +  } +  wait_ms(UNICODE_TYPE_DELAY); +} + +void unicode_input_finish (void) { +  switch(get_unicode_input_mode()) { +    case UC_OSX: +    case UC_WIN: +      unregister_code(KC_LALT); +      break; +    case UC_LNX: +      register_code(KC_SPC); +      unregister_code(KC_SPC); +      break; +  } + +  set_mods(saved_mods); // Reregister previously set mods +} | 
