From 4a41a382892e69d378dd62625acfc86c225fe16d Mon Sep 17 00:00:00 2001 From: Ben Reaves Date: Thu, 30 Jan 2020 23:18:48 -0600 Subject: [PATCH] - kintox11 updated to support json config files, added support for unlimited app types and keyboard configurations (no longer binary). --- kintox11/binary/kintox11_ubuntu19-10 | Bin 17720 -> 22208 bytes kintox11/src/kinto.json | 16 +++ kintox11/src/kintox11.c | 148 ++++++++++++++++++++------- 3 files changed, 128 insertions(+), 36 deletions(-) create mode 100644 kintox11/src/kinto.json diff --git a/kintox11/binary/kintox11_ubuntu19-10 b/kintox11/binary/kintox11_ubuntu19-10 index 4e6ae5af4d682494e2b025f6d6e20093d6c60030..35050c9657a6e00fb5c05a27d7125698fe5c14d9 100755 GIT binary patch literal 22208 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 Pigw+oG?sV_JgoR{?n=h} diff --git a/kintox11/src/kinto.json b/kintox11/src/kinto.json new file mode 100644 index 0000000..0188da6 --- /dev/null +++ b/kintox11/src/kinto.json @@ -0,0 +1,16 @@ +{"config":[{ + "name":"gui", + "run":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY", + "appnames":[ "" ] + }, + { + "name":"term", + "run":"setxkbmap -option", + "appnames":[ "Gnome-terminal","konsole","terminator","sakura","guake","tilda","xterm","eterm" ] + }, + { + "name":"eosterm", + "run":"setxkbmap -option", + "appnames":[ "io.elementary.terminal" ] + }] +} \ No newline at end of file diff --git a/kintox11/src/kintox11.c b/kintox11/src/kintox11.c index 717708e..9a44305 100644 --- a/kintox11/src/kintox11.c +++ b/kintox11/src/kintox11.c @@ -6,7 +6,7 @@ http://k-ui.jp/blog/2012/05/07/get-active-window-on-x-window-system/ */ // To compile -// gcc kintox11.c -lX11 -lXmu +// gcc kintox11.c -lX11 -lXmu -ljson-c // // @@ -17,11 +17,20 @@ #include #include // `apt-get install libx11-dev` #include // `apt-get install libxmu-dev` -#define LSIZ 128 // buffer -#define RSIZ 50 // array size +#include // `apt install libjson-c-dev` Bool xerror = False; +int in(const char **arr, int len, char *target) { + int i; + for(i = 0; i < len; i++) { + if(strncmp(arr[i], target, strlen(target)) == 0) { + return i; + } + } + return -1; +} + int strcicmp(char const *a, char const *b) { for (;; a++, b++) { @@ -88,20 +97,67 @@ const char * str_window_class(Display* d, Window w, char *prior_app ){ int main(void){ - char line[RSIZ][LSIZ]; - FILE *fptr = NULL; - int i = 0; - int tot = 0; + FILE *fp; + char buffer[1024]; + struct json_object *parsed_json, *config, *config_obj, *config_obj_name, *config_obj_run, *config_obj_appnames, *appnames_obj; + int arraylen; + int appnames_len; + int system(const char *command); - fptr = fopen("./appnames.csv", "r"); - while(fgets(line[i], LSIZ, fptr)) - { - line[i][strlen(line[i])] = '\0'; - if( line[i][strlen(line[i])-1] == '\n' ) - line[i][strlen(line[i])-1] = 0; - i++; + size_t i,n; + + fp = fopen("kinto.json","r"); + fread(buffer, 1024, 1, fp); + fclose(fp); + + parsed_json = json_tokener_parse(buffer); + + config = json_object_object_get(parsed_json, "config"); + + arraylen = json_object_array_length(config); + const char *name_array[arraylen]; + const char *run_array[arraylen]; + int appnames_max = 0; + + for (i = 0; i < arraylen; i++) { + config_obj = json_object_array_get_idx(config, i); + config_obj_appnames = json_object_object_get(config_obj, "appnames"); + appnames_len = json_object_array_length(config_obj_appnames); + if (appnames_len > appnames_max){ + appnames_max = appnames_len; + } + } + const char *appnames_array[arraylen][appnames_max]; + + + for (i = 0; i < arraylen; i++) { + config_obj = json_object_array_get_idx(config, i); + config_obj_name = json_object_object_get(config_obj, "name"); + config_obj_run = json_object_object_get(config_obj, "run"); + name_array[i] = json_object_get_string(config_obj_name); + run_array[i] = json_object_get_string(config_obj_run); + // printf("%s\n%s\n", json_object_get_string(config_obj_name), json_object_get_string(config_obj_run)); + + config_obj_appnames = json_object_object_get(config_obj, "appnames"); + appnames_len = json_object_array_length(config_obj_appnames); + for (n = 0; n < appnames_len; n++) { + // printf("name_array[i]: %s\n",name_array[i]); + if(!strcicmp(name_array[i], "gui")){ + appnames_array[i][n] = NULL; + // printf("%s i:%ld n:%ld %s\n",name_array[i],i,n,appnames_array[i][n]); + } + else{ + appnames_array[i][n] = json_object_get_string(json_object_array_get_idx(config_obj_appnames, n)); + // printf("%s i:%ld n:%ld %s\n",name_array[i],i,n,appnames_array[i][n]); + } + } + if(appnames_max > appnames_len){ + for (n = appnames_len; n < appnames_max; n++){ + appnames_array[i][n] = NULL; + // printf("%s i:%ld n:%ld %s\n",name_array[i],i,n,appnames_array[i][n]); + } + } } - tot = i; Display* d; Window w; @@ -122,32 +178,52 @@ int main(void){ // get active window w = get_focus_window(d); + int breakouter; + for (;;) { + breakouter = 0; if(strcmp(str_window_class(d, w,prior_app),prior_app)){ - int len = sizeof(line)/sizeof(line[0]); - // printf("length: %d\n",len); - int i; - for(i = 0; i < len; ++i){ - // printf("i: %d\n",i); - // printf(strcicmp(line[i], str_window_class(d, w, prior_app))); - if((strcicmp(line[i], str_window_class(d, w,prior_app)) == 0 && (remap_bool == 1 || remap_bool == 2))) { - // printf("Gotcha!\n"); - // printf("%s - prior app %s\n",str_window_class(d, w, prior_app),prior_app); - printf("%s\n","term"); - remap_bool = 0; - fflush(stdout); - break; + for(i = 0; i < arraylen; ++i){ + if(breakouter == 0){ + if(strcmp(name_array[i],"gui")){ + for(n = 0; n < appnames_max; ++n){ + if (appnames_array[i][n] != NULL){ + // printf("%s\n",appnames_array[i][n]); + if((strcicmp(appnames_array[i][n], str_window_class(d, w,prior_app)) == 0 && (remap_bool == 1 || remap_bool == 2))) { + // printf("1st if %s i:%ld n:%ld %s\n",name_array[i],i,n,appnames_array[i][n]); + printf("%s\n",name_array[i]); + system(run_array[i]); + remap_bool = 0; + fflush(stdout); + breakouter = 1; + break; + } + else if((strcicmp(appnames_array[i][n], str_window_class(d, w,prior_app)) == 0 && remap_bool == 0)){ + // printf("2nd elseif %s i:%ld n:%ld %s\n",name_array[i],i,n,appnames_array[i][n]); + breakouter = 1; + break; + } + else if ((i == arraylen-1 || appnames_array[i][n+1] == NULL) && (remap_bool == 0 || remap_bool == 2)){ + char *find = "gui"; + int gui_idx = in(name_array, arraylen, find); + + if(gui_idx >= 0) { + printf("%s\n",name_array[gui_idx]); + system(run_array[gui_idx]); + } + // printf("3rd elseif %s i:%ld n:%ld %s\n",name_array[i],i,n,appnames_array[i][n]); + remap_bool = 1; + fflush(stdout); + breakouter = 1; + break; + } + } + } + } } - else if((strcicmp(line[i], str_window_class(d, w,prior_app)) == 0 && remap_bool == 0)){ - break; - } - else if (i == 49 && (remap_bool == 0 || remap_bool == 2)){ - printf("%s\n","gui"); - // printf("no match - %s - prior app %s\n",str_window_class(d, w, prior_app),prior_app); - remap_bool = 1; - fflush(stdout); + else{ break; } }