|  |  |  | @ -1,6 +1,8 @@ | 
			
		
	
		
			
				
					|  |  |  |  | #include "process_unicode.h" | 
			
		
	
		
			
				
					|  |  |  |  | #include "action_util.h" | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | static uint8_t input_mode; | 
			
		
	
		
			
				
					|  |  |  |  | uint8_t mods; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | __attribute__((weak)) | 
			
		
	
		
			
				
					|  |  |  |  | uint16_t hex_to_keycode(uint8_t hex) | 
			
		
	
	
		
			
				
					|  |  |  | @ -25,6 +27,19 @@ uint8_t get_unicode_input_mode(void) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | __attribute__((weak)) | 
			
		
	
		
			
				
					|  |  |  |  | void unicode_input_start (void) { | 
			
		
	
		
			
				
					|  |  |  |  |   // save current mods
 | 
			
		
	
		
			
				
					|  |  |  |  |   mods = keyboard_report->mods; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   // unregister all mods to start from clean state
 | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_LSFT)) unregister_code(KC_LSFT); | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_RSFT)) unregister_code(KC_RSFT); | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_LCTL)) unregister_code(KC_LCTL); | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_RCTL)) unregister_code(KC_RCTL); | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_LALT)) unregister_code(KC_LALT); | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_RALT)) unregister_code(KC_RALT); | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_LGUI)) unregister_code(KC_LGUI); | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_RGUI)) unregister_code(KC_RGUI); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   switch(input_mode) { | 
			
		
	
		
			
				
					|  |  |  |  |   case UC_OSX: | 
			
		
	
		
			
				
					|  |  |  |  |     register_code(KC_LALT); | 
			
		
	
	
		
			
				
					|  |  |  | @ -54,15 +69,25 @@ void unicode_input_start (void) { | 
			
		
	
		
			
				
					|  |  |  |  | __attribute__((weak)) | 
			
		
	
		
			
				
					|  |  |  |  | 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; | 
			
		
	
		
			
				
					|  |  |  |  |     case UC_OSX: | 
			
		
	
		
			
				
					|  |  |  |  |     case UC_WIN: | 
			
		
	
		
			
				
					|  |  |  |  |       unregister_code(KC_LALT); | 
			
		
	
		
			
				
					|  |  |  |  |       break; | 
			
		
	
		
			
				
					|  |  |  |  |     case UC_LNX: | 
			
		
	
		
			
				
					|  |  |  |  |       register_code(KC_SPC); | 
			
		
	
		
			
				
					|  |  |  |  |       unregister_code(KC_SPC); | 
			
		
	
		
			
				
					|  |  |  |  |       break; | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   // reregister previously set mods
 | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_LSFT)) register_code(KC_LSFT); | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_RSFT)) register_code(KC_RSFT); | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_LCTL)) register_code(KC_LCTL); | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_RCTL)) register_code(KC_RCTL); | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_LALT)) register_code(KC_LALT); | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_RALT)) register_code(KC_RALT); | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_LGUI)) register_code(KC_LGUI); | 
			
		
	
		
			
				
					|  |  |  |  |   if (mods & MOD_BIT(KC_RGUI)) register_code(KC_RGUI); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void register_hex(uint16_t hex) { | 
			
		
	
	
		
			
				
					|  |  |  | 
 |