diff --git a/.github/workflows/01-ubuntu-budgie.yml b/.github/workflows/01-ubuntu-budgie.yml new file mode 100644 index 0000000..37c2c37 --- /dev/null +++ b/.github/workflows/01-ubuntu-budgie.yml @@ -0,0 +1,34 @@ +# This is a basic workflow to help you get started with Actions + +name: CI + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the master branch + push: + branches: [ staging ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. diff --git a/README.md b/README.md index df6d010..cc47838 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,11 @@ Seamless copy and paste with all apps and terminals. The zero effort solution. v1.2 Release - Kinto now includes a system tray and simple wizard to setup the install with minimal effort. -Kinto is powered by [xkeysnail](https://github.com/mooz/xkeysnail) for Linux & by [Autohotkey](https://github.com/Lexikos/AutoHotkey_L) for Windows 10. +Kinto is powered by [xkeysnail](https://github.com/mooz/xkeysnail) for Linux & by [Autohotkey](https://github.com/Lexikos/AutoHotkey_L) for Windows 10 & 11. -Note: If you plan to remote into Linux via VNC, xRDP, Synergy or other remote desktop solutions then remove the current release & try an earlier [v1.0.7-3](https://github.com/rbreaves/kinto/releases/tag/1.0.7-3) release. It uses xkb so it'll work with virtual xinput devices. Some v1.1-x releases may offer both, but all v1.2.x releases ended support for xkb. I do plan to bring offical support back for virtual input devices. +Note: VNC is now experimentally supported on Linux w/ the latest releases, but you must compile & install x11vnc. More info can be [found here](https://gist.github.com/rbreaves/87059f92f030ee4e068f911ddb56a4dd). -Additionally VMware, Virtualbox, KVM and other virtualization technologies work best with the current release - so *this note only applies to remote desktop into Linux* - not virtualization. +~~Note: If you plan to remote into Linux via VNC, xRDP, Synergy or other remote desktop solutions then remove the current release & try an earlier [v1.0.7-3](https://github.com/rbreaves/kinto/releases/tag/1.0.7-3) release. It uses xkb so it'll work with virtual xinput devices. Some v1.1-x releases may offer both, but all v1.2.x releases ended support for xkb. I do plan to bring offical support back for virtual input devices.~~ ### [Table of Contents ](#Table-of-Contents) @@ -26,7 +26,7 @@ If you like or appreciate this project then please consider donating. |**Wishlists**|[Amazon](https://smile.amazon.com/hz/wishlist/ls/3EVXR21VFKD9Z?ref_=wl_share)|[Adafruit](https://www.adafruit.com/wishlists/515932)|[eBay](https://www.ebay.com/mye/myebay/WatchList?custom_list_id=636668138019)| |---|---|---|---| -I have received some really great letters with donations & email, so I plan to make some of them public while redacting last names or anything I feel should remain private, and will be posting them on the frontpage of kinto.sh as I really do appreciate all of the support! +I have received some really great letters with donations & email. I've also posted some of them with redacted first names to kinto.sh. Also if you would like to send me a keyboard directly then please reach out to me over [twitter](https://twitter.com/gbit86) and send me a DM. @@ -149,14 +149,21 @@ RDP fully works as long as the entire keyboard input is being captured. RDP had |Program|Src/Remote Client ⇒|Dst/Remote Server|Works? |Notes| |---|---|---|---|---| -|Official MS RDP (mstsc.exe)| ❖Windows ⇒| 🐧Linux | ✅ Yes| Note: [v1.0.7-3 Only](https://github.com/rbreaves/kinto/releases/tag/1.0.7-3). Should work for xRDP/VNC and other remote server protocols. | -|Official MS RDP (mstsc.exe)| ❖Windows ⇒| ❖Windows | ✅ Yes| | +|Official MS RDP (mstsc.exe)| ❖Windows ⇒| ❖Windows | ✅ Yes| Note: Make sure to set all keyboard input to go to remote. | +|Official MS RDP (mstsc.exe)| ❖Windows ⇒| 🍎macOS | ✅ Yes| Note: Must compile & install xrdp. | +|Official MS RDC from Store| ❖Windows ⇒| ❖Windows | ✅ Yes| Note: Only when maximized, all modifier keys will not pass in otherwise. | +|Official MS RDC from Store| ❖Windows ⇒| 🍎macOS | ✅ Yes| Note: Must compile & install xrdp. | +|RealVNC| ❖Windows ⇒| 🐧Linux | ✅ Yes| Note: Compile & install my forked [x11vnc](https://gist.github.com/rbreaves/87059f92f030ee4e068f911ddb56a4dd) for compatibility. | +|Official MS RDP (mstsc.exe)| ❖Windows ⇒| 🐧Linux | ✅ Yes | Note: Compile & install my forked [x11vnc](https://gist.github.com/rbreaves/87059f92f030ee4e068f911ddb56a4dd) for compatibility, then setup xrdp like normal & use xrdp 0.9.18+. | +|Official MS RDC from Store| ❖Windows ⇒| 🐧Linux | ✅ Yes | Note: Compile & install my forked [x11vnc](https://gist.github.com/rbreaves/87059f92f030ee4e068f911ddb56a4dd) for compatibility, then setup xrdp like normal & use xrdp 0.9.18+. | |Official MS RDP| ChromeOS 87+⇒| ❖Windows | ✅ Yes|May work on earlier versions as well, if they support Android apps| |Remmina| 🐧Linux*/ChromeOS 87+⇒| ❖Windows | ✅ Yes|*Use hover menu to enable "Grab all keyboard events"| |FreeRDP| 🐧Linux/ChromeOS 87+⇒| ❖Windows | ✅ Yes | | |FreeRDP| 🍎macOS⇒| ❖Windows | ✅ Yes| [FreeRDP for macOS](#FreeRDP-for-macOS)| |Remote Desktop Manager Free|🍎iOS⇒| ❖Windows | ✅ Yes| | |Jump Desktop (RDP)| 🍎macOS*/iOS ⇒| ❖Windows | ✅ Yes|*Preferences -> Keyboard -> Disable "Key Conversions", Enabled "Send macOS Shortcuts" under Keyboard shortcuts| +|Jump Desktop (VNC)| 🍎macOS⇒| 🐧Linux | ✅ Yes| Note: Compile & install my forked [x11vnc](https://gist.github.com/rbreaves/87059f92f030ee4e068f911ddb56a4dd) for compatibility & use xrdp 0.9.18+. | +|RealVNC| 🍎macOS⇒| 🐧Linux | ✅ Yes| Note: Compile & install my forked [x11vnc](https://gist.github.com/rbreaves/87059f92f030ee4e068f911ddb56a4dd) for compatibility. | |Official MS RDP| 🍎macOS⇒| ❖Windows | ❌ No|Initial Cmd key press not being passed| |Remote Desktop Manager Free| 🍎macOS⇒| ❖Windows | ❌ No|Initial Cmd key press not being passed| |Royal TSX Client| 🍎macOS⇒| ❖Windows | ❌ No|Initial Cmd key press not being passed| @@ -322,7 +329,7 @@ define_keymap(re.compile("Sublime_text"),{ In the above example I am also showing that you can define a single shortcut to enact multiple shortcut keys if needed by defining an array of shortcuts to trigger. -You can also make changes to the file in your /tmp/kinto/xkeysnail/kinto.py location and see them take affect in real time, but for your changes to be permanent you will need to make your changes in the ~/.config/kinto/kinto.py location & restart the xkeysnail service. +To make changes you can edit ~/.config/kinto/kinto.py under linux & restart the xkeysnail service via the system tray, app or CLI. systemd ``` diff --git a/linux/kinto.py b/linux/kinto.py index 564c7a9..c71019e 100755 --- a/linux/kinto.py +++ b/linux/kinto.py @@ -18,9 +18,11 @@ terminals = [ "io.elementary.terminal", "kinto-gui.py", "kitty", + "Kgx", # GNOME Console terminal app "konsole", "lxterminal", "mate-terminal", + "org.gnome.Console", "qterminal", "st", "sakura", @@ -40,6 +42,9 @@ termStr = "|".join(str('^'+x+'$') for x in terminals) mscodes = ["code","vscodium"] codeStr = "|".join(str('^'+x+'$') for x in mscodes) +sublimes = ["Sublime_text","subl"] +sublimeStr = "|".join(str('^'+x+'$') for x in sublimes) + # Add remote desktop clients & VM software here # Ideally we'd only exclude the client window, # but that may not be easily done. @@ -54,8 +59,10 @@ remotes = [ "VirtualBox", "VirtualBox Machine", "xfreerdp", + "Wfica", ] remotes = [client.casefold() for client in remotes] +remotesStr = "|".join(str('^'+x+'$') for x in remotes) # Add remote desktop clients & VMs for no remapping terminals.extend(remotes) @@ -69,10 +76,13 @@ browsers = [ "Epiphany", "Firefox", "Firefox Developer Edition", + "Navigator", + "firefoxdeveloperedition", "Waterfox", "Google-chrome", "microsoft-edge", "microsoft-edge-dev", + "org.deepin.browser", ] browsers = [browser.casefold() for browser in browsers] browserStr = "|".join(str('^'+x+'$') for x in browsers) @@ -83,6 +93,7 @@ chromes = [ "Google-chrome", "microsoft-edge", "microsoft-edge-dev", + "org.deepin.browser", ] chromes = [chrome.casefold() for chrome in chromes] chromeStr = "|".join(str('^'+x+'$') for x in chromes) @@ -179,16 +190,16 @@ define_conditional_modmap(re.compile(termStr, re.IGNORECASE), { # Keybindings for IntelliJ define_keymap(re.compile("^jetbrains-(?!.*toolbox).*$", re.IGNORECASE),{ # General - K("C-Key_0"): K("M-Key_0"), # Open corresponding tool window - K("C-Key_1"): K("M-Key_1"), # Open corresponding tool window - K("C-Key_2"): K("M-Key_2"), # Open corresponding tool window - K("C-Key_3"): K("M-Key_3"), # Open corresponding tool window - K("C-Key_4"): K("M-Key_4"), # Open corresponding tool window - K("C-Key_5"): K("M-Key_5"), # Open corresponding tool window - K("C-Key_6"): K("M-Key_6"), # Open corresponding tool window - K("C-Key_7"): K("M-Key_7"), # Open corresponding tool window - K("C-Key_8"): K("M-Key_8"), # Open corresponding tool window - K("C-Key_9"): K("M-Key_9"), # Open corresponding tool window + K("C-Key_0"): K("Alt-Key_0"), # Open corresponding tool window + K("C-Key_1"): K("Alt-Key_1"), # Open corresponding tool window + K("C-Key_2"): K("Alt-Key_2"), # Open corresponding tool window + K("C-Key_3"): K("Alt-Key_3"), # Open corresponding tool window + K("C-Key_4"): K("Alt-Key_4"), # Open corresponding tool window + K("C-Key_5"): K("Alt-Key_5"), # Open corresponding tool window + K("C-Key_6"): K("Alt-Key_6"), # Open corresponding tool window + K("C-Key_7"): K("Alt-Key_7"), # Open corresponding tool window + K("C-Key_8"): K("Alt-Key_8"), # Open corresponding tool window + K("C-Key_9"): K("Alt-Key_9"), # Open corresponding tool window K("Super-Grave"): K("C-Grave"), # Quick switch current scheme K("C-Comma"): K("C-M-s"), # Open Settings dialog K("C-Semicolon"): K("C-M-Shift-s"), # Open Project Structure dialog @@ -197,49 +208,49 @@ define_keymap(re.compile("^jetbrains-(?!.*toolbox).*$", re.IGNORECASE),{ # Search/Replace K("C-g"): K("F3"), # Find next K("C-Shift-F3"): K("Shift-F3"), # Find previous - K("Super-g"): K("M-j"), # Select next occurrence + K("Super-g"): K("Alt-j"), # Select next occurrence K("C-Super-g"): K("C-M-Shift-j"), # Select all occurrences - K("Super-Shift-g"): K("M-Shift-j"), # Unselect occurrence + K("Super-Shift-g"): K("Alt-Shift-j"), # Unselect occurrence # Editing K("Super-Space"): K("LC-Space"), # Basic code completion K("Super-Shift-Space"): K("LC-Shift-Space"),# Smart code completion K("Super-j"): K("C-q"), # Quick documentation lookup - K("C-n"): K("M-Insert"), # Generate code... + K("C-n"): K("Alt-Insert"), # Generate code... K("Super-o"): K("C-o"), # Override methods K("Super-i"): K("C-i"), # Implement methods - K("M-Up"): K("C-w"), # Extend selection - K("M-Down"): K("C-Shift-w"), # Shrink selection - K("Super-Shift-q"): K("M-q"), # Context info + K("Alt-Up"): K("C-w"), # Extend selection + K("Alt-Down"): K("C-Shift-w"), # Shrink selection + K("Super-Shift-q"): K("Alt-q"), # Context info K("Super-M-o"): K("C-M-o"), # Optimize imports K("Super-M-i"): K("C-M-i"), # Auto-indent line(s) K("C-Backspace"): K("C-y"), # Delete line at caret K("Super-Shift-j"): K("C-Shift-j"), # Smart line join - K("M-Delete"): K("C-Delete"), # Delete to word end - K("M-Backspace"): K("C-Backspace"), # Delete to word start + K("Alt-Delete"): K("C-Delete"), # Delete to word end + K("Alt-Backspace"): K("C-Backspace"), # Delete to word start K("C-Shift-Equal"): K("C-KPPLUS"), # Expand code block K("C-Minus"): K("C-KPMINUS"), # Collapse code block K("C-Shift-Equal"): K("C-Shift-KPPLUS"), # Expand all K("C-Shift-Minus"): K("C-Shift-KPMINUS"), # Collapse all K("C-w"): K("C-F4"), # Close active editor tab # Refactoring - K("C-Delete"): K("M-Delete"), # Safe Delete + K("C-Delete"): K("Alt-Delete"), # Safe Delete K("C-T"): K("C-M-Shift-t"), # Refactor this # Navigation K("C-o"): K("C-n"), # Go to class K("C-Shift-o"): K("C-Shift-n"), # Go to file K("C-M-o"): K("C-M-Shift-n"), # Go to symbol - K("Super-Right"): K("M-Right"), # Go to next editor tab - K("Super-Left"): K("M-Left"), # Go to previous editor tab + K("Super-Right"): K("Alt-Right"), # Go to next editor tab + K("Super-Left"): K("Alt-Left"), # Go to previous editor tab K("C-l"): K("C-g"), # Go to line - K("M-Space"): K("C-Shift-i"), # Open quick definition lookup + K("Alt-Space"): K("C-Shift-i"), # Open quick definition lookup K("C-Y"): K("C-Shift-i"), # Open quick definition lookup K("Super-Shift-b"): K("C-Shift-b"), # Go to type declaration - K("Super-Up"): K("M-Up"), # Go to previous - K("Super-Down"): K("M-Down"), # Go to next method + K("Super-Up"): K("Alt-Up"), # Go to previous + K("Super-Down"): K("Alt-Down"), # Go to next method K("Super-h"): K("C-h"), # Type hierarchy K("Super-M-h"): K("C-M-h"), # Call hierarchy K("C-Down"): K("C-Enter"), # Edit source/View source - K("M-Home"): K("M-Home"), # Show navigation bar + K("Alt-Home"): K("Alt-Home"), # Show navigation bar K("F2"): K("F11"), # Toggle bookmark K("Super-F3"): K("C-F11"), # Toggle bookmark with mnemonic K("Super-Key_0"): K("C-Key_0"), # Go to numbered bookmark @@ -254,14 +265,14 @@ define_keymap(re.compile("^jetbrains-(?!.*toolbox).*$", re.IGNORECASE),{ K("Super-Key_9"): K("C-Key_9"), # Go to numbered bookmark K("C-F3"): K("Shift-F11"), # Show bookmarks # Compile and Run - K("Super-M-r"): K("M-Shift-F10"), # Select configuration and run - K("Super-M-d"): K("M-Shift-F9"), # Select configuration and debug + K("Super-M-r"): K("Alt-Shift-F10"), # Select configuration and run + K("Super-M-d"): K("Alt-Shift-F9"), # Select configuration and debug K("Super-r"): K("Shift-F10"), # Run K("Super-d"): K("Shift-F9"), # Debug K("Super-Shift-r"): K("C-Shift-F10"), # Run context configuration from editor K("Super-Shift-d"): K("C-Shift-F9"), # Debug context configuration from editor # VCS/Local History - K("Super-v"): K("M-Grave"), # VCS quick popup + K("Super-v"): K("Alt-Grave"), # VCS quick popup K("Super-c"): K("LC-c"), # Sigints - interrupt },"Jetbrains") @@ -271,14 +282,14 @@ define_keymap(re.compile("^jetbrains-(?!.*toolbox).*$", re.IGNORECASE),{ # Keybindings overrides for Caja # (overrides some bindings from general file manager code block below) -define_keymap(re.compile("caja", re.IGNORECASE),{ +define_keymap(re.compile("^caja$", re.IGNORECASE),{ # K("RC-Super-o"): K("RC-Shift-Enter"), # Open in new tab K("RC-Super-o"): K("RC-Shift-W"), # Open in new window },"Overrides for Caja - Finder Mods") # Keybindings overrides for DDE (Deepin) File Manager # (overrides some bindings from general file manager code block below) -define_keymap(re.compile("dde-file-manager", re.IGNORECASE),{ +define_keymap(re.compile("^dde-file-manager$", re.IGNORECASE),{ K("RC-i"): K("RC-i"), # File properties dialog (Get Info) K("RC-comma"): None, # Disable preferences shortcut (no shortcut available) K("RC-Up"): K("RC-Up"), # Go Up dir @@ -290,7 +301,7 @@ define_keymap(re.compile("dde-file-manager", re.IGNORECASE),{ # Keybindings overrides for Dolphin # (overrides some bindings from general file manager code block below) -define_keymap(re.compile("dolphin", re.IGNORECASE),{ +define_keymap(re.compile("^dolphin$", re.IGNORECASE),{ K("RC-KEY_2"): K("C-KEY_3"), # View as List (Detailed) K("RC-KEY_3"): K("C-KEY_2"), # View as List (Compact) ########################################################################################## @@ -307,14 +318,14 @@ define_keymap(re.compile("dolphin", re.IGNORECASE),{ # Keybindings overrides for elementary OS Files (Pantheon) # (overrides some bindings from general file manager code block below) -define_keymap(re.compile("io.elementary.files", re.IGNORECASE),{ +define_keymap(re.compile("^io.elementary.files$", re.IGNORECASE),{ # K("RC-Super-o"): K("Shift-Enter"), # Open folder in new tab K("RC-comma"): None, # Disable preferences shortcut since none available },"Overrides for Pantheon - Finder Mods") # Keybindings overrides for Nautilus # (overrides some bindings from general file manager code block below) -define_keymap(re.compile("org.gnome.nautilus|nautilus", re.IGNORECASE),{ +define_keymap(re.compile("^org.gnome.nautilus$|^nautilus$", re.IGNORECASE),{ # K("RC-N"): K("C-M-Space"), # macOS Finder search window shortcut Cmd+Option+Space # For this ^^^^^^^^^^^ to work, a custom shortcut must be set up in the Settings app in GNOME # to run command: "nautilus --new-window /home/USER" [ replace "USER" ] @@ -327,14 +338,14 @@ define_keymap(re.compile("org.gnome.nautilus|nautilus", re.IGNORECASE),{ # Keybindings overrides for PCManFM and PCManFM-Qt # (overrides some bindings from general file manager code block below) -define_keymap(re.compile("pcmanfm|pcmanfm-qt", re.IGNORECASE),{ +define_keymap(re.compile("^pcmanfm$|^pcmanfm-qt$", re.IGNORECASE),{ K("RC-KEY_2"): K("C-KEY_4"), # View as List (Detailed) [Not in PCManFM-Qt] K("RC-Backspace"): [K("Delete"),K("Enter")], # Move to Trash (delete, bypass dialog) },"Overrides for PCManFM - Finder Mods") # Keybindings overrides for SpaceFM # (overrides some bindings from general file manager code block below) -define_keymap(re.compile("spacefm", re.IGNORECASE),{ +define_keymap(re.compile("^spacefm$", re.IGNORECASE),{ K("RC-Page_Up"): K("C-Shift-Tab"), # Go to prior tab K("RC-Page_Down"): K("C-Tab"), # Go to next tab K("RC-Shift-Left_Brace"): K("C-Shift-Tab"), # Go to prior tab @@ -343,16 +354,16 @@ define_keymap(re.compile("spacefm", re.IGNORECASE),{ K("RC-Shift-Right"): K("C-Tab"), # Go to next tab K("RC-Shift-N"): K("RC-F"), # Create new folder is Ctrl+F by default K("RC-Backspace"): [K("Delete"),K("Enter")], # Move to Trash (delete, bypass dialog) - K("RC-comma"): [K("M-V"),K("p")], # Overrides "Open preferences dialog" shortcut below + K("RC-comma"): [K("Alt-V"),K("p")], # Overrides "Open preferences dialog" shortcut below # This shortcut ^^^^^^^^^^^^^^^ is not fully working in SpaceFM. Opens "View" menu but not Preferences. # SpaceFM seems to be doing some nasty binding that blocks things like Alt+Tab while the menu is open. },"Overrides for SpaceFM - Finder Mods") # Keybindings overrides for Thunar # (overrides some bindings from general file manager code block below) -define_keymap(re.compile("thunar", re.IGNORECASE),{ +define_keymap(re.compile("^thunar$", re.IGNORECASE),{ K("RC-Super-o"): K("RC-Shift-P"), # Open in new tab - K("RC-comma"): [K("M-E"),K("E")], # Overrides "Open preferences dialog" shortcut below + K("RC-comma"): [K("Alt-E"),K("E")], # Overrides "Open preferences dialog" shortcut below },"Overrides for Thunar - Finder Mods") filemanagers = [ @@ -390,18 +401,18 @@ define_keymap(re.compile(filemanagerStr, re.IGNORECASE),{ ########################################################################################################### ### Show Properties (Get Info) | Open Settings/Preferences | Show/Hide hidden files ### ########################################################################################################### - K("RC-i"): K("M-Enter"), # File properties dialog (Get Info) - K("RC-comma"): [K("M-E"),K("N")], # Open preferences dialog + K("RC-i"): K("Alt-Enter"), # File properties dialog (Get Info) + K("RC-comma"): [K("Alt-E"),K("N")], # Open preferences dialog K("RC-Shift-dot"): K("RC-H"), # Show/hide hidden files ("dot" files) ########################################################################################################### ### Navigation ### ########################################################################################################### - K("RC-Left_Brace"): K("M-Left"), # Go Back - K("RC-Right_Brace"): K("M-Right"), # Go Forward - K("RC-Left"): K("M-Left"), # Go Back - K("RC-Right"): K("M-Right"), # Go Forward - K("RC-Up"): K("M-Up"), # Go Up dir - # K("RC-Down"): K("M-Down"), # Go Down dir (only works on folders) [not universal] + K("RC-Left_Brace"): K("Alt-Left"), # Go Back + K("RC-Right_Brace"): K("Alt-Right"), # Go Forward + K("RC-Left"): K("Alt-Left"), # Go Back + K("RC-Right"): K("Alt-Right"), # Go Forward + K("RC-Up"): K("Alt-Up"), # Go Up dir + # K("RC-Down"): K("Alt-Down"), # Go Down dir (only works on folders) [not universal] # K("RC-Down"): K("RC-O"), # Go Down dir (open folder/file) [not universal] K("RC-Down"): K("Enter"), # Go Down dir (open folder/file) [universal] K("RC-Shift-Left_Brace"): K("C-Page_Up"), # Go to prior tab @@ -428,7 +439,7 @@ define_keymap(re.compile(filemanagerStr, re.IGNORECASE),{ ############################################ # Open preferences in browsers -define_keymap(re.compile("Firefox", re.IGNORECASE),{ +define_keymap(re.compile("^Firefox$", re.IGNORECASE),{ K("C-comma"): [ K("C-T"),K("a"),K("b"),K("o"),K("u"),K("t"), K("Shift-SEMICOLON"),K("p"),K("r"),K("e"),K("f"), @@ -436,25 +447,31 @@ define_keymap(re.compile("Firefox", re.IGNORECASE),{ ], K("RC-Shift-N"): K("RC-Shift-P"), # Open private window with Ctrl+Shift+N like other browsers }) + define_keymap(re.compile(chromeStr, re.IGNORECASE),{ - K("C-comma"): [K("M-e"), K("s"),K("Enter")], -}, "Browsers") + K("C-comma"): [K("Alt-e"), K("s"),K("Enter")], # Open preferences + K("RC-q"): K("Alt-F4"), # Quit Chrome(s) browsers with Cmd+Q + # K("RC-Left"): K("Alt-Left"), # Page nav: Back to prior page in history (conflict with wordwise) + # K("RC-Right"): K("Alt-Right"), # Page nav: Forward to next page in history (conflict with wordwise) + K("RC-Left_Brace"): K("Alt-Left"), # Page nav: Back to prior page in history + K("RC-Right_Brace"): K("Alt-Right"), # Page nav: Forward to next page in history +}, "Chrome Browsers") # Opera C-F12 # Keybindings for General Web Browsers define_keymap(re.compile(browserStr, re.IGNORECASE),{ K("RC-Q"): K("RC-Q"), # Close all browsers Instances - K("M-RC-I"): K("RC-Shift-I"), # Dev tools - K("M-RC-J"): K("RC-Shift-J"), # Dev tools - K("RC-Key_1"): K("M-Key_1"), # Jump to Tab #1-#8 - K("RC-Key_2"): K("M-Key_2"), - K("RC-Key_3"): K("M-Key_3"), - K("RC-Key_4"): K("M-Key_4"), - K("RC-Key_5"): K("M-Key_5"), - K("RC-Key_6"): K("M-Key_6"), - K("RC-Key_7"): K("M-Key_7"), - K("RC-Key_8"): K("M-Key_8"), - K("RC-Key_9"): K("M-Key_9"), # Jump to last tab + K("Alt-RC-I"): K("RC-Shift-I"), # Dev tools + K("Alt-RC-J"): K("RC-Shift-J"), # Dev tools + K("RC-Key_1"): K("Alt-Key_1"), # Jump to Tab #1-#8 + K("RC-Key_2"): K("Alt-Key_2"), + K("RC-Key_3"): K("Alt-Key_3"), + K("RC-Key_4"): K("Alt-Key_4"), + K("RC-Key_5"): K("Alt-Key_5"), + K("RC-Key_6"): K("Alt-Key_6"), + K("RC-Key_7"): K("Alt-Key_7"), + K("RC-Key_8"): K("Alt-Key_8"), + K("RC-Key_9"): K("Alt-Key_9"), # Jump to last tab # Enable Cmd+Shift+Braces for tab navigation K("RC-Shift-Left_Brace"): K("C-Page_Up"), # Go to prior tab K("RC-Shift-Right_Brace"): K("C-Page_Down"), # Go to next tab @@ -469,25 +486,25 @@ define_keymap(re.compile(browserStr, re.IGNORECASE),{ # K("C-Right_Brace"): K("C-Page_Down"), }, "General Web Browsers") -define_keymap(re.compile("ulauncher", re.IGNORECASE),{ - K("RC-Key_1"): K("M-Key_1"), # Remap Ctrl+[1-9] and Ctrl+[a-z] to Alt+[1-9] and Alt+[a-z] - K("RC-Key_2"): K("M-Key_2"), - K("RC-Key_3"): K("M-Key_3"), - K("RC-Key_4"): K("M-Key_4"), - K("RC-Key_5"): K("M-Key_5"), - K("RC-Key_6"): K("M-Key_6"), - K("RC-Key_7"): K("M-Key_7"), - K("RC-Key_8"): K("M-Key_8"), - K("RC-Key_9"): K("M-Key_9"), - K("RC-Key_0"): K("M-Key_0"), - # K("RC-a"): K("M-a"), - K("RC-b"): K("M-b"), - # K("RC-c"): K("M-c"), - K("RC-d"): K("M-d"), - K("RC-e"): K("M-e"), - K("RC-f"): K("M-f"), - K("RC-g"): K("M-g"), - K("RC-h"): K("M-h"), +define_keymap(re.compile("^ulauncher$", re.IGNORECASE),{ + K("RC-Key_1"): K("Alt-Key_1"), # Remap Ctrl+[1-9] and Ctrl+[a-z] to Alt+[1-9] and Alt+[a-z] + K("RC-Key_2"): K("Alt-Key_2"), + K("RC-Key_3"): K("Alt-Key_3"), + K("RC-Key_4"): K("Alt-Key_4"), + K("RC-Key_5"): K("Alt-Key_5"), + K("RC-Key_6"): K("Alt-Key_6"), + K("RC-Key_7"): K("Alt-Key_7"), + K("RC-Key_8"): K("Alt-Key_8"), + K("RC-Key_9"): K("Alt-Key_9"), + K("RC-Key_0"): K("Alt-Key_0"), + # K("RC-a"): K("Alt-a"), + K("RC-b"): K("Alt-b"), + # K("RC-c"): K("Alt-c"), + K("RC-d"): K("Alt-d"), + K("RC-e"): K("Alt-e"), + K("RC-f"): K("Alt-f"), + K("RC-g"): K("Alt-g"), + K("RC-h"): K("Alt-h"), }, "Ulauncher") # Note: terminals extends to remotes as well @@ -495,23 +512,45 @@ define_keymap(lambda wm_class: wm_class.casefold() not in terminals,{ K("RC-Dot"): K("Esc"), # Mimic macOS Cmd+dot = Escape key (not in terminals) }) +# Tab navigation overrides for apps that use Ctrl+Shift+Tab/Ctrl+Tab instead of Ctrl+PgUp/PgDn +define_keymap(re.compile("^org.gnome.Console$|^Kgx$|^deepin-terminal$|^Angry*IP*Scanner$|^jDownloader$", re.IGNORECASE),{ + ### Tab navigation + K("RC-Shift-Left_Brace"): K("C-Shift-Tab"), # Tab nav: Go to prior tab (left) + K("RC-Shift-Right_Brace"): K("C-Tab"), # Tab nav: Go to next tab (right) + K("RC-Shift-Left"): K("C-Shift-Tab"), # Tab nav: Go to prior tab (left) + K("RC-Shift-Right"): K("C-Tab"), # Tab nav: Go to next tab (right) +},"Tab Navigation for apps that want Ctrl+Shift+Tab/Ctrl+Tab") + +# Special overrides for terminals for shortcuts that conflict with General GUI block below. +define_keymap(re.compile(termStr, re.IGNORECASE),{ + K("Alt-Backspace"): K("Alt-Shift-Backspace"), # Wordwise delete word left of cursor in terminals + K("Alt-Delete"): [K("Esc"),K("d")], # Wordwise delete word right of cursor in terminals + K("RC-Backspace"): K("C-u"), # Wordwise delete line left of cursor in terminals + K("RC-Delete"): K("C-k"), # Wordwise delete line right of cursor in terminals + ### Tab navigation + K("RC-Shift-Left"): K("C-Page_Up"), # Tab nav: Go to prior tab (Left) + K("RC-Shift-Right"): K("C-Page_Down"), # Tab nav: Go to next tab (Right) +},"Special overrides for terminals") + # None referenced here originally # - but remote clients and VM software ought to be set here # These are the typical remaps for ALL GUI based apps define_keymap(lambda wm_class: wm_class.casefold() not in remotes,{ + K("RC-Shift-Left_Brace"): K("C-Page_Up"), # Tab nav: Go to prior (left) tab + K("RC-Shift-Right_Brace"): K("C-Page_Down"), # Tab nav: Go to next (right) tab K("RC-Space"): K("Alt-F1"), # Default SL - Launch Application Menu (gnome/kde) K("RC-F3"):K("Super-d"), # Default SL - Show Desktop (gnome/kde,eos) - K("RC-Super-f"):K("M-F10"), # Default SL - Maximize app (gnome/kde) + K("RC-Super-f"):K("Alt-F10"), # Default SL - Maximize app (gnome/kde) # K("RC-Super-f"): K("Super-Page_Up"), # SL - Toggle maximized window state (kde_neon) # K("Super-Right"):K("C-M-Right"), # Default SL - Change workspace (budgie) # K("Super-Left"):K("C-M-Left"), # Default SL - Change workspace (budgie) - K("RC-Q"): K("M-F4"), # Default SL - not-popos + K("RC-Q"): K("Alt-F4"), # Default SL - not-popos K("RC-H"):K("Super-h"), # Default SL - Minimize app (gnome/budgie/popos/fedora) - K("M-Tab"): pass_through_key, # Default - Cmd Tab - App Switching Default - K("RC-Tab"): K("M-Tab"), # Default - Cmd Tab - App Switching Default - K("RC-Shift-Tab"): K("M-Shift-Tab"), # Default - Cmd Tab - App Switching Default - K("RC-Grave"): K("M-Grave"), # Default not-xfce4 - Cmd ` - Same App Switching - K("RC-Shift-Grave"): K("M-Shift-Grave"), # Default not-xfce4 - Cmd ` - Same App Switching + K("Alt-Tab"): pass_through_key, # Default - Cmd Tab - App Switching Default + K("RC-Tab"): K("Alt-Tab"), # Default - Cmd Tab - App Switching Default + K("RC-Shift-Tab"): K("Alt-Shift-Tab"), # Default - Cmd Tab - App Switching Default + K("RC-Grave"): K("Alt-Grave"), # Default not-xfce4 - Cmd ` - Same App Switching + K("RC-Shift-Grave"): K("Alt-Shift-Grave"), # Default not-xfce4 - Cmd ` - Same App Switching # K("RC-Grave"): K("Super-Tab"), # xfce4 Switch within app group # K("RC-Shift-Grave"): K("Super-Shift-Tab"), # xfce4 Switch within app group # K("Super-Right"):K("Super-Page_Up"), # SL - Change workspace (ubuntu/fedora) @@ -527,17 +566,17 @@ define_keymap(lambda wm_class: wm_class.casefold() not in remotes,{ # K("RC-LC-f"):K("Super-Up"), # SL- Maximize app eos # K("RC-LC-f"):K("Super-PAGE_UP"), # SL- Maximize app manjaro # Basic App hotkey functions - # K("RC-H"):K("M-F9"), # SL - Minimize app xfce4 + # K("RC-H"):K("Alt-F9"), # SL - Minimize app xfce4 # K("RC-LC-f"):K("Super-PAGE_DOWN"), # SL - Minimize app manjaro # In-App Tab switching - # K("M-Tab"): K("C-Tab"), # Chromebook/IBM - In-App Tab switching - # K("M-Shift-Tab"): K("C-Shift-Tab"), # Chromebook/IBM - In-App Tab switching - # K("M-Grave") : K("C-Shift-Tab"), # Chromebook/IBM - In-App Tab switching + # K("Alt-Tab"): K("C-Tab"), # Chromebook/IBM - In-App Tab switching + # K("Alt-Shift-Tab"): K("C-Shift-Tab"), # Chromebook/IBM - In-App Tab switching + # K("Alt-Grave") : K("C-Shift-Tab"), # Chromebook/IBM - In-App Tab switching K("Super-Tab"): K("LC-Tab"), # Default not-chromebook K("Super-Shift-Tab"): K("LC-Shift-Tab"), # Default not-chromebook # Fn to Alt style remaps - K("RM-Enter"): K("insert"), # Insert + K("RAlt-Enter"): K("insert"), # Insert # emacs style K("Super-a"): K("Home"), # Beginning of Line @@ -549,7 +588,7 @@ define_keymap(lambda wm_class: wm_class.casefold() not in remotes,{ K("Super-k"): [K("Shift-End"), K("Backspace")], K("Super-d"): K("Delete"), - # K("M-RC-Space"): K(""), # Open Finder - Placeholder + # K("Alt-RC-Space"): K(""), # Open Finder - Placeholder # Wordwise K("RC-Left"): K("Home"), # Beginning of Line @@ -558,17 +597,17 @@ define_keymap(lambda wm_class: wm_class.casefold() not in remotes,{ K("RC-Shift-Right"): K("Shift-End"), # Select all to End of Line # K("RC-Left"): K("C-LEFT_BRACE"), # Firefox-nw - Back # K("RC-Right"): K("C-RIGHT_BRACE"), # Firefox-nw - Forward - # K("RC-Left"): K("M-LEFT"), # Chrome-nw - Back - # K("RC-Right"): K("M-RIGHT"), # Chrome-nw - Forward + # K("RC-Left"): K("Alt-LEFT"), # Chrome-nw - Back + # K("RC-Right"): K("Alt-RIGHT"), # Chrome-nw - Forward K("RC-Up"): K("C-Home"), # Beginning of File K("RC-Shift-Up"): K("C-Shift-Home"), # Select all to Beginning of File K("RC-Down"): K("C-End"), # End of File K("RC-Shift-Down"): K("C-Shift-End"), # Select all to End of File - # K("RM-Backspace"): K("Delete"), # Chromebook/IBM - Delete + # K("RAlt-Backspace"): K("Delete"), # Chromebook/IBM - Delete K("Super-Backspace"): K("C-Backspace"), # Delete Left Word of Cursor K("Super-Delete"): K("C-Delete"), # Delete Right Word of Cursor - # K("LM-Backspace"): K("C-Backspace"), # Chromebook/IBM - Delete Left Word of Cursor - K("M-Backspace"): K("C-Backspace"), # Default not-chromebook + # K("LAlt-Backspace"): K("C-Backspace"), # Chromebook/IBM - Delete Left Word of Cursor + K("Alt-Backspace"): K("C-Backspace"), # Default not-chromebook K("RC-Backspace"): K("C-Shift-Backspace"), # Delete Entire Line Left of Cursor K("Alt-Delete"): K("C-Delete"), # Delete Right Word of Cursor # K(""): pass_through_key, # cancel @@ -577,11 +616,11 @@ define_keymap(lambda wm_class: wm_class.casefold() not in remotes,{ define_keymap(lambda wm_class: wm_class.casefold() not in mscodes,{ # Wordwise remaining - for Everything but VS Code - K("M-Left"): K("C-Left"), # Left of Word - K("M-Shift-Left"): K("C-Shift-Left"), # Select Left of Word - K("M-Right"): K("C-Right"), # Right of Word - K("M-Shift-Right"): K("C-Shift-Right"), # Select Right of Word - K("M-Shift-g"): K("C-Shift-g"), # View source control + K("Alt-Left"): K("C-Left"), # Left of Word + K("Alt-Shift-Left"): K("C-Shift-Left"), # Select Left of Word + K("Alt-Right"): K("C-Right"), # Right of Word + K("Alt-Shift-Right"): K("C-Shift-Right"), # Select Right of Word + K("Alt-Shift-g"): K("C-Shift-g"), # View source control # ** VS Code fix ** # Electron issue precludes normal keybinding fix. # Alt menu auto-focus/toggle gets in the way. @@ -603,10 +642,10 @@ define_keymap(re.compile(codeStr, re.IGNORECASE),{ K("Super-Space"): K("LC-Space"), # Basic code completion # Wordwise remaining - for VS Code # Alt-F19 hack fixes Alt menu activation - K("M-Left"): [K("M-F19"),K("C-Left")], # Left of Word - K("M-Right"): [K("M-F19"),K("C-Right")], # Right of Word - K("M-Shift-Left"): [K("M-F19"),K("C-Shift-Left")], # Select Left of Word - K("M-Shift-Right"): [K("M-F19"),K("C-Shift-Right")], # Select Right of Word + K("Alt-Left"): [K("Alt-F19"),K("C-Left")], # Left of Word + K("Alt-Right"): [K("Alt-F19"),K("C-Right")], # Right of Word + K("Alt-Shift-Left"): [K("Alt-F19"),K("C-Shift-Left")], # Select Left of Word + K("Alt-Shift-Right"): [K("Alt-F19"),K("C-Shift-Right")], # Select Right of Word # K("C-PAGE_DOWN"): pass_through_key, # cancel next_view # K("C-PAGE_UP"): pass_through_key, # cancel prev_view @@ -629,32 +668,32 @@ define_keymap(re.compile(codeStr, re.IGNORECASE),{ K("C-Shift-g"): K("Shift-f3"), # find_prev # K("Super-c"): K("LC-c"), # Default - Terminal - Sigint # K("Super-x"): K("LC-x"), # Default - Terminal - Exit nano - # K("M-c"): K("LC-c"), # Chromebook/IBM - Terminal - Sigint - # K("M-x"): K("LC-x"), # Chromebook/IBM - Terminal - Exit nano + # K("Alt-c"): K("LC-c"), # Chromebook/IBM - Terminal - Sigint + # K("Alt-x"): K("LC-x"), # Chromebook/IBM - Terminal - Exit nano # K("Super-C-g"): K("C-f2"), # Default - Sublime - find_all_under # K("C-M-g"): K("C-f2"), # Chromebook/IBM - Sublime - find_all_under - # K("Super-Shift-up"): K("M-Shift-up"), # multi-cursor up - Sublime - # K("Super-Shift-down"): K("M-Shift-down"), # multi-cursor down - Sublime + # K("Super-Shift-up"): K("Alt-Shift-up"), # multi-cursor up - Sublime + # K("Super-Shift-down"): K("Alt-Shift-down"), # multi-cursor down - Sublime # K(""): pass_through_key, # cancel # K(""): K(""), # }, "Code") # Keybindings for Sublime Text -define_keymap(re.compile("Sublime_text", re.IGNORECASE),{ +define_keymap(re.compile(sublimeStr, re.IGNORECASE),{ # K("Super-c"): K("LC-c"), # Default - Terminal - Sigint # K("Super-x"): K("LC-x"), # Default - Terminal - Exit nano - # K("M-c"): K("LC-c"), # Chromebook/IBM - Terminal - Sigint - # K("M-x"): K("LC-x"), # Chromebook/IBM - Terminal - Exit nano + # K("Alt-c"): K("LC-c"), # Chromebook/IBM - Terminal - Sigint + # K("Alt-x"): K("LC-x"), # Chromebook/IBM - Terminal - Exit nano K("Super-Space"): K("C-Space"), # Basic code completion - K("C-Super-up"): K("M-o"), # Switch file + K("C-Super-up"): K("Alt-o"), # Switch file K("Super-RC-f"): K("f11"), # toggle_full_screen K("C-M-v"): [K("C-k"), K("C-v")], # paste_from_history K("C-up"): pass_through_key, # cancel scroll_lines up K("C-M-up"): K("C-up"), # scroll_lines up K("C-down"): pass_through_key, # cancel scroll_lines down K("C-M-down"): K("C-down"), # scroll_lines down - K("Super-Shift-up"): K("M-Shift-up"), # multi-cursor up - K("Super-Shift-down"): K("M-Shift-down"), # multi-cursor down + K("Super-Shift-up"): K("Alt-Shift-up"), # multi-cursor up + K("Super-Shift-down"): K("Alt-Shift-down"), # multi-cursor down K("C-PAGE_DOWN"): pass_through_key, # cancel next_view K("C-PAGE_UP"): pass_through_key, # cancel prev_view K("C-Shift-left_brace"): K("C-PAGE_DOWN"), # next_view @@ -663,8 +702,8 @@ define_keymap(re.compile("Sublime_text", re.IGNORECASE),{ K("C-M-left"): K("C-PAGE_UP"), # prev_view K("insert"): pass_through_key, # cancel toggle_overwrite K("C-M-o"): K("insert"), # toggle_overwrite - K("M-c"): pass_through_key, # cancel toggle_case_sensitive - K("C-M-c"): K("M-c"), # toggle_case_sensitive + K("Alt-c"): pass_through_key, # cancel toggle_case_sensitive + K("C-M-c"): K("Alt-c"), # toggle_case_sensitive K("C-h"): pass_through_key, # cancel replace K("C-M-f"): K("C-h"), # replace K("C-Shift-h"): pass_through_key, # cancel replace_next @@ -677,10 +716,10 @@ define_keymap(re.compile("Sublime_text", re.IGNORECASE),{ K("Super-M-g"): K("C-f3"), # find_under K("C-Shift-f3"): pass_through_key, # cancel find_under_prev K("Super-M-Shift-g"): K("C-Shift-f3"), # find_under_prev - K("M-f3"): pass_through_key, # Default - cancel find_all_under - # K("M-Refresh"): pass_through_key, # Chromebook/IBM - cancel find_all_under - # K("M-C-g"): K("M-Refresh"), # Chromebook/IBM - find_all_under - K("Super-C-g"): K("M-f3"), # Default - find_all_under + K("Alt-f3"): pass_through_key, # Default - cancel find_all_under + # K("Alt-Refresh"): pass_through_key, # Chromebook/IBM - cancel find_all_under + # K("Alt-C-g"): K("Alt-Refresh"), # Chromebook/IBM - find_all_under + K("Super-C-g"): K("Alt-f3"), # Default - find_all_under K("C-Shift-up"): pass_through_key, # cancel swap_line_up K("Super-M-up"): K("C-Shift-up"), # swap_line_up K("C-Shift-down"): pass_through_key, # cancel swap_line_down @@ -691,25 +730,25 @@ define_keymap(re.compile("Sublime_text", re.IGNORECASE),{ K("f5"): K("f9"), # sort_lines case_s false K("Super-f9"): pass_through_key, # cancel sort_lines case_s true K("Super-f5"): K("Super-f9"), # sort_lines case_s true - K("M-Shift-Key_1"): pass_through_key, # cancel set_layout - K("C-M-Key_1"): K("M-Shift-Key_1"), # set_layout - K("M-Shift-Key_2"): pass_through_key, # cancel set_layout - K("C-M-Key_2"): K("M-Shift-Key_2"), # set_layout - K("M-Shift-Key_3"): pass_through_key, # cancel set_layout - K("C-M-Key_3"): K("M-Shift-Key_3"), # set_layout - K("M-Shift-Key_4"): pass_through_key, # cancel set_layout - K("C-M-Key_4"): K("M-Shift-Key_4"), # set_layout - K("M-Shift-Key_8"): pass_through_key, # cancel set_layout - K("C-M-Shift-Key_2"): K("M-Shift-Key_8"), # set_layout - K("M-Shift-Key_9"): pass_through_key, # cancel set_layout - K("C-M-Shift-Key_3"): K("M-Shift-Key_9"), # set_layout - K("M-Shift-Key_5"): pass_through_key, # cancel set_layout - K("C-M-Shift-Key_5"): K("M-Shift-Key_5"), # set_layout + K("Alt-Shift-Key_1"): pass_through_key, # cancel set_layout + K("C-M-Key_1"): K("Alt-Shift-Key_1"), # set_layout + K("Alt-Shift-Key_2"): pass_through_key, # cancel set_layout + K("C-M-Key_2"): K("Alt-Shift-Key_2"), # set_layout + K("Alt-Shift-Key_3"): pass_through_key, # cancel set_layout + K("C-M-Key_3"): K("Alt-Shift-Key_3"), # set_layout + K("Alt-Shift-Key_4"): pass_through_key, # cancel set_layout + K("C-M-Key_4"): K("Alt-Shift-Key_4"), # set_layout + K("Alt-Shift-Key_8"): pass_through_key, # cancel set_layout + K("C-M-Shift-Key_2"): K("Alt-Shift-Key_8"), # set_layout + K("Alt-Shift-Key_9"): pass_through_key, # cancel set_layout + K("C-M-Shift-Key_3"): K("Alt-Shift-Key_9"), # set_layout + K("Alt-Shift-Key_5"): pass_through_key, # cancel set_layout + K("C-M-Shift-Key_5"): K("Alt-Shift-Key_5"), # set_layout # K(""): pass_through_key, # cancel # K(""): K(""), # }, "Sublime Text") -define_keymap(re.compile("konsole", re.IGNORECASE),{ +define_keymap(re.compile("^konsole$", re.IGNORECASE),{ # Ctrl Tab - In App Tab Switching K("LC-Tab") : K("Shift-Right"), K("LC-Shift-Tab") : K("Shift-Left"), @@ -717,7 +756,7 @@ define_keymap(re.compile("konsole", re.IGNORECASE),{ }, "Konsole tab switching") -define_keymap(re.compile("Io.elementary.terminal|kitty", re.IGNORECASE),{ +define_keymap(re.compile("^Io.elementary.terminal$|^kitty$", re.IGNORECASE),{ # Ctrl Tab - In App Tab Switching K("LC-Tab") : K("LC-Shift-Right"), K("LC-Shift-Tab") : K("LC-Shift-Left"), @@ -725,8 +764,19 @@ define_keymap(re.compile("Io.elementary.terminal|kitty", re.IGNORECASE),{ }, "Elementary Terminal tab switching") +define_keymap(re.compile("^deepin-terminal$", re.IGNORECASE),{ + K("RC-w"): K("Alt-w"), # Close only current tab, instead of all other tabs + K("RC-j"): None, # Block Cmd+J from remapping to vertical split (Ctrl+Shift+J) + K("RC-minus"): K("C-minus"), # Decrease font size/zoom out + K("RC-equal"): K("C-equal"), # Increase font size/zoom in +},"Deepin Terminal fixes") + +define_keymap(re.compile("alacritty", re.IGNORECASE),{ + K("RC-K"): K("C-L"), # clear log +}) + define_keymap(re.compile(termStr, re.IGNORECASE),{ - K("LC-RC-f"): K("M-F10"), # Toggle window maximized state + K("LC-RC-f"): K("Alt-F10"), # Toggle window maximized state # K("RC-Grave"): K("Super-Tab"), # xfce4 Switch within app group # K("RC-Shift-Grave"): K("Super-Shift-Tab"), # xfce4 Switch within app group # K("LC-Right"):K("C-M-Right"), # Default SL - Change workspace (budgie) @@ -743,9 +793,9 @@ define_keymap(re.compile(termStr, re.IGNORECASE),{ K("LC-Tab") : K("LC-PAGE_DOWN"), K("LC-Shift-Tab") : K("LC-PAGE_UP"), K("LC-Grave") : K("LC-PAGE_UP"), - # K("M-Tab"): pass_through_key, # Default - Cmd Tab - App Switching Default - # K("RC-Tab"): K("M-Tab"), # Default - Cmd Tab - App Switching Default - # K("RC-Shift-Tab"): K("M-Shift-Tab"), # Default - Cmd Tab - App Switching Default + # K("Alt-Tab"): pass_through_key, # Default - Cmd Tab - App Switching Default + # K("RC-Tab"): K("Alt-Tab"), # Default - Cmd Tab - App Switching Default + # K("RC-Shift-Tab"): K("Alt-Shift-Tab"), # Default - Cmd Tab - App Switching Default # Converts Cmd to use Ctrl-Shift K("RC-MINUS"): K("C-MINUS"), K("RC-EQUAL"): K("C-Shift-EQUAL"), diff --git a/linux/trayapps/appindicator/kintotray.py b/linux/trayapps/appindicator/kintotray.py index 5255a5d..65b5c94 100755 --- a/linux/trayapps/appindicator/kintotray.py +++ b/linux/trayapps/appindicator/kintotray.py @@ -3,15 +3,19 @@ import gi gi.require_version('Gtk', '3.0') -gi.require_version('AppIndicator3', '0.1') gi.require_version('Notify', '0.7') import signal,time,os,fcntl,datetime,re from subprocess import Popen, PIPE, CalledProcessError from shutil import which from gi.repository import Gtk,GLib,GdkPixbuf -from gi.repository import AppIndicator3 as appindicator from gi.repository import Notify as notify +try: + gi.require_version('AyatanaAppIndicator3', '0.1') + from gi.repository import AyatanaAppIndicator3 as appindicator +except ValueError: + gi.require_version('AppIndicator3', '0.1') + from gi.repository import AppIndicator3 as appindicator import signal diff --git a/windows/kinto.ahk b/windows/kinto.ahk index 39c9b95..898d752 100644 --- a/windows/kinto.ahk +++ b/windows/kinto.ahk @@ -62,6 +62,8 @@ Menu, Tray, Add, Autodetect Keyboards, autodetect ; Menu, Tray, check, Autodetect Keyboards ; Autodetect ; Menu, Tray, disable, Autodetect Keyboards ; CB/IBM Menu, Tray, Add, Suspend Kinto, tray_suspend +; Add tray menu item for toggling Option key special character entry scheme +Menu, Tray, Add, OptSpecialChars Shift+Opt+Cmd+O, toggle_optspecialchars ; Menu, Tray, Add, Returns to Desktop, min Menu, Tray, Add Menu, Tray, Add, Close, Exit @@ -177,6 +179,9 @@ GroupAdd, remotes, ahk_exe mstsc.exe GroupAdd, remotes, ahk_exe msrdc.exe GroupAdd, remotes, ahk_exe nxplayer.bin GroupAdd, remotes, ahk_exe vmconnect.exe +GroupAdd, remotes, ahk_exe RemoteDesktopManagerFree.exe +GroupAdd, remotes, ahk_exe vncviewer.exe +GroupAdd, remotes, Remote Desktop ahk_class ApplicationFrameWindow ; Disabled Edge for now - no ability to close all instances ; GroupAdd, browsers, Microsoft Edge ahk_class ApplicationFrameWindow @@ -214,6 +219,57 @@ GroupAdd, intellij, ahk_exe idea64.exe ; +F8::Send {LCtrl down}{LWin down}{left}{LCtrl up}{LWin up} ; Comment out on host machine ; +F6::Send {LCtrl down}{LWin down}{right}{LCtrl up}{LWin up} ; Comment out on host machine +; ######################################################################### +; ############# START OF FINDER MODS FOR FILE MANAGERS ################ +; ######################################################################### +; Finder Mods for Windows File Explorer (explore.exe) +#IfWinActive ahk_class CabinetWClass ahk_exe explorer.exe + ^i::Send !{Enter} ; Cmd+i: Get Info / Properties + ^r::Send {F5} ; Cmd+R: Refresh view (Not actually a Finder shortcut? But works in Linux file browsers too.) + ^1::Send ^+2 ; Cmd+1: View as Icons + ^2::Send ^+6 ; Cmd+2: View as List (Detailed) + ^3::Send ^+5 ; Cmd+3: View as List (Compact) + ^4::Send ^+1 ; Cmd+4: View as Gallery + ^Up::Send !{Up} ; Cmd+Up: Up to parent folder + ^Left::Send !{Left} ; Cmd+Left: Go to prior location in history + ^Right::Send !{Right} ; Cmd+Right: Go to next location in history + ^Down:: ; Cmd-Down: Navigate into the selected directory + For window in ComObjCreate("Shell.Application").Windows + If WinActive() = window.hwnd + For item in window.document.SelectedItems { + window.Navigate(item.Path) + Return + } + Return + ^[::Send !{Left} ; Cmd+Left_Brace: Go to prior location in history + ^]::Send !{Right} ; Cmd+Right_Brace: Go to next location in history + ^+o::Send ^{Enter} ; Cmd+Shift+o: Open in new window (tabs not available) + ^Delete::Send {Delete} ; Cmd+Delete: Delete / Send to Trash + ^BackSpace::Send {Delete} ; Cmd+Delete: Delete / Send to Trash + ^d::return, ; Block the unusual Explorer "delete" shortcut of Ctrl+D, used for "bookmark" in similar apps + $Enter:: ; Use Enter key to rename (F2), unless focus is inside a text input field. + ControlGetFocus, fc, A + If fc contains Edit,Search,Notify,Windows.UI.Core.CoreWindow1,SysTreeView321 + Send {Enter} + Else Send {F2} + Return + $BackSpace:: ; Backspace (without Cmd): Block Backspace key with error beep, unless inside text input field + ControlGetFocus, fc, A + If fc contains Edit,Search,Notify,Windows.UI.Core.CoreWindow1 + Send {BackSpace} + Else SoundBeep, 600, 300 + Return + $Delete:: ; Delete (without Cmd): Block Delete key with error beep, unless inside text input field + ControlGetFocus, fc, A + If fc contains Edit,Search,Notify,Windows.UI.Core.CoreWindow1 + Send {Delete} + Else SoundBeep, 600, 300 + Return +#IfWinActive +; ######################################################################### +; ############## END OF FINDER MODS FOR FILE MANAGERS ################# +; ######################################################################### + #IfWinNotActive ahk_group remotes ; Lock Workstation #^q::DllCall("LockWorkStation") @@ -451,7 +507,7 @@ GroupAdd, intellij, ahk_exe idea64.exe ; z::Send #z ; Chromebook ; #If ; Chromebook - #IfWinNotActive ahk_group terminals + #If Not WinActive("ahk_group terminals") and Not WinActive("ahk_group remotes") ^.::Send {Esc} ; emacs style #n::Send {Down} @@ -561,13 +617,16 @@ GroupAdd, intellij, ahk_exe idea64.exe ; Close all browsers #IfWinActive ahk_group browsers - ;Tab Navigation - ^+[::send ^{PgUp} - ^+]::send ^{PgDn} - ^!Left::send ^{PgUp} - ^!Right::send ^{PgDn} - #Left::send ^{PgUp} - #Right::send ^{PgDn} + ; Page Navigation + ^[::send !{Left} ; Go to prior page + ^]::send !{Right} ; Go to next page + ;Tab Navigation + ^+[::send ^{PgUp} ; Go to prior tab (left) + ^+]::send ^{PgDn} ; Go to next tab (right) + ^!Left::send ^{PgUp} ; Go to prior tab (left) + ^!Right::send ^{PgDn} ; Go to next tab (right) + #Left::send ^{PgUp} ; Go to prior tab (left) + #Right::send ^{PgDn} ; Go to next tab (right) ^q::send {Alt Down}f{Alt Up}x ; exit all windows ; Dev Tools !^i::send {Ctrl Down}{Shift Down}i{Shift Up}{Ctrl Up} @@ -867,3 +926,298 @@ Send {LWin up} Send {RShift up} Send {LShift up} return + +; ############################################################################################################### +; ### Special character insertion like Apple/macOS Option key methods, mapping to Unicode input method +; ### Common symbols available with Option+key or Shift+Option+key, accented keys with Option+Key1, then Key2 +; ############################################################################################################### + +; Shortcut to activate Option key special character scheme +^+!o::Gosub, toggle_optspecialchars + +; Function (subroutine?) for activation by tray menu item or keyboard shortcut +toggle_optspecialchars: + optspecialchars:=!optspecialchars ; Toggle value of optspecialchars variable on/off + if (optspecialchars = 1) { + Menu, Tray, Check, OptSpecialChars Shift+Opt+Cmd+O + MsgBox, 0, ALERT, % "Option key special character entry scheme is now ENABLED.`n`n" + . "WARNING: This will interfere with many Alt and Alt-Shift shortcuts.`n`n" + . "Disable from tray menu or with Shift+Opt+Cmd+O." + return + } + if (optspecialchars = 0) { + Menu, Tray, Uncheck, OptSpecialChars Shift+Opt+Cmd+O + MsgBox, 0, ALERT, Option key special character entry scheme is now DISABLED. + return + } + return + +; #IfWinNotActive ahk_group remotes +#If !WinActive("ahk_group remotes") && optspecialchars = 1 + + ; ###### NUMBER KEYS ROW ###### + + ; Dead_Keys_Accent_Grave + ; ### SC029 is ` (Grave key above Tab) + ; Grave accent: Option+`, then key to accent + $!SC029:: + ; Use Apple "dead keys" Option key method to attach accents to next character typed + ; Grave accent activated by Option+` (Alt plus scan code SC029, or !SC029) + StringCaseSense, On + ; watch next input string + Input, UserInput, L1 + Switch UserInput { + Case Esc: Return ; Watch for Escape key, cancel dead keys sequence + Case "a": Send, {U+00E0} ; à {U+00E0} (Alt+0224) + Case "e": Send, {U+00E8} ; è {U+00E8} (Alt+0232) + Case "i": Send, {U+00EC} ; ì {U+00EC} (Alt+0236) + Case "o": Send, {U+00F2} ; ò {U+00F2} (Alt+0242) + Case "u": Send, {U+00F9} ; ù {U+00F9} (Alt+0249) + Case "A": Send, {U+00C0} ; À {U+00C0} (Alt+0192) + Case "E": Send, {U+00C8} ; È {U+00C8} (Alt+0200) + Case "I": Send, {U+00CC} ; Ì {U+00CC} (Alt+0204) + Case "O": Send, {U+00D2} ; Ò {U+00D2} (Alt+0210) + Case "U": Send, {U+00D9} ; Ù {U+00D9} (Alt+0217) + Default: Send, %UserInput% ; No match? Send input through. + } + Return + + ; ### SC029 is ` (Grave key above Tab) + $!+SC029::Send, {U+0060} ; Grave Accent diacritic (non-combining) {U+0060}: ` (Alt+96) + $!1::Send, {U+00A1} ; Inverted Exclamation Mark {U+00A1}: ¡ (Alt+0161) + $!+1::Send, {U+2044} ; Fraction Slash, solidus (U+2044): ⁄ (Alt+8260) [Needs Unicode] + $!2::Send, {U+2122} ; Trade Mark Sign Emoji {U+2122}: ™ (Alt+0153) + $!+2::Send, {U+20AC} ; Euro currency symbol {U+20AC}: € (Alt+0128) + $!3::Send, {U+00A3} ; British Pound currency symbol {U+00A3}: £ (Alt+0163) + $!+3::Send, {U+2039} ; Single Left-Pointing Angle Quotation mark {U+2039}: (Alt+0139) + $!4::Send, {U+00A2} ; Cent currency symbol {U+00A2}: ¢ (Alt+0162) + $!+4::Send, {U+203A} ; Single Right-Pointing Angle Quotation mark (U+203A): (Alt+0155) + $!5::Send, {U+221E} ; Infinity mathematical symbol {U+221E}: ∞ (Alt+236) + $!+5::Send, {U+FB01} ; fi latin small ligature: fi (U+FB01) (Alt+64257) [Needs Unicode] + $!6::Send, {U+00A7} ; Section symbol {U+00A7}: § (Alt+0167) + $!+6::Send, {U+FB02} ; fl small ligature: (U+FB02) (Alt+64258) [Needs Unicode.] + $!7::Send, {U+00B6} ; Paragraph mark (Pilcrow) symbol {U+00B6}: ¶ (Alt+0182) + $!+7::Send, {U+2021} ; Double dagger (cross) symbol {U+2021}: ‡ (Alt+0135) + $!8::Send, {U+2022} ; Bullet point symbol {U+2022}: • (Alt+0149) + $!+8::Send, {U+00B0} ; Degree symbol {U+00B0}: ° (Alt+0176) + $!9::Send, {U+00AA} ; Feminine Ordinal Indicator symbol {U+00AA}: ª (Alt+0170) + $!+9::Send, {U+00B7} ; Middle Dot (interpunct/middot) symbol {U+00B7}: · (Alt+0183) + $!0::Send, {U+00BA} ; Masculine Ordinal Indicator symbol {U+00BA}: º (Alt+0186) + $!+0::Send, {U+201A} ; Single low-9 quotation mark {U+201A}: ‚ (Alt+0130) + $!-::Send, {U+2013} ; En Dash symbol {U+2013}: – (Alt+0150) + $!+-::Send, {U+2014} ; Em Dash symbol {U+2014}: — (Alt+0151) + $!=::Send, {U+2260} ; Not Equal To symbol (U+2260): ≠ (Alt+8800) [Needs Unicode] + $!+=::Send, {U+00B1} ; Plus Minus symbol {U+00B1}: ± (Alt+0177) + + + ; ###### LETTER AND PUNCTUATION KEYS ###### [ in QWERTY order ] + + ; ############## + ; ### 1st row: Tab-key row [ qwertyuiop[]\ ] [ QWERTYUIOP{}| ] + + $!q::Send, {U+0153} ; Small oe (oethel) ligature {U+0153}: œ (Alt+0156) + $!+q::Send, {U+0152} ; Capital OE (Oethel) ligature {U+0152}: Œ (Alt+0140) + $!w::Send, {U+2211} ; N-Ary Summation (sigma) notation (U+2211}: ∑ [Needs Unicode] + $!+w::Send, {U+201E} ; Double Low-9 Quotation mark {U+201E}: „ (Alt+0132) + + ; Dead_Keys_Accent_Acute + ; Acute accent: Option+e, then key to accent + $!e:: + ; Use Apple "dead keys" Option key method to attach accents to next character typed + ; Acute accent activated by Option+e (logical Alt+e) + StringCaseSense, On + ; watch next input string + Input, UserInput, L1 + Switch UserInput { + Case Esc: Return ; Watch for Escape key, cancel dead keys sequence + Case "a": Send, {U+00E1} ; á {U+00E1} (Alt+0225) + Case "e": Send, {U+00E9} ; é {U+00E9} (Alt+0233) + Case "i": Send, {U+00ED} ; í {U+00ED} (Alt+0237) + Case "o": Send, {U+00F3} ; ó {U+00F3} (Alt+0243) + Case "u": Send, {U+00FA} ; ú {U+00FA} (Alt+0250) + Case "A": Send, {U+00C1} ; Á {U+00C1} (Alt+0193) + Case "E": Send, {U+00C9} ; É {U+00C9} (Alt+0201) + Case "I": Send, {U+00CD} ; Í {U+00CD} (Alt+0205) + Case "O": Send, {U+00D3} ; Ó {U+00D3} (Alt+0211) + Case "U": Send, {U+00DA} ; Ú {U+00DA} (Alt+0218) + Default: Send, %UserInput% ; No match? Send input through. + } + Return + + $!+e::Send, {U+00B4} ; Acute accent diacritic (non-combining) {U+00B4}: ´ (Alt+0180) + $!r::Send, {U+00AE} ; Registered Trade Mark Sign {U+00AE}: ® (Alt+0174) + $!+r::Send, {U+2030} ; Per mille symbol {U+2030}: ‰ (Alt+0137) + $!t::Send, {U+2020} ; Simple dagger (cross) symbol {U+2020}: † (Alt+0134) + $!+t::Send, {U+02C7} ; Caron/hacek diacritic (non-combining) (U+02C7): ˇ (Alt+0134) + $!y::Send, {U+00A5} ; Yen currency symbol {U+00A5}: ¥ (Alt+0165) + $!+y::Send, {U+00C1} ; Latin Capital Letter a with Acute (U+00C1): Á (Alt+0193) + + ; Dead_Keys_Accent_Umlaut + ; Umlaut/Diaeresis accent: Option+u, then key to accent + $!u:: + ; Use Apple "dead keys" Option key method to attach accents to next character typed + ; Umlaut/Diaeresis accent activated by Option+u (logical Alt+u) + StringCaseSense, On + ; watch next input string + Input, UserInput, L1 + Switch UserInput { + Case Esc: Return ; Watch for Escape key, cancel dead keys sequence + Case "a": Send, {U+00E4} ; ä {U+00E4} (Alt+0228) + Case "e": Send, {U+00EB} ; ë {U+00EB} (Alt+0235) + Case "i": Send, {U+00EF} ; ï {U+00EF} (Alt+0239) + Case "o": Send, {U+00F6} ; ö {U+00F6} (Alt+0246) + Case "u": Send, {U+00FC} ; ü {U+00FC} (Alt+0252) + Case "y": Send, {U+00FF} ; ÿ {U+00FF} (Alt+0255) + Case "A": Send, {U+00C4} ; Ä {U+00C4} (Alt+0196) + Case "E": Send, {U+00CB} ; Ë {U+00CB} (Alt+0203) + Case "I": Send, {U+00CF} ; Ï {U+00CF} (Alt+0207) + Case "O": Send, {U+00D6} ; Ö {U+00D6} (Alt+0214) + Case "U": Send, {U+00DC} ; Ü {U+00DC} (Alt+0220) + Case "Y": Send, {U+0178} ; Ÿ {U+0178} (Alt+0159) + Default: Send, %UserInput% ; No match? Send input through. + } + Return + + $!+u::Send, {U+00A8} ; Umlaut/Diaeresis diacritic (non-combining) {U+00A8}: (Alt+0168) + + ; Dead_Keys_Accent_Circumflex + ; Circumflex accent: Option+i, then key to accent + $!i:: + ; Use Apple "dead keys" Option key method to attach accents to next character typed + ; Circumflex accent activated by Option+i (logical Alt+i) + StringCaseSense, On + ; watch next input string + Input, UserInput, L1 + Switch UserInput { + Case Esc: Return ; Watch for Escape key, cancel dead keys sequence + Case "a": Send, {U+00E2} ; â {U+00E2} (Alt+0226) + Case "e": Send, {U+00EA} ; ê {U+00EA} (Alt+0234) + Case "i": Send, {U+00EE} ; î {U+00EE} (Alt+0238) + Case "o": Send, {U+00F4} ; ô {U+00F4} (Alt+0244) + Case "u": Send, {U+00FB} ; û {U+00FB} (Alt+0251) + Case "A": Send, {U+00C2} ;  {U+00C2} (Alt+0194) + Case "E": Send, {U+00CA} ; Ê {U+00CA} (Alt+0202) + Case "I": Send, {U+00CE} ; Î {U+00CE} (Alt+0206) + Case "O": Send, {U+00D4} ; Ô {U+00D4} (Alt+0212) + Case "U": Send, {U+00DB} ; Û {U+00DB} (Alt+0219) + Default: Send, %UserInput% ; No match? Send input through. + } + Return + + $!+i::Send, {U+02C6} ; Modifier Letter Circumflex Accent (U+02C6): ˆ (Alt+0137) + $!o::Send, {U+00F8} ; Latin Small Letter o with Stroke {U+00F8}: ø (Alt+0248) + $!+o::Send, {U+00D8} ; Latin Capital Letter O with Stroke {U+00D8}: Ø (Alt+0216) + $!p::Send, {U+03C0} ; Greek Small Letter Pi {U+03C0}: π (Alt+227) + $!+p::Send, {U+220F} ; N-Ary Product mathematical symbol (U+220F): ∏ [Needs Unicode] + $![::Send, {U+201C} ; Left Double Quotation Mark {U+201C}: “ (Alt+0147) + $!+[::Send, {U+201D} ; Right Double Quotation Mark {U+201D}: ” (Alt+8) + $!]::Send, {U+2018} ; Left Single Quotation Mark {U+2018}: ‘ (Alt+0145) + $+!]::Send, {U+2019} ; Right Single Quotation Mark {U+2019}: ’ (Alt+0146) + $!\::Send, {U+00AB} ; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK {U+00AB}: « (Alt+0171) + $!+\::Send, {U+00BB} ; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK {U+00BB}: » (Alt+0187) + + + ; ############## + ; ### 2nd row: Caps Lock row [ asdfghjkl;' ] [ ASDFGHJKL:" ] + + $!a::Send, {U+00E5} ; Small Letter a with Ring Above {U+00E5}: å (Alt+0229) + $!+a::Send, {U+00C5} ; Capital Letter A with Ring Above {U+00C5}: Å (Alt+0197) + $!s::Send, {U+00DF} ; German Eszett/beta (Sharfes/Sharp S) {U+00DF}: ß (Alt+0223) + $!+s::Send, {U+00CD} ; Latin Capital Letter I with Acute {U+00CD}: Í (Alt+0205) + $!d::Send, {U+2202} ; Partial Differential mathematical symbol {U+2202}: ∂ (Alt+2202) [Needs Unicode] + $!+d::Send, {U+00CE} ; Latin Capital Letter I with Circumflex {U+00CE}: Î (Alt+0206) + $!f::Send, {U+0192} ; Function/florin currency symbol {U+0192}: ƒ (Alt+159) + $!+f::Send, {U+00CF} ; Latin Capital Letter I with Diaeresis {U+00CF}: Ï (Alt+0207) + + ; ####################################################################### + ; ## Problem: Option+g (Win+g) brings up Windows XBox Game Bar! + ; ## To remove/disable paste this text in PowerShell (without quotes): + ; ## "Get-AppxPackage Microsoft.XboxGamingOverlay | Remove-AppxPackage" + ; ####################################################################### + $!g::Send, {U+00A9} ; Copyright Sign {U+00A9}: © (Alt+0169) + $!+g::Send, {U+02DD} ; Double Acute Accent diacritic (non-combining) {U+02DD}: ˝ [Needs Unicode] + $!h::Send, {U+02D9} ; Dot Above diacritic (non-combining) {U+02D9}: ˙ [Needs Unicode] + $!+h::Send, {U+00D3} ; Latin Capital Letter O with Acute {U+00D3}: Ó (Alt+0211) + $!j::Send, {U+2206} ; Increment, laplace operator symbol {U+2206}: ∆ [Needs Unicode] + $!+j::Send, {U+00D4} ; Latin Capital Letter O with Circumflex {U+00D4}: Ô (Alt+0212) + $!k::Send, {U+02DA} ; Ring Above diacritic (non-combining) {U+02DA}: ˚ [Needs Unicode] (NOT degree sign/symbol) + + ; Apple logo {U+F8FF}:  [Unicode Private Use Area, req's Baskerville Old Face font] + ; $!+k::Send, {U+F8FF} ; This Unicode address only works with Mac fonts + $!+k:: + Send, {U+F000} ; Change font of inserted character (may be invisible) to Baskerville Old Face + apple_logo_alert:=1 ; Set to zero to disable, one to enable (default is enabled) + if (apple_logo_alert=1) { + MsgBox, 0, ALERT, % "ALERT: Change the font of the inserted character!`n`n" + . "Apple logo character requires the Baskerville Old Face font.`n`n`n" + . "Note 1: The character has been inserted but may be INVISIBLE`n" + . " (i.e., non-printing) in its current font.`n`n`n" + . "Note 2: The inserted character will probably NOT be portable`n" + . " to a Mac document/font. Use only for print/PDF `n" + . " purposes on PC.`n`n`n" + . "Note 3: Search for apple_logo_alert in kinto.ahk config and `n" + . " set it to zero to disable this MsgBox.`n`n`n" + } + return + + ; ####################################################################### + ; ## Option+L works, but will also trigger the Win+L screen locking. + ; ## The screen locking shortcut can only be disabled in the registry. + ; ####################################################################### + $!l::Send, {U+00AC} ; Not Sign angled dash symbol {U+00AC}: ¬ (Alt+170) + $!+l::Send, {U+00D2} ; Latin Capital Letter O with Grave {U+00D2}: Ò (Alt+0210) + $!;::Send, {U+2026} ; Horizontal elipsis {U+2026}: … (Alt+0133) + $!+;::Send, {U+00DA} ; Latin Capital Letter U with Acute {U+00DA}: Ú (Alt+0218) + + ; ####################################################################### + ; ## SC028 is single-quote key scan code + ; ####################################################################### + $!SC028::Send, {U+00E6} ; Small ae ligature {U+00E6}: æ (Alt+0230) + $!+SC028::Send, {U+00C6} ; Capital AE ligature {U+00C6}: Æ (Alt+0198) + + + ; ############## + ; ### 3rd row: Shift-Keys row [ zxcvbnm,./ ] [ ZXCVBNM<>? ] + + $!z::Send, {U+03A9} ; Greek Capital Letter Omega symbol {U+03A9} Ω (Alt+234) + $!+z::Send, {U+00B8} ; Spacing Cedilla diacritic symbol (non-combining) {U+00B8}: ¸ (Alt+0184) + $!x::Send, {U+2248} ; Almost Equal To symbol (U+2248): ≈ (Alt+247) + $!+x::Send, {U+02DB} ; Ogonek diacritic (non-combining) (U+02DB): ˛ [Needs Unicode] + $!c::Send, {U+00E7} ; Small Letter c with Cedilla {U+00E7}: ç (Alt+0231) + $!+c::Send, {U+00C7} ; Capital Letter C with Cedilla {U+00C7}: Ç (Alt+0199) + $!v::Send, {U+221A} ; Square Root radical sign (U+221A): √ (Alt+251) + $!+v::Send, {U+25CA} ; Lozenge (diamond) shape symbol (U+25CA): ◊ [Needs Unicode] + $!b::Send, {U+222B} ; Integral mathematical symbol (U+222B): ∫ [Needs Unicode] + $!+b::Send, {U+0131} ; Latin Small Letter Dotless i (U+0131): ı [Needs Unicode] + + ; Dead_Keys_Accent_Tilde + ; Tilde accent: Option+n, then key to accent + $!n:: + ; Use Apple "dead keys" Option key method to attach accents to next character typed + ; Tilde accent activated by Option+n (logical Alt+n) + StringCaseSense, On + ; watch next input string + Input, UserInput, L1 + Switch UserInput { + Case Esc: Return ; Watch for Escape key, cancel dead keys sequence + Case "a": Send, {U+00E3} ; ã {U+00E3} (Alt+0227) + Case "n": Send, {U+00F1} ; ñ {U+00F1} (Alt+0241) + Case "o": Send, {U+00F5} ; õ {U+00F5} (Alt+0245) + Case "A": Send, {U+00C3} ; à {U+00C3} (Alt+0195) + Case "N": Send, {U+00D1} ; Ñ {U+00D1} (Alt+0209) + Case "O": Send, {U+00D5} ; Õ {U+00D5} (Alt+0213) + Default: Send, %UserInput% ; No match? Send input through. + } + Return + + $!+n::Send, {U+02DC} ; Small Tilde character (U+02DC): ˜ (Alt+0152) + $!m::Send, {U+00B5} ; Micro (mu) symbol {U+00B5}: µ (Alt+0181) + $!+m::Send, {U+00C2} ; Latin Capital Letter a with Circumflex (U+00C2):  (Alt+0194) + $!,::Send, {U+2264} ; Less than or equal to symbol {U+2264}: ≤ (Alt+243) + $!+,::Send, {U+00AF} ; Macron/overline/apl overbar (non-combining) (U+00AF): ¯ (Alt+0175) + $!.::Send, {U+2265} ; Greater than or equal to symbol {U+2265}: ≥ (Alt+242) + $!+.::Send, {U+02D8} ; Breve diacritic (non-combining) {U+02D8}: ˘ [Needs Unicode] + $!/::Send, {U+00F7} ; Obelus/Division symbol {U+00F7}: ÷ (Alt+0247) + $!+/::Send, {U+00BF} ; Inverted Question Mark {U+00BF}: ¿ (Alt+0191) + +#If ; ### END of special character insertion with Option(Alt) key diff --git a/xkeysnail_service.sh b/xkeysnail_service.sh index 9003b75..0d6f9a9 100755 --- a/xkeysnail_service.sh +++ b/xkeysnail_service.sh @@ -315,8 +315,9 @@ if ! [ -x "$(command -v xhost)" ] || ! [ -x "$(command -v gcc)" ]; then fi if [[ $dename == "kde" ]]; then - if [[ $distro == "manjarolinux" ]]; then + if [[ $distro == "manjarolinux" ]] || cat /etc/os-release | grep -E "^ID(_LIKE)?" | grep -q arch; then # Manjario or other arch-like distros: SteamOS3,HoloISO sudo ./linux/system-config/unipkg.sh vte3 + sudo ./linux/system-config/unipkg.sh python-pip else sudo ./linux/system-config/unipkg.sh libvte-2.91-dev fi @@ -329,7 +330,7 @@ if [[ $distro == 'kdeneon' ]]; then kquitapp5 kglobalaccel && sleep 2s && kglobalaccel5 & fi -if [[ $distro == 'fedora' ]]; then +if [[ $distro == 'fedora' ]] || [[ $distro == 'fedoralinux' ]]; then if [[ $(gsettings get org.gnome.desktop.wm.keybindings show-desktop | grep "\[\]" | wc -l) == 1 ]];then gsettings set org.gnome.desktop.wm.keybindings show-desktop "['d']" else @@ -385,10 +386,10 @@ fi if ! [ -x "$(command -v python3-config)" ]; then if [ "$distro" == "ubuntu" ] || [ "${distro::6}" == "debian" ] || [ "$distro" == 'linuxmint' ]; then pydev="python3-dev" - elif [ "$distro" == "fedora" ]; then + elif [ "$distro" == "fedora" ] || [ "$distro" == "fedoralinux" ]; then pydev="python3-devel" fi - if [ "$distro" == "gnome" ] || [ "$distro" == "fedora" ] || [ "${distro::6}" == "debian" ] || [ "$distro" == 'linuxmint' ]; then + if [ "$distro" == "gnome" ] || [ "$distro" == "fedora" ] || [ "$distro" == "fedoralinux" ] || [ "${distro::6}" == "debian" ] || [ "$distro" == 'linuxmint' ] ; then echo "Will need to install $pydev..." sudo ./linux/system-config/unipkg.sh "$pydev" fi @@ -500,7 +501,7 @@ if [[ $distro == "popos" ]]; then perl -pi -e "\s{4}(# )(K.*)(# SL - .*popos.*)/ \$2\$3/g" ./linux/kinto.py.new >/dev/null 2>&1 fi -if [[ $distro == "fedora" ]]; then +if [[ $distro == 'fedora' ]] || [[ $distro == 'fedoralinux' ]]; then perl -pi -e "\s{4}(# )(K.*)(# SL - .*fedora.*)/ \$2\$3/g" ./linux/kinto.py.new >/dev/null 2>&1 sed -i "s#{sudo}##g" ./linux/xkeysnail.service.new selinuxuser=system_u @@ -575,7 +576,7 @@ if ! [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then exit 0 fi sed -i "s#{xkeysnail}#`which xkeysnail`#g" ./linux/limitedadmins.new - if [[ $distro == "fedora" ]]; then + if [[ $distro == 'fedora' ]] || [[ $distro == 'fedoralinux' ]]; then echo "Changing SELinux context" sudo chcon -v --user=$selinuxuser --type=$selinuxtype "$xkeypath"xkeysnail.service fi @@ -587,7 +588,7 @@ if ! [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then sed -i "s#{xkeysnail}#`which xkeysnail`#g" ./linux/xkeysnail.service.new sudo mv ./linux/xkeysnail.service.new "$xkeypath"xkeysnail.service && echo "Service file added to "$xkeypath"xkeysnail.service" - if [[ $distro == "fedora" ]]; then + if [[ $distro == 'fedora' ]] || [[ $distro == 'fedoralinux' ]]; then sudo cp "$xkeypath"xkeysnail.service /etc/systemd/system/xkeysnail.service && echo "Copied service file to system..." || echo "Failed to create copy..." sudo cp "$xkeypath"xkeysnail.service /etc/systemd/system/graphical.target.wants/xkeysnail.service && echo "Copied service file to system for graphical target..." || echo "Failed to create copy for graphical target..." sudo chown -R root:root /etc/systemd/system/xkeysnail.service && echo "Ownership set for root..." || echo "Failed to set ownership..."