diff --git a/README.md b/README.md index 96dc278..38818d6 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,10 @@ Note: Sublime Text users should disable screen rotation hotkeys as they will int 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. + + + + ## How to install 1. clone this repo 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/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