Skip to content

Commit

Permalink
process_unicode: Small refactor & linux fix
Browse files Browse the repository at this point in the history
This moves the unicode input start / end sequences into their own
functions, so keymaps and other functionality can build on it too.

At the same time, it changes how the Linux variant works, to match
reality: CTRL+SHIFT must be unregistered too, and we close the thing
with a Space instead.

Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
  • Loading branch information
algernon committed Aug 15, 2016
1 parent bc8976d commit 63e5782
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 31 deletions.
76 changes: 45 additions & 31 deletions quantum/process_keycode/process_unicode.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,40 +18,54 @@ void set_unicode_input_mode(uint8_t os_target)
input_mode = os_target;
}

void unicode_input_start (void) {
switch(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;
}
}

void unicode_input_finish (void) {
switch(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;
}
}

void register_hex(uint16_t hex) {
for(int i = 3; i >= 0; i--) {
uint8_t digit = ((hex >> (i*4)) & 0xF);
register_code(hex_to_keycode(digit));
unregister_code(hex_to_keycode(digit));
}
}

bool process_unicode(uint16_t keycode, keyrecord_t *record) {
if (keycode > QK_UNICODE && record->event.pressed) {
uint16_t unicode = keycode & 0x7FFF;
switch(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);
break;
case UC_WIN:
register_code(KC_LALT);
register_code(KC_PPLS);
unregister_code(KC_PPLS);
break;
}
for(int i = 3; i >= 0; i--) {
uint8_t digit = ((unicode >> (i*4)) & 0xF);
register_code(hex_to_keycode(digit));
unregister_code(hex_to_keycode(digit));
}
switch(input_mode) {
case UC_OSX:
case UC_WIN:
unregister_code(KC_LALT);
break;
case UC_LNX:
unregister_code(KC_LCTL);
unregister_code(KC_LSFT);
break;
}
unicode_input_start();
register_hex(unicode);
unicode_input_finish();
}
return true;
}
3 changes: 3 additions & 0 deletions quantum/process_keycode/process_unicode.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
#define UC_BSD 3

void set_unicode_input_mode(uint8_t os_target);
void unicode_input_start(void);
void unicode_input_finish(void);
void register_hex(uint16_t hex);

bool process_unicode(uint16_t keycode, keyrecord_t *record);

Expand Down

0 comments on commit 63e5782

Please sign in to comment.