Compare commits

...

110 Commits
1.2-10 ... dev

Author SHA1 Message Date
Ben Reaves
4ed4209563 Merge branch 'master' into dev 2022-09-03 01:39:39 -05:00
Ben Reaves
e106710afb Update README.md 2022-07-26 23:20:35 -05:00
Ben Reaves
8eb26a3f74 Update README.md 2022-07-26 23:18:56 -05:00
Ben Reaves
386bfa9c65 Update README.md 2022-07-26 23:16:05 -05:00
Ben Reaves
6aa5cc5b54 Merge pull request #727 from deftdawg/patch-1
Fix install on Arch-based systems
2022-07-07 07:23:25 -05:00
deftdawg
64995d4d56 Fix install on Arch-based systems
- Tested on SteamOS 3 / HoloISO
2022-07-06 18:09:39 -04:00
Ben Reaves
7b3aba95c4 Merge pull request #719 from RedBearAK/patch-53
[Win] Option key special character entry scheme
2022-07-02 00:09:44 -05:00
Ben Reaves
f342ee4db1 Merge pull request #652 from RedBearAK/patch-45
[Win] Finder Mods for Windows File Explorer file manager
2022-07-01 23:46:37 -05:00
RedBearAK
66407d6010 Reformat comments, reduce line count 2022-06-23 01:32:26 -08:00
RedBearAK
f3c0b51481 Converted if-else dead keys blocks to Switch/Case
Saved over a hundred lines and made the dead keys blocks a lot more readable.
2022-06-23 00:43:53 -08:00
Ben Reaves
60d836d272 Update README.md 2022-06-19 00:37:07 -05:00
RedBearAK
8e1e59b51f (Win/AHK) Option key special character entry scheme
This is an AHK implementation of the full selection of special characters, symbols, and dead keys accented characters that are available on the standard US Apple keyboard using Option or Option+Shift. Uses the AHK Unicode method, which works even with applications like Notepad that fail with the Alt Code character entry method. 

The Option key scheme will interfere with Alt and Alt+Shift shortcuts while active, so it is disabled by default when the AHK script is loaded. It can be enabled and disabled again with Shift+Option+Command+O (the letter "o"), or by using the new tray menu item. The tray menu item will receive a check mark when the scheme is active. 

Alert messages are presented to the user on enable and disable. The enable MsgBox warns about the conflict and reminds the user how to disable the scheme. 

Known issues: 

Typing Option+L will work, but will also lock the screen since the keys are Win+L. This can only be disabled in the registry, which will completely disable the ability to lock the screen. There's no known better solution. 

The Apple logo (Shift+Option+K) exists only in the Baskerville Old Face font, and the related shortcut will display a MsgBox explaining how to make it display properly. 

All other characters work without known issues. 

Documentation of all the included characters (137 different characters, if my math is right) that can be typed when this scheme is enabled is here: 

https://github.com/RedBearAK/optspecialchars/blob/main/Option-key-characters.md

This PR replaces and enhances the Umlaut function submitted by user Kirschem in PR #647.
2022-06-18 03:05:35 -08:00
Ben Reaves
bb1dcf4824 Merge pull request #692 from joshgoebel/patch-4
Replace M, LM, RM with Alt, LAlt, RAlt
2022-06-17 19:25:08 -05:00
Josh Goebel
177577b303 Merge branch 'master' into patch-4 2022-06-17 10:13:17 -04:00
Ben Reaves
7c6c56f7c3 Update README.md 2022-06-15 21:46:45 -05:00
Ben Reaves
2c90c09c1b Update README.md 2022-06-15 21:45:30 -05:00
Ben Reaves
1eca5430bf Merge pull request #704 from joshgoebel/patch-9
(enh) Map clear log for alacritty terminal
2022-06-15 21:26:52 -05:00
Ben Reaves
cbd0e8cf34 Merge pull request #715 from rbreaves/hotfix
Adds multiple remote desktop clients for Windows & exact wm_class matching for Linux
2022-06-15 21:26:32 -05:00
Ben Reaves
79dd20652b Adds Devolutions RDP, Latest MS RDC, vmconnect, & vncviewer.exe. Closes #712 2022-06-16 02:23:45 -05:00
Ben Reaves
53c5d96b2c Setting proper regex for app name matches. #696 2022-06-16 02:17:15 -05:00
Ben Reaves
75fc13e0ea Merge pull request #707 from kash-raman/feature/citrxi
adding citrix workspace
2022-06-13 18:36:58 -05:00
Kash Raman
82018232bf adding citrix workspace 2022-06-13 14:07:45 -04:00
Ben Reaves
f310919cf9 Update README.md 2022-06-11 22:03:17 -05:00
Josh Goebel
aadfafac4a (enh) Map clear log for alacritty terminal 2022-06-11 07:22:44 -04:00
Ben Reaves
7690af09fc Adds Subl for Sublime Text Arch package. closes #696 2022-06-10 23:26:55 -05:00
Josh Goebel
f5867a3d91 Replace M, LM, RM with Alt, LAlt, RAlt
Removes any ambiguity because Key.*META is NOT Alt, it's (according to our own mapping!) Super.

