From 9e388285b965509fea6aa9cdb52b4aacf3a8728c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haoran=20S=2E=20Diao=20=28=E5=88=81=E6=B5=A9=E7=84=B6=29?= <0@hairydiode.xyz> Date: Fri, 12 Sep 2025 03:17:07 -0700 Subject: Added passthrough logic for selector keys --- im.h | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'im.h') diff --git a/im.h b/im.h index e3b2b65..d92191c 100644 --- a/im.h +++ b/im.h @@ -22,26 +22,40 @@ #define ESCAPE_KEY '`' //Vertical Tab Ctrl+K #define TOGGLE_KEY 0x0B -#define IM_KEY_RANGE_LEN 5 +#define IM_KEY_RANGE_LEN 3 +#define IM_SELECTOR_RANGE_LEN 2 //Array of Input method key ranges(inclusive) seperate from the above char im_key_ranges[IM_KEY_RANGE_LEN][2] = { {'a','z'}, - {'0','9'}, - {' ',' '}, {',',','}, {'.','.'}, }; -int is_im_key(char input) { +//array of selector ranges, these keys never start a sequence +char im_selector_ranges[IM_SELECTOR_RANGE_LEN][2] = { + {'0','9'}, + {' ',' '}, +}; +//if chars = 0, only return im_keys, otherwise iwll return true for im keys and +//selector keys +int is_im_key(char input, unsigned int chars) { for (int i = 0; i < IM_KEY_RANGE_LEN; i++) { if (input >= im_key_ranges[i][0] && input <= im_key_ranges[i][1]) { return 1; } } + if (chars > 0) { + for (int j = 0; j < IM_SELECTOR_RANGE_LEN; j++) { + if (input >= im_selector_ranges[j][0] && input <= im_selector_ranges[j][1]) { + return 1; + } + } + + } return 0; } char im_buffer[IM_BUFFER_LEN+1]; -char im_buffer_pos = 0; +unsigned int im_buffer_pos = 0; int im_on = 1; //clears the im buffer void clear_im_buffer() { @@ -104,7 +118,7 @@ int update_im_state(char input, char * output) { output[1] = 0; return 1; } - if ( is_im_key(input) ) { + if ( is_im_key(input, im_buffer_pos) ) { //check if there's enough room in the im buffer if ( (im_buffer_pos < IM_BUFFER_LEN) && (im_buffer_pos < IM_TABLE_ENTRY_LEN) ){ im_buffer[im_buffer_pos] = input; -- cgit v1.1