mirror of
				https://github.com/rbreaves/kinto.git
				synced 2025-10-30 19:04:03 +01:00 
			
		
		
		
	Compare commits
	
		
			31 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 9dff7e0f7d | ||
|   | 75ac498c9d | ||
|   | f952c9e569 | ||
|   | 72d5dc7a8f | ||
|   | cf2353b5a6 | ||
|   | 4b51013380 | ||
|   | 3045a424b9 | ||
|   | bfe8d8f039 | ||
|   | 8ab59cc914 | ||
|   | 15adc5b96b | ||
|   | dd32a6f954 | ||
|   | eb96ad08b8 | ||
|   | 0442bd8b6b | ||
|   | 5d37e720c7 | ||
|   | aa53b7b14d | ||
|   | 046bee95c3 | ||
|   | 0c53a7a114 | ||
|   | 46b8e1ca6e | ||
|   | a4f12cbdd8 | ||
|   | fe0346ea63 | ||
|   | 1406e3bea5 | ||
|   | e0344eaa72 | ||
|   | 4eea5c17cc | ||
|   | 6101213537 | ||
|   | c71714e0c2 | ||
|   | ef6dc65a20 | ||
|   | 525aa91cbf | ||
|   | b29ec9d936 | ||
|   | 94595a3324 | ||
|   | a9afdac847 | ||
|   | 39f65c0e2b | 
							
								
								
									
										15
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								README.md
									
									
									
									
									
								
							| @@ -69,7 +69,7 @@ It also retains some of the most commonly used system level shortcut keys, such | ||||
