diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 97fac0c..0c11dcf 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -19,21 +19,16 @@ A clear and concise description of what you expected to happen.
**Branch:** master, dev
**Commit:** git rev-parse --short HEAD
-**Kinto Input Caret Status**
-```
-cat /tmp/kinto/caret
+Logs and status if relevant
```
+# xkeysnail
+sudo systemctl status xkeysnail
+sudo journalctl --unit=xkeysnail.service -b
-**Kinto Standard Log**
-```
+# xkb
+systemctl --user status keyswap
journalctl --user-unit=keyswap.service -b
```
-**Kinto Debug Log (1.0.6-2+)**
-```
-systemctl --user stop keyswap
-cd ~/.config/kinto
-./kintox11 --debug
-```
**Screenshots**
If applicable, add screenshots to help explain your problem.
diff --git a/README.md b/README.md
index 2002b0a..6e759f3 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,7 @@
# Kinto
-
+
-
[](https://github.com/rbreaves/kinto/releases/latest)
@@ -40,15 +39,23 @@ Seamless copy and paste with all apps and terminals. Also the only linux remappe
## What does this do exactly?
-Kinto works for standard Windows, Apple and Chromebook keyboards. The following however describes the dynamic rebinding based on a standard Windows keyboard. (Alt location is Cmd for Apple keyboards)
-
-- Normal apps - Alt → Ctrl, Win/Super → Alt, Ctrl → Win/Super
-
-- Terminal apps - Alt → Ctrl+Shift, Win/Super → Alt, Ctrl → Ctrl
+Kinto works for standard Windows, Apple and Chromebook keyboards. The following however describes the dynamic rebinding based on a standard Windows/Mac keyboard.
- Cursor/word-wise shortcut keys have been added to align with macOS keyboard shortcuts.
-Does Kinto have to have specific keyamps for individual apps?
+**GUI**
+|**Physical**| Ctrl | Win/Alt | Alt/Cmd | Spacebar|
+|---|---|---|---|---|
+|**Virtual**| Win/Super* | Alt | RCtrl |Spacebar|
+
+*Win/Super will properly remap to LCtrl when needed to fully support expected keymaps.
+
+**Terminal**
+|**Physical**| Ctrl | Win/Alt | Alt/Cmd | Spacebar|
+|---|---|---|---|---|
+|**Virtual**| LCtrl | Alt | RCtrl |Spacebar|
+
+Does Kinto have to have specific keymaps for individual apps?
I'd say 90+% of the time no, but every OS has their default conventions that sometimes run afoul to macs. For this reason you can easily edit kinto.py or kinto.ahk to support the few shortcut keys Kinto may miss. If you do add additional support please consider forking this project and sharing your new keymaps with the rest of us!
@@ -78,7 +85,15 @@ Other programs that will be installed when you run ./setup.py
- Chocolatey
- Autohotkey
-Does not have complete parity with the Linux edition, but it does work and can be built on and added to as needed. Modify ./windows/kinto.ahk if you want to add more WSL editions or other terminals.
+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.
+
+Does not have complete parity with the Linux edition, but it is getting very close now. Only lacks some Sublime Text 3 remaps at this point.
+
+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).
+
+
+
+
## How to install
@@ -346,11 +361,6 @@ sudo systemctl start xkeysnail
sudo systemctl status xkeysnail
```
-## Notes about Windows 10
-Sharpkeys was used to create the layout/reg files to swap the Ctrl, Win and Alt keys. Sharpkeys was not required however because the reg keys were extracted. Autohotkey is used to manage keyswaps needed for terminal usage. Autohotkey is also used to add additional mac like keybinds for Sublime text and can be used for other apps as well.
-
-Microsoft is working on a new Powertoy Keyboard Manager that could be used with an easier to use GUI interface, but this approach should be fully sufficient for a mac like experience and autohotkeys appears to be more than capable enough to handle complex rebinding of any or most mac like shortcuts.
-
## 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.
diff --git a/assets/kinto-black.ico b/assets/kinto-black.ico
new file mode 100644
index 0000000..9d3a1f9
Binary files /dev/null and b/assets/kinto-black.ico differ
diff --git a/assets/kinto-color-black.ico b/assets/kinto-color-black.ico
new file mode 100644
index 0000000..8d7df56
Binary files /dev/null and b/assets/kinto-color-black.ico differ
diff --git a/assets/kinto-color.ico b/assets/kinto-color.ico
new file mode 100644
index 0000000..c4f9023
Binary files /dev/null and b/assets/kinto-color.ico differ
diff --git a/assets/kinto-white.ico b/assets/kinto-white.ico
new file mode 100644
index 0000000..1bf3848
Binary files /dev/null and b/assets/kinto-white.ico differ
diff --git a/setup.py b/setup.py
index 39027b1..0357728 100755
--- a/setup.py
+++ b/setup.py
@@ -7,39 +7,46 @@ from prekinto import *
homedir = os.path.expanduser("~")
def windows_setup():
- keymaps = ["Apple keyboard standard", "Apple keyboard w/ Caps lock as Esc", "Windows keyboard standard", "Windows keyboard w/ Caps lock as Esc","Uninstall"]
+ keymaps = ["Apple keyboard standard", "Windows keyboard standard","Uninstall"]
for index, item in enumerate(keymaps):
print(" %i. %s" % (index+1, item.capitalize()))
default = 0
while not int(default) in range(1,len(keymaps)+1):
default = int(input("\nPlease enter your desired keymap (1 - " + str(len(keymaps)) + ") : "))
print("")
+ # Short DOS path notation
path= cmdline('echo %cd%')[:-1]
+ print("Copying autohotkey combinations for Terminals & Editors...")
+ os.system("copy /Y " + path + "\\windows\\kinto.ahk " + path + "\\windows\\kinto-new.ahk")
if default == 1:
- os.system("regedit " + path + "\\windows\\macbook_winctrl_swap.reg")
+ os.system('perl -pi -e "s/(; )(.*)(; MacModifiers)/$2$3/g" ./windows/kinto-new.ahk')
+ # os.system("regedit " + path + "\\windows\\macbook_winctrl_swap.reg")
elif default == 2:
- os.system("regedit " + path + "\\windows\\macbook_winctrl_capsesc_swap.reg")
+ os.system('perl -pi -e "s/(; )(.*)(; WinModifiers)/$2$3/g" ./windows/kinto-new.ahk')
+ # os.system("regedit " + path + "\\windows\\standard_ctrlalt_swap.reg")
elif default == 3:
- os.system("regedit " + path + "\\windows\\standard_ctrlalt_swap.reg")
- elif default == 4:
- os.system("regedit " + path + "\\windows\\standard_ctrlalt_capsesc_swap.reg")
- elif default == 5:
os.system("regedit " + path + "\\windows\\remove_keyswap.reg")
stvscode = yn_choice(bcolors.CYELLOW2 + "Would you like to use Sublime Text 3 keymaps in VS Code?\n" + bcolors.ENDC)
- if default > 0 and default < 5:
+ if default > 0 and default < 3:
print("Will now install chocolatey and autohotkey with elevated privileges...")
print("This install will fail if you are not running with elevated privileges")
os.system('powershell -executionpolicy bypass ".\\windows\\autohotkey.ps1"')
os.system('refreshenv')
print("\nWill now install Ubuntu Terminal Theme as default...")
os.system("regedit " + path + "\\windows\\theme_ubuntu.reg")
- print("Copying autohotkey combinations for Terminals & Editors...")
- os.system("copy /Y " + path + "\\windows\\kinto.ahk " + path + "\\windows\\kinto-new.ahk")
if(stvscode):
os.system('perl -pi -e "s/(; )(.*)(; ST2CODE)/$2$3/g" ./windows/kinto-new.ahk')
- os.system("copy /Y " + path + "\\windows\\kinto-new.ahk \"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\kinto.ahk\"")
+ os.system('copy /Y ' + path + '\\windows\\kinto-start.vbs "%userprofile%\\.kinto\\kinto-start.vbs"')
+ os.system('mklink "%userprofile%\\Start Menu\\Programs\\Startup\\kinto-start.vbs" "%userprofile%\\.kinto\\kinto-start.vbs"')
+ os.system('cp '+ path + '\\windows\\NoShell.vbs "%userprofile%\\.kinto\\NoShell.vbs"')
+ os.system('cp '+ path + '\\windows\\toggle_kb.bat "%userprofile%\\.kinto\\toggle_kb.bat"')
+ os.system('cp '+ path + '\\windows\\kinto-new.ahk "%userprofile%\\.kinto\\kinto.ahk"')
+ os.system('robocopy '+ path + '\\assets "%userprofile%\\.kinto\\assets" /E')
os.system("del /f .\\windows\\kinto-new.ahk")
- print("\nPlease log off and back on for changes to take full effect.")
+ os.system("del \"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\kinto.ahk\"")
+ os.system("%userprofile%\\AppData\\Roaming\\Microsoft\\Windows\\STARTM~1\\Programs\\Startup\\kinto-start.vbs")
+
+ # # print("\nPlease log off and back on for changes to take full effect.")
print("If using WSL then please remember to right click on title bar -> Properties -> Edit Options -> Use Ctrl+Shift+C/V as Copy/Paste and enable it.")
else:
os.system("del \"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\kinto.ahk\"")
diff --git a/system-config/keyswap.service b/system-config/keyswap.service
index cfc5896..38a1fce 100755
--- a/system-config/keyswap.service
+++ b/system-config/keyswap.service
@@ -8,9 +8,9 @@ Restart=always
# eg DISPLAY=:0.0
#Environment=DISPLAY={displayid}
RestartSec=1
-WorkingDirectory=/home/{username}/.config/kinto
-ExecStart=/bin/bash -c "/home/{username}/.config/kinto/xactive.sh carrots"
-ExecStop=/bin/bash /home/{username}/.config/kinto/cleanup.sh
+WorkingDirectory={homedir}/.config/kinto
+ExecStart=/bin/bash -c "{homedir}/.config/kinto/xactive.sh carrots"
+ExecStop=/bin/bash {homedir}/.config/kinto/cleanup.sh
[Install]
WantedBy=default.target
diff --git a/windows/NoShell.vbs b/windows/NoShell.vbs
new file mode 100644
index 0000000..bb05151
--- /dev/null
+++ b/windows/NoShell.vbs
@@ -0,0 +1,14 @@
+If WScript.Arguments.Count >= 1 Then
+ ReDim arr(WScript.Arguments.Count-1)
+ prog = WScript.Arguments(0)
+ For i = 1 To WScript.Arguments.Count-1
+ Arg = WScript.Arguments(i)
+ If InStr(Arg, " ") > 1 Then Arg = """" & Arg & """"
+ arr(i) = Arg
+ Next
+
+ RunCmd = Join(arr)
+ ' CreateObject("Wscript.Shell").Run RunCmd, 0, True
+ Set oShell = CreateObject("Shell.Application")
+ oShell.ShellExecute prog, RunCmd, , "runas", 0
+End If
\ No newline at end of file
diff --git a/windows/kinto-start.vbs b/windows/kinto-start.vbs
new file mode 100644
index 0000000..fbe1078
--- /dev/null
+++ b/windows/kinto-start.vbs
@@ -0,0 +1,7 @@
+Set oShell = CreateObject("Shell.Application")
+Set wShell = WScript.CreateObject("WScript.Shell")
+Set fso = CreateObject("Scripting.FileSystemObject")
+
+path = wShell.ExpandEnvironmentStrings("%userprofile%")
+strFolder = fso.BuildPath(path, "\.kinto\kinto.ahk")
+oShell.ShellExecute "C:\Program Files\AutoHotkey\AutoHotkey.exe", strFolder, , "runas", 0
\ No newline at end of file
diff --git a/windows/kinto.ahk b/windows/kinto.ahk
index 5f75127..00f4029 100644
--- a/windows/kinto.ahk
+++ b/windows/kinto.ahk
@@ -1,3 +1,52 @@
+#SingleInstance force
+#NoEnv
+#Persistent
+
+I_Icon = %A_ScriptDir%\assets\kinto-white.ico
+IfExist, %I_Icon%
+Menu, Tray, Icon, %I_Icon%
+
+; Set Tray menu
+; Menu, Tray, Standard
+Menu, Tray, NoStandard ; to remove default menu
+Menu, Tray, Add, Set Windows Keyboard, winkb
+Menu, Tray, Add, Set Apple Keyboard, mackb
+Menu, Tray, Add, Suspend Kinto, tray_suspend
+Menu, Tray, Add, Returns to Desktop, min
+Menu, Tray, Add
+Menu, Tray, Add, Close, Exit
+Menu, Tray, Click, 1
+Menu, Tray, Tip, Kinto
+
+winkb(){
+ Run, %A_ScriptDir%\NoShell.vbs %A_ScriptDir%\toggle_kb.bat win, %A_ScriptDir%
+}
+
+mackb(){
+ Run, %A_ScriptDir%\NoShell.vbs %A_ScriptDir%\toggle_kb.bat mac, %A_ScriptDir%
+}
+
+min(){
+; Refocus last active Window
+Send {LAlt down}{tab}{LAlt up}
+}
+
+tray_suspend(){
+ suspend toggle
+ if (a_isSuspended = 1){
+ menu, tray, check , Suspend Kinto
+ }
+ else{
+ menu, tray, unCheck, Suspend Kinto
+ }
+ ; Refocus last active Window
+ Send {LAlt down}{tab}{LAlt up}
+}
+
+Exit() {
+ ExitApp
+}
+
SetTitleMatchMode, 2
GroupAdd, terminals, ahk_exe ubuntu.exe
@@ -7,6 +56,7 @@ GroupAdd, terminals, ahk_exe powershell.exe
GroupAdd, terminals, ahk_exe WindowsTerminal.exe
GroupAdd, terminals, ahk_exe Hyper.exe
GroupAdd, terminals, ahk_exe Cmd.exe
+GroupAdd, terminals, ahk_exe Terminus.exe
GroupAdd, terminals, Fluent Terminal ahk_class ApplicationFrameWindow
GroupAdd, posix, ahk_exe ubuntu.exe
@@ -14,6 +64,7 @@ GroupAdd, posix, ahk_exe ConEmu.exe
GroupAdd, posix, ahk_exe ConEmu64.exe
GroupAdd, posix, ahk_exe Hyper.exe
GroupAdd, posix, ahk_exe mintty.exe
+GroupAdd, terminals, ahk_exe Terminus.exe
GroupAdd, posix, Fluent Terminal ahk_class ApplicationFrameWindow
GroupAdd, ConEmu, ahk_exe ConEmu.exe
@@ -27,7 +78,79 @@ GroupAdd, editors, ahk_exe Code.exe
GroupAdd, vscode, ahk_exe VSCodium.exe
GroupAdd, vscode, ahk_exe Code.exe
-; Close Apps
+GroupAdd, vstudio, ahk_exe devenv.exe
+
+; New AltTab and CtrlTab fix
+*tab::
+{
+ ; Tertiary
+ if (GetKeyState("LCtrl", "P") AND GetKeyState("LShift", "P") = false) {
+ ; Secondary
+ ; Send {LCtrl down}{Secondary up}{tab}
+; Send {LCtrl down}{LWin up}{tab} ; WinModifiers
+; Send {LCtrl down}{LAlt up}{tab} ; MacModifiers
+ KeyWait, tab
+ ; Tertiary
+ } else if (GetKeyState("LCtrl", "P") AND GetKeyState("LShift", "P")) {
+ ; Secondary
+ ; Send {LCtrl down}{Secondary up}{LShift down}{tab}
+; Send {LCtrl down}{LWin up}{LShift down}{tab} ; WinModifiers
+; Send {LCtrl down}{LAlt up}{LShift down}{tab} ; MacModifiers
+ KeyWait, tab
+ ; Primary
+; } else if (GetKeyState("LAlt", "P") AND GetKeyState("LShift", "P") = false) { ; WinModifiers
+; } else if (GetKeyState("LWin", "P") AND GetKeyState("LShift", "P") = false) { ; MacModifiers
+ Send {LAlt down}{tab}
+ KeyWait, tab
+ ; Primary
+; } else if (GetKeyState("LAlt", "P") AND GetKeyState("LShift", "P")) { ; WinModifiers
+; } else if (GetKeyState("LWin", "P") AND GetKeyState("LShift", "P")) { ; MacModifiers
+ Send {LAlt down}{LShift down}{tab}
+ KeyWait, tab
+ ; Secondary
+; } else if (GetKeyState("LWin", "P") AND GetKeyState("LShift", "P")) = false { ; WinModifiers
+; } else if (GetKeyState("LAlt", "P") AND GetKeyState("LShift", "P") = false) { ; MacModifiers
+ return
+ ; Secondary
+; } else if (GetKeyState("LWin", "P") AND GetKeyState("LShift", "P")) { ; WinModifiers
+; } else if (GetKeyState("LAlt", "P") AND GetKeyState("LShift", "P")) { ; MacModifiers
+ return
+ } else {
+ send {Blind}{tab}
+ }
+ return
+}
+
+tab::Send {tab}
+
++tab::Send {Shift down}{tab}{Shift up}
+
+; Basic Remap
+;
+; Primary::LCtrl
+; Secondary::LAlt
+; Tertiary::LWin
+
+; $LAlt::LCtrl ; WinModifiers
+; $RAlt::RCtrl ; WinModifiers
+; $LWin::LAlt ; WinModifiers
+; $LCtrl::LWin ; WinModifiers
+
+; $LWin::LCtrl ; MacModifiers
+; $RWin::RCtrl ; MacModifiers
+; $LCtrl::LWin ; MacModifiers
+
+; Hack to disable start menu on winkey
+; Static
+$LCtrl up::Send {Ctrl down}{LWin up}{Ctrl up}
+
+; temporary hack to ensure keys don't get stuck
+; impacts Alt-Tab fix
+; Primary
+; $LAlt up::Send {LWin up}{LAlt up}{LCtrl up} ; WinModifiers
+; $LWin up::Send {LWin up}{LAlt up}{LCtrl up} ; MacModifiers
+
+; Close Apps
^q::Send !{F4}
; Emoji Panel
@@ -56,143 +179,113 @@ $^+Right::Send +{End}
!+Right::Send ^+{Right}
; Cmd+Space Alternative
-LWin & vk07::return
-LWin::return
-RWin & vk07::return
-RWin::return
^Space::Send ^{Esc}
-; ^Space::run AppName
-; Cmd Tab For App Switching
-LCtrl & Tab::AltTab
-RCtrl & Tab::AltTab
-
-; Ctrl Tab for In-App Tab Switching
-; https://autohotkey.com/board/topic/72433-controltab/
-#if GetKeyState("LWin")
-*Tab::
-if(!GetKeyState("LControl"))
- Send {LControl Down}
-Send {Tab}
-SetTimer, WaitForWinUp, 10
-ToolTip trigger
-return
-
-WaitForWinUp:
-if(!GetKeyState("LWin", "P"))
-{
- Send {LControl Up}
- SetTimer, WaitForWinUp, Off
-}
-return
-
-; Sublime Text Remaps for VS Code
+; ; Sublime Text Remaps for VS Code
#IfWinActive ahk_group vscode ; ST2CODE
- ; Remap Ctrl+Shift to behave like macOS Sublimetext
- ; Will extend cursor to multiple lines
- #+Up::send ^!{Up} ; ST2CODE
- #+Down::send ^!{Down} ; ST2CODE
- ; Remap Ctrl+Cmd+G to select all matches
- #^g::send ^+{L} ; ST2CODE
+ ; Remap Ctrl+Shift to behave like macOS Sublimetext
+ ; Will extend cursor to multiple lines
+ #+Up::send ^!{Up} ; ST2CODE
+ #+Down::send ^!{Down} ; ST2CODE
+ ; Remap Ctrl+Cmd+G to select all matches
+ #^g::send ^+{L} ; ST2CODE
#If ; ST2CODE
#IfWinActive ahk_exe sublime_text.exe
- ; Remap Ctrl+Shift to behave like macOS Sublimetext
- ; Will extend cursor to multiple lines
- #+Up::send {shift up}^!{Up}
- #+Down::send {shift up}^!{Down}
+ ; Remap Ctrl+Shift to behave like macOS Sublimetext
+ ; Will extend cursor to multiple lines
+ #+Up::send {shift up}^!{Up}
+ #+Down::send {shift up}^!{Down}
- ; Remap Ctrl+Cmd+G to select all matches
- #^g::send !{F3}
+ ; Remap Ctrl+Cmd+G to select all matches
+ #^g::send !{F3}
#If
#IfWinActive ahk_group terminals
- ; Copy
- ^c::Send {LCtrl down}{LShift down}c{LCtrl Up}{LShift Up}
- #c::Send {LCtrl down}c{LCtrl Up}
- ; Paste
- $^v::
- If not WinActive("ahk_group ConEmu") && not WinActive("ahk_exe cmd.exe"){
- Send {LCtrl down}{LShift down}v{LCtrl Up}{LShift Up}
- }
- else{
- Send ^v
- }
- return
+ ; Copy
+ ^c::
+ SetKeyDelay -1
+ Send {Blind}{LShift down}{c DownTemp}
+ return
+
+ ^c up::
+ SetKeyDelay -1
+ Send {Blind}{c Up}{LShift Up}
+ return
+
+ ; Sigints - interrupt
+ $#c::Send {Ctrl down}c{Ctrl up}
+
+ ; Paste
+ ^v::
+ If WinActive("ahk_group posix"){
+ Send {Blind}{Shift down}v{Shift up}
+ }
+ else{
+ Send {Blind}v
+ }
+ return
#If
#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}
- }
- else{
- Send ^t
- }
- return
+ ; 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}
+ }
+ else{
+ Send ^t
+ }
+ return
- $^w::
- If not WinActive("ahk_group ConEmu"){
- Send {LCtrl down}{LShift down}w{LCtrl Up}{LShift Up}
- }
- else{
- Send ^w
- }
- return
+ $^w::
+ If not WinActive("ahk_group ConEmu"){
+ Send {LCtrl down}{LShift down}w{LCtrl Up}{LShift Up}
+ }
+ else{
+ Send ^w
+ }
+ return
- ; End of Line
- #e::Send {LCtrl down}e{LCtrl Up}
- ^e::return
- ; Beginning of Line
- #a::Send {LCtrl down}a{LCtrl Up}
- ^a::return
- ;^l::Send clear{Enter}
- ;#l::return
- ; Clear Terminal and Scroll Buffer
- ^k::Send clear && printf '\e[3J'{Enter}
- ; Nano editor shortcuts
- #k::Send {LCtrl down}k{LCtrl Up}
- #x::Send {LCtrl down}x{LCtrl Up}
- #o::Send {LCtrl down}o{LCtrl Up}
- #r::Send {LCtrl down}r{LCtrl Up}
- #w::Send {LCtrl down}w{LCtrl Up}
- #\::Send {LCtrl down}\{LCtrl Up}
- #u::Send {LCtrl down}u{LCtrl Up}
- #j::Send {LCtrl down}j{LCtrl Up}
- #t::Send {LCtrl down}t{LCtrl Up}
- #_::Send {LCtrl down}_{LCtrl Up}
- #z::Send {LCtrl down}z{LCtrl Up}
-#If
+ ; End of Line
+ ^e::
+ SetKeyDelay -1
+ Send {Blind}{e DownTemp}
+ return
-; #IfWinActive ahk_group ConEmu
-; ; Paste
-; $^v::Send {Shift down}{Insert}{Shift Up}
-; #v::Send {LCtrl down}v{LCtrl Up}
-; #If
+ ^e up::
+ SetKeyDelay -1
+ Send {Blind}{e Up}
+ return
-#IfWinActive ahk_exe mintty.exe
- ; Copy
- $^c::Send {Control down}{Insert}{Control Up}
- #c::Send {LCtrl down}c{LCtrl Up}
- ; Paste
- $^v::Send {Shift down}{Insert}{Shift Up}
- #v::Send {LCtrl down}v{LCtrl Up}
-#If
+ ; Beginning of Line
+ ^a::
+ SetKeyDelay -1
+ Send {Blind}{a DownTemp}
+ return
-;Disable win + l key locking (This line must come before any hotkey assignments in the .ahk file)
+ ^a up::
+ SetKeyDelay -1
+ Send {Blind}{a Up}
+ return
-; Admin privileges required
-; Sets Workstation Lock to not occur on Win+L
-; RegWrite, REG_DWORD, HKEY_CURRENT_USER, Software\Microsoft\Windows\CurrentVersion\Policies\System, DisableLockWorkstation, 1
-
-; Re-enables Workstation lock on Ctrl+Cmd+Q
-; Need to Remove Quick Assist and reboot
-; Remove-WindowsCapability -online -name App.Support.QuickAssist~~~~0.0.1.0
-#^q::
-; re-enable locking workstation, then lock it
-; RegWrite, REG_DWORD, HKEY_CURRENT_USER, Software\Microsoft\Windows\CurrentVersion\Policies\System, DisableLockWorkstation, 0
-; DllCall("LockWorkStation")
-; Reload script to relock Workstation Lock
-; Reload
-;return
\ No newline at end of file
+ ^l::Send clear{Enter}
+ ; #l::return
+ ; Clear Terminal and Scroll Buffer
+ ^k::Send clear && printf '\e[3J'{Enter}
+ ; Nano editor shortcuts
+ #g::Send {LCtrl down}g{LCtrl Up}
+ #k::Send {LCtrl down}k{LCtrl Up}
+ #x::Send {LCtrl down}x{LCtrl Up}
+ #o::Send {LCtrl down}o{LCtrl Up}
+ #r::Send {LCtrl down}r{LCtrl Up}
+ #w::Send {LCtrl down}w{LCtrl Up}
+ #\::Send {LCtrl down}\{LCtrl Up}
+ #u::Send {LCtrl down}u{LCtrl Up}
+ #j::Send {LCtrl down}j{LCtrl Up}
+ #t::Send {LCtrl down}t{LCtrl Up}
+ #_::Send {LCtrl down}_{LCtrl Up}
+ #z::Send {LCtrl down}z{LCtrl Up}
+ #y::Send {LCtrl down}y{LCtrl Up}
+ #v::Send {LCtrl down}v{LCtrl Up}
+#If
\ No newline at end of file
diff --git a/windows/toggle_kb.bat b/windows/toggle_kb.bat
new file mode 100644
index 0000000..8cd118e
--- /dev/null
+++ b/windows/toggle_kb.bat
@@ -0,0 +1,22 @@
+@echo off
+
+IF "%1"=="mac" goto mac
+IF "%1"=="win" goto win
+
+echo Not found.
+goto commonexit
+
+:win
+perl -pi -e "s/(; )(.*)(; WinModifiers)/$2$3/g" "%userprofile%\.kinto\kinto.ahk"
+perl -pi -e "s/^(?!;)(.*)(; MacModifiers)/; $1$2/gm" "%userprofile%\.kinto\kinto.ahk"
+"C:\Program Files\AutoHotkey\AutoHotkey.exe" "%userprofile%\.kinto\kinto.ahk"
+goto commonexit
+
+:mac
+perl -pi -e "s/(; )(.*)(; MacModifiers)/$2$3/g" "%userprofile%\.kinto\kinto.ahk"
+perl -pi -e "s/^(?!;)(.*)(; WinModifiers)/; $1$2/gm" "%userprofile%\.kinto\kinto.ahk"
+"C:\Program Files\AutoHotkey\AutoHotkey.exe" "%userprofile%\.kinto\kinto.ahk"
+goto commonexit
+
+:commonexit
+exit
\ No newline at end of file
diff --git a/xkeysnail-config/prexk.sh b/xkeysnail-config/prexk.sh
index 1b4053a..61df280 100755
--- a/xkeysnail-config/prexk.sh
+++ b/xkeysnail-config/prexk.sh
@@ -1,14 +1,13 @@
#!/bin/bash
-
-if [ -f /home/{username}/.config/systemd/user/keyswap.timer ]; then
+if [ -f {homedir}/.config/systemd/user/keyswap.timer ]; then
systemctl --user stop keyswap.timer >/dev/null 2>&1
systemctl --user disable keyswap.timer >/dev/null 2>&1
fi
-if [ -f /home/{username}/.config/systemd/user/keyswap.service ]; then
+if [ -f {homedir}/.config/systemd/user/keyswap.service ]; then
systemctl --user stop keyswap >/dev/null 2>&1
systemctl --user disable keyswap >/dev/null 2>&1
fi
# export DISPLAY={displayid};/usr/bin/xhost +SI:localuser:root
mkdir -p /tmp/kinto/xkeysnail
-cp /home/{username}/.config/kinto/kinto.py /tmp/kinto/xkeysnail/kinto.py
\ No newline at end of file
+cp {homedir}/.config/kinto/kinto.py /tmp/kinto/xkeysnail/kinto.py
diff --git a/xkeysnail-config/xkeysnail.service b/xkeysnail-config/xkeysnail.service
index c817db8..c7c6276 100644
--- a/xkeysnail-config/xkeysnail.service
+++ b/xkeysnail-config/xkeysnail.service
@@ -4,12 +4,12 @@ Description=xkeysnail
[Service]
Type=simple
KillMode=process
-ExecStartPre=/bin/bash -c "{xhost} +SI:localuser:root && /sbin/runuser -l {username} -c /home/{username}/.config/kinto/prexk.sh"
-ExecStart=/usr/bin/sudo /bin/bash -c '{experimental-caret}/home/{username}/.config/kinto/xkeystart.sh /tmp/kinto/xkeysnail/kinto.py'
+ExecStartPre=/bin/bash -c "{xhost} +SI:localuser:root && /sbin/runuser -l {username} -c {homedir}/.config/kinto/prexk.sh"
+ExecStart=/usr/bin/sudo /bin/bash -c '{experimental-caret}{homedir}/.config/kinto/xkeystart.sh /tmp/kinto/xkeysnail/kinto.py'
ExecStop=/bin/bash -c 'me=$$;ps -ef | grep \'[t]mp/kinto\' | awk -v me=$me \'$2 != me {print $2}\' | xargs kill;/usr/bin/killall dbus-monitor;/usr/bin/killall xkeysnail;{kill-caret}'
Restart=on-failure
RestartSec=3
Environment=DISPLAY={displayid}
[Install]
-WantedBy=graphical.target
\ No newline at end of file
+WantedBy=graphical.target
diff --git a/xkeysnail_service.sh b/xkeysnail_service.sh
index 944d8f5..2e34a09 100755
--- a/xkeysnail_service.sh
+++ b/xkeysnail_service.sh
@@ -173,7 +173,7 @@ if [[ $1 == "1" || $1 == "2" || $1 == "3" || $1 == "4" || $1 == "kintowin" || $1
while true; do
read -rep $'\nExperimental Support for Firefox/Chrome Back/Forward hotkeys (Cmd+Left/Right)?\n(Keys could get stuck, switch windows or press ctrl &/or super to release) (y/n)\n' yn
case $yn in
- [Yy]* ) exp='/sbin/runuser -l {username} -c "export DISPLAY={displayid};/home/{username}/.config/kinto/caret_status_xkey.sh\&";'; expsh='"/home/{username}/.config/kinto/caret_status_xkey.sh"'; break;;
+ [Yy]* ) exp='/sbin/runuser -l {username} -c "export DISPLAY={displayid};{homedir}/.config/kinto/caret_status_xkey.sh\&";'; expsh='"{homedir}/.config/kinto/caret_status_xkey.sh"'; break;;
[Nn]* ) exp=" "; expsh=" " break;;
# * ) echo "Please answer yes or no.";;
esac
@@ -214,7 +214,7 @@ if [[ $1 == "1" || $1 == "2" || $1 == "3" || $1 == "4" || $1 == "kintowin" || $1
# echo "Transferring files..."
mkdir -p ~/.config/kinto
-
+
# KDE xhost fix
mkdir -p ~/.kde/Autostart
echo -e '#!/bin/sh\rxhost +SI:localuser:root' > ~/.kde/Autostart/kintohost.sh
@@ -237,14 +237,16 @@ if [[ $1 == "1" || $1 == "2" || $1 == "3" || $1 == "4" || $1 == "kintowin" || $1
sed -i "s#{kill-caret}#$expsh#g" ./xkeysnail-config/xkeysnail.service.new
fi
sed -i "s/{username}/`whoami`/g" ./xkeysnail-config/xkeysnail.service.new
+ sed -i "s#{homedir}#`echo "$HOME"`#g" ./xkeysnail-config/xkeysnail.service.new
sed -i "s#{xhost}#`which xhost`#g" ./xkeysnail-config/xkeysnail.service.new
sed -i "s/{username}/`whoami`/g" ./xkeysnail-config/limitedadmins.new
+ sed -i "s#{homedir}#`echo "$HOME"`#g" ./xkeysnail-config/limitedadmins.new
sed -i "s#{systemctl}#`which systemctl`#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/autostart/xkeysnail.desktop
sed -i "s#{xhost}#`which xhost`#g" ~/.config/autostart/xkeysnail.desktop
- sed -i "s/{username}/`whoami`/g" ~/.config/kinto/prexk.sh
+ sed -i "s#{homedir}#`echo "$HOME"`#g" ~/.config/kinto/prexk.sh
sed -i "s/{displayid}/`echo "$DISPLAY"`/g" ./xkeysnail-config/xkeysnail.service.new
sed -i "s/{displayid}/`echo "$DISPLAY"`/g" ~/.config/kinto/prexk.sh
@@ -381,4 +383,4 @@ elif [[ $1 == "5" || $1 == "budgieUpdate" ]]; then
budgieUpdate
else
echo "Expected argument was not provided"
-fi
\ No newline at end of file
+fi