From a5a1d156e0254079710d4cce845bff6549fe6a51 Mon Sep 17 00:00:00 2001 From: Ben Reaves Date: Sat, 10 Jul 2021 02:00:13 -0500 Subject: [PATCH] Re-organization of xkb version back into kinto --- linux/xkb/.xkb/symbols/chromebook | 5 + linux/xkb/.xkb/symbols/mac_gui | 781 +++++++++++++++++++++ linux/xkb/.xkb/symbols/mac_term | 210 ++++++ linux/xkb/.xkb/symbols/mac_term_chromebook | 100 +++ linux/xkb/.xkb/types/mac_gui | 53 ++ linux/xkb/.xkb/types/mac_term | 53 ++ linux/xkb/config/.chrome-nw | 7 + linux/xkb/config/.chrome-ww | 5 + linux/xkb/config/.firefox-nw | 7 + linux/xkb/config/caret_status.sh | 10 + linux/xkb/config/cleanup.sh | 10 + linux/xkb/config/defaults.json | 86 +++ linux/xkb/config/dename.sh | 167 +++++ linux/xkb/config/keyswap_toggle.sh | 40 ++ linux/xkb/config/kinto.desktop | 8 + linux/xkb/config/user_config.json | 76 ++ linux/xkb/config/xactive.sh | 10 + linux/xkb/kintox11/binary/kintox11 | Bin 0 -> 265416 bytes linux/xkb/kintox11/src/Makefile | 5 + linux/xkb/kintox11/src/kintox11.c | 694 ++++++++++++++++++ linux/xkb/systemd/keyswap.service | 16 + linux/xkb/systemd/keyswap.timer | 11 + linux/xkb/user_config.json | 76 ++ 23 files changed, 2430 insertions(+) create mode 100644 linux/xkb/.xkb/symbols/chromebook create mode 100644 linux/xkb/.xkb/symbols/mac_gui create mode 100644 linux/xkb/.xkb/symbols/mac_term create mode 100644 linux/xkb/.xkb/symbols/mac_term_chromebook create mode 100644 linux/xkb/.xkb/types/mac_gui create mode 100644 linux/xkb/.xkb/types/mac_term create mode 100644 linux/xkb/config/.chrome-nw create mode 100644 linux/xkb/config/.chrome-ww create mode 100644 linux/xkb/config/.firefox-nw create mode 100755 linux/xkb/config/caret_status.sh create mode 100755 linux/xkb/config/cleanup.sh create mode 100644 linux/xkb/config/defaults.json create mode 100755 linux/xkb/config/dename.sh create mode 100755 linux/xkb/config/keyswap_toggle.sh create mode 100644 linux/xkb/config/kinto.desktop create mode 100644 linux/xkb/config/user_config.json create mode 100755 linux/xkb/config/xactive.sh create mode 100755 linux/xkb/kintox11/binary/kintox11 create mode 100644 linux/xkb/kintox11/src/Makefile create mode 100644 linux/xkb/kintox11/src/kintox11.c create mode 100755 linux/xkb/systemd/keyswap.service create mode 100644 linux/xkb/systemd/keyswap.timer create mode 100644 linux/xkb/user_config.json diff --git a/linux/xkb/.xkb/symbols/chromebook b/linux/xkb/.xkb/symbols/chromebook new file mode 100644 index 0000000..34585ce --- /dev/null +++ b/linux/xkb/.xkb/symbols/chromebook @@ -0,0 +1,5 @@ +partial modifier_keys +xkb_symbols "swap_lalt_lctrl" { + replace key { [ Control_L, Control_L ] }; + replace key { [ Alt_L, Meta_L ] }; +}; diff --git a/linux/xkb/.xkb/symbols/mac_gui b/linux/xkb/.xkb/symbols/mac_gui new file mode 100644 index 0000000..8c19c53 --- /dev/null +++ b/linux/xkb/.xkb/symbols/mac_gui @@ -0,0 +1,781 @@ +// Template +// +// ONE_LEVEL_CTRL +// Base +// Shift +// Alt +// Shift Alt +// Control +// Shift Control +// Super +// Shift Super +// Control Alt +// Super Control +// Super Alt +// Super Control Alt +// +// replace key { +// type[Group1]= "ONE_LEVEL_CTRL", +// symbols[Group1]= [ +// Base, +// Alt, +// Shift Alt, +// Control, +// Shift Control, +// Super, +// Shift Super, +// Control Alt, +// Super Control", +// Super Alt, +// Super Control Alt +// ], +// actions[Group1]= [ +// NoAction(), +// RedirectKey(key=,modifiers=NewMod,clearmods=Mod1), +// RedirectKey(key=,modifiers=NewMod,clearmods=Mod1+Shift), +// RedirectKey(key=,modifiers=NewMod,clearmods=Control), +// RedirectKey(key=,modifiers=NewMod,clearmods=Control+Shift), +// RedirectKey(key=,modifiers=NewMod,clearmods=Super), +// RedirectKey(key=,modifiers=NewMod,clearmods=Super+Shift), +// RedirectKey(key=,modifiers=NewMod,clearmods=Control+Alt), +// RedirectKey(key=,modifiers=NewMod,clearmods=Super+Control), +// RedirectKey(key=,modifiers=NewMod,clearmods=Super+Mod1), +// RedirectKey(key=,modifiers=NewMod,clearmods=Control+Mod1) +// ] +// }; +hidden partial modifier_keys +xkb_symbols "swapescape" { + key { [ Escape ] }; + key { [ Caps_Lock ] }; +}; +hidden partial modifier_keys +xkb_symbols "caps_escape" { + key { [ Escape ] }; +}; +hidden partial modifier_keys +xkb_symbols "caps_shiftlock" { + replace key { [ Shift_Lock ] }; + modifier_map Shift { Shift_Lock }; +}; +hidden partial modifier_keys +xkb_symbols "caps_none" { + key { [ VoidSymbol ] }; +}; +default partial xkb_symbols "mac_levelssym" { + // // Minimize window Cmd + H = Alt + F9 + // // 2 caveats + // // 1 Cmd + H may not pass through on VMs + // // 2 may cause conflicts with apps + // replace key { + // type[Group1]= "ONE_LEVEL_CTRL", + // symbols[Group1]= [ + // h, + // H, + // h, + // H, + // h + // ], + // actions[Group1]= [ + // NoAction(), + // NoAction(), + // NoAction(), + // NoAction(), + // RedirectKey(key=,modifiers=Super,clearmods=Control) + // ] + // }; + // Maximize Window Ctrl + Cmd + F = Alt+F10 + // Also maps Option + Cmd + F to Control+H for Replace - Sublime + // AD03=e,E + // AC01=a,A + // Ctrl + A - Beginning of Line + replace key { + type[Group1]= "ONE_LEVEL_SUPER", + symbols[Group1]= [ + // Base + a, + // Shift + A, + // Super + NoSymbol, + // Shift Super + NoSymbol + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Super), + RedirectKey(key=,clearmods=Super) + ] + }; + // Ctrl + E - End of Line + replace key { + type[Group1]= "ONE_LEVEL_SUPER", + symbols[Group1]= [ + // Base + e, + // Shift + E, + // Super + NoSymbol, + // Shift Super + NoSymbol + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Super), + RedirectKey(key=,clearmods=Super) + ] + }; + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + // Base + f, + // Shift + F, + // Alt + f, + // Shift Alt + F, + // Control + f, + // Shift Control + F, + // Super + f, + // Shift Super + F, + // Control Alt + h + // Super Control + // ,F10 // Default maximize + // // Nothing // KDE maximize + // Super Alt + // Super Control Alt + ], + actions[Group1]= [ + // Base + NoAction(), + // Shift + NoAction(), + // Alt + NoAction(), + // Shift Alt + NoAction(), + // Control + NoAction(), + // Shift Control + NoAction(), + // Super + NoAction(), + // Shift Super + NoAction(), + // Control Alt + RedirectKey(key=,clearmods=Mod1) + // Super Control - Fullscreen + // ,RedirectKey(key=,modifiers=Mod1,clearmods=Super+Control) // Default maximize + // // Nothing // KDE maximize + // Super Alt + // Super Control Alt + ] + }; + // Close App Cmd + Q = Alt + F4 + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + // Base + q, + // Shift + Q, + // Alt + q, + // Shift Alt + Q, + // Control + F4 + ], + actions[Group1]= [ + // Base + NoAction(), + // Shift + NoAction(), + // Alt + NoAction(), + // Shift Alt + NoAction(), + // Control + RedirectKey(key=,modifiers=Mod1,clearmods=Control) + ] + }; + // Show Desktop Cmd + F3 = Super + D + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + // Base + F3, + // Shift + F3, + // Alt + F3, + // Shift Alt + F3, + // Control + d + ], + actions[Group1]= [ + NoAction(), + NoAction(), + NoAction(), + NoAction(), + RedirectKey(key=,modifiers=Super,clearmods=Control) + ] + }; + // Fix the G key for Sublime Text + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + // Base + g, + // Shift + G, + // Alt + g, + // Shift Alt + G, + // Control + g, + // Shift Control + G, + // Super + NoSymbol, + // Shift Super + NoSymbol, + // Control Alt + g, + // Super Control + g, + // Super Alt + g, + // Super Control Alt + g + ], + actions[Group1]= [ + NoAction(), + NoAction(), + // Pass G Normally + RedirectKey(key=), + RedirectKey(key=), + // Find Next + RedirectKey(key=,clearmods=Control), + // Find Previous + RedirectKey(key=,clearmods=Control), + // Sublime Goto Line + RedirectKey(key=,modifiers=Control,clearmods=Super), + NoAction(), + // Sublime Quick Find + RedirectKey(key=,clearmods=Mod1), + // Sublime Select All Matches + RedirectKey(key=,modifiers=Mod1,clearmods=Super+Control), + NoAction(), + NoAction() + ] + }; + // LEFT to Begin Line or Beginning of word + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + // Base + Left, + // Shift + Left, + // Alt + Left, + // Shift Alt + Left, + // Control + NoSymbol, + // Shift Control + NoSymbol, + // Super + Left + ], + actions[Group1]= [ + // Base + NoAction(), + // Shift + NoAction(), + // Alt - Wordwise + RedirectKey(key=,mods=Control,clearmods=Mod1), + // Shift Alt + RedirectKey(key=,mods=Control,clearmods=Mod1), + // Control + RedirectKey(key=,clearmods=Control), + // Shift Control + RedirectKey(key=,clearmods=Control), + // Super - Change workspace + NoAction() + ] + }; + + // Right to End of Line or end of word + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + // Base + Right, + // Shift + Right, + // Alt + Right, + // Shift Alt + Right, + // Control + NoSymbol, + // Shift Control + NoSymbol, + // Super + Right + ], + actions[Group1]= [ + // Base + NoAction(), + // Shift + NoAction(), + // Alt - Wordwise + RedirectKey(key=,mods=Control,clearmods=Mod1), + // Shift Alt + RedirectKey(key=,mods=Control,clearmods=Mod1), + // Control + RedirectKey(key=,clearmods=Control), + // Shift Control + RedirectKey(key=,clearmods=Control), + // Super - Change workspace + NoAction() + ] + }; + + //Up to Mac Home + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + // Base + Up, + // Shift + Up, + // Alt + Up, + // Shift Alt + Up, + // Control + NoSymbol, + // Shift Control + NoSymbol, + // Super + Up, + // Shift Super + Up + ], + actions[Group1]= [ + // Base + NoAction(), + // Shift + NoAction(), + // Alt - Wordwise + RedirectKey(key=,clearmods=Mod1), + // Shift Alt + // RedirectKey(key=), // Chromebook multicursor + RedirectKey(key=,clearmods=Mod1), // Default multicursor + // Control + RedirectKey(key=), + // Shift Control + RedirectKey(key=), + // Super - Wordwise - Sublime? + RedirectKey(key=,clearmods=Super), + // Shift Super + RedirectKey(key=,modifiers=Mod1,clearmods=Super) + ] + }; + + // Down to Mac End + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + // Base + Down, + // Shift + Down, + // Alt + Down, + // Shift Alt + Down, + // Control + NoSymbol, + // Shift Control + NoSymbol, + // Super + Down, + // Shift Super + Down + ], + actions[Group1]= [ + // Base + NoAction(), + // Shift + NoAction(), + // Alt - Wordwise + RedirectKey(key=,clearmods=Mod1), + // Shift Alt + RedirectKey(key=,clearmods=Mod1), + // Control + RedirectKey(key=), + // Shift Control + RedirectKey(key=), + // Super - Wordwise - Sublime? + RedirectKey(key=,clearmods=Super), + // Shift Super + RedirectKey(key=,modifiers=Mod1,clearmods=Super) + ] + }; + // Alt BKSP to DELETE + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + BackSpace, + BackSpace, + BackSpace + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Mod1) + ] + }; + // // Full Print Screen + // // GalliumOS + // replace key { + // type[Group1]= "ONE_LEVEL_CTRL", + // symbols[Group1]= [ 3, 3, 3, F5 ], + // actions[Group1]= [ NoAction(), NoAction(), NoAction(), RedirectKey(key=,clearmods=Shift) ] + // }; + // // Region Print Screen + // // GalliumOS + // replace key { + // type[Group1]= "ONE_LEVEL_CTRL", + // symbols[Group1]= [ 4, 4, 4, F5 ], + // actions[Group1]= [ NoAction(), NoAction(), NoAction(), RedirectKey(key=) ] + // }; + // // Full Print Screen + // // Standard Ubuntu + // replace key { + // type[Group1]= "ONE_LEVEL_CTRL", + // symbols[Group1]= [ 3, 3, 3, F5 ], + // actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=,clearmods=Shift+Control) ] + // }; + // // Region Print Screen + // // Standard Ubuntu + // replace key { + // type[Group1]= "ONE_LEVEL_CTRL", + // symbols[Group1]= [ 4, 4, 4, F5 ], + // actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=,clearmods=Control) ] + // }; +}; +partial xkb_symbols "mac_appcycle_chromebook" { + // Cycle App and In App Tab Switching + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + Tab, + Tab, + Tab, + Tab, + backslash, + backslash, + NoSymbol, + NoSymbol + ], + actions[Group1]= [ + NoAction(), + NoAction(), + // Alt + Redirect(key=,mods=Control,clearmods=Mod1), + // Alt + Shift + Redirect(key=,mods=Control,clearmods=Mod1), + // Control + Redirect(key=), + // Control+Shift + Redirect(key=), + // Super + NoAction(), + // Super + Shift + NoAction() + ] + }; +}; +partial xkb_symbols "mac_appcycle" { + // Cycle App and In App Tab Switching + key { [ F13 ] }; + key { [ F14 ] }; + replace key { + type[Group1]= "ONE_LEVEL_CMD", + symbols[Group1]= [ + Tab, + Tab, + F14, + F13, + NoSymbol, + NoSymbol + ], + actions[Group1]= [ + // Base + NoAction(), + // Shift + NoAction(), + // Control + Shift + Redirect(key=), + // Control + Redirect(key=), + // Super + Redirect(key=,mods=Control,clearmods=Mod4+Super), + // Super + Shift + Redirect(key=,mods=Control,clearmods=Mod4+Super) + ] + }; +}; +partial xkb_symbols "mac_browsers_chromebook" { + // Cycle App and In App Tab Switching + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + Tab, + Tab, + NoSymbol, + NoSymbol, + backslash, + backslash, + NoSymbol, + NoSymbol + ], + actions[Group1]= [ + NoAction(), + NoAction(), + // Alt + Redirect(key=,mods=Control,clearmods=Mod1), + // Alt + Shift + Redirect(key=,mods=Control,clearmods=Mod1+Shift), + // Control + Redirect(key=), + // Control+Shift + Redirect(key=), + // Super + NoAction(), + // Super + Shift + NoAction() + ] + }; + //Up to Mac Home + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + Up, + Up, + Up, + Up, + NoSymbol, + NoSymbol, + Up + ], + actions[Group1]= [ + NoAction(), + NoAction(), + // Wordwise + RedirectKey(key=,clearmods=Mod1), + RedirectKey(key=,clearmods=Mod1), + RedirectKey(key=), + RedirectKey(key=), + // Wordwise - Sublime? + RedirectKey(key=,clearmods=Super), + RedirectKey(key=,modifiers=Mod1,clearmods=Super) + ] + }; + // Down to Mac End + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + Down, + Down, + Down, + Down, + NoSymbol, + NoSymbol, + Down + ], + actions[Group1]= [ + NoAction(), + NoAction(), + // Wordwise + RedirectKey(key=,clearmods=Mod1), + RedirectKey(key=,clearmods=Mod1), + RedirectKey(key=), + RedirectKey(key=), + // Wordwise - Sublime? + RedirectKey(key=,clearmods=Super), + RedirectKey(key=,modifiers=Mod1,clearmods=Super) + ] + }; + // Alt BKSP to DELETE + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + BackSpace, + BackSpace, + BackSpace + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Mod1) + ] + }; +}; +partial xkb_symbols "mac_browsers" { + // Cycle App and In App Tab Switching + key { [ F13 ] }; + key { [ F14 ] }; + replace key { + type[Group1]= "ONE_LEVEL_CMD", + symbols[Group1]= [ + Tab, + Tab, + F14, + F13, + NoSymbol, + NoSymbol + ], + actions[Group1]= [ + NoAction(), + NoAction(), + Redirect(key=), + Redirect(key=), + Redirect(key=,mods=Control,clearmods=Mod4+Super), + Redirect(key=,mods=Control,clearmods=Mod4+Super+Shift) + ] + }; + //Up to Mac Home + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + Up, + Up, + Up, + Up, + NoSymbol, + NoSymbol, + Up + ], + actions[Group1]= [ + NoAction(), + NoAction(), + // Wordwise + RedirectKey(key=,clearmods=Mod1), + RedirectKey(key=,clearmods=Mod1), + RedirectKey(key=), + RedirectKey(key=), + // Wordwise - Sublime? + RedirectKey(key=,clearmods=Super), + RedirectKey(key=,modifiers=Mod1,clearmods=Super) + ] + }; + // Down to Mac End + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + Down, + Down, + Down, + Down, + NoSymbol, + NoSymbol, + Down + ], + actions[Group1]= [ + NoAction(), + NoAction(), + // Wordwise + RedirectKey(key=,clearmods=Mod1), + RedirectKey(key=,clearmods=Mod1), + RedirectKey(key=), + RedirectKey(key=), + // Wordwise - Sublime? + RedirectKey(key=,clearmods=Super), + RedirectKey(key=,modifiers=Mod1,clearmods=Super) + ] + }; + // Alt BKSP to DELETE + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + BackSpace, + BackSpace, + BackSpace + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Mod1) + ] + }; +}; +partial xkb_symbols "mac_chrome" { + // Back Button + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + Left, + Left, + NoSymbol, + NoSymbol, + Left + ], + actions[Group1]= [ + // Base + NoAction(), + // Shift + NoAction(), + // Alt + RedirectKey(key=), + // Alt + RedirectKey(key=), + // Control + RedirectKey(key=,modifiers=Mod1,clearmods=Control) + ] + }; + // Forwards Button + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + // Base + Right, + // Shift + Right, + // Alt + NoSymbol, + // Shift Alt + NoSymbol, + // Control + Right + ], + actions[Group1]= [ + // Base + NoAction(), + // Shift + NoAction(), + // Alt + RedirectKey(key=), + // Shift Alt + RedirectKey(key=), + // Control + RedirectKey(key=,modifiers=Mod1,clearmods=Control) + ] + }; +}; \ No newline at end of file diff --git a/linux/xkb/.xkb/symbols/mac_term b/linux/xkb/.xkb/symbols/mac_term new file mode 100644 index 0000000..6a57a0c --- /dev/null +++ b/linux/xkb/.xkb/symbols/mac_term @@ -0,0 +1,210 @@ +default partial xkb_symbols "mac_apple" { + key { + repeat= no, + type= "ONE_LEVEL", + symbols[Group1]= [ Control_L ], + actions[group1]=[ SetMods(modifiers=Control+Shift) ] + }; + key { + repeat= no, + type= "ONE_LEVEL", + symbols[Group1]= [ Control_R ], + actions[group1]=[ SetMods(modifiers=Control+Shift) ] + }; +}; +partial xkb_symbols "mac_win" { + key { + repeat= no, + type= "ONE_LEVEL", + symbols[Group1]= [ Hyper_L ], + actions[group1]=[ SetMods(modifiers=Shift+Control) ] + }; + key { + repeat= no, + type= "ONE_LEVEL", + symbols[Group1]= [ Hyper_R ], + actions[group1]=[ SetMods(modifiers=Shift+Control) ] + }; +}; +partial xkb_symbols "mac_global" { + // // Minimize Window Cmd + H = Alt+F9 + // replace key { + // type[Group1]= "ONE_LEVEL_CTRL", + // symbols[Group1]= [ + // h, + // H, + // H + // ], + // actions[Group1]= [ + // NoAction(), + // NoAction(), + // RedirectKey(key=,modifiers=Super,clearmods=Control+Shift) + // ] + // }; + + // + // Some sort of glitch occurs on shifting F while this segment is active + // it is like the Control key is being held down when it isn't. + // + // // Maximize Window Ctrl + Cmd + F = Alt+F10 + // replace key { + // type[Group1]= "ONE_LEVEL_CTRL", + // symbols[Group1]= [ + // f, + // F, + // F + // ], + // actions[Group1]= [ + // // Base + // NoAction(), + // // Shift + // NoAction(), + // // Ctrl + Shift + // RedirectKey(key=,modifiers=Mod1,clearmods=Control+Shift) + // ] + // }; + + // Close App Cmd + Q = Alt + F4 + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + q, + Q, + F4 + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,modifiers=Mod1,clearmods=Control+Shift) + ] + }; + + // Show Desktop Cmd + F3 = Super + D + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + F3, + F3, + D + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,modifiers=Super,clearmods=Control+Shift) + ] + }; + + // Cycle App and In App Tab Switching + key { [ F13 ] }; + key { [ F14 ] }; + + replace key { + type[Group1]= "ONE_LEVEL_CMD", + symbols[Group1]= [ + Tab, + Tab, + // F13 // Default cmdtab + // F13 // KDE cmdtab + // Right // Elementary ecmdtab + ], + actions[Group1]= [ + NoAction(), + NoAction(), + // Redirect(key=) // Default cmdtab + // Redirect(key=,clearmods=Shift) // KDE cmdtab + // Redirect(key=,mods=Control+Shift,clearmods=Mod4+Super) // Elementary cmdtab + ] + }; + + // Page Up + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + Up, + Up, + NoSymbol + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Shift+Control) + ] + }; + + // Page Down + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + Down, + Down, + NoSymbol + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Shift+Control) + ] + }; + // HOME + replace key { + type[Group1]= "ONE_LEVEL_CMD", + symbols[Group1]= [ + Left, + Left, + NoSymbol, + Left + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Shift+Control), + RedirectKey(key=,mods=Super,clearmods=Control) + ] + }; + // END + replace key { + type[Group1]= "ONE_LEVEL_CMD", + symbols[Group1]= [ + Right, + Right, + NoSymbol, + Right + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Shift+Control), + RedirectKey(key=,mods=Super,clearmods=Control) + ] + }; + // Full Print Screen + // Standard Ubuntu + replace key { + type[Group1]= "ONE_LEVEL_CMD", + symbols[Group1]= [ + 3, + numbersign, + NoSymbol + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Shift+Control) + ] + }; + // Region Print Screen + // Standard Ubuntu + replace key { + type[Group1]= "ONE_LEVEL_CMD", + symbols[Group1]= [ + 4, + dollar, + NoSymbol + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Control) + ] + }; +}; \ No newline at end of file diff --git a/linux/xkb/.xkb/symbols/mac_term_chromebook b/linux/xkb/.xkb/symbols/mac_term_chromebook new file mode 100644 index 0000000..93e1d70 --- /dev/null +++ b/linux/xkb/.xkb/symbols/mac_term_chromebook @@ -0,0 +1,100 @@ +default partial xkb_symbols "mac_levelssym" { + key { + repeat= no, + type= "ONE_LEVEL", + symbols[Group1]= [ Hyper_L ], + actions[group1]=[ SetMods(modifiers=Shift+Control) ] + }; + key { + repeat= no, + type= "ONE_LEVEL", + symbols[Group1]= [ Hyper_R ], + actions[group1]=[ SetMods(modifiers=Shift+Control) ] + }; + // Page Up + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + Up, + Up, + NoSymbol + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Shift+Control) + ] + }; + // Page Down + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + Down, + Down, + NoSymbol + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Shift+Control) + ] + }; + // HOME + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + Left, + Left, + NoSymbol + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Shift+Control) + ] + }; + // END + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + Right, + Right, + NoSymbol + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Shift+Control) + ] + }; + // Full Print Screen + // GalliumOS + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + 3, + numbersign, + F5 + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=,clearmods=Shift) + ] + }; + // Region Print Screen + // GalliumOS + replace key { + type[Group1]= "ONE_LEVEL_CTRL", + symbols[Group1]= [ + 4, + dollar, + F5 + ], + actions[Group1]= [ + NoAction(), + NoAction(), + RedirectKey(key=) + ] + }; +}; diff --git a/linux/xkb/.xkb/types/mac_gui b/linux/xkb/.xkb/types/mac_gui new file mode 100644 index 0000000..9c747d0 --- /dev/null +++ b/linux/xkb/.xkb/types/mac_gui @@ -0,0 +1,53 @@ +default partial xkb_types "addmac_levels" { + Virtual_modifiers Super; + type "ONE_LEVEL_CTRL" { + modifiers = Shift+Mod1+Super+Control; + map[Shift] = Level2; + map[Mod1] = Level3; + map[Shift+Mod1] = Level4; + map[Control] = Level5; + map[Shift+Control] = Level6; + map[Super] = Level7; + map[Shift+Super] = Level8; + map[Mod1+Control] = 9; + map[Super+Control] = 10; + map[Super+Mod1] = 11; + map[Super+Mod1+Control] = 12; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Alt"; + level_name[Level4] = "Shift Alt"; + level_name[Level5] = "Control"; + level_name[Level6] = "Shift Control"; + level_name[Level7] = "Super"; + level_name[Level8] = "Shift Super"; + level_name[9] = "Control Alt"; + level_name[10] = "Super Control"; + level_name[11] = "Super Alt"; + level_name[12] = "Super Control Alt"; + }; + type "ONE_LEVEL_CMD" { + modifiers = Shift+Control+Super; + map[Shift] = Level2; + map[Shift+Control] = Level3; + map[Control] = Level4; + map[Super] = Level5; + map[Shift+Super] = Level6; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Control Shift"; + level_name[Level4] = "Control"; + level_name[Level5] = "Super"; + level_name[Level6] = "Super Shift"; + }; + type "ONE_LEVEL_SUPER" { + modifiers = Shift+Super; + map[Shift] = Level2; + map[Super] = Level3; + map[Shift+Super] = Level4; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Super"; + level_name[Level4] = "Super Shift"; + }; +}; diff --git a/linux/xkb/.xkb/types/mac_term b/linux/xkb/.xkb/types/mac_term new file mode 100644 index 0000000..10fa367 --- /dev/null +++ b/linux/xkb/.xkb/types/mac_term @@ -0,0 +1,53 @@ +default partial xkb_types "addmac_levels" { + Virtual_modifiers Super; + type "ONE_LEVEL_CTRL" { + modifiers = Shift+Mod1+Super+Control; + map[Shift] = Level2; + map[Shift+Control] = Level3; + // map[Mod1] = Level4; + map[Shift+Mod1] = Level5; + map[Control] = Level6; + map[Super] = Level7; + map[Shift+Super] = Level8; + map[Mod1+Control] = 9; + map[Super+Control] = 10; + map[Super+Mod1] = 11; + map[Super+Mod1+Control] = 12; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Shift Control"; + // level_name[Level4] = "Alt"; + level_name[Level5] = "Shift Alt"; + level_name[Level6] = "Control"; + level_name[Level7] = "Super"; + level_name[Level8] = "Shift Super"; + level_name[9] = "Control Alt"; + level_name[10] = "Super Control"; + level_name[11] = "Super Alt"; + level_name[12] = "Super Control Alt"; + }; + type "ONE_LEVEL_CMD" { + modifiers = Shift+Control+Super; + map[Shift] = Level2; + map[Shift+Control] = Level3; + map[Control] = Level4; + map[Super] = Level5; + map[Shift+Super] = Level6; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Control Shift"; + level_name[Level4] = "Control"; + level_name[Level5] = "Super"; + level_name[Level6] = "Super Shift"; + }; + type "ONE_LEVEL_SUPER" { + modifiers = Shift+Super; + map[Shift] = Level2; + map[Super] = Level3; + map[Shift+Super] = Level4; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Super"; + level_name[Level4] = "Super Shift"; + }; +}; diff --git a/linux/xkb/config/.chrome-nw b/linux/xkb/config/.chrome-nw new file mode 100644 index 0000000..7fd0b99 --- /dev/null +++ b/linux/xkb/config/.chrome-nw @@ -0,0 +1,7 @@ +"xdotool key --delay 0 --clearmodifiers Alt+Left" + Control + Left + Release + #Home + release + +"xdotool key --delay 0 --clearmodifiers Alt+Right" + Control + Right + Release + #End + release diff --git a/linux/xkb/config/.chrome-ww b/linux/xkb/config/.chrome-ww new file mode 100644 index 0000000..9717ad1 --- /dev/null +++ b/linux/xkb/config/.chrome-ww @@ -0,0 +1,5 @@ +"xdotool key --delay 0 --clearmodifiers Home" + Control + Left + Release + +"xdotool key --delay 0 --clearmodifiers End" + Control + Right + Release diff --git a/linux/xkb/config/.firefox-nw b/linux/xkb/config/.firefox-nw new file mode 100644 index 0000000..a2f2578 --- /dev/null +++ b/linux/xkb/config/.firefox-nw @@ -0,0 +1,7 @@ +#"xte 'keydown Control_L' 'key bracketleft' 'keyup Control_L'" +"xdotool key --delay 0 --clearmodifiers Control_L+bracketleft" + Home + Release + +#"xte 'keydown Control_R' 'key bracketright' 'keyup Control_R'" +"xdotool key --delay 0 --clearmodifiers Control_L+bracketright" + End + Release \ No newline at end of file diff --git a/linux/xkb/config/caret_status.sh b/linux/xkb/config/caret_status.sh new file mode 100755 index 0000000..375208b --- /dev/null +++ b/linux/xkb/config/caret_status.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +mkdir -p /tmp/kinto + +IBUSADD=$(cat ~/.config/ibus/bus/`ls ~/.config/ibus/bus -1rt | tail -n1` | awk -F'IBUS_ADDRESS=' '{print $2}' | xargs) +dbus-monitor --address $IBUSADD "path='/org/freedesktop/IBus/Panel',interface='org.freedesktop.IBus.Panel',member='FocusOut'" 2> /dev/null | grep --line-buffered -o -P '(?<=object path \"/org/freedesktop/IBus/InputContext_).*(?=[\"])' | +while read ln +do + printf '%s\n' "$ln" > /tmp/kinto/caret +done diff --git a/linux/xkb/config/cleanup.sh b/linux/xkb/config/cleanup.sh new file mode 100755 index 0000000..7165543 --- /dev/null +++ b/linux/xkb/config/cleanup.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +setxkbmap -option +# force command to run silently and report true +killall xbindkeys > /dev/null 2>&1 || : +# rm /tmp/kinto/caret + +gsettings set org.gnome.desktop.wm.keybindings switch-applications "['Tab']" +gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward "['Tab']" +pkill -f /.config/kinto/xactive.sh \ No newline at end of file diff --git a/linux/xkb/config/defaults.json b/linux/xkb/config/defaults.json new file mode 100644 index 0000000..386c6c0 --- /dev/null +++ b/linux/xkb/config/defaults.json @@ -0,0 +1,86 @@ +{"defaultapps":[{ + "name":"term", + "appnames":[ "Gnome-terminal","konsole","io.elementary.terminal","xfce4-terminal","terminator","sakura","guake","tilda","xterm","eterm","kitty" ] + }], + "defaulttypes":["windows","mac","chromebook"], + "defaults":[{ + "id": 1, + "name":"Windows", + "type":"windows", + "active": false, + "description":"Standard Windows 104 Keyboards", + "gui":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen", + "term":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen", + "xkb_symbols_gui":"+altwin(ctrl_alt_win)+mac_gui(mac_levelssym)+mac_gui(mac_appcycle)", + "xkb_symbols_term":"+altwin(swap_alt_win)+mac_term(mac_win)+mac_term(mac_global)", + "xkb_types_gui":"+mac_gui(addmac_levels)", + "xkb_types_term":"+mac_term(addmac_levels)" + }, + { + "id": 2, + "name":"Mac - hid driver (Recommended - Also supports Windows keyboards)", + "type":"mac", + "active": false, + "description":"Standard Mac Keyboards with Apple driver", + "gui":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen", + "term":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen", + "xkb_symbols_gui":"+altwin(ctrl_alt_win)+mac_gui(mac_levelssym)+mac_gui(mac_appcycle)", + "xkb_symbols_term":"+altwin(swap_alt_win)+mac_term(mac_win)+mac_term(mac_global)", + "xkb_types_gui":"+mac_gui(addmac_levels)", + "xkb_types_term":"+mac_term(addmac_levels)", + "hack": "echo '1' | sudo tee -a /sys/module/hid_apple/parameters/swap_opt_cmd;echo 'options hid_apple swap_opt_cmd=1' | sudo tee -a /etc/modprobe.d/hid_apple.conf;sudo update-initramfs -u -k all" + }, + { + "id": 3, + "name":"Mac Only (VMs & non-official Apple keyboards)", + "type":"mac", + "active": true, + "description":"Standard Mac Keyboards", + "gui":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen", + "term":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen", + "xkb_symbols_gui":"+ctrl(swap_lwin_lctl)+ctrl(swap_rwin_rctl)+mac_gui(mac_levelssym)+mac_gui(mac_appcycle)", + "xkb_symbols_term":"+altwin(alt_super_win)+mac_term(mac_apple)+mac_term(mac_global)", + "xkb_types_gui":"+mac_gui(addmac_levels)", + "xkb_types_term":"+mac_term(addmac_levels)" + }, + { + "id": 4, + "name":"Chromebook (xfce)", + "type":"chromebook", + "active": false, + "description":"Standard Chromebook Keyboards", + "gui":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen", + "term":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen", + "xkb_symbols_gui":"+chromebook(swap_lalt_lctrl)+mac_gui(mac_levelssym)+mac_gui(mac_appcycle_chromebook)", + "xkb_symbols_term":"+altwin(swap_alt_win)+mac_term_chromebook(mac_levelssym)", + "xkb_types_gui":"+mac_gui(addmac_levels)", + "xkb_types_term":"+mac_term(addmac_levels)" + }, + { + "id": 5, + "name":"Chromebook (xfce) - Windows", + "type":"chromebook", + "active": false, + "description":"Chromebook with Windows 104 Keyboard", + "gui":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen; setxkbmap -device $usbid -option altwin:ctrl_alt_win", + "term":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen", + "fallbackgui":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen", + "xkb_symbols_gui":"+chromebook(swap_lalt_lctrl)+mac_gui(mac_levelssym)+mac_gui(mac_appcycle_chromebook)", + "xkb_symbols_term":"+altwin(swap_alt_win)+mac_term_chromebook(mac_levelssym)", + "xkb_types_gui":"+mac_gui(addmac_levels)", + "xkb_types_term":"+mac_term(addmac_levels)" + }, + { + "id": 6, + "name":"Chromebook (xfce) - Mac", + "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.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen", + "term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen", + "xkb_symbols_gui":"+chromebook(swap_lalt_lctrl)+mac_gui(mac_levelssym)+mac_gui(mac_appcycle_chromebook)", + "xkb_symbols_term":"+altwin(swap_alt_win)+mac_term_chromebook(mac_levelssym)", + "xkb_types_gui":"+mac_gui(addmac_levels)", + "xkb_types_term":"+mac_term(addmac_levels)" + }] +} \ No newline at end of file diff --git a/linux/xkb/config/dename.sh b/linux/xkb/config/dename.sh new file mode 100755 index 0000000..ae2392c --- /dev/null +++ b/linux/xkb/config/dename.sh @@ -0,0 +1,167 @@ +#!/bin/bash + +function detect_gnome() +{ + ps -e | grep -E '^.* gnome-session' > /dev/null + if [ $? -ne 0 ]; + then + return 0 + fi + VERSION=`gnome-session --version | awk '{print $2}'` + DESKTOP="gnome" + return 1 +} + +function detect_kde4() +{ + ps -e | grep -E '^.* kded4$' > /dev/null + if [ $? -ne 0 ]; + then + return 0 + else + VERSION=`kded4 --version | grep -m 1 'KDE' | awk -F ':' '{print $2}' | awk '{print $1}'` + DESKTOP="KDE" + return 1 + fi +} + +function detect_kde() +{ + ps -e | grep -E '^.* kded5$' > /dev/null + if [ $? -ne 0 ]; + then + return 0 + else + VERSION=`kded5 --version | grep -m 1 'KDE' | awk -F ':' '{print $2}' | awk '{print $1}'` + DESKTOP="KDE" + return 1 + fi +} + +function detect_unity() +{ + ps -e | grep -E 'unity-panel' > /dev/null + if [ $? -ne 0 ]; + then + return 0 + fi + VERSION=`unity --version | awk '{print $2}'` + DESKTOP="unity" + return 1 +} + +function detect_xfce() +{ + ps -e | grep -E '^.* xfce4-session$' > /dev/null + if [ $? -ne 0 ]; + then + return 0 + fi + VERSION=`xfce4-session --version | grep xfce4-session | awk '{print $2}'` + DESKTOP="xfce" + return 1 +} + +function detect_cinnamon() +{ + ps -e | grep -E '^.* cinnamon$' > /dev/null + if [ $? -ne 0 ]; + then + return 0 + fi + VERSION=`cinnamon --version | awk '{print $2}'` + DESKTOP="cinnamon" + return 1 +} + +function detect_mate() +{ + ps -e | grep -E '^.* mate-panel$' > /dev/null + if [ $? -ne 0 ]; + then + return 0 + fi + VERSION=`mate-about --version | awk '{print $4}'` + DESKTOP="mate" + return 1 +} + +function detect_lxde() +{ + ps -e | grep -E '^.* lxsession$' > /dev/null + if [ $? -ne 0 ]; + then + return 0 + fi + + # We can detect LXDE version only thru package manager + which apt-cache > /dev/null 2> /dev/null + if [ $? -ne 0 ]; + then + which yum > /dev/null 2> /dev/null + if [ $? -ne 0 ]; + then + VERSION='unknown' + else + # For Fedora + VERSION=`yum list lxde-common | grep lxde-common | awk '{print $2}' | awk -F '-' '{print $1}'` + fi + else + # For Lubuntu and Knoppix + VERSION=`apt-cache show lxde-common /| grep 'Version:' | awk '{print $2}' | awk -F '-' '{print $1}'` + fi + DESKTOP="lxde" + return 1 +} + +function detect_sugar() +{ + if [ "$DESKTOP_SESSION" == "sugar" ]; + then + VERSION=`python -c "from jarabe import config; print config.version"` + DESKTOP="sugar" + else + return 0 + fi +} + + +DESKTOP="unknown" +if detect_unity; +then + if detect_kde; + then + if detect_kde4; + then + if detect_gnome; + then + if detect_xfce; + then + if detect_cinnamon; + then + if detect_mate; + then + if detect_lxde; + then + detect_sugar + fi + fi + fi + fi + fi + fi + fi +fi + + +if [ "$1" == '-v' ]; +then + echo $VERSION +else + if [ "$1" == '-n' ]; + then + echo $DESKTOP + else + echo $DESKTOP $VERSION + fi +fi \ No newline at end of file diff --git a/linux/xkb/config/keyswap_toggle.sh b/linux/xkb/config/keyswap_toggle.sh new file mode 100755 index 0000000..4e2bb8a --- /dev/null +++ b/linux/xkb/config/keyswap_toggle.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Manual keyswap +systemtype=$1 +internalid=$2 +usbid=$3 +swapbehavior=$4 + +swapcmd_term="setxkbmap -option;setxkbmap -option altwin:swap_alt_win" +fallbackcmd_gui="" +if [[ "$systemtype" == "windows" || "$systemtype" == "mac" ]]; then + swapcmd_gui="setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY" +elif [[ "$systemtype" == "mac_only" ]]; then + swapcmd_gui="setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY" +# Chromebook keyboard options +elif [[ "$swapbehavior" == "both_mac" ]]; then + swapcmd_gui="setxkbmap -option;setxkbmap -option ctrl:swap_lwin_lctl; xkbcomp -w0 -i $internalid -I$HOME/.xkb ~/.xkb/keymap/kbd.chromebook.gui $DISPLAY" + swapcmd_term="setxkbmap -option;setxkbmap -device $internalid -option 'altwin:swap_alt_win'" +elif [[ "$swapbehavior" == "both_win" ]]; then + swapcmd_gui="setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.chromebook.gui $DISPLAY; setxkbmap -device $usbid -option altwin:ctrl_alt_win" + fallbackcmd_gui="setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.chromebook.gui $DISPLAY" +elif [[ "$swapbehavior" == "none" ]]; then + swapcmd_gui="setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.chromebook.gui $DISPLAY" +fi + +if [[ "$systemtype" == "mac_only" ]]; then + check=`setxkbmap -query | grep -c 'alt_super_win'` +elif [[ "$swapbehavior" == "both_win" ]]; then + check=`setxkbmap -query | grep -q 'ctrl_alt_win'; echo $?` +else + check=`setxkbmap -query | grep -c 'swap_alt_win'` +fi + +echo $check +if [ $check -eq 0 ]; then + echo "internal gui to term" + eval "$swapcmd_term" +else + echo "internal term to gui" + eval "$swapcmd_gui" +fi \ No newline at end of file diff --git a/linux/xkb/config/kinto.desktop b/linux/xkb/config/kinto.desktop new file mode 100644 index 0000000..9bb45fb --- /dev/null +++ b/linux/xkb/config/kinto.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Kinto +GenericName=Kinto +Comment=Make Linux Type Like it's a Mac +Exec=/bin/bash -c "/bin/sleep 5 && /usr/bin/systemctl --user start keyswap" +Terminal=false +Type=Application +X-GNOME-Autostart-enabled=true \ No newline at end of file diff --git a/linux/xkb/config/user_config.json b/linux/xkb/config/user_config.json new file mode 100644 index 0000000..f2a8933 --- /dev/null +++ b/linux/xkb/config/user_config.json @@ -0,0 +1,76 @@ +{"config":[{ + "name":"gui", + "run":"", + "run_onInput":"", + "run_offInput": "killall xbindkeys > /dev/null 2>&1", + "symbols":"", + "types":"", + "de":[], + "appnames":[ "" ] + }, + { + "name":"term", + "run":"", + "run_onInput":"", + "run_offInput": "killall xbindkeys > /dev/null 2>&1", + "symbols":"", + "types":"", + "de":[], + "appnames":[ "alacritty","deepin-terminal","eterm","gnome-terminal","guake","hyper","io.elementary.terminal","kinto-gui.py","kitty","konsole","lxterminal","mate-terminal","qterminal","st","sakura","station","terminator","termite","tilda","tilix","urxvt","xfce4-terminal","xterm" ] + }, + { + "name": "firefox", + "run": "", + "run_onInput": "pkill -f ~/.config/kinto/.firefox-nw", + "run_offInput": "xbindkeys -f $HOME/.config/kinto/.firefox-nw", + "symbols": "", + "types": "", + "de": [], + "appnames": [ "Firefox" ] + }, + { + "name": "chrome", + "run": "", + "run_onInput": "xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY", + "run_offInput": "xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui.chrome $DISPLAY", + "symbols": "", + "types": "", + "de": [], + "appnames": [ "Chromium","Chromium-browser","Google-chrome","Epiphany" ] + }], + "init": [], + "detypes":["gnome2","gnome3","kde4","kde5","xfce","i3wm"], + "de":[{ + "id": 1, + "type": ["gnome3"], + "active": false, + "intent":"init", + "name":"gnome-init", + "description":"Gnome - Remove Superkey Overlay keybinding to Activities Overview", + "run":"gsettings set org.gnome.mutter overlay-key ''", + "run_term":"", + "run_gui":"" + }, + { + "id": 2, + "type": ["gnome3"], + "active": false, + "intent":"gui_term", + "name":"Gnome Activities Overview", + "description":"Cmd+Space activates Activities Overview", + "run":"", + "run_term":"gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['Space']\"", + "run_gui":"gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['Space']\"" + }, + { + "id": 3, + "type": ["kde5"], + "active": false, + "intent":"init", + "name":"kde-init", + "description":"KDE Plasma 5 - Removes Superkey Overlay from the Launcher Menu", + "run":"kwriteconfig5 --file ~/.config/kwinrc --group ModifierOnlyShortcuts --key Meta \"\";qdbus org.kde.KWin /KWin reconfigure", + "run_term":"", + "run_gui":"" + }] +} \ No newline at end of file diff --git a/linux/xkb/config/xactive.sh b/linux/xkb/config/xactive.sh new file mode 100755 index 0000000..bf6de8f --- /dev/null +++ b/linux/xkb/config/xactive.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ $# -eq 0 ] + then + # No arguments + ./kintox11 +else + ./caret_status.sh & + ./kintox11 +fi diff --git a/linux/xkb/kintox11/binary/kintox11 b/linux/xkb/kintox11/binary/kintox11 new file mode 100755 index 0000000000000000000000000000000000000000..ebeb40cc32f596669f83ad0776e4c6b5f5ec6916 GIT binary patch literal 265416 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≺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 R +#include +#include +#include +#include +#include +#include +#include +#include // `apt-get install libx11-dev` +#include // `apt-get install libxmu-dev` +#include // `apt install libjson-c-dev` +#include +#include +#include +#ifdef WIN32 +#include +#elif _POSIX_C_SOURCE >= 199309L +#include // for nanosleep +#else +#include // for usleep +#endif + +const char *eventNames[34] = {"None","KeyPress","KeyRelease","ButtonPress","ButtonRelease","MotionNotify","EnterNotify","LeaveNotify","FocusIn","FocusOut","KeymapNotify","Expose","GraphicsExpose","NoExpose","VisibilityNotify","CreateNotify","DestroyNotify","UnmapNotify","MapNotify","MapRequest","ReparentNotify","ConfigureNotify","ConfigureRequest","ResizeRequest","CirculateNotify","CirculateRequest","PropertyNotify","SelectionClear","SelectionRequest","SelectionNotify","ColormapNotify","ClientMessage","MappingNotify"}; + +#define NUM_THREADS 2 +typedef struct threadArgs * ThreadArgs; +struct threadArgs{ + char *run_onInput; + char *run_offInput; +}; + +long long timeInMilliseconds(void) { + struct timeval tv; + + gettimeofday(&tv,NULL); + return (((long long)tv.tv_sec)*1000)+(tv.tv_usec/1000); +} + +bool debug; +bool input_check = 0; +long long int event_ts; +int last_event; + +Display* d; +Window w; +XEvent e; + +// cross-platform sleep function +void sleep_ms(int milliseconds) { + #ifdef WIN32 + Sleep(milliseconds); + #elif _POSIX_C_SOURCE >= 199309L + struct timespec ts; + ts.tv_sec = milliseconds / 1000; + ts.tv_nsec = (milliseconds % 1000) * 1000000; + nanosleep(&ts, NULL); + #else + usleep(milliseconds * 1000); + #endif +} + +char *trimwhitespace(char *str){ + char *end; + // Trim leading space + while(isspace((unsigned char)*str)) str++; + if(*str == 0) // All spaces? + return str; + // Trim trailing space + end = str + strlen(str) - 1; + while(end > str && isspace((unsigned char)*end)) end--; + // Write new null terminator character + end[1] = '\0'; + return str; +} + +int check_caret(){ + int caretint; + char * fpname; + fpname = malloc(sizeof(char)*20); + strcpy(fpname,"/tmp/kinto/caret"); + if( access( fpname, F_OK ) != -1 ) { + char *buffer = NULL; + size_t size = 0; + FILE *fp = fopen(fpname, "r"); + if (fp == NULL){ + return (0); + } + fseek(fp, 0, SEEK_END); + size = ftell(fp); + rewind(fp); + buffer = malloc((size + 1) * sizeof(*buffer)); + fread(buffer, size, 1, fp); + buffer[size] = '\0'; + trimwhitespace(buffer); + caretint = atoi(buffer); + fclose(fp); + if(caretint == 1){ + // printf("caret: %s\n", buffer); + return 1; + } + // printf("found nothing\n"); + return 0; + } + else{ + // printf("file %s does not exist\n",fpname); + return 0; + } +} + +void *inputToggle(void *argStruct) { + ThreadArgs args = argStruct; + + char * onInput; + char * offInput; + onInput = malloc(sizeof(char)*400); + offInput = malloc(sizeof(char)*400); + onInput = args->run_onInput; + offInput = args->run_offInput; + + Bool ran_onInput = 0; + + while(input_check){ + if(check_caret() && ran_onInput == 0){ + if(debug == true){ + printf("run_onInput: %s\n",onInput); + } + system(onInput); + ran_onInput = 1; + } + else if(!check_caret() && ran_onInput == 1){ + if(debug == true){ + printf("run_offInput: %s\n",offInput); + } + system(offInput); + ran_onInput = 0; + } + sleep_ms(100); + } + pthread_exit(NULL); +} + +void *nextPlease(void *threadid) { + long tid; + tid = (long)threadid; + + // printf("Next Please Thread ID, %ld\n", tid); + + // Reference http://www.rahul.net/kenton/xproto/xevents_errors.html + // event type 17 - DestroyNotify + // event type 18 - UnmapNotify + // event type 22 - ConfigureNotify + // Dismiss the following events by initiating another XNextEvent + XNextEvent(d, &e); + while(e.type != ConfigureNotify || (e.type == ConfigureNotify && last_event == ConfigureNotify && timeInMilliseconds()-event_ts < 419)){ + XNextEvent(d, &e); + } + // Unset input thread + input_check = 0; + last_event = e.type; + + if(debug == true){ + printf(" event: %s %d\n",eventNames[e.type-1],e.type); + printf(" duration: %lldms\n",timeInMilliseconds()-event_ts); + } + event_ts = timeInMilliseconds(); + + pthread_exit(NULL); +} + +char * append(char * string1, char * string2){ + char * result = NULL; + asprintf(&result, "%s,%s", string1, string2); + return result; +} + +static int wait_fd(int fd, double seconds){ + struct timeval tv; + fd_set in_fds; + FD_ZERO(&in_fds); + FD_SET(fd, &in_fds); + tv.tv_sec = trunc(seconds); + tv.tv_usec = (seconds - trunc(seconds))*1000000; + return select(fd+1, &in_fds, 0, 0, &tv); +} + +Bool xerror = False; + +int in_int(int a[],int size,int item){ + int i,pos=-1; + for(i=0;i< size;i++) + { + if(a[i]==item) + { + pos=i; + break; + } + } + return pos; +} + +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++) { + int d = tolower((unsigned char)*a) - tolower((unsigned char)*b); + if (d != 0 || !*a) + return d; + } +} + +Display* open_display(){ + int i; + Display* d = XOpenDisplay(NULL); + for (i = 0; i < 60; i++) { + if(d == NULL){ + printf("fail to open X server display...\n"); + } + else{ + break; + } + sleep(1); + } + if(d == NULL){ + printf("fail to open X server display for 1 minute...\n"); + printf("Kintox11 is now exiting...\n"); + exit(1); + } + return d; +} + +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 1; +} + +Window get_focus_window(Display* d, int etype, char const *eventName, char const *current_app, bool debug){ + Window w; + int revert_to; + + if(debug == true){ + printf("\n get focus window\n"); + } + + if(!(etype == DestroyNotify || etype == UnmapNotify)) { + XGetInputFocus(d, &w, &revert_to); // see man + if(debug == true){ + printf(" -%s: event: %d, window_id: %ld\n",current_app,etype,w); + } + } + + if(xerror){ + printf("*Error getting focused window, e.type: %d, current_app: %s\n",etype,current_app); + exit(1); + }else if(w == None){ + printf("*no focus window, e.type: %d, current_app: %s\n",etype,current_app); + exit(1); + } + + return w; +} + +// get the top window. +// a top window have the following specifications. +// * the start window is contained the descendent windows. +// * the parent window is the root window. +Window get_top_window(Display* d, Window start, int etype, char const *eventName, char const *current_app, bool debug){ + Window w = start; + Window parent = start; + Window root = None; + Window *children; + unsigned int nchildren; + Status s; + char * ws; + char * wstr; + ws = malloc(sizeof(char)*4096); + wstr = malloc(sizeof(char)*100); + // strcpy(wstr,"test,"); + + if(debug == true){ + printf("\n get top window\n"); + } + // Checking for Destroy and Unmap Notify events here too + // Sometimes they still get passed through and if so need + // to be ignored or XQueryTree will cause a segmentation fault + while (parent != root && parent != 0 && !(etype == DestroyNotify || etype == UnmapNotify)) { + w = parent; + + s = XQueryTree(d, w, &root, &parent, &children, &nchildren); // see man + + sprintf(wstr, "%ld", w); + if ((ws != NULL) && (ws[0] == '\0')) { + strcpy(ws,wstr); + } + else{ + ws = append(ws, wstr); + } + + if (s) + XFree(children); + + if(xerror){ + printf("*fail to get top window: %ld, e.type: %d, current_app: %s\n",w,etype,current_app); + break; + } + } + + if(debug == true){ + printf(" -%s: event: %d, window_id: %s\n",current_app,etype,ws); + } + + 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, int etype, char const *eventName, char const *current_app, bool debug){ + Window w; + + if(debug == true){ + printf("\n get named window\n"); + } + // printf("getting named window ... "); + w = XmuClientWindow(d, start); // see man + + if(debug == true){ + printf(" -%s: event: %d, window_id: %ld\n\n",current_app,etype,w); + } + // 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; + XClassHint* class; + + class = XAllocClassHint(); // see man + if(xerror){ + // printf("ERROR: XAllocClassHint\n"); + } + + s = XGetClassHint(d, w, class); // see man + if(xerror || s){ + char * app_class; + app_class = malloc(sizeof(char)*100); + strcpy(app_class,class->res_class); + // printf("\tname: %s\n\tclass: %s\n", class->res_name, class->res_class); + return app_class; + }else{ + // char * error_msg; + // error_msg = malloc(sizeof(char)*50); + // strcpy(error_msg, "ERROR: XGetClassHint"); + return prior_app; + } +} + +int main(int argc, char *argv[]){ + + XInitThreads(); + + if(argc < 2){ + debug = false; + } + if(argc > 1 && (strcmp(argv[1], "-d") == 0 || strcmp(argv[1], "--debug") == 0 )){ + debug = true; + printf("Running in debug mode\n"); + } + + FILE *fp; + char buffer[10240]; + struct json_object *parsed_json, *config, *config_obj, + *config_obj_name, *config_obj_run, *config_obj_run_oninput, + *config_obj_run_offinput, *config_obj_de, *config_obj_appnames, + *appnames_obj, *init, *de, *de_obj, *de_obj_id, *de_obj_active, + *de_obj_run, *de_obj_runterm,*de_obj_rungui; + + int arraylen; + int appnames_len, init_len, de_len, config_de_len; + 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); + + parsed_json = json_tokener_parse(buffer); + + config = json_object_object_get(parsed_json, "config"); + init = json_object_object_get(parsed_json, "init"); + de = json_object_object_get(parsed_json, "de"); + + arraylen = json_object_array_length(config); + init_len = json_object_array_length(init); + de_len = json_object_array_length(de); + + const char *name_array[arraylen]; + const char *run_array[arraylen]; + const char *run_oninput_array[arraylen]; + const char *run_offinput_array[arraylen]; + int init_array[init_len]; + + int de_id_array[de_len]; + Bool de_active_array[de_len]; + const char *de_run_array[de_len]; + const char *de_runterm_array[de_len]; + const char *de_rungui_array[de_len]; + + // Grab all de variable info needed + for (i = 0; i < de_len; i++) { + de_obj = json_object_array_get_idx(de, i); + de_obj_id = json_object_object_get(de_obj, "id"); + de_id_array[i] = json_object_get_int(de_obj_id); + de_obj_active = json_object_object_get(de_obj, "active"); + de_active_array[i] = json_object_get_int(de_obj_active); + de_obj_run = json_object_object_get(de_obj, "run"); + de_run_array[i] = json_object_get_string(de_obj_run); + de_obj_runterm = json_object_object_get(de_obj, "run_term"); + de_runterm_array[i] = json_object_get_string(de_obj_runterm); + de_obj_rungui = json_object_object_get(de_obj, "run_gui"); + de_rungui_array[i] = json_object_get_string(de_obj_rungui); + // printf("de_run_array[%ld]: %s\n",i,de_run_array[i]); + } + // de ends + + int appnames_max = 0; + int config_de_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"); + config_obj_de = json_object_object_get(config_obj, "de"); + + appnames_len = json_object_array_length(config_obj_appnames); + if (appnames_len > appnames_max){ + appnames_max = appnames_len; + } + config_de_len = json_object_array_length(config_obj_de); + if(config_de_len > config_de_max){ + config_de_max = config_de_len; + } + } + + const char *appnames_array[arraylen][appnames_max]; + int config_de_array[arraylen][config_de_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"); + config_obj_run_oninput = json_object_object_get(config_obj, "run_onInput"); + config_obj_run_offinput = json_object_object_get(config_obj, "run_offInput"); + + name_array[i] = json_object_get_string(config_obj_name); + run_array[i] = json_object_get_string(config_obj_run); + run_oninput_array[i] = json_object_get_string(config_obj_run_oninput); + run_offinput_array[i] = json_object_get_string(config_obj_run_offinput); + // 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]); + } + } + + config_obj_de = json_object_object_get(config_obj, "de"); + config_de_len = json_object_array_length(config_obj_de); + for (n = 0; n < config_de_max; n++) { + if(n < config_de_len){ + // printf("de value: %d\n",json_object_get_int(json_object_array_get_idx(config_obj_de, n))); + config_de_array[i][n] = json_object_get_int(json_object_array_get_idx(config_obj_de, n)); + } + else{ + // printf("de -1 value: %d\n",json_object_get_int(json_object_array_get_idx(config_obj_de, n))); + config_de_array[i][n] = -1; + } + + } + } + + 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)); + int de_id_idx = in_int(de_id_array, de_len, init_array[i]); + printf("Running init command: %s\n",de_run_array[de_id_idx]); + system(de_run_array[de_id_idx]); + } + + char *name; + + // for XmbTextPropertyToTextList + setlocale(LC_ALL, ""); // see man locale + + d = open_display(); + XSelectInput(d, DefaultRootWindow(d), SubstructureNotifyMask); + XSetErrorHandler(handle_error); + + char * run_normal; + char * run_onInput; + char * run_offInput; + char * prior_app; + char * current_app; + char * prior_category; + char * current_category; + run_onInput = malloc(sizeof(char)*400); + run_offInput = malloc(sizeof(char)*400); + run_normal = malloc(sizeof(char)*400); + prior_app = malloc(sizeof(char)*100); + current_app = malloc(sizeof(char)*100); + prior_category = malloc(sizeof(char)*100); + current_category = malloc(sizeof(char)*100); + strcpy(prior_app,"none"); + strcpy(prior_category,"none"); + + int remap_bool = 2; + + printf("Starting keyswap...\n"); + + // get active window + w = get_focus_window(d, 0, eventNames[0], current_app, debug); + w = get_top_window(d, w, 0, eventNames[0], current_app, debug); + w = get_named_window(d, w, 0, eventNames[0], current_app, debug); + + // XFetchName(d, w, &name); + // printf("window:%#x name:%s\n", w, name); + printf("First window name: %s \n\n",str_window_class(d, w,prior_app)); + + int breakouter; + last_event=0; + event_ts = timeInMilliseconds(); + + for (;;) + { + strcpy(current_app,str_window_class(d, w,prior_app)); + int category_idx; + // printf("current: %s\n",current_app); + breakouter = 0; + + // Cycle through category name array + // printf("%d\n",arraylen); + for(i = 0; i < arraylen; ++i){ + // Cycle through the maximum App name array in each category + 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], current_app) == 0){ + strcpy(current_category,name_array[i]); + category_idx = i; + // printf("Match found: %s: %s\n",current_category,current_app); + breakouter = 1; + break; + } + } + else if(i == arraylen-1 && breakouter==0){ + // printf("No match found, default to gui"); + strcpy(current_category,"gui"); + category_idx = in(name_array, arraylen, current_category); + // printf("Match found: %s: %s\n",current_category,current_app); + break; + } + else if(appnames_array[i][n] == NULL){ + break; + } + if(breakouter==1){ + break; + } + } + } + if(strcicmp(prior_category, current_category) != 0){ + // printf("prior: %s, current: %s\n",prior_category,current_category); + // printf("%d,%d,%d,%d\n",strcicmp(prior_category, "gui"),strcicmp(current_category, "firefox"),strcicmp(current_category, "gui"),strcicmp(prior_category, "firefox")); + // printf("%d,%d\n",(strcicmp(prior_category, "gui") != 0 && strcicmp(prior_category, "firefox") != 0),(strcicmp(current_category, "gui") != 0 && strcicmp(current_category, "firefox") != 0)); + printf("%s: %s\n",current_category,current_app); + // Make sure we're not switching between 2 GUI keymaps + // Firefox & Standard GUI apps + // strcicmp returns 0 for matches, <>0 for non-match + if((strcicmp(prior_category, "gui") != 0 && strcicmp(prior_category, "firefox") != 0) || (strcicmp(current_category, "gui") != 0 && strcicmp(current_category, "firefox") != 0)){ + if(debug == true){ + printf("run: %s\n",run_array[category_idx]); + } + system(run_array[category_idx]); + } + strcpy(run_normal,run_array[category_idx]); + strcpy(run_onInput,run_oninput_array[category_idx]); + strcpy(run_offInput,run_offinput_array[category_idx]); + system(run_offInput); + for(r = 0; r < config_de_max; r++){ + if(config_de_array[category_idx][r] != -1){ + int de_id_idx = in_int(de_id_array, de_len, config_de_array[category_idx][r]); + if(strcicmp(current_category, "term") == 0){ + if(debug == true){ + printf("Running de term command: %s\n",de_runterm_array[de_id_idx]); + } + system(de_runterm_array[de_id_idx]); + } + else{ + if(debug == true){ + printf("Running de gui command: %s\n",de_rungui_array[de_id_idx]); + } + system(de_rungui_array[de_id_idx]); + } + } + } + } + else if(strcicmp(prior_app, current_app) != 0){ + int indent = strlen(current_category)+2; + printf("%*c%s\n", indent, ' ',current_app); + } + + fflush(stdout); + + strcpy(prior_app,current_app); + strcpy(prior_category,current_category); + + if(strlen(run_onInput) > 0){ + input_check = 1; + } + else{ + input_check = 0; + } + + pthread_t threads[NUM_THREADS]; + int rc; + int i; + ThreadArgs args = (ThreadArgs)malloc(sizeof(struct threadArgs)); + args->run_onInput = run_onInput; + args->run_offInput = run_offInput; + for( i = 0; i < NUM_THREADS; i++ ) { + + if(i==0){ + rc = pthread_create(&threads[i], NULL, inputToggle, args); + } + else{ + rc = pthread_create(&threads[i], NULL, nextPlease, (void *)&i); + } + if (rc) { + printf("Error:unable to create thread, %d\n", rc); + exit(-1); + } + } + // wait for threads to close before continuing + for (int i = 0; i < NUM_THREADS; i++) { + pthread_join(threads[i], NULL); + } + + w = get_focus_window(d, e.type, eventNames[e.type-1], current_app, debug); + w = get_top_window(d, w, e.type, eventNames[e.type-1], current_app, debug); + w = get_named_window(d, w, e.type, eventNames[e.type-1], current_app, debug); + } +} \ No newline at end of file diff --git a/linux/xkb/systemd/keyswap.service b/linux/xkb/systemd/keyswap.service new file mode 100755 index 0000000..cfc5896 --- /dev/null +++ b/linux/xkb/systemd/keyswap.service @@ -0,0 +1,16 @@ +[Unit] +Description=keyswap for Terminal and GUI +PartOf=graphical-session.target + +[Service] +Type=simple +Restart=always +# eg DISPLAY=:0.0 +#Environment=DISPLAY={displayid} +RestartSec=1 +WorkingDirectory=/home/{username}/.config/kinto +ExecStart=/bin/bash -c "/home/{username}/.config/kinto/xactive.sh carrots" +ExecStop=/bin/bash /home/{username}/.config/kinto/cleanup.sh + +[Install] +WantedBy=default.target diff --git a/linux/xkb/systemd/keyswap.timer b/linux/xkb/systemd/keyswap.timer new file mode 100644 index 0000000..e2232c1 --- /dev/null +++ b/linux/xkb/systemd/keyswap.timer @@ -0,0 +1,11 @@ +# keyswap.timer +[Unit] +Description=Runs the keyswap.service 5 seconds after boot up + +[Timer] +#OnBootSec=5s +OnActiveSec=5s +Unit=keyswap.service + +[Install] +WantedBy=default.target diff --git a/linux/xkb/user_config.json b/linux/xkb/user_config.json new file mode 100644 index 0000000..f2a8933 --- /dev/null +++ b/linux/xkb/user_config.json @@ -0,0 +1,76 @@ +{"config":[{ + "name":"gui", + "run":"", + "run_onInput":"", + "run_offInput": "killall xbindkeys > /dev/null 2>&1", + "symbols":"", + "types":"", + "de":[], + "appnames":[ "" ] + }, + { + "name":"term", + "run":"", + "run_onInput":"", + "run_offInput": "killall xbindkeys > /dev/null 2>&1", + "symbols":"", + "types":"", + "de":[], + "appnames":[ "alacritty","deepin-terminal","eterm","gnome-terminal","guake","hyper","io.elementary.terminal","kinto-gui.py","kitty","konsole","lxterminal","mate-terminal","qterminal","st","sakura","station","terminator","termite","tilda","tilix","urxvt","xfce4-terminal","xterm" ] + }, + { + "name": "firefox", + "run": "", + "run_onInput": "pkill -f ~/.config/kinto/.firefox-nw", + "run_offInput": "xbindkeys -f $HOME/.config/kinto/.firefox-nw", + "symbols": "", + "types": "", + "de": [], + "appnames": [ "Firefox" ] + }, + { + "name": "chrome", + "run": "", + "run_onInput": "xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY", + "run_offInput": "xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui.chrome $DISPLAY", + "symbols": "", + "types": "", + "de": [], + "appnames": [ "Chromium","Chromium-browser","Google-chrome","Epiphany" ] + }], + "init": [], + "detypes":["gnome2","gnome3","kde4","kde5","xfce","i3wm"], + "de":[{ + "id": 1, + "type": ["gnome3"], + "active": false, + "intent":"init", + "name":"gnome-init", + "description":"Gnome - Remove Superkey Overlay keybinding to Activities Overview", + "run":"gsettings set org.gnome.mutter overlay-key ''", + "run_term":"", + "run_gui":"" + }, + { + "id": 2, + "type": ["gnome3"], + "active": false, + "intent":"gui_term", + "name":"Gnome Activities Overview", + "description":"Cmd+Space activates Activities Overview", + "run":"", + "run_term":"gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['Space']\"", + "run_gui":"gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['Space']\"" + }, + { + "id": 3, + "type": ["kde5"], + "active": false, + "intent":"init", + "name":"kde-init", + "description":"KDE Plasma 5 - Removes Superkey Overlay from the Launcher Menu", + "run":"kwriteconfig5 --file ~/.config/kwinrc --group ModifierOnlyShortcuts --key Meta \"\";qdbus org.kde.KWin /KWin reconfigure", + "run_term":"", + "run_gui":"" + }] +} \ No newline at end of file