ahk-scripts/main.ahk

135 lines
4.0 KiB
AutoHotkey
Raw Normal View History

DownloadYoutubeVideo(dataType)
{
; Note: This callback is usually fired twice when copying for some reason
; so we use "RunWait" below to make sure we only launch youtube-dl once.
if (dataType != 1) {
return
}
; If there is an ampersand, remove it and anything following.
link := StrSplit(A_Clipboard, "&")[1] ; Arrays are 1 offset
if (InStr(A_Clipboard, "youtube.com/watch")) {
Runwait "wsl.exe --shell-type standard /home/tgrosinger/bin/youtube-dl " . link
}
}
OnClipboardChange DownloadYoutubeVideo
; Open a terminal over the currently focused VS Code window.
; If there is an open Windows Terminal, use that, otherwise create a new one.
; Pressing the hotkey again goes back to the previously focused window.
prevWindow := 0
CapsLock & t:: ; Capslock+t to open a terminal
{
global prevWindow
termID := WinExist("ahk_exe WindowsTerminal.exe")
if (termID and termID == WinGetID("A") and prevWindow) {
WinActivate(prevWindow)
return
}
prevWindow := WinGetID("A")
if ( not termID) {
Run "wt.exe"
termID := WinWait("ahk_exe WindowsTerminal.exe")
}
WinActivate
if (WinExist("ahk_exe Code.exe")) {
WinGetPos &current_x, &current_y, &width, &height
WinMove(current_x, current_y, width, height, "ahk_exe WindowsTerminal.exe")
}
}
; Arrange windows into my preferred location, based on what monitors are connected.
monitorConfigurations := Map(
; Desk means the monitor at my desk is plugged in.
"desk", Map(
"Workrave", [3748, 2056, 94, 56],
"Discord", [-7, 0, 900, 750],
"Signal", [-7, 742, 900, 750],
"Visual Studio Code", [886, 0, 2954, 2110],
"Mozilla Firefox", [881, 0, 2963, 2117],
"TickTick", [712, 2892, 942, 821],
"Atrium", [1654, 2160, 1620, 1552]
),
; Standalone means there are no other monitors plugged in.
"standalone", Map(
"Workrave", [2468, 1498, 94, 56],
"Discord", [-7, 0, 900, 750],
"Signal", [-7, 742, 900, 750],
"Visual Studio Code", [472, 0, 2085, 1550],
"Mozilla Firefox", [467, 0, 2099, 1557],
"TickTick", [0, 731, 942, 821],
2024-05-02 19:33:09 -07:00
"Atrium", [983, 0, 1577, 1552],
"Plex", [342, 85, 1970, 1300]
)
)
IdentifyMonitorConfiguration() {
count := MonitorGetCount()
if (count == 1) {
return "standalone"
}
primary := MonitorGetPrimary()
MonitorGet primary, &Left, &Top, &Right, &Bottom
if (Right == "3840" and Bottom == "2160") {
return "desk"
}
return "unknown"
}
ArrangeWindowsInMonitor(windowConfigs) {
for win, params in windowConfigs {
if (WinExist(win)) {
WinMove(params[1], params[2], params[3], params[4])
}
}
}
ArrangeWindows(wParam, lParam, msg, hwnd)
{
monitorConfigName := IdentifyMonitorConfiguration()
if ( not monitorConfigurations.Has(monitorConfigName)) {
return
}
monitorConfig := monitorConfigurations[monitorConfigName]
ArrangeWindowsInMonitor(monitorConfig)
}
; Listen for the monitor change event
OnMessage(0x007E, ArrangeWindows)
CapsLock & a:: ; Capslock+a to arrange windows
{
keyArr := []
For Key In monitorConfigurations
keyArr.Push(Key)
selectionGui := Gui()
selectionGui.AddText(, "Please select a window layout:")
selectionGui.AddDropDownList("vLayoutChoice Choose1", keyArr)
selectionGui.AddButton("", "Cancel").OnEvent("Click", Cancel)
selectionGui.AddButton("Default X+", "Submit").OnEvent("Click", Submit) ; Place next previous button.
selectionGui.Show()
WinWaitClose(selectionGui.Hwnd)
Cancel(*)
{
WinClose(selectionGui.Hwnd)
}
Submit(*)
{
Saved := selectionGui.Submit(true)
monitorConfig := monitorConfigurations[Saved.LayoutChoice]
ArrangeWindowsInMonitor(monitorConfig)
}
}