Long-term `M` should probably go away (to further remove ambiguity or be replaced with META.

Context: https://github.com/mooz/xkeysnail/issues/158
2022-06-09 08:56:20 -04:00
Ben Reaves
b38c1a15b7 Update README.md 2022-06-04 13:48:56 -05:00
Ben Reaves
5c36166ada Merge pull request #671 from RedBearAK/patch-51
Tab nav and wordwise (terminals) fixes
2022-05-21 00:18:11 -05:00
RedBearAK
cdaaefaa0b Tab nav and wordwise (terminals) fixes
Changes implemented here: 

- Tab navigation shortcut (Cmd+Shift+Braces) that has worked in multiple macOS applications with tabbed interfaces. 

- Tab navigation shortcut (Cmd+Shift+Arrows) that also works in Apple's Terminal.app. 

- Wordwise delete word/line shortcuts, to override a conflict with GUI app wordwise shortcuts. 

- Move tab nav for Deepin Terminal into a more general override block that also supports GNOME Console and other apps that use Ctrl+Shift+Tab/Ctrl+Tab instead of Ctrl+PgUp/PgDn.
2022-05-19 21:10:26 -08:00
Ben Reaves
41e3703a7c Merge pull request #667 from RedBearAK/patch-49
Overrides for Deepin Terminal
2022-05-19 23:52:07 -05:00
Ben Reaves
a85fac2e4b Merge pull request #670 from RedBearAK/patch-50
Add GNOME Console to terminals WM_CLASS list
2022-05-19 23:51:20 -05:00
Ben Reaves
f01e457bf2 Merge pull request #666 from RedBearAK/patch-48
Add Deepin Browser to browsers and chromes WM_CLASS lists
2022-05-19 23:50:53 -05:00
RedBearAK
2c28ec5022 Add GNOME Console to terminals WM_CLASS list 2022-05-19 20:07:45 -08:00
RedBearAK
e82de02e00 Overrides for Deepin Terminal
Some overrides necessary for Deepin Terminal. 

- Tab nav
- Zoom/font size controls
- Tab close shortcut remap to avoid closing all other tabs instead of current tab
2022-05-19 04:03:30 -08:00
RedBearAK
d9817d406e Add Deepin Browser to browsers and chromes WM_CLASS lists
Adding the WM_CLASS for Deepin Browser (org.deepin.browser) to the general browsers and the Chromes WM_CLASS lists. Browser is based on Chromium.
2022-05-19 03:22:23 -08:00
Ben Reaves
35981fc77f Added Fedora 35/36 dependency 2022-05-14 01:18:48 -04:00
Ben Reaves
346c79ca42 Closes #660, fixes incompatibility w/ Fedora 35 & 36 2022-05-13 23:33:09 -04:00
Ben Reaves
f65e31791f Merge pull request #649 from RedBearAK/patch-44
[Win] Enable browser page navigation with Cmd+Braces/Brackets
2022-05-05 08:21:12 -05:00
Ben Reaves
1b30572953 Merge pull request #662 from RedBearAK/patch-47
Enable Cmd+Braces page nav in Chrome(s)
2022-05-04 21:56:02 -05:00
RedBearAK
11b2f30169 Enable Cmd+Braces page nav in Chrome(s)
This should enable page nav (back/forward in page history) with Cmd+Braces in Chrome-based web browsers. 

Also fixes the inability to quit Chrome-based browsers with Cmd+Q.
2022-05-04 18:10:45 -08:00
RedBearAK
fcb5c75180 Change SoundBeep tuning. 2022-04-26 14:39:53 -08:00
RedBearAK
3d57409b3e Update kinto.ahk
Reformatting of comments
2022-04-26 14:27:52 -08:00
Ben Reaves
648819ffe7 Merge branch 'hotfix' 2022-04-24 15:47:01 -05:00
Ben Reaves
be898ab3c5 Fix for Ayatana systray indicators w/ appindicator fallback 2022-04-24 15:46:47 -05:00
RedBearAK
a69b11884b Finder Mods for Windows File Explorer file manager
As mentioned in issue #651, this works for me, but if it isn't in the best location in the file just move it or do your own commit and then close this, or let me know if you've merged the code separately so I can close this. 

Working shortcuts in this PR to get Windows File Explorer (explorer.exe) to behave more like macOS Finder: 
- Get Info (Cmd+i)
- View mode shortcuts (Cmd+1/2/3/4)
- Nav with arrows, including code that stops Explorer opening new windows for Cmd+Down on folders
- Nav with braces (prior/next in history)
- Open in New Window (Cmd+Shift+o)
- Safer delete shortcuts, with error beeps for Backspace or Delete used without Cmd key
- Enter key to rename like Finder (without blocking other usage of Enter key)

Code passes Enter, Backspace and Delete keys when focus is in editable text input fields (and passes Enter key in sidebar for navigation).
2022-04-18 01:20:47 -08:00
RedBearAK
bed5f37ce3 [Win] Enable browser page navigation with Cmd+Braces/Brackets
This just enables the Cmd+Braces (brackets?) page navigation for Windows web browsers. And adds some comments on the tab navigation lines. 

Only the page navigation lines are actually new.
2022-04-16 16:22:55 -08:00
Ben Reaves
be0a6bb197 Merge pull request #647 from kirschem/feature/#622-macos-umlaut-behavior-on-windows
#622: Mirror umlaut behavior from macos with ahk
2022-04-15 22:08:38 -05:00
Marcel Kirsche
e4a649fc8c #622: Mirror umlaut behavior from macos with ahk 2022-04-15 17:37:48 +02:00
Ben Reaves
ddc7442e55 Update README.md 2022-04-04 21:00:25 -05:00
Ben Reaves
274833af95 Added additional Firefox wm_class names. Closes #642 2022-04-02 01:36:16 -05:00
Ben Reaves
bd9ecd123f Create 01-ubuntu-budgie.yml 2022-04-01 23:58:25 -05:00
Ben Reaves
14ac2c8349 Update README.md 2022-03-20 02:11:51 -05:00
Ben Reaves
a91bbec93c Windows - Adds new Lockscreen hotkey, lowercase hotkey & taskview 2022-03-13 17:21:18 -05:00
Ben Reaves
df43fb363d Merge pull request #624 from HelgeCPH/master
Added missing libvte dependency
2022-02-16 23:02:34 -06:00
Helge
0dd5baca34 Added missing libvte dependency
The libvte dev library is missing when installing on Elementary OS (6.1).
Added its installation.
2022-02-16 15:56:04 +01:00
Ben Reaves
896ab30e57 Update README.md 2022-02-09 20:43:15 -06:00
Ben Reaves
f9aaae3038 Merge branch 'hotfix' 2022-01-31 13:16:16 -06:00
Ben Reaves
94b018aa48 Closes #616 major bug with xkeysnail fork d/l 2022-01-31 13:15:15 -06:00
Ben Reaves
6b3ea9afab Merge pull request #611 from RedBearAK/patch-43
Add cutefish-terminal and cutefish-filemanager
2022-01-20 23:01:01 -06:00
Ben Reaves
1ee92339c0 Merge pull request #610 from RedBearAK/patch-42
Disable Duplicate (Cmd+D) shortcut in file managers
2022-01-20 22:57:54 -06:00
RedBearAK
4e1331f9bb Add cutefish-terminal and cutefish-filemanager
The CutefishOS apps seem to have somewhat limited support for keyboard shortcuts in general, but what they do support is working as expected after adding their WM_CLASSes to the config file.
2022-01-20 16:34:45 -09:00
RedBearAK
f44182cefd Disable Duplicate (Cmd+D) shortcut in file managers
As much as I enjoy the convenience of the Cmd+D (Duplicate file/folder) shortcut, I have reluctantly made the decision that for most users it would be best to disable it by default, since it conflicts with the inherited function of "Add Bookmark" that Linux file managers like Nautilus have started using in parity with web browsers. Just one more thing that makes it easier to slide between web browsers and file "browsers". 

It's fun but has never been a "necessary" shortcut since a quick Cmd+C/Cmd+V will always accomplish the same thing. No one but me should miss it being active, and it will no longer interfere by default with bookmarking locations in Nautilus or any other file manager with that function assigned to Cmd+D (Ctrl+D). 

Anyone who really wants it can re-enable it.
2022-01-20 14:59:57 -09:00
Ben Reaves
d15972dcae Merge pull request #600 from RedBearAK/patch-39
Cmd+Shift+Braces for tab/view nav in codeStr apps
2022-01-11 19:50:11 -06:00
RedBearAK
65f48ce2f1 Cmd+Shift+Braces for tab/view nav in codeStr apps
Cmd+Shift+Braces (in addition to the already existing remap of Opt+Cmd+Left/Right) is a verified working alternate shortcut for tab (view) navigation in VSCodium on macOS. 

While Cmd+Braces advances and retracts the indent/tabbing level, these Cmd+Shift+Braces shortcuts (physical Ctrl+Shift+Braces on PC keyboard) appear to do nothing in the Linux version of VSCode without this remap. 

Enabling this will bring the Cmd+Shift+Braces tab navigation behavior in the "codes" apps in line with the same behavior in macOS for web browser tabs, terminal tabs and file manager tabs.
2022-01-11 15:07:02 -09:00
Ben Reaves
589807bad9 Hardcoded python3 path, avoids issue w/ homebrew 2022-01-09 02:10:27 -06:00
Ben Reaves
55a6d132c7 Merge pull request #598 from RedBearAK/patch-38
Tab navigation in terminals with Cmd+Shift+Braces
2022-01-07 22:27:23 -06:00
RedBearAK
eebf4d61eb Tab navigation in terminals with Cmd+Shift+Braces
This update activates tab navigation (prior/next tab, left/right) in terminals, with Ctrl+Shift+Braces (Cmd+Shift+Braces in macOS). 

Verified this is a working shortcut in macOS Mojave, on a 2011 MacBook Pro. Works for tab nav in both Apple's Terminal.app and iTerm2. The Ctrl+PgUp/PgDn shortcut that works for terminal tab nav in Linux does nothing in macOS. 

This is the same shortcut remap that is working for tab nav in web browsers and file managers. All tested working in macOS.
2022-01-07 00:16:15 -09:00
Ben Reaves
b364902db0 Merge pull request #597 from RedBearAK/patch-37
Updates to remaps for Ulauncher
2022-01-06 19:56:17 -06:00
RedBearAK
035b9e2d85 Updates to remaps for Ulauncher
Talked to a Ulauncher dev and determined that the Ulauncher search results are limited for the foreseeable future to a max of 17 items. So the screen size is not relevant and there is no reason at present to remap beyond Ctrl+h. So this keymap block can be trimmed down a bit. 

Remapping Ctrl+a and Ctrl+c of course interferes with quickly selecting and copying text within the search field, so it seems wise to disable those by default, and the trimmed list will no longer have Ctrl+v as a remap, so it won't interfere with pasting text into the search field. I don't see any good way around these conflicts, except maybe shifting the whole remap scheme to using Ctrl+Shift instead of just the Ctrl key. But that wouldn't be very intuitive. 

Most desired results will tend to be near the top of the results list anyway, so the primary benefit is still retained by having 1-9 mapped, plus the remaining letters. 

Adding `KEY_0` to the numerical key remaps, which will have no effect for now since Alt+0 doesn't exist, but I'll be asking the Ulauncher devs to add it as a shortcut in the app, so I hope it will be a usable remap in a future Ulauncher release.
2022-01-06 14:10:43 -09:00
Ben Reaves
db68031eb4 Re-ordered firefox, chrome & general browser definitions for Linux 2022-01-02 17:25:38 -06:00
Ben Reaves
30f4c1285b Merge pull request #594 from RedBearAK/patch-35
Finder mods updates: Nav, Views
2021-12-26 16:37:20 -06:00
RedBearAK
f858ae9614 Fixes for Cmd+Shift+Left/Right shortcut 2021-12-25 23:19:08 -09:00
RedBearAK
75dbe611b3 Update kinto.py 2021-12-24 23:25:28 -09:00
RedBearAK
6cdedf41e3 Add Cmd+Shift+Left/Right for tab nav, fix typos
Adding in Cmd+Shift+Left/Right to match another macOS Finder shortcut that works for tab navigation. 

This is unfortunately different from the web browser shortcut of Cmd+Option+Left/Right for tab nav.
2021-12-24 23:19:19 -09:00
RedBearAK
df8d46e1c1 Additional formatting and typo fixes 2021-12-24 01:28:20 -09:00
RedBearAK
b9f15950b2 Finder mods updates: Nav, Views
Some good updates to the Finder mods here. 

- Make labels a bit more clear. 
- Clean up a lot of formatting/alignment for readability. 
- Make tab nav with braces work in Deepin's dde-file-manager (Ctrl+Shift+Tab/Ctrl+Tab)
- Optional (disabled) shortcut to make new Nautilus windows remap to a system shortcut of Cmd+Option+Space (Ctrl+Alt+Space). 
- Enable Cmd+Braces to supplement Cmd+Left/Right for back-forward nav in all file managers (verified these are working shortcuts in macOS Finder). Uses the same remap as Ctrl+Left/Right to Alt+Left/Right, so works in all supported file managers. One more similarity to make file managers behave the same as web browsers. 
- Bring as much order as possible to the chaos of folder view shortcuts. 

Six file managers approximate the Finder's view options of Cmd+1 (Icons), Cmd+2 (Detailed List), Cmd+3 (Compact list or columns). Eight can do at least the first two views. Now all file managers will use the same folder view for the same Cmd+1/2/3 equivalent. 

Nautilus has two view modes and the shortcuts were reversed. Dolphin has three and was partially reversed. PCManFM has four, with three shortcuts out of order. All fixed to match Finder as closely as possible with this patch. 

Merry Christmas to all, and to all a good night!
2021-12-23 20:54:40 -09:00
Ben Reaves
2f8ae2380f Merge pull request #589 from rbreaves/hotfix
Additional qemu matching for Linux
2021-12-12 15:09:24 -06:00
Ben Reaves
77d52ec176 Additional qemu matching for Linux 2021-12-12 15:06:32 -06:00
Ben Reaves
13a98ce8cc Merge pull request #587 from RedBearAK/patch-33
Remap keys for Ulauncher
2021-12-12 02:27:28 -06:00
Ben Reaves
8f333dec20 Merge pull request #586 from RedBearAK/patch-32
Add new terminal Tabby
2021-12-12 02:26:26 -06:00
RedBearAK
f7ff8d1728 Comment out Ctrl+Q shortcut 2021-12-11 02:26:50 -09:00
RedBearAK
5b2a2c88c2 Remap keys for Ulauncher
Ulauncher displays shortcuts on each line of results to activate that line with a keyboard shortcut. This could mean launching an application, opening a file, or navigating through a directory hierarchy with a file/directory extension. All shortcuts are based on the Alt key, with numbers 1-9 and then letters if there are enough search results being displayed. 

Kinto remaps the Alt key to be Ctrl, so this just remaps Ctrl+[number] and Ctrl+[letter] back to Alt+[number] and Alt+[letter] when WM_CLASS is "ulauncher", to allow the user to continue using the physical Alt key shortcuts to activate Ulauncher search results. 

On a 1080p display, using a file/directory search extension in Ulauncher, I have seen search results with shortcuts from "Alt+1" to at least "Alt+g" being displayed. With this remapping everything seems to work fine for me. I don't know if a high resolution monitor will display all the way up to "Alt+z" but I went ahead and included the whole alphabet just to be sure.
2021-12-11 02:17:36 -09:00
RedBearAK
48b5699aed Add new terminal Tabby
This app (Tabby, used to be Terminus) is heavy and has some really strange behaviors with keyboard shortcuts, but that doesn't seem to actually be a problem with Kinto's remapping. Tabby behaves equally strangely with Kinto disabled. Very slow to react to keyboard shortcuts in general and often requires hitting holding down the modifier and hitting the last key a second time. 

Might be a peculiarity specific to having it installed on my Ubuntu/GNOME 21.10 system. It's a cross-platform terminal app. Might want to check it out on Windows and see if it should be added to the Windows Kinto config file.
2021-12-10 22:51:41 -09:00
Ben Reaves
eec325024d Update README.md 2021-12-08 23:38:53 -06:00
Ben Reaves
a5087b0f95 Update README.md 2021-12-08 16:36:12 -06:00
Ben Reaves
36f189e434 Merge pull request #585 from RedBearAK/patch-31
Add WM_CLASS for Spicy to remotes list
2021-12-04 13:21:59 -06:00
RedBearAK
50b31abba9 Add WM_CLASS for Spicy to remotes list
Playing with QuickEMU. It uses QEMU but the main window has a WM_CLASS of "Spicy" so isn't caught by the "qemu" entry. Adding it to the list of VM-type software.
2021-12-02 20:40:09 -09:00
Ben Reaves
aa53c83c61 Merge pull request #577 from rbreaves/hotfix
Improved virtual desktop support in remotes, added sharpkeys mac kb layout
2021-10-29 19:30:34 -05:00
Ben Reaves
5f795328c9 Improved virtual desktop support in remotes, added sharpkeys mac kb layout 2021-10-27 01:01:45 -05:00
Ben Reaves
39ed3c83f9 Merge pull request #574 from rbreaves/hotfix
Add Waterfox to browsers & Hyper-V to remote exclusions
2021-10-24 13:30:11 -05:00
Ben Reaves
bf35285914 Added Hyper-V VMs to remote exclusions group 2021-10-24 13:28:44 -05:00
Ben Reaves
7a3d9cbd7c Added waterfox to browsers on Linux 2021-10-24 13:22:20 -05:00
Ben Reaves
2a920d0622 Merge pull request #568 from lydell/patch-1
Add support for Firefox Developer Edition
2021-09-13 01:12:07 -05:00
Simon Lydell
253b061b12 Add support for Firefox Developer Edition
I made this change `~/.config/kinto/kinto.py` and restarted the service. Then cmd-option-left/right worked in Firefox Developer Edition as well – https://github.com/rbreaves/kinto/issues/535#issuecomment-917612176

I’m quite new to Kinto so I’m not 100% sure this is the correct fix, but it seems to work.

Thanks for Kinto btw! It’s awesome.
2021-09-12 13:05:34 +02:00
Ben Reaves
c8a28fe3e0 Merge pull request #490 from RedBearAK/patch-21
Open Firefox private window with Ctrl+Shift+N
2021-09-07 23:19:45 -05:00
Ben Reaves
9f5ba6e14e Open Firefox private window - Windows 2021-09-07 23:19:12 -05:00
Ben Reaves
f855da301c Merge pull request #500 from RedBearAK/patch-23
Toggle maximized window state shortcut (KDE Neon)
2021-09-07 23:13:47 -05:00
Ben Reaves
4e33e5516b Merge pull request #536 from RedBearAK/patch-30
Add Cmd+Opt+Left/Right and Cmd+Shift+Braces for browser tab navigation
2021-09-07 23:11:38 -05:00
Ben Reaves
5c25cd15cb Updated browser tab switching for Windows parity 2021-09-07 23:10:42 -05:00
Ben Reaves
af4b4ea08e Merge pull request #541 from RedBearAK/patch-29
Add Cmd+Shift+Braces for tab navigation in file managers
2021-09-07 22:39:26 -05:00
Ben Reaves
e69e529a18 Move lines properly in Editors. Closes #481
Fixes issue in VSCode with moving lines on Alt-Up/Down
2021-07-27 13:42:28 -05:00
Ben Reaves
f717db9aaa Update README.md 2021-07-14 22:05:27 -05:00
Ben Reaves
353c2c6bb4 Update README.md 2021-07-14 22:04:21 -05:00
Ben Reaves
dcbf1e8382 Added Remmina name variation for Ubuntu 18.04, improves remote access functionality 2021-07-05 00:26:36 -05:00
RedBearAK
b3fc4c9202 Minor formatting fix 2021-07-01 03:09:11 -08:00
RedBearAK
4858b9cf28 Add Cmd+Shift+Braces for tab navigation in file managers
This adds Cmd+Shift+Braces as an option for tab navigation in most Linux file managers. Also fixes the standard tab navigation shortcuts (Ctrl+PgUp/PgDn) to work in SpaceFM. 

This shortcut works in Finder on macOS. 

Tested this code in: 

Caja
Dolphin
Nautilus
Nemo
PCManFM[-Qt]
SpaceFM (default is Ctrl+Tab/Ctrl+Shift+Tab, now remapping from Ctrl+PgUp/PgDn)
Thunar
2021-07-01 03:04:16 -08:00
RedBearAK
45ad4f3f68 Adding Cmd+Shift+Braces for tab navigation 2021-07-01 02:18:10 -08:00
RedBearAK
1f4b2bb451 Add Cmd+Opt+Left/Right for browser tab navigation
Adding mapping to enable Cmd+Opt+Left/Right to supplement Ctrl+PgUp/PgDn for browser tab navigation. 

Shortcut is verified by testing to work on Firefox, Google Chrome and Opera in macOS, so it should be suitable for inclusion in Kinto. 

Included are some line changes from PR #487, which should close that PR if this is merged.
2021-06-27 17:03:35 -08:00
RedBearAK
9a5b44661c Toggle maximized window state shortcut (KDE Neon)
Putting this in as disabled. It will need some logic in the installer to enable it if Neon is detected, and disable the `(gnome/kde)` line above it. But at least it will be there already, to be manually enabled if necessary. 

See issue #477 for discussion.
2021-05-04 20:26:39 -08:00
RedBearAK
d19e5836a5 Open Firefox private window with Ctrl+Shift+N
Safari and Chrome/Chromium use Ctrl+Shift+N to open private/incognito windows. Firefox for some reason wants to use Ctrl+Shift+P. This makes Firefox respond to Ctrl+Shift+N the same way as Safari and the Chromes. Ctrl+Shift+P of course still works also. 

No pre-existing action for Ctrl+Shift+N seems to exist in the current Firefox version. So no known conflict.
2021-04-28 17:40:08 -08:00
9 changed files with 776 additions and 213 deletions

34
.github/workflows/01-ubuntu-budgie.yml vendored Normal file
View File

@@ -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.

View File

@@ -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,9 @@ 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)|
|---|---|---|---|
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.
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.
## How to install (Linux)
@@ -84,9 +86,12 @@ sudo apt install xfce4-appmenu-plugin vala-panel-appmenu-common appmenu-gtk2-mod
xfconf-query -c xsettings -p /Gtk/Modules -n -t string -s "appmenu-gtk-module"
```
**Perfect HiDPI fractional scaling on Ubuntu Budgie 20.04 under x11**
**Fractional HiDPI Scaling for Gnome/Budgie w/ x11**
https://github.com/rbreaves/betterScale
Use this with autorandr to save your settings as a profile that will auto re-apply when needed.
https://discourse.ubuntubudgie.org/t/ubuntu-budgie-20-04-fractional-hidpi-for-x11/4777
## How to Install (Windows)
@@ -144,19 +149,30 @@ 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|
|Official MS RDP| 🍎🤖iOS/Android⇒| ❖Windows | ❌ No|No workaround atm|
## How to Remap Windows keyboards for remote access to macOS
Quick summary - Swap Alt & Win to conform with Apple keyboard layouts. Sharpkeys for Windows, Setkeycodes for Linux, then install Kinto.sh or change/update the Keyboard Type to Apple in the system tray.
https://benreaves.medium.com/macos-to-linux-back-again-c6151200f4dc
## FreeRDP for macOS
1. Install [brew.sh](https://brew.sh).
@@ -313,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
```

View File

@@ -353,7 +353,7 @@ class MyWindow(Gtk.Window):
self.queryConfig('cp '+os.environ['HOME']+'/.config/kinto/xkeysnail.desktop '+os.environ['HOME']+'/.config/autostart/xkeysnail.desktop')
if self.options["systray"]:
self.queryConfig('cp '+os.environ['HOME']+'/.config/kinto/kintotray.desktop '+os.environ['HOME']+'/.config/autostart/kintotray.desktop')
self.queryConfig("nohup python3 ~/.config/kinto/kintotray.py >/dev/null 2>&1 &")
self.queryConfig("nohup /usr/bin/python3 ~/.config/kinto/kintotray.py >/dev/null 2>&1 &")
self.menuitem_systray.disconnect(self.menuitem_systray.signal_id)
self.menuitem_systray.set_active(True)
self.menuitem_systray.signal_id = self.menuitem_systray.connect('activate',self.checkTray,False)
@@ -616,7 +616,7 @@ class MyWindow(Gtk.Window):
if tray_bool:
Popen(['cp',os.environ['HOME']+'/.config/kinto/kintotray.desktop',os.environ['HOME']+'/.config/autostart/kintotray.desktop'])
if not kintotray:
Popen([os.environ['HOME']+'/.config/kinto/kintotray.py'])
Popen(['/usr/bin/python3',os.environ['HOME']+'/.config/kinto/kintotray.py'])
self.menuitem_systray.disconnect(self.menuitem_systray.signal_id)
self.menuitem_systray.set_active(True)
self.menuitem_systray.signal_id = self.menuitem_systray.connect('activate',self.checkTray,False)

View File

@@ -4,7 +4,7 @@ Name=Kinto.sh
GenericName=Kinto.sh
Categories=Utility;
Type=Application
Exec={homedir}/.config/kinto/gui/kinto-gui.py
Exec=/usr/bin/python3 {homedir}/.config/kinto/gui/kinto-gui.py
Icon={homedir}/.config/kinto/kinto-color-48.svg
# Icon=/usr/share/icons/Pocillo/kinto-color.svg
Terminal=false

View File

@@ -9,6 +9,7 @@ from xkeysnail.transform import *
# xbindkeys -mk
terminals = [
"alacritty",
"cutefish-terminal",
"deepin-terminal",
"eterm",
"gnome-terminal",
@@ -17,13 +18,16 @@ terminals = [
"io.elementary.terminal",
"kinto-gui.py",
"kitty",
"Kgx", # GNOME Console terminal app
"konsole",
"lxterminal",
"mate-terminal",
"org.gnome.Console",
"qterminal",
"st",
"sakura",
"station",
"tabby",
"terminator",
"termite",
"tilda",
@@ -38,19 +42,27 @@ 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.
remotes = [
"Gnome-boxes",
"org.remmina.Remmina",
"remmina",
"qemu-system-.*",
"qemu",
"Spicy",
"Virt-manager",
"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)
@@ -63,9 +75,14 @@ browsers = [
"Discord",
"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)
@@ -76,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)
@@ -172,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
@@ -190,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
@@ -247,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")
@@ -264,22 +282,28 @@ 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")
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),{
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
},"Overrides for DDE File Manager - Finder")
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
K("RC-Shift-Left_Brace"): K("C-Shift-Tab"), # Go to prior tab
K("RC-Shift-Right_Brace"): K("C-Tab"), # Go to next tab
K("RC-Shift-Left"): K("C-Shift-Tab"), # Go to prior tab
K("RC-Shift-Right"): K("C-Tab"), # Go to next tab
},"Overrides for DDE File Manager - Finder Mods")
# 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)
##########################################################################################
### "Open in new window" requires manually setting custom shortcut of Ctrl+Shift+o
### in Dolphin's keyboard shortcuts. There is no default shortcut set for this function.
@@ -287,51 +311,64 @@ define_keymap(re.compile("dolphin", re.IGNORECASE),{
### "Open in new tab" requires manually setting custom shortcut of Ctrl+Shift+o in
### Dolphin's keyboard shortcuts. There is no default shortcut set for this function.
##########################################################################################
K("RC-Super-o"): K("RC-Shift-o"), # Open in new window (or new tab, user's choice, see above)
K("RC-Shift-N"): K("F10"), # Create new folder
K("RC-comma"): K("RC-Shift-comma"), # Open preferences dialog
},"Overrides for Dolphin - Finder")
K("RC-Super-o"): K("RC-Shift-o"), # Open in new window (or new tab, user's choice, see above)
K("RC-Shift-N"): K("F10"), # Create new folder
K("RC-comma"): K("RC-Shift-comma"), # Open preferences dialog
},"Overrides for Dolphin - Finder Mods")
# Keybindings overrides for elementary OS Files
# 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),{
# 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")
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),{
K("RC-Super-o"): K("Shift-Enter"), # Open in new window
# K("RC-Super-o"): K("RC-Enter"), # Open in new tab
K("RC-comma"): K("RC-comma"), # Overrides "Open preferences dialog" shortcut below
},"Overrides for Nautilus - Finder")
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" ]
K("RC-KEY_1"): K("C-KEY_2"), # View as Icons
K("RC-KEY_2"): K("C-KEY_1"), # View as List (Detailed)
K("RC-Super-o"): K("Shift-Enter"), # Open in new window
# K("RC-Super-o"): K("RC-Enter"), # Open in new tab
K("RC-comma"): K("RC-comma"), # Overrides "Open preferences dialog" shortcut below
},"Overrides for Nautilus - Finder Mods")
# 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),{
K("RC-Backspace"): [K("Delete"),K("Enter")], # Move to Trash (delete, bypass dialog)
},"Overrides for PCManFM - Finder")
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),{
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
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
K("RC-Shift-Right_Brace"): K("C-Tab"), # Go to next tab
K("RC-Shift-Left"): K("C-Shift-Tab"), # Go to prior tab
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("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")
},"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),{
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
},"Overrides for Thunar - Finder")
define_keymap(re.compile("^thunar$", re.IGNORECASE),{
K("RC-Super-o"): K("RC-Shift-P"), # Open in new tab
K("RC-comma"): [K("Alt-E"),K("E")], # Overrides "Open preferences dialog" shortcut below
},"Overrides for Thunar - Finder Mods")
filemanagers = [
"caja",
"cutefish-filemanager",
"dde-file-manager",
"dolphin",
"io.elementary.files",
@@ -364,88 +401,156 @@ 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-Shift-dot"): K("RC-H"), # Show/hide hidden files ("dot" files)
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"): 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-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-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
K("RC-Shift-Right_Brace"): K("C-Page_Down"), # Go to next tab
K("RC-Shift-Left"): K("C-Page_Up"), # Go to prior tab
K("RC-Shift-Right"): K("C-Page_Down"), # Go to next tab
###########################################################################################################
### Open in New Window | Move to Trash | Duplicate file/folder ###
###########################################################################################################
K("RC-Super-o"): K("RC-Shift-o"), # Open in new window (or tab, depends on FM setup) [not universal]
K("RC-Backspace"): K("Delete"), # Move to Trash (delete)
K("RC-D"): [K("RC-C"),K("RC-V")], # Mimic Finder's Duplicate command (Copy, then Paste)
K("RC-Super-o"): K("RC-Shift-o"), # Open in new window (or tab, depends on FM setup) [not universal]
K("RC-Backspace"): K("Delete"), # Move to Trash (delete)
# K("RC-D"): [K("RC-C"),K("RC-V")], # Duplicate file/folder (Copy, then Paste) [conflicts with "Add Bookmark"]
###########################################################################################################
### To enable renaming files with the Enter key, uncomment the two keymapping lines just below this. ###
### Use Ctrl+Shift+Enter to escape or activate text fields such as "[F]ind" and "[L]ocation" fields. ###
###########################################################################################################
# K("Enter"): K("F2"), # Rename with Enter key
# K("RC-Shift-Enter"): K("Enter"), # Remap alternative "Enter" key to easily activate/exit text fields
},"File Managers - Finder")
# K("Enter"): K("F2"), # Rename with Enter key
# K("RC-Shift-Enter"): K("Enter"), # Remap alternative "Enter" key to easily activate/exit text fields
# K("RC-Shift-Enter"): K("F2"), # Rename with Cmd+Shift+Enter
},"General File Managers - Finder Mods")
############################################
### END OF FILE MANAGER GROUP OF KEYMAPS ###
############################################
# Keybindings for 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("C-Left_Brace"): K("C-Page_Up"),
K("C-Right_Brace"): K("C-Page_Down"),
})
# 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"),
K("e"),K("r"),K("e"),K("n"),K("c"),K("e"),K("s"),K("Enter")
],
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("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
# Enable Cmd+Option+Left/Right for tab navigation
K("RC-M-Left"): K("C-Page_Up"), # Go to prior tab
K("RC-M-Right"): K("C-Page_Down"), # Go to next tab
# Enable Ctrl+PgUp/PgDn for tab navigation
K("Super-Page_Up"): K("C-Page_Up"), # Go to prior tab
K("Super-Page_Down"): K("C-Page_Down"), # Go to next tab
# Use Cmd+Braces keys for tab navigation instead of page navigation
# K("C-Left_Brace"): K("C-Page_Up"),
# K("C-Right_Brace"): K("C-Page_Down"),
}, "General Web Browsers")
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
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)
@@ -461,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
@@ -483,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
@@ -492,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
@@ -511,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.
@@ -537,15 +642,17 @@ 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
K("C-M-Left"): K("C-PAGE_UP"), # next_view
K("C-M-Right"): K("C-PAGE_DOWN"), # prev_view
# K("C-PAGE_DOWN"): pass_through_key, # cancel next_view
# K("C-PAGE_UP"): pass_through_key, # cancel prev_view
K("C-M-Left"): K("C-PAGE_UP"), # next_view
K("C-M-Right"): K("C-PAGE_DOWN"), # prev_view
K("RC-Shift-Left_Brace"): K("C-PAGE_UP"), # next_view
K("RC-Shift-Right_Brace"): K("C-PAGE_DOWN"), # prev_view
# VS Code Shortcuts
K("C-g"): pass_through_key, # cancel Go to Line...
@@ -561,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
@@ -595,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
@@ -609,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
@@ -623,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"),
@@ -649,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"),
@@ -657,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)
@@ -675,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"),
@@ -693,6 +811,8 @@ define_keymap(re.compile(termStr, re.IGNORECASE),{
K("RC-P"): K("C-Shift-P"),
K("RC-LEFT_BRACE"): K("C-Shift-LEFT_BRACE"),
K("RC-RIGHT_BRACE"): K("C-Shift-RIGHT_BRACE"),
K("RC-Shift-Left_Brace"): K("C-Page_Up"), # Go to prior tab (Left)
K("RC-Shift-Right_Brace"): K("C-Page_Down"), # Go to next tab (Right)
K("RC-A"): K("C-Shift-A"),
K("RC-S"): K("C-Shift-S"),
K("RC-D"): K("C-Shift-D"),

View File

@@ -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
@@ -116,6 +120,8 @@ class Indicator():
with open(self.kconfig) as configfile:
autostart_line = configfile.read().split('\n')[1]
autostart_bool = False
# Autostart
if "autostart = true" in autostart_line.casefold():
autostart_bool = True
@@ -619,9 +625,9 @@ class Indicator():
def runDebug(self,button,opendebug):
try:
if opendebug:
Popen([os.environ['HOME']+'/.config/kinto/gui/kinto-gui.py','-d'])
Popen(['/usr/bin/python3',os.environ['HOME']+'/.config/kinto/gui/kinto-gui.py','-d'])
else:
Popen([os.environ['HOME']+'/.config/kinto/gui/kinto-gui.py'])
Popen(['/usr/bin/python3',os.environ['HOME']+'/.config/kinto/gui/kinto-gui.py'])
except:
Popen(['notify-send','Kinto: Error opening Kinto!'])

Binary file not shown.

View File

@@ -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
@@ -176,6 +178,10 @@ GroupAdd, remotes, ahk_exe VirtualBoxVM.exe
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
@@ -202,6 +208,95 @@ GroupAdd, intellij, ahk_exe idea64.exe
; End::Send {Media_Play_Pause} ; Pause/Play
; PgDn::Send {Media_Next} ; Next
; Virtual Desktop Hack via TotalSpaces2 - macOS Remote Desktop
; Custom Bind Gestures in Windows
; Shift-F8 on Left Swipe
; Shift-F9 on Right Swipe
#IfWinActive ahk_exe nxplayer.bin
+F8::Send !+- ; macOS TotalSpaces2 - Space Left
+F6::Send !+= ; macOS TotalSpaces2 - Space Right
#If
; +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")
; Conflicts w/ Win-L so will use Ctrl-Shift-L as Ctrl-L replacement
; Helpful for Sublime text lowercasing & VSCode
^+l::Send ^{l}
; Adds Task View to Ctrl-Cmd-Down
#^Down::
Run, "C:\Windows\explorer.exe" "shell:::{3080F90E-D7AD-11D9-BD98-0000947B0257}"
return
; wordwise support
^Up::Send ^{Home}
^+Up::Send ^+{Home}
^Down::Send ^{End}
^+Down::Send ^+{End}
$^Backspace::Send +{Home}{Delete}
!Backspace::Send ^{Backspace}
!Left::Send ^{Left}
!+Left::Send ^+{Left}
!Right::Send ^{Right}
!+Right::Send ^+{Right}
$^Left::Send {Home}
$^+Left::Send +{Home}
$^Right::Send {End}
$^+Right::Send +{End}
#If
#IfWinNotActive ahk_group remotes
; New AltTab and CtrlTab fix
@@ -308,8 +403,10 @@ GroupAdd, intellij, ahk_exe idea64.exe
!Esc::SendInput, {Pause}
; Go up or down a page
$!Down::Send {PgDn};
$!Up::Send {PgUp};
#IfWinNotActive ahk_group editors
$!Down::Send {PgDn}
$!Up::Send {PgUp}
#If
; Close Apps
^q::Send !{F4}
@@ -366,22 +463,6 @@ GroupAdd, intellij, ahk_exe idea64.exe
; !^space::Send #e ; Default
; #^space::Send #e ; CB/IBM
; wordwise support
^Up::Send ^{Home}
^+Up::Send ^+{Home}
^Down::Send ^{End}
^+Down::Send ^+{End}
$^Backspace::Send +{Home}{Delete}
!Backspace::Send ^{Backspace}
!Left::Send ^{Left}
!+Left::Send ^+{Left}
!Right::Send ^{Right}
!+Right::Send ^+{Right}
$^Left::Send {Home}
$^+Left::Send +{Home}
$^Right::Send {End}
$^+Right::Send +{End}
; #if GetKeyState("LWin", "P") || GetKeyState("RAlt", "P") ; Chromebook
; Space::Send ^{Esc} ; Chromebook
; 0::Send #0 ; Chromebook
@@ -426,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}
@@ -536,6 +617,16 @@ GroupAdd, intellij, ahk_exe idea64.exe
; Close all browsers
#IfWinActive ahk_group browsers
; 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}
@@ -543,6 +634,7 @@ GroupAdd, intellij, ahk_exe idea64.exe
; Open preferences
#IfWinActive ahk_exe firefox.exe
^,::send, {Ctrl Down}t{Ctrl Up}about:preferences{Enter}
^+n::send ^+p
#If
#IfWinActive ahk_exe chrome.exe
^,::send {Alt Down}e{Alt Up}s{Enter}
@@ -833,4 +925,299 @@ Send {RWin up}
Send {LWin up}
Send {RShift up}
Send {LShift up}
return
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

View File

@@ -305,6 +305,7 @@ fi
if [[ $distro == "elementaryos" ]]; then
gsettings set io.elementary.terminal.settings natural-copy-paste false
sudo ./linux/system-config/unipkg.sh libvte-2.91-dev
fi
if ! [ -x "$(command -v xhost)" ] || ! [ -x "$(command -v gcc)" ]; then
@@ -314,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
@@ -328,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 "['<Super>d']"
else
@@ -384,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
@@ -499,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
@@ -554,17 +556,15 @@ if ! [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then
xkeypath="/lib/systemd/system/"
fi
xhost +SI:localuser:root
git clone --depth 10 https://github.com/rbreaves/xkeysnail.git
git clone -b kinto --depth 10 https://github.com/rbreaves/xkeysnail.git
cd xkeysnail
git checkout kinto
giturl=$(git ls-remote --get-url)
if [ "$giturl" != "https://github.com/rbreaves/xkeysnail.git" ];then
echo -e "\nreplacing xkeysnail with fork...\n"
cd ..
rm -rf ./xkeysnail
git clone --depth 10 https://github.com/rbreaves/xkeysnail.git
git clone -b kinto --depth 10 https://github.com/rbreaves/xkeysnail.git
cd xkeysnail
git checkout kinto
fi
sudo pip3 install --upgrade .
cd ..
@@ -576,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
@@ -588,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..."