diff --git a/defaults.json b/defaults.json index df83f75..8ea15a6 100644 --- a/defaults.json +++ b/defaults.json @@ -49,7 +49,7 @@ "type":"chromebook", "active": false, "description":"Standard Chromebook Keyboards", - "gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.chromebook.gui $DISPLAY", + "gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY", "term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY", "xkb_symbols_gui":"+chromebook(swap_lalt_lctrl)+mac_gui(mac_levelssym)", "xkb_symbols_term":"+altwin(swap_alt_win)+mac_term_chromebook(mac_levelssym)", @@ -62,9 +62,9 @@ "type":"chromebook", "active": false, "description":"Chromebook with Windows 104 Keyboard", - "gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.chromebook.gui $DISPLAY; setxkbmap -device $usbid -option altwin:ctrl_alt_win", + "gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY; setxkbmap -device $usbid -option altwin:ctrl_alt_win", "term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY", - "fallbackgui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.chromebook.gui $DISPLAY", + "fallbackgui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY", "xkb_symbols_gui":"+chromebook(swap_lalt_lctrl)+mac_gui(mac_levelssym)", "xkb_symbols_term":"+altwin(swap_alt_win)+mac_term_chromebook(mac_levelssym)", "xkb_types_gui":"+mac_gui(addmac_levels)", @@ -76,7 +76,7 @@ "type":"chromebook", "active": false, "description":"Chromebook with Mac Keyboard", - "gui":"setxkbmap -option;setxkbmap -option ctrl:swap_lwin_lctl; xkbcomp -w0 -i $internalid -I$HOME/.xkb ~/.xkb/keymap/kbd.chromebook.gui $DISPLAY", + "gui":"setxkbmap -option;setxkbmap -option ctrl:swap_lwin_lctl; xkbcomp -w0 -i $internalid -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY", "term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY", "xkb_symbols_gui":"+chromebook(swap_lalt_lctrl)+mac_gui(mac_levelssym)", "xkb_symbols_term":"+altwin(swap_alt_win)+mac_term_chromebook(mac_levelssym)", diff --git a/keyswap_service.sh b/keyswap_service.sh index 8e0d807..da4b32e 100755 --- a/keyswap_service.sh +++ b/keyswap_service.sh @@ -1,13 +1,16 @@ #!/bin/bash +systemctl --user stop keyswap >/dev/null 2>&1 +systemctl --user disable keyswap >/dev/null 2>&1 +systemctl --user stop keyswap.timer >/dev/null 2>&1 +systemctl --user disable keyswap.timer >/dev/null 2>&1 swapcmd="\/bin\/bash\ \/home\/`whoami`\/.config\/kinto\/xactive.sh" mkdir -p ~/.config/systemd/user mkdir -p ~/.config/autostart cp ./system-config/keyswap.service ~/.config/systemd/user/keyswap.service -cp ./system-config/keyswap.timer ~/.config/systemd/user/keyswap.timer cp ./kintox11/binary/kintox11 ~/.config/kinto/kintox11 cp ./system-config/xactive.sh ~/.config/kinto/xactive.sh sed -i "s/{username}/`whoami`/g" ~/.config/systemd/user/keyswap.service sed -i "s/ExecStart=/ExecStart=${swapcmd}/g" ~/.config/systemd/user/keyswap.service -systemctl --user enable keyswap.timer -systemctl --user start keyswap.timer \ No newline at end of file +systemctl --user daemon-reload +systemctl --user start keyswap diff --git a/kintox11/binary/kintox11 b/kintox11/binary/kintox11 index 32748f9..758ca31 100755 Binary files a/kintox11/binary/kintox11 and b/kintox11/binary/kintox11 differ diff --git a/kintox11/src/kintox11.c b/kintox11/src/kintox11.c index 8aa739a..0821744 100644 --- a/kintox11/src/kintox11.c +++ b/kintox11/src/kintox11.c @@ -67,10 +67,10 @@ Display* open_display(){ } int handle_error(Display* display, XErrorEvent* error){ - // printf("X11 error: type=%d, serial=%lu, code=%d\n", - // error->type, error->serial, (int)error->error_code); - // xerror = True; - return 0; + printf("X11 error: type=%d, serial=%lu, code=%d\n", + error->type, error->serial, (int)error->error_code); + xerror = True; + return 1; } Window get_focus_window(Display* d){ @@ -108,7 +108,7 @@ Window get_top_window(Display* d, Window start){ if (s) XFree(children); - if(xerror){ + if(xerror || w == 0){ printf("fail\n"); exit(1); } @@ -121,6 +121,17 @@ Window get_top_window(Display* d, Window start){ return w; } +// search a named window (that has a WM_STATE prop) +// on the descendent windows of the argment Window. +Window get_named_window(Display* d, Window start){ + Window w; + // printf("getting named window ... "); + w = XmuClientWindow(d, start); // see man + // if(w == start) + // printf("fail\n"); + // printf("success (window: %d)\n", (int) w); + return w; +} const char * str_window_class(Display* d, Window w, char *prior_app ){ Status s; @@ -161,7 +172,8 @@ int main(void){ int system(const char *command); size_t i,n,r; - + + printf("Importing user_config.json...\n"); fp = fopen("user_config.json","r"); fread(buffer, 10240, 1, fp); fclose(fp); @@ -266,6 +278,8 @@ int main(void){ } } + + printf("Data from user_config.json imported successfully.\n"); for (i = 0; i < init_len; i++) { init_array[i] = json_object_get_int(json_object_array_get_idx(init, i)); @@ -292,9 +306,12 @@ int main(void){ int remap_bool = 2; + printf("Starting keyswap...\n"); + // get active window w = get_focus_window(d); w = get_top_window(d, w); + w = get_named_window(d, w); // XFetchName(d, w, &name); // printf("window:%#x name:%s\n", w, name); @@ -339,6 +356,7 @@ int main(void){ break; } // Else command for ignoring similar app category based on config else if((strcicmp(appnames_array[i][n], current_app) == 0 && remap_bool == 0)){ + printf(" %s\n",current_app); // printf("in 2nd elseif %s i:%ld n:%ld %s\n",name_array[i],i,n,appnames_array[i][n]); // printf("%s\n","4"); breakouter = 1; @@ -365,6 +383,12 @@ int main(void){ fflush(stdout); breakouter = 1; break; + } // GUI app still - no switching needed + else if ((i == arraylen-1 && appnames_max == n+1) && remap_bool == 1){ + printf(" %s\n",current_app); + } + else if ((i == arraylen-1 && appnames_max == n+1)){ + printf("%s - Failed to match any keyswap requirements\n",current_app); } } } @@ -381,6 +405,7 @@ int main(void){ XEvent e; XNextEvent(d, &e); w = get_focus_window(d); - + w = get_top_window(d, w); + w = get_named_window(d, w); } } \ No newline at end of file diff --git a/system-config/keyswap.timer b/system-config/keyswap.timer deleted file mode 100644 index 3274a88..0000000 --- a/system-config/keyswap.timer +++ /dev/null @@ -1,10 +0,0 @@ -# keyswap.timer -[Unit] -Description=Runs the keyswap.service 5 seconds after boot up - -[Timer] -OnBootSec=5s -Unit=keyswap.service - -[Install] -WantedBy=default.target