|  | ||||
| If your OS and macOS have similar functionality on the system level, but only differ by a slight difference of a shortcut command then Kinto likely supports it already. If Kinto doesn't have what you need then you can open up a support ticket and it will be added. You can also fork the project to add the fix and I will merge it via a PR you make. | ||||
|  | ||||
| Additionally, if you are using a cross-platform app and if it happens to have a few shortcut keys that differ then that can very easily be added to either the kinto.py or kinto.ahk configuration files which on Windows is located here `~/.kinto/kinto.ahk` and on Linux it can be found here `~/.config/kinto/kinto.py`. More info can be found here [Shortcut Creation (Xkeysnail)](#Shortcut-Creation-Xkeysnail) for Linux. | ||||
| Additionally, if you are using a cross-platform app and if it happens to have a few shortcut keys that differ then that can very easily be added to either the kinto.py or kinto.ahk configuration files which on Windows is located here `~/.kinto/kinto.ahk` and on Linux it can be found here `~/.config/kinto/kinto.py`. More info can be found here [Shortcut Creation](#Shortcut-Creation) | ||||
|  | ||||
| ## How to install (Linux) | ||||
|  | ||||
| @@ -143,8 +143,6 @@ py setup.py | ||||
| - x11 | ||||
| - xkeysnail | ||||
|  | ||||
| On most distros you can confirm Input Methods by navigating to "Language Support" and set "Keyboard input method system:" to IBus for full word-wise support with web browsers.  | ||||
|  | ||||
| ### Kinto for Windows 10 Requirements | ||||
|  | ||||
| - [Git for Windows](https://git-scm.com/download/win) | ||||
| @@ -157,16 +155,8 @@ Other programs that will be installed when you run ./setup.py | ||||
| - Strawberry Perl | ||||
|  | ||||
| Note: Sublime Text users should disable screen rotation hotkeys as they will interfere with multi-cursor and possibly other combos. See https://windowsloop.com/disable-screen-rotation-keyboard-shortcut/ for details. | ||||
|  | ||||
| Users can now hotswap between Apple and Windows based keyboards without having to logoff and back on, and Windows is currently the only implementation with a system tray (but this feature is coming to Budgie, XFCE, Mate, Gnome, and lastly KDE). | ||||
|  | ||||
| <img src="https://user-images.githubusercontent.com/10969616/84471498-100c7d00-ac4b-11ea-972d-60c1907831ec.png" width="50%"> | ||||
| <img src="https://user-images.githubusercontent.com/10969616/84471501-10a51380-ac4b-11ea-9e0e-c19a7ebfad6d.png" width="50%"> | ||||
|  | ||||
| ## Shortcut Creation | ||||
|  | ||||
| Note: A new project, [Universal Keys](https://github.com/rbreaves/Universal-Keys), has been created that will be updated to contain all current remaps - plus many more. Once that is done, Kinto will be updated to programmatically pull the latest keymaps from simple csv comma delimited files & will build out key remaps from there. This will also allow for more types of remaps within an application category, Sublime Text 3 to VS Code or VS Code to Sublime Text 3, Photoshop to Gimp, Gimp to Photoshop, etc & it will ensure that xkeysnail (linux) & autohotkey (windows) are pulling from the same data set. | ||||
|  | ||||
| [Linux Shortcut Creation (Xkeysnail)](#Linux-Xkeysnail) | ||||
|  | ||||
| [Windows Shortcut Creation (Autohotkey)](#Windows-Autohotkey) | ||||
| @@ -343,9 +333,6 @@ If you continue to have issues then open a ticket and send me the info. | ||||
| ## Language Support | ||||
| I'd appreciate any help from people with non-US based keyboards, to help ensure that these keymaps and keyswap methods work in all or most languages. | ||||
|  | ||||
| If you would like to attempt adding additional custom keymaps for other languages then I strongly recommend reading Glen Whitney's post here. | ||||
| https://superuser.com/questions/385748/binding-superc-superv-to-copy-and-paste | ||||
|  | ||||
| ## Related or Useful Resources | ||||
|  | ||||
| [Xkeysnail](https://github.com/mooz/xkeysnail) by mooz | ||||
|   | ||||
							
								
								
									
										5
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								setup.py
									
									
									
									
									
								
							| @@ -104,9 +104,12 @@ if platform.system() == 'Windows': | ||||
| check_x11 = cmdline("(env | grep -i x11 || loginctl show-session \"$XDG_SESSION_ID\" -p Type) | awk -F= '{print $2}'").strip() | ||||
|  | ||||
| if len(check_x11) == 0: | ||||
| 	if os.name != 'nt': | ||||
| 	if os.name != 'nt' and os.name != 'posix': | ||||
| 		print(os.name) | ||||
| 		print("You are not using x11, please logout and back in using x11/Xorg") | ||||
| 		sys.exit() | ||||
| 	elif os.name == 'posix': | ||||
| 		print("You may be trying to run Kinto under WSL2 w/ Linux. We will continue...") | ||||
| 	else: | ||||
| 		print("\nYou are detected as running Windows.") | ||||
| 		windows_setup() | ||||
|   | ||||
| @@ -24,7 +24,7 @@ AHK_NOTIFYICON(wParam, lParam) | ||||
| } | ||||
| ; End Enable Left clicks | ||||
|  | ||||
| ; I_Icon = %A_ScriptDir%\assets\kinto-white.ico           ; MacModifiers | ||||
| ; I_Icon = %A_ScriptDir%\assets\kinto-white-invert.ico    ; MacModifiers | ||||
| ; IfExist, %I_Icon%                                       ; MacModifiers | ||||
| ; Menu, Tray, Icon, %I_Icon%,, 1                          ; MacModifiers | ||||
| ; Menu, Tray, Tip, Mac - Kinto                            ; MacModifiers | ||||
| @@ -97,8 +97,9 @@ Send {LAlt down}{tab}{LAlt up} | ||||
| tray_suspend(){ | ||||
|     suspend toggle | ||||
|     if (a_isSuspended = 1){ | ||||
|         Gosub ReleaseModifiers | ||||
|         menu, tray, check  , Suspend Kinto | ||||
|         I_Icon = %A_ScriptDir%\assets\kinto-color-invert.ico | ||||
|         I_Icon = %A_ScriptDir%\assets\kinto-white.ico | ||||
|         Menu, Tray, Icon, %I_Icon%,, 1 | ||||
|         Menu, Tray, Tip, Suspended - Kinto | ||||
|         IfWinExist, detectUSB.ahk | ||||
| @@ -106,8 +107,12 @@ tray_suspend(){ | ||||
|     } | ||||
|     else{ | ||||
|         menu, tray, unCheck, Suspend Kinto | ||||
| ;         I_Icon = %A_ScriptDir%\assets\kinto-white.ico           ; MacModifiers | ||||
| ;         I_Icon = %A_ScriptDir%\assets\kinto-white-invert.ico    ; MacModifiers | ||||
| ;         I_Icon = %A_ScriptDir%\assets\kinto-white-invert.ico    ; WinModifiers/CB/IBM | ||||
| ;         Menu, Tray, Tip, Mac - Kinto                            ; MacModifiers | ||||
| ;         Menu, Tray, Tip, Windows - Kinto                        ; WinModifiers | ||||
| ;         Menu, Tray, Tip, Chromebook - Kinto                     ; Chromebook | ||||
| ;         Menu, Tray, Tip, IBM - Kinto                            ; IBM | ||||
|         Menu, Tray, Icon, %I_Icon%,,1 | ||||
|         Run, %A_ScriptDir%\detectUSB.ahk | ||||
|     } | ||||
| @@ -116,6 +121,7 @@ tray_suspend(){ | ||||
| } | ||||
|  | ||||
| Exit() { | ||||
|     Gosub ReleaseModifiers | ||||
|     IfWinExist, detectUSB.ahk | ||||
|         WinClose | ||||
|  | ||||
| @@ -132,8 +138,10 @@ GroupAdd, terminals, ahk_exe WindowsTerminal.exe | ||||
| GroupAdd, terminals, ahk_exe Hyper.exe | ||||
| GroupAdd, terminals, ahk_exe mintty.exe | ||||
| GroupAdd, terminals, ahk_exe Cmd.exe | ||||
| GroupAdd, terminals, ahk_exe box.exe | ||||
| GroupAdd, terminals, ahk_exe Terminus.exe | ||||
| GroupAdd, terminals, Fluent Terminal ahk_class ApplicationFrameWindow | ||||
| GroupAdd, terminals, ahk_class Console_2_Main | ||||
|  | ||||
| GroupAdd, posix, ahk_exe ubuntu.exe | ||||
| GroupAdd, posix, ahk_exe ConEmu.exe | ||||
| @@ -142,10 +150,11 @@ GroupAdd, posix, ahk_exe Hyper.exe | ||||
| GroupAdd, posix, ahk_exe mintty.exe | ||||
| GroupAdd, posix, ahk_exe Terminus.exe | ||||
| GroupAdd, posix, Fluent Terminal ahk_class ApplicationFrameWindow | ||||
| GroupAdd, posix, ahk_class Console_2_Main | ||||
| GroupAdd, posix, ahk_exe WindowsTerminal.exe | ||||
|  | ||||
| GroupAdd, ConEmu, ahk_exe ConEmu.exe | ||||
| GroupAdd, ConEmu, ahk_exe ConEmu64.exe | ||||
| GroupAdd, ConEmu, ahk_exe WindowsTerminal.exe | ||||
|  | ||||
| GroupAdd, ExcPaste, ahk_exe Cmd.exe | ||||
| GroupAdd, ExcPaste, ahk_exe mintty.exe | ||||
| @@ -157,6 +166,7 @@ GroupAdd, editors, ahk_exe Code.exe | ||||
| GroupAdd, browsers, ahk_exe chrome.exe | ||||
| GroupAdd, browsers, ahk_exe opera.exe | ||||
| GroupAdd, browsers, ahk_exe firefox.exe | ||||
| GroupAdd, browsers, ahk_exe msedge.exe | ||||
|  | ||||
| ; Disable Key Remapping for Virtual Machines | ||||
| ; Disable for Remote desktop solutions too | ||||
| @@ -326,6 +336,18 @@ GroupAdd, intellij, ahk_exe idea64.exe | ||||
|     !Right::Send ^{Right} | ||||
|     !+Right::Send ^+{Right} | ||||
|  | ||||
|     #IfWinNotActive ahk_group terminals | ||||
|         ; emacs style | ||||
|         #n::Send {Down} | ||||
|         #p::Send {Up} | ||||
|         #f::Send {Right} | ||||
|         #b::Send {Left} | ||||
|         #a::Send {Home} | ||||
|         #e::Send {End} | ||||
|         #d::Send {Delete} | ||||
|         #k::Send +{End}{Backspace} | ||||
|     #If | ||||
|  | ||||
|     ; Cmd+Space Alternative | ||||
|     $^Space::Send ^{Esc} | ||||
|  | ||||
| @@ -421,7 +443,23 @@ GroupAdd, intellij, ahk_exe idea64.exe | ||||
|  | ||||
|     ; Close all browsers | ||||
|     #IfWinActive ahk_group browsers | ||||
|        ^q::send {Alt Down}f{Alt Up}x   ; exit all windows | ||||
|         ^q::send {Alt Down}f{Alt Up}x   ; exit all windows | ||||
|         ; Dev Tools | ||||
|         #^i::send {Ctrl Down}{Shift Down}i{Shift Up}{Ctrl Up} | ||||
|         #^j::send {Ctrl Down}{Shift Down}j{Shift Up}{Ctrl Up} | ||||
|         ; Open preferences | ||||
|         #IfWinActive ahk_exe firefox.exe | ||||
|             ^,::send {Alt Down}{Shift Down}t{Shift Up}{Alt Up}o{Enter} | ||||
|         #If | ||||
|         #IfWinActive ahk_exe chrome.exe | ||||
|             ^,::send {Alt Down}e{Alt Up}s{Enter} | ||||
|         #If | ||||
|         #IfWinActive ahk_exe msedge.exe | ||||
|             ^,::send {Alt Down}e{Alt Up}s{Enter} | ||||
|         #If | ||||
|         #IfWinActive ahk_exe opera.exe | ||||
|             ^,::send {Ctrl Down}{F12}{Ctrl Up} | ||||
|         #If | ||||
|     #If | ||||
|  | ||||
|     ; Sublime Text Remaps for VS Code | ||||
| @@ -523,13 +561,17 @@ GroupAdd, intellij, ahk_exe idea64.exe | ||||
|  | ||||
|         ; Copy | ||||
|         ^c:: | ||||
|         If WinActive("ahk_exe cmd.exe"){ | ||||
|         If WinActive("ahk_exe cmd.exe") OR WinActive("ahk_exe box.exe"){ | ||||
|             Send {Enter} | ||||
|         } | ||||
|         else if WinActive("ahk_exe mintty.exe"){ | ||||
|             SetKeyDelay -1 | ||||
|             Send {Blind}{Insert} | ||||
|         } | ||||
|         ; else if WinActive("ahk_exe WindowsTerminal.exe"){ ; WinTerm | ||||
|         ;     SetKeyDelay -1                                ; WinTerm | ||||
|         ;     Send {Blind}{F13}                             ; WinTerm | ||||
|         ; }                                                 ; WinTerm | ||||
|         else{ | ||||
|             SetKeyDelay -1 | ||||
|             Send {Blind}{LShift down}{c DownTemp} | ||||
| @@ -537,7 +579,7 @@ GroupAdd, intellij, ahk_exe idea64.exe | ||||
|         return | ||||
|  | ||||
|         ^c up:: | ||||
|         If not WinActive("ahk_group cmd.exe"){ | ||||
|         If not WinActive("ahk_group cmd.exe") OR WinActive("ahk_exe box.exe"){ | ||||
|             SetKeyDelay -1 | ||||
|             Send {Blind}{c Up}{LShift Up} | ||||
|         } | ||||
| @@ -547,6 +589,12 @@ GroupAdd, intellij, ahk_exe idea64.exe | ||||
|         ; $#c::Send {Ctrl down}c{Ctrl up} ; Default | ||||
|         ; $!c::Send {Ctrl down}c{Ctrl up} ; CB/IBM | ||||
|  | ||||
|         ; Windows Terminal | ||||
|         ; Ctrl+Shift+C should do nothing | ||||
|         If WinActive("ahk_exe WindowsTerminal.exe"){ | ||||
|             $#+c::return | ||||
|         } | ||||
|  | ||||
|         ; Paste | ||||
|         $^v:: | ||||
|         If WinActive("ahk_exe mintty.exe"){ | ||||
| @@ -555,6 +603,9 @@ GroupAdd, intellij, ahk_exe idea64.exe | ||||
|         else if WinActive("ahk_group posix"){ | ||||
|             Send {Blind}{Shift down}v{Shift up} | ||||
|         } | ||||
|         else if WinActive("ahk_exe box.exe"){ | ||||
|             SendEvent {RButton} | ||||
|         } | ||||
|         else{ | ||||
|             Send {Blind}v | ||||
|         } | ||||
| @@ -564,17 +615,21 @@ GroupAdd, intellij, ahk_exe idea64.exe | ||||
|     #IfWinActive ahk_group posix | ||||
|         ; Open/Close Tab for those that support it | ||||
|         $^t:: | ||||
|         If not WinActive("ahk_group ConEmu"){ | ||||
|             Send {LCtrl down}{LShift down}t{LCtrl Up}{LShift Up} | ||||
|         If not WinActive("ahk_group ConEmu") AND not WinActive("ahk_class Console_2_Main"){ | ||||
|             Send {Blind}{LShift down}t{LShift Up} | ||||
|         } | ||||
|         else if WinActive("ahk_class Console_2_Main"){ | ||||
|             Send {Blind}{F1}{LShift Up} | ||||
|         } | ||||
|         else{ | ||||
|             Send ^t | ||||
|             Send {Blind}t | ||||
|         } | ||||
|         return | ||||
|  | ||||
|  | ||||
|         $^w:: | ||||
|         If not WinActive("ahk_group ConEmu"){ | ||||
|             Send {LCtrl down}{LShift down}w{LCtrl Up}{LShift Up} | ||||
|             Send {Blind}{LShift down}w{LShift Up} | ||||
|         } | ||||
|         else{ | ||||
|             Send ^w | ||||
| @@ -585,34 +640,95 @@ GroupAdd, intellij, ahk_exe idea64.exe | ||||
|         ; #l::return | ||||
|         ; Clear Terminal and Scroll Buffer | ||||
|         ^k::Send clear && printf '\e[3J'{Enter} | ||||
|         ; Nano editor shortcuts | ||||
|         #g::Send {LCtrl down}g{LCtrl Up} ; Default | ||||
|         #k::Send {LCtrl down}k{LCtrl Up} ; Default | ||||
|         #x::Send {LCtrl down}x{LCtrl Up} ; Default | ||||
|         #o::Send {LCtrl down}o{LCtrl Up} ; Default | ||||
|         #r::Send {LCtrl down}r{LCtrl Up} ; Default | ||||
|         #w::Send {LCtrl down}w{LCtrl Up} ; Default | ||||
|         #\::Send {LCtrl down}\{LCtrl Up} ; Default | ||||
|         #u::Send {LCtrl down}u{LCtrl Up} ; Default | ||||
|         #j::Send {LCtrl down}j{LCtrl Up} ; Default | ||||
|         #t::Send {LCtrl down}t{LCtrl Up} ; Default | ||||
|         #_::Send {LCtrl down}_{LCtrl Up} ; Default | ||||
|         #z::Send {LCtrl down}z{LCtrl Up} ; Default | ||||
|         #y::Send {LCtrl down}y{LCtrl Up} ; Default | ||||
|         #v::Send {LCtrl down}v{LCtrl Up} ; Default | ||||
|         !g::Send {LCtrl down}g{LCtrl Up} ; CB/IBM | ||||
|         !k::Send {LCtrl down}k{LCtrl Up} ; CB/IBM | ||||
|         !x::Send {LCtrl down}x{LCtrl Up} ; CB/IBM | ||||
|         !o::Send {LCtrl down}o{LCtrl Up} ; CB/IBM | ||||
|         !r::Send {LCtrl down}r{LCtrl Up} ; CB/IBM | ||||
|         !w::Send {LCtrl down}w{LCtrl Up} ; CB/IBM | ||||
|         !\::Send {LCtrl down}\{LCtrl Up} ; CB/IBM | ||||
|         !u::Send {LCtrl down}u{LCtrl Up} ; CB/IBM | ||||
|         !j::Send {LCtrl down}j{LCtrl Up} ; CB/IBM | ||||
|         !t::Send {LCtrl down}t{LCtrl Up} ; CB/IBM | ||||
|         !_::Send {LCtrl down}_{LCtrl Up} ; CB/IBM | ||||
|         !z::Send {LCtrl down}z{LCtrl Up} ; CB/IBM | ||||
|         !y::Send {LCtrl down}y{LCtrl Up} ; CB/IBM | ||||
|         !v::Send {LCtrl down}v{LCtrl Up} ; CB/IBM | ||||
|         ; Remap Physical Ctrl back to Ctrl | ||||
|         #0::Send {LCtrl down}0{Ctrl up}  ; Default | ||||
|         #1::Send {LCtrl down}1{Ctrl up}  ; Default | ||||
|         #2::Send {LCtrl down}2{Ctrl up}  ; Default | ||||
|         #3::Send {LCtrl down}3{Ctrl up}  ; Default | ||||
|         #4::Send {LCtrl down}4{Ctrl up}  ; Default | ||||
|         #5::Send {LCtrl down}5{Ctrl up}  ; Default | ||||
|         #6::Send {LCtrl down}6{Ctrl up}  ; Default | ||||
|         #7::Send {LCtrl down}7{Ctrl up}  ; Default | ||||
|         #8::Send {LCtrl down}8{Ctrl up}  ; Default | ||||
|         #9::Send {LCtrl down}9{Ctrl up}  ; Default | ||||
|         #-::Send {LCtrl down}-{Ctrl up}  ; Default | ||||
|         #=::Send {LCtrl down}={Ctrl up}  ; Default | ||||
|         #`::Send {LCtrl down}`{Ctrl up}  ; Default | ||||
|         #a::Send {LCtrl down}a{Ctrl up}  ; Default | ||||
|         #b::Send {LCtrl down}b{Ctrl up}  ; Default | ||||
|         #c::Send {LCtrl down}c{Ctrl up}  ; Default | ||||
|         #d::Send {LCtrl down}d{Ctrl up}  ; Default | ||||
|         #e::Send {LCtrl down}e{Ctrl up}  ; Default | ||||
|         #f::Send {LCtrl down}f{Ctrl up}  ; Default | ||||
|         #g::Send {LCtrl down}g{Ctrl up}  ; Default | ||||
|         #h::Send {LCtrl down}h{Ctrl up}  ; Default | ||||
|         #i::Send {LCtrl down}i{Ctrl up}  ; Default | ||||
|         #j::Send {LCtrl down}j{Ctrl up}  ; Default | ||||
|         #k::Send {LCtrl down}k{Ctrl up}  ; Default | ||||
|         #l::Send {LCtrl down}l{Ctrl up}  ; Default | ||||
|         #m::Send {LCtrl down}m{Ctrl up}  ; Default | ||||
|         #n::Send {LCtrl down}n{Ctrl up}  ; Default | ||||
|         #o::Send {LCtrl down}o{Ctrl up}  ; Default | ||||
|         #p::Send {LCtrl down}p{Ctrl up}  ; Default | ||||
|         #q::Send {LCtrl down}q{Ctrl up}  ; Default | ||||
|         #r::Send {LCtrl down}r{Ctrl up}  ; Default | ||||
|         #s::Send {LCtrl down}s{Ctrl up}  ; Default | ||||
|         #t::Send {LCtrl down}t{Ctrl up}  ; Default | ||||
|         #u::Send {LCtrl down}u{Ctrl up}  ; Default | ||||
|         #v::Send {LCtrl down}v{Ctrl up}  ; Default | ||||
|         #w::Send {LCtrl down}w{Ctrl up}  ; Default | ||||
|         #x::Send {LCtrl down}x{Ctrl up}  ; Default | ||||
|         #y::Send {LCtrl down}y{Ctrl up}  ; Default | ||||
|         #z::Send {LCtrl down}z{Ctrl up}  ; Default | ||||
|         ; !0::Send {LCtrl down}0{Ctrl up}  ; CB/IBM | ||||
|         ; !1::Send {LCtrl down}1{Ctrl up}  ; CB/IBM | ||||
|         ; !2::Send {LCtrl down}2{Ctrl up}  ; CB/IBM | ||||
|         ; !3::Send {LCtrl down}3{Ctrl up}  ; CB/IBM | ||||
|         ; !4::Send {LCtrl down}4{Ctrl up}  ; CB/IBM | ||||
|         ; !5::Send {LCtrl down}5{Ctrl up}  ; CB/IBM | ||||
|         ; !6::Send {LCtrl down}6{Ctrl up}  ; CB/IBM | ||||
|         ; !7::Send {LCtrl down}7{Ctrl up}  ; CB/IBM | ||||
|         ; !8::Send {LCtrl down}8{Ctrl up}  ; CB/IBM | ||||
|         ; !9::Send {LCtrl down}9{Ctrl up}  ; CB/IBM | ||||
|         ; !-::Send {LCtrl down}-{Ctrl up}  ; CB/IBM | ||||
|         ; !=::Send {LCtrl down}={Ctrl up}  ; CB/IBM | ||||
|         ; !`::Send {LCtrl down}`{Ctrl up}  ; CB/IBM | ||||
|         ; !a::Send {LCtrl down}a{Ctrl up}  ; CB/IBM | ||||
|         ; !b::Send {LCtrl down}b{Ctrl up}  ; CB/IBM | ||||
|         ; !c::Send {LCtrl down}c{Ctrl up}  ; CB/IBM | ||||
|         ; !d::Send {LCtrl down}d{Ctrl up}  ; CB/IBM | ||||
|         ; !e::Send {LCtrl down}e{Ctrl up}  ; CB/IBM | ||||
|         ; !f::Send {LCtrl down}f{Ctrl up}  ; CB/IBM | ||||
|         ; !g::Send {LCtrl down}g{Ctrl up}  ; CB/IBM | ||||
|         ; !h::Send {LCtrl down}h{Ctrl up}  ; CB/IBM | ||||
|         ; !i::Send {LCtrl down}i{Ctrl up}  ; CB/IBM | ||||
|         ; !j::Send {LCtrl down}j{Ctrl up}  ; CB/IBM | ||||
|         ; !k::Send {LCtrl down}k{Ctrl up}  ; CB/IBM | ||||
|         ; !l::Send {LCtrl down}l{Ctrl up}  ; CB/IBM | ||||
|         ; !m::Send {LCtrl down}m{Ctrl up}  ; CB/IBM | ||||
|         ; !n::Send {LCtrl down}n{Ctrl up}  ; CB/IBM | ||||
|         ; !o::Send {LCtrl down}o{Ctrl up}  ; CB/IBM | ||||
|         ; !p::Send {LCtrl down}p{Ctrl up}  ; CB/IBM | ||||
|         ; !q::Send {LCtrl down}q{Ctrl up}  ; CB/IBM | ||||
|         ; !r::Send {LCtrl down}r{Ctrl up}  ; CB/IBM | ||||
|         ; !s::Send {LCtrl down}s{Ctrl up}  ; CB/IBM | ||||
|         ; !t::Send {LCtrl down}t{Ctrl up}  ; CB/IBM | ||||
|         ; !u::Send {LCtrl down}u{Ctrl up}  ; CB/IBM | ||||
|         ; !v::Send {LCtrl down}v{Ctrl up}  ; CB/IBM | ||||
|         ; !w::Send {LCtrl down}w{Ctrl up}  ; CB/IBM | ||||
|         ; !x::Send {LCtrl down}x{Ctrl up}  ; CB/IBM | ||||
|         ; !y::Send {LCtrl down}y{Ctrl up}  ; CB/IBM | ||||
|         ; !z::Send {LCtrl down}z{Ctrl up}  ; CB/IBM | ||||
|     #If | ||||
| #If | ||||
|  | ||||
| ReleaseModifiers: | ||||
| Send {RCtrl up} | ||||
| Send {LCtrl up} | ||||
| Send {RAlt up} | ||||
| Send {LAlt up} | ||||
| Send {RWin up} | ||||
| Send {LWin up} | ||||
| Send {RShift up} | ||||
| Send {LShift up} | ||||
| return | ||||
| @@ -5,6 +5,7 @@ gi.require_version('Gtk', '3.0') | ||||
| gi.require_version('Vte', '2.91') | ||||
| from gi.repository import Gtk,Gdk,GdkPixbuf | ||||
| from gi.repository import Vte,GLib | ||||
| from shutil import which | ||||
| from subprocess import Popen,PIPE,CalledProcessError | ||||
| from distutils.util import strtobool | ||||
|  | ||||
| @@ -918,10 +919,14 @@ class MyWindow(Gtk.Window): | ||||
|         try: | ||||
|             if os.path.exists('/opt/sublime_text/sublime_text'): | ||||
|                 Popen(['/opt/sublime_text/sublime_text',os.environ['HOME']+'/.config/kinto/kinto.py']) | ||||
|             elif which(gedit) is not None: | ||||
|             elif which('gedit') is not None: | ||||
|                 Popen(['gedit',os.environ['HOME']+'/.config/kinto/kinto.py']) | ||||
|             elif which(mousepad) is not None: | ||||
|             elif which('mousepad') is not None: | ||||
|                 Popen(['mousepad',os.environ['HOME']+'/.config/kinto/kinto.py']) | ||||
|             elif which('kate') is not None: | ||||
|                 Popen(['kate',os.environ['HOME']+'/.config/kinto/kinto.py']) | ||||
|             elif which('kwrite') is not None: | ||||
|                 Popen(['kwrite',os.environ['HOME']+'/.config/kinto/kinto.py']) | ||||
|  | ||||
|         except CalledProcessError:                                  # Notify user about error on running restart commands. | ||||
|             Popen(['notify-send','Kinto: Error could not open config file!']) | ||||
| @@ -930,10 +935,14 @@ class MyWindow(Gtk.Window): | ||||
|         try: | ||||
|             if os.path.exists('/opt/sublime_text/sublime_text'): | ||||
|                 Popen(['/opt/sublime_text/sublime_text','/lib/systemd/system/xkeysnail.service']) | ||||
|             elif which(gedit) is not None: | ||||
|             elif which('gedit') is not None: | ||||
|                 Popen(['gedit','/lib/systemd/system/xkeysnail.service']) | ||||
|             elif which(mousepad) is not None: | ||||
|             elif which('mousepad') is not None: | ||||
|                 Popen(['mousepad','/lib/systemd/system/xkeysnail.service']) | ||||
|             elif which('kate') is not None: | ||||
|                 Popen(['kate','/lib/systemd/system/xkeysnail.service']) | ||||
|             elif which('kwrite') is not None: | ||||
|                 Popen(['kwrite','/lib/systemd/system/xkeysnail.service']) | ||||
|  | ||||
|         except CalledProcessError:                                  # Notify user about error on running restart commands. | ||||
|             Popen(['notify-send','Kinto: Error could not open config file!']) | ||||
| @@ -941,12 +950,16 @@ class MyWindow(Gtk.Window): | ||||
|     def setSysKB(self,button): | ||||
|         if self.ostype == "XFCE": | ||||
|             Popen(['xfce4-keyboard-settings']) | ||||
|         elif self.ostype == "KDE": | ||||
|             self.queryConfig('systemsettings >/dev/null 2>&1 || systemsettings5 >/dev/null 2>&1') | ||||
|         else: | ||||
|             Popen(['gnome-control-center','keyboard']) | ||||
|  | ||||
|     def setRegion(self,button): | ||||
|         if self.ostype == "XFCE": | ||||
|             Popen(['gnome-language-selector']) | ||||
|         elif self.ostype == "KDE": | ||||
|             self.queryConfig('kcmshell4 kcm_translations >/dev/null 2>&1 || kcmshell5 kcm_translations >/dev/null 2>&1') | ||||
|         else: | ||||
|             Popen(['gnome-control-center','region']) | ||||
|  | ||||
| @@ -1221,7 +1234,8 @@ class SecondPage(Gtk.Box): | ||||
|         scroller.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.ALWAYS) | ||||
|  | ||||
|         label_start = Gtk.Label() | ||||
|         label_start.set_markup('<b>Identifying your Keyboard...</b>\n\nPress the <b>2nd</b> key <b>Left</b> of the spacebar.') | ||||
|          | ||||
|         label_start.set_markup('<b>Identifying your Keyboard...</b>\n\nPress the <b>2nd</b> key <b>Left</b> of the spacebar.\n\n<sub>If stuck here then unset Overlay (Super) key on your DE.</sub>') | ||||
|         label_start.set_alignment(0,0) | ||||
|         label_start.set_line_wrap(True) | ||||
|         vbox.add(label_start) | ||||
| @@ -1370,13 +1384,43 @@ class SuccessPage(Gtk.Box): | ||||
|     def __init__(self, parent_window): | ||||
|         super().__init__(spacing=10) | ||||
|         self.__parent_window = parent_window | ||||
|         self.grid = Gtk.Grid() | ||||
|  | ||||
|         vbox_container = Gtk.VBox() | ||||
|         self.__parent_window.last_onward.props.relief = Gtk.ReliefStyle.NONE | ||||
|         hbox = Gtk.HBox() | ||||
|         previous = Gtk.Button("       ") | ||||
|         previous.props.relief = Gtk.ReliefStyle.NONE | ||||
|         previous.set_margin_right(245) | ||||
|         hbox.add(previous) | ||||
|  | ||||
|         self.__parent_window.last_onward.set_label("") | ||||
|         for child in self.__parent_window.last_onward.get_children(): | ||||
|             child.set_label("<b>Done</b>") | ||||
|             child.set_use_markup(True) | ||||
|         self.__parent_window.last_onward.connect("clicked", self.forward) | ||||
|         vbox_container.set_margin_top(600) | ||||
|         vbox_container.add(self.__parent_window.last_onward) | ||||
|         self.add(vbox_container) | ||||
|  | ||||
|         hbox.add(self.__parent_window.last_onward) | ||||
|         hbox.set_hexpand(False) | ||||
|         hbox.set_vexpand(False) | ||||
|         hbox.set_margin_bottom(6) | ||||
|         hbox.set_margin_right(25) | ||||
|  | ||||
|         scroller = Gtk.ScrolledWindow() | ||||
|         scroller.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER) | ||||
|         scroller.set_hexpand(True) | ||||
|         scroller.set_vexpand(True) | ||||
|         vbox = Gtk.VBox() | ||||
|         vbox_container = Gtk.VBox() | ||||
|         vbox_container.set_margin_top(55) | ||||
|         vbox_container.set_margin_right(28) | ||||
|         vbox_container.add(scroller) | ||||
|         self.grid.set_margin_left(157) | ||||
|         vbox_container.set_margin_bottom(18) | ||||
|         vbox.set_margin_right(10) | ||||
|         vbox.set_margin_bottom(18) | ||||
|         self.grid.add(vbox_container) | ||||
|         self.grid.attach_next_to(hbox, vbox_container, Gtk.PositionType.BOTTOM, 2, 1) | ||||
|         self.add(self.grid) | ||||
|         self.__parent_window.last_onward.grab_focus() | ||||
|  | ||||
|     def forward(self, *args): | ||||
|         self.hide() | ||||
|   | ||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 65 KiB | 
| @@ -12,10 +12,18 @@ terminals = [term.casefold() for term in terminals] | ||||
| termStr = "|".join(str(x) for x in terminals) | ||||
|  | ||||
| # Use for browser specific hotkeys | ||||
| browsers = ["Chromium","Chromium-browser","Google-chrome","Epiphany","Firefox","Discord"] | ||||
| browsers = ["Chromium","Chromium-browser","Google-chrome","microsoft-edge-dev","microsoft-edge","Epiphany","Firefox","Discord"] | ||||
| browsers = [browser.casefold() for browser in browsers] | ||||
| browserStr = "|".join(str(x) for x in browsers) | ||||
|  | ||||
| chromes = ["Chromium","Chromium-browser","Google-chrome","microsoft-edge-dev","microsoft-edge"] | ||||
| chromes = [chrome.casefold() for chrome in chromes] | ||||
| chromeStr = "|".join(str(x) for x in chromes) | ||||
|  | ||||
| # edges = ["microsoft-edge-dev","microsoft-edge"] | ||||
| # edges = [edge.casefold() for edge in edges] | ||||
| # edgeStr = "|".join(str(x) for x in edges) | ||||
|  | ||||
| mscodes = ["code","vscodium"] | ||||
| codeStr = "|".join(str(x) for x in mscodes) | ||||
|  | ||||
| @@ -198,9 +206,20 @@ define_keymap(re.compile("org.gnome.nautilus", re.IGNORECASE),{ | ||||
|  | ||||
| # Keybindings for Browsers | ||||
| define_keymap(re.compile(browserStr, re.IGNORECASE),{ | ||||
|     K("RC-Q"): K("RC-Q"),          # Close all browsers Instances | ||||
|     K("RC-Q"): K("RC-Q"),               # Close all browsers Instances | ||||
|     K("Super-RC-I"): K("RC-Shift-I"),   # Dev tools | ||||
|     K("Super-RC-J"): K("RC-Shift-J"),   # Dev tools | ||||
| }) | ||||
|  | ||||
| # Open preferences in browsers | ||||
| define_keymap(re.compile("Firefox", re.IGNORECASE),{ | ||||
|     K("C-comma"): [K("M-t"), K("o"),K("Enter")], | ||||
| }) | ||||
| define_keymap(re.compile(chromeStr, re.IGNORECASE),{ | ||||
|     K("C-comma"): [K("M-e"), K("s"),K("Enter")], | ||||
| }) | ||||
| # Opera C-F12 | ||||
|  | ||||
| define_keymap(None,{ | ||||
|     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) | ||||
| @@ -240,12 +259,20 @@ define_keymap(None,{ | ||||
|     K("Super-Tab"): K("LC-Tab"),                  # Default not-chromebook | ||||
|     K("Super-Shift-Tab"): K("LC-Shift-Tab"),      # Default not-chromebook | ||||
|      | ||||
|     # emacs style | ||||
|     K("Super-a"): K("Home"),                      # Beginning of Line | ||||
|     K("Super-e"): K("End"),                       # End of Line | ||||
|     K("Super-b"): K("Left"), | ||||
|     K("Super-f"): K("Right"), | ||||
|     K("Super-n"): K("Down"), | ||||
|     K("Super-p"): K("Up"), | ||||
|     K("Super-k"): [K("Shift-End"), K("Backspace")], | ||||
|     K("Super-d"): K("Delete"), | ||||
|  | ||||
|     # Wordwise | ||||
|     K("RC-Left"): K("Home"),                      # Beginning of Line | ||||
|     K("Super-a"): K("Home"),                      # Beginning of Line | ||||
|     K("RC-Shift-Left"): K("Shift-Home"),          # Select all to Beginning of Line | ||||
|     K("RC-Right"): K("End"),                      # End of Line | ||||
|     K("Super-e"): K("End"),                       # End of Line | ||||
|     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 | ||||
|   | ||||
| @@ -620,10 +620,14 @@ class Indicator(): | ||||
|         try: | ||||
|             if os.path.exists('/opt/sublime_text/sublime_text'): | ||||
|                 Popen(['/opt/sublime_text/sublime_text',os.environ['HOME']+'/.config/kinto/kinto.py']) | ||||
|             elif which(gedit) is not None: | ||||
|             elif which('gedit') is not None: | ||||
|                 Popen(['gedit',os.environ['HOME']+'/.config/kinto/kinto.py']) | ||||
|             elif which(mousepad) is not None: | ||||
|             elif which('mousepad') is not None: | ||||
|                 Popen(['mousepad',os.environ['HOME']+'/.config/kinto/kinto.py']) | ||||
|             elif which('kate') is not None: | ||||
|                 Popen(['kate',os.environ['HOME']+'/.config/kinto/kinto.py']) | ||||
|             elif which('kwrite') is not None: | ||||
|                 Popen(['kwrite',os.environ['HOME']+'/.config/kinto/kinto.py']) | ||||
|  | ||||
|         except CalledProcessError:                                  # Notify user about error on running restart commands. | ||||
|             Popen(['notify-send','Kinto: Error could not open config file!']) | ||||
| @@ -632,10 +636,14 @@ class Indicator(): | ||||
|         try: | ||||
|             if os.path.exists('/opt/sublime_text/sublime_text'): | ||||
|                 Popen(['/opt/sublime_text/sublime_text','/lib/systemd/system/xkeysnail.service']) | ||||
|             elif which(gedit) is not None: | ||||
|             elif which('gedit') is not None: | ||||
|                 Popen(['gedit','/lib/systemd/system/xkeysnail.service']) | ||||
|             elif which(mousepad) is not None: | ||||
|             elif which('mousepad') is not None: | ||||
|                 Popen(['mousepad','/lib/systemd/system/xkeysnail.service']) | ||||
|             elif which('kate') is not None: | ||||
|                 Popen(['kate','/lib/systemd/system/xkeysnail.service']) | ||||
|             elif which('kwrite') is not None: | ||||
|                 Popen(['kwrite','/lib/systemd/system/xkeysnail.service']) | ||||
|  | ||||
|         except CalledProcessError:                                  # Notify user about error on running restart commands. | ||||
|             Popen(['notify-send','Kinto: Error could not open config file!']) | ||||
| @@ -690,12 +698,16 @@ class Indicator(): | ||||
|     def setSysKB(self,button): | ||||
|         if self.ostype == "XFCE": | ||||
|             Popen(['xfce4-keyboard-settings']) | ||||
|         elif self.ostype == "KDE": | ||||
|             self.queryConfig('systemsettings >/dev/null 2>&1 || systemsettings5 >/dev/null 2>&1') | ||||
|         else: | ||||
|             Popen(['gnome-control-center','keyboard']) | ||||
|  | ||||
|     def setRegion(self,button): | ||||
|         if self.ostype == "XFCE": | ||||
|             Popen(['gnome-language-selector']) | ||||
|         elif self.ostype == "KDE": | ||||
|             self.queryConfig('kcmshell4 kcm_translations >/dev/null 2>&1 || kcmshell5 kcm_translations >/dev/null 2>&1') | ||||
|         else: | ||||
|             Popen(['gnome-control-center','region']) | ||||
|  | ||||
|   | ||||
| @@ -73,7 +73,7 @@ function uninstall { | ||||
| 	elif [ "$yn" == "n" ]; then | ||||
| 		echo "Skipping..." | ||||
| 	fi | ||||
| 	if [[ $dename == "gnome" || $dename == "budgie" ]]; then | ||||
| 	if [[ $dename == "gnome" || $dename == "budgie" || $dename == "mate" ]]; then | ||||
| 		echo -e "\nWill still be restoring the overlay key" | ||||
| 		echo -e "gsettings set org.gnome.mutter overlay-key 'super'\n" | ||||
| 		gsettings set org.gnome.mutter overlay-key 'super' | ||||
| @@ -196,6 +196,9 @@ if [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then | ||||
| 	if [ -f /usr/local/bin/logoff.sh ];then | ||||
| 		sudo rm /usr/local/bin/logoff.sh | ||||
| 	fi | ||||
| 	if [[ $distro == "elementaryos" ]]; then | ||||
| 		gsettings set io.elementary.terminal.settings natural-copy-paste true | ||||
| 	fi | ||||
| 	sudo systemctl daemon-reload | ||||
| 	# sudo systemctl --state=not-found --all | grep xkeysnail | ||||
| 	exit 0 | ||||
| @@ -234,6 +237,10 @@ if [[ $distro == 'popos' ]]; then | ||||
| 	fi | ||||
| fi | ||||
|  | ||||
| if [[ $distro == "elementaryos" ]]; then | ||||
| 	gsettings set io.elementary.terminal.settings natural-copy-paste false | ||||
| fi | ||||
|  | ||||
| if ! [ -x "$(command -v xhost)" ] || ! [ -x "$(command -v gcc)" ]; then | ||||
| 	if [ "$distro" == "manjarolinux" ]; then | ||||
| 		sudo ./system-config/unipkg.sh "xorg-xhost gcc" | ||||
| @@ -400,13 +407,9 @@ sed -i "s#{homedir}#`echo "$HOME"`#g" ~/.config/kinto/gui/kinto-gui.py | ||||
| sed -i "s#{homedir}#`echo "$HOME"`#g" ./xkeysnail-config/gui/kinto.desktop.new | ||||
| sudo mv ./xkeysnail-config/gui/kinto.desktop.new /usr/share/applications/kinto.desktop | ||||
| sed -i "s#{xhost}#`\\which xhost`#g" ./xkeysnail-config/xkeysnail.service.new | ||||
| sed -i "s#{xkeysnail}#`which xkeysnail`#g" ./xkeysnail-config/xkeysnail.service.new | ||||
| sed -i "s/{username}/`whoami`/g" ./xkeysnail-config/limitedadmins.new | ||||
| sed -i "s#{systemctl}#`\\which systemctl`#g" ./xkeysnail-config/limitedadmins.new | ||||
| sed -i "s#{pkill}#`\\which pkill`#g" ./xkeysnail-config/limitedadmins.new | ||||
| sed -i "s#{xkeysnail}#`which xkeysnail`#g" ./xkeysnail-config/limitedadmins.new | ||||
| sudo chown root:root ./xkeysnail-config/limitedadmins.new | ||||
| sudo mv ./xkeysnail-config/limitedadmins.new /etc/sudoers.d/limitedadmins | ||||
| sed -i "s#{systemctl}#`\\which systemctl`#g" ~/.config/kinto/xkeysnail.desktop | ||||
| sed -i "s#{xhost}#`\\which xhost`#g" ~/.config/kinto/xkeysnail.desktop | ||||
| sed -i "s#{homedir}#`echo "$HOME"`#g" ~/.config/kinto/xkeysnail.desktop | ||||
| @@ -464,11 +467,6 @@ if ! [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then | ||||
| 	elif [ -d /lib/systemd/system ];then | ||||
| 		xkeypath="/lib/systemd/system/" | ||||
| 	fi | ||||
| 	sudo mv ./xkeysnail-config/xkeysnail.service.new "$xkeypath"xkeysnail.service && echo "Service file added to "$xkeypath"xkeysnail.service" | ||||
| 	sudo chown -R root:root "$xkeypath"xkeysnail.service && echo "Ownership set for root..." || echo "Failed to set ownership..." | ||||
| 	sudo chmod 644 "$xkeypath"xkeysnail.service && echo "Permissions set to 644..." || echo "Failed to set permissions..." | ||||
| 	sudo ln -s "$xkeypath"xkeysnail.service /etc/systemd/system/xkeysnail.service && echo "Created soft symlink..." || echo "Failed to create soft symlink..." | ||||
| 	sudo ln -s "$xkeypath"xkeysnail.service /etc/systemd/system/graphical.target.wants/xkeysnail.service && echo "Created soft symlink for graphical target..." || echo "Failed to create soft symlink for graphical target..." | ||||
| 	xhost +SI:localuser:root | ||||
| 	git clone --depth 10 https://github.com/rbreaves/xkeysnail.git | ||||
| 	cd xkeysnail | ||||
| @@ -485,6 +483,23 @@ if ! [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then | ||||
| 	fi | ||||
| 	sudo pip3 install --upgrade . | ||||
| 	cd .. | ||||
| 	which xkeysnail | ||||
| 	if [ $? -eq 1 ]; then | ||||
| 		echo -e "\nKinto install has \e[1m\033[0;91mfailed\e[0m.\n" | ||||
| 		echo -e "cd into ./xkeysnail" | ||||
| 		echo -e "Run 'sudo pip3 install --upgrade .' to debug issue" | ||||
| 		exit 0 | ||||
| 	fi | ||||
| 	sed -i "s#{xkeysnail}#`which xkeysnail`#g" ./xkeysnail-config/xkeysnail.service.new | ||||
| 	sed -i "s#{xkeysnail}#`which xkeysnail`#g" ./xkeysnail-config/limitedadmins.new | ||||
| 	sudo mv ./xkeysnail-config/xkeysnail.service.new "$xkeypath"xkeysnail.service && echo "Service file added to "$xkeypath"xkeysnail.service" | ||||
| 	sudo chown root:root ./xkeysnail-config/limitedadmins.new | ||||
| 	# Add a check here for xkeysnail path resolving | ||||
| 	sudo mv ./xkeysnail-config/limitedadmins.new /etc/sudoers.d/limitedadmins | ||||
| 	sudo chown -R root:root "$xkeypath"xkeysnail.service && echo "Ownership set for root..." || echo "Failed to set ownership..." | ||||
| 	sudo chmod 644 "$xkeypath"xkeysnail.service && echo "Permissions set to 644..." || echo "Failed to set permissions..." | ||||
| 	sudo ln -s "$xkeypath"xkeysnail.service /etc/systemd/system/xkeysnail.service && echo "Created soft symlink..." || echo "Failed to create soft symlink..." | ||||
| 	sudo ln -s "$xkeypath"xkeysnail.service /etc/systemd/system/graphical.target.wants/xkeysnail.service && echo "Created soft symlink for graphical target..." || echo "Failed to create soft symlink for graphical target..." | ||||
| 	sudo systemctl daemon-reload | ||||
| 	sudo systemctl disable xkeysnail | ||||
| 	sudo systemctl stop xkeysnail | ||||
|   | ||||
		Reference in New Issue
	
	Block a user