Repository files navigation

ahk-scripts

Personal AutoHotkey v2 scripts for window and virtual desktop management on Windows.

Prerequisites

  1. Download and install AutoHotkey v2.0 from https://www.autohotkey.com/ (make sure to pick the v2 installer, not v1.1).
  2. Clone or copy this repository to a folder on your Windows machine.

Scripts

windowSwitcher.ahk

Adds hotkeys (Win+Shift+<key>) that switch to a running application, or launch it if it isn't running. Pressing the hotkey again while that app is focused cycles to the next window in the same group.

Programs are configured in the Programs map at the top of the file. Each entry maps a name to the ahk_ criteria used to find its window:

'Chrome', { criteriaType: 'ahk_exe', criteriaValue: 'chrome.exe' },

When no matching window exists, the app is launched. By default the criteriaValue is run as-is, which only works for URIs (ms-clock:) and exe names registered in the Windows App Paths registry (chrome.exe, Code.exe, ...). Anything else - apps matched by ahk_class, or exes Windows can't find by bare name - needs an explicit launch path, provided through a Windows user environment variable. Each entry's run property reads one, e.g.:

'Obsidian', { criteriaType: 'ahk_exe', criteriaValue: 'Obsidian.exe', run: EnvGet('OBSIDIAN_PATH') },

The script reads these variables (set only the ones you need - an unset variable falls back to the default behavior above):

VariableProgramTypical value
OBSIDIAN_PATHObsidian%LocalAppData%\Programs\Obsidian\Obsidian.exe
OUTLOOK_PATHOutlook (new)%LocalAppData%\Microsoft\WindowsApps\olk.exe
TERMINAL_PATHWindows Terminal%LocalAppData%\Microsoft\WindowsApps\wt.exe
TEAMS_PATHMicrosoft Teams%LocalAppData%\Microsoft\WindowsApps\ms-teams.exe
WEBSTORM_PATHWebStormwherever your webstorm64.exe lives
ZED_PATHZedwherever your zed.exe lives

To set a variable, pick one of:

  • GUI:Win+Rrundll32 sysdm.cpl,EditEnvironmentVariables → under User variables click New... and enter the name (e.g. OBSIDIAN_PATH) and the full path to the exe.

  • PowerShell:

    [Environment]::SetEnvironmentVariable('OBSIDIAN_PATH',"$env:LOCALAPPDATA\Programs\Obsidian\Obsidian.exe",'User')

Afterwards, fully exit the running script (tray icon → Exit) and start it again from Explorer - a tray Reload keeps the process's old environment and won't pick up new variables, and a terminal opened before the change needs to be reopened before launching the script from it.

To make a new program launchable, add a run: EnvGet('YOUR_VAR') property to its Programs entry and set that variable.

Hotkeys are registered near the bottom via mapKey(shortcut, program), e.g.:

mapKey('+#r', 'Chrome')

To add a new shortcut, add an entry to Programs and a corresponding mapKey(...) call.

Hotkey modifier symbols

Prefix one or more of these to a key name to build a shortcut string, e.g. '+#r' = Shift+Win+R:

SymbolModifierExample -> Meaning
#Win#r -> Win+R
!Alt!r -> Alt+R
^Ctrl^r -> Ctrl+R
+Shift+r -> Shift+R
&Combine two keys into a custom hotkeya & b -> A and B held together
<Use the left key of a modifier pair<^r -> Left Ctrl+R
>Use the right key of a modifier pair>^r -> Right Ctrl+R
*Wildcard: fire even if extra modifiers are held*r -> R (with any combination of modifiers)
~Passthrough: don't block the key's native function~r -> R (native action still happens)
$Force the keyboard hook (avoids Send re-triggering)$r -> R

Modifiers can be combined, e.g. +#r (used throughout windowSwitcher.ahk).

Finding a program's ahk_class / ahk_exe with Window Spy

Window Spy is a tool bundled with AutoHotkey that shows the class name, exe name, and other details of whatever window is under your mouse. Use it to find the criteriaType/criteriaValue for a new Programs entry:

  1. Make sure AutoHotkey is installed, then run any .ahk script (e.g. double-click windowSwitcher.ahk) so an AutoHotkey icon (green "H") appears in the system tray, near the clock.
  2. Right-click the tray icon and choose Window Spy from the menu.
  3. Click on, or just hover your mouse over, the window of the program you want to map. Window Spy updates live as you move the mouse.
  4. In the Window Spy window, note the "ahk_class" value (for criteriaType: 'ahk_class') or the "ahk_exe" value (for criteriaType: 'ahk_exe') - either works, pick whichever value looks more stable/unique for that app.
  5. Add a new entry to the Programs map in windowSwitcher.ahk using the value you copied, then add a mapKey('<shortcut>', '<name>') call for it.
  6. Right-click the AutoHotkey tray icon and choose Reload to apply your changes.

virtualDesktopSwitcher.ahk

Adds hotkeys for navigating Windows virtual desktops (create, delete, switch to previous/next, jump to a specific desktop number). See the ; === key mapping === section in the file for the exact bindings.

startWindowSwitcher.ps1

A small PowerShell helper that starts windowSwitcher.ahk. Useful for launching the script automatically (e.g. from a shortcut, Task Scheduler, or the Startup folder) without having to double-click the .ahk file manually. Update the path in the script to match where you placed this repository before using it.

Running the scripts

  • Manually: double-click a .ahk file (requires AutoHotkey to be installed) to run it. An AutoHotkey tray icon will appear while the script is active.
  • Via PowerShell: run startWindowSwitcher.ps1 to launch windowSwitcher.ahk.
  • At Windows startup: place a shortcut to the .ahk file(s) (or to startWindowSwitcher.ps1) in the Startup folder (Win+Rshell:startup), or create a Task Scheduler task that runs at logon.

To stop a running script, right-click its tray icon and choose Exit, or use Reload to apply changes after editing.

About

Autohotkey scripts

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

ahk-scripts

Personal AutoHotkey v2 scripts for window and virtual desktop management on Windows.

Prerequisites

  1. Download and install AutoHotkey v2.0 from https://www.autohotkey.com/ (make sure to pick the v2 installer, not v1.1).
  2. Clone or copy this repository to a folder on your Windows machine.

Scripts

windowSwitcher.ahk

Adds hotkeys (Win+Shift+<key>) that switch to a running application, or launch it if it isn't running. Pressing the hotkey again while that app is focused cycles to the next window in the same group.

Programs are configured in the Programs map at the top of the file. Each entry maps a name to the ahk_ criteria used to find its window:

'Chrome', { criteriaType: 'ahk_exe', criteriaValue: 'chrome.exe' },

When no matching window exists, the app is launched. By default the criteriaValue is run as-is, which only works for URIs (ms-clock:) and exe names registered in the Windows App Paths registry (chrome.exe, Code.exe, ...). Anything else - apps matched by ahk_class, or exes Windows can't find by bare name - needs an explicit launch path, provided through a Windows user environment variable. Each entry's run property reads one, e.g.:

'Obsidian', { criteriaType: 'ahk_exe', criteriaValue: 'Obsidian.exe', run: EnvGet('OBSIDIAN_PATH') },

The script reads these variables (set only the ones you need - an unset variable falls back to the default behavior above):

VariableProgramTypical value
OBSIDIAN_PATHObsidian%LocalAppData%\Programs\Obsidian\Obsidian.exe
OUTLOOK_PATHOutlook (new)%LocalAppData%\Microsoft\WindowsApps\olk.exe
TERMINAL_PATHWindows Terminal%LocalAppData%\Microsoft\WindowsApps\wt.exe
TEAMS_PATHMicrosoft Teams%LocalAppData%\Microsoft\WindowsApps\ms-teams.exe
WEBSTORM_PATHWebStormwherever your webstorm64.exe lives
ZED_PATHZedwherever your zed.exe lives

To set a variable, pick one of:

  • GUI:Win+Rrundll32 sysdm.cpl,EditEnvironmentVariables → under User variables click New... and enter the name (e.g. OBSIDIAN_PATH) and the full path to the exe.

  • PowerShell:

    [Environment]::SetEnvironmentVariable('OBSIDIAN_PATH',"$env:LOCALAPPDATA\Programs\Obsidian\Obsidian.exe",'User')

Afterwards, fully exit the running script (tray icon → Exit) and start it again from Explorer - a tray Reload keeps the process's old environment and won't pick up new variables, and a terminal opened before the change needs to be reopened before launching the script from it.

To make a new program launchable, add a run: EnvGet('YOUR_VAR') property to its Programs entry and set that variable.

Hotkeys are registered near the bottom via mapKey(shortcut, program), e.g.:

mapKey('+#r', 'Chrome')

To add a new shortcut, add an entry to Programs and a corresponding mapKey(...) call.

Hotkey modifier symbols

Prefix one or more of these to a key name to build a shortcut string, e.g. '+#r' = Shift+Win+R:

SymbolModifierExample -> Meaning
#Win#r -> Win+R
!Alt!r -> Alt+R
^Ctrl^r -> Ctrl+R
+Shift+r -> Shift+R
&Combine two keys into a custom hotkeya & b -> A and B held together
<Use the left key of a modifier pair<^r -> Left Ctrl+R
>Use the right key of a modifier pair>^r -> Right Ctrl+R
*Wildcard: fire even if extra modifiers are held*r -> R (with any combination of modifiers)
~Passthrough: don't block the key's native function~r -> R (native action still happens)
$Force the keyboard hook (avoids Send re-triggering)$r -> R

Modifiers can be combined, e.g. +#r (used throughout windowSwitcher.ahk).

Finding a program's ahk_class / ahk_exe with Window Spy

Window Spy is a tool bundled with AutoHotkey that shows the class name, exe name, and other details of whatever window is under your mouse. Use it to find the criteriaType/criteriaValue for a new Programs entry:

  1. Make sure AutoHotkey is installed, then run any .ahk script (e.g. double-click windowSwitcher.ahk) so an AutoHotkey icon (green "H") appears in the system tray, near the clock.
  2. Right-click the tray icon and choose Window Spy from the menu.
  3. Click on, or just hover your mouse over, the window of the program you want to map. Window Spy updates live as you move the mouse.
  4. In the Window Spy window, note the "ahk_class" value (for criteriaType: 'ahk_class') or the "ahk_exe" value (for criteriaType: 'ahk_exe') - either works, pick whichever value looks more stable/unique for that app.
  5. Add a new entry to the Programs map in windowSwitcher.ahk using the value you copied, then add a mapKey('<shortcut>', '<name>') call for it.
  6. Right-click the AutoHotkey tray icon and choose Reload to apply your changes.

virtualDesktopSwitcher.ahk

Adds hotkeys for navigating Windows virtual desktops (create, delete, switch to previous/next, jump to a specific desktop number). See the ; === key mapping === section in the file for the exact bindings.

startWindowSwitcher.ps1

A small PowerShell helper that starts windowSwitcher.ahk. Useful for launching the script automatically (e.g. from a shortcut, Task Scheduler, or the Startup folder) without having to double-click the .ahk file manually. Update the path in the script to match where you placed this repository before using it.

Running the scripts

  • Manually: double-click a .ahk file (requires AutoHotkey to be installed) to run it. An AutoHotkey tray icon will appear while the script is active.
  • Via PowerShell: run startWindowSwitcher.ps1 to launch windowSwitcher.ahk.
  • At Windows startup: place a shortcut to the .ahk file(s) (or to startWindowSwitcher.ps1) in the Startup folder (Win+Rshell:startup), or create a Task Scheduler task that runs at logon.

To stop a running script, right-click its tray icon and choose Exit, or use Reload to apply changes after editing.

About

Autohotkey scripts

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ahk-scripts

Personal AutoHotkey v2 scripts for window and virtual desktop management on Windows.

Prerequisites

  1. Download and install AutoHotkey v2.0 from https://www.autohotkey.com/ (make sure to pick the v2 installer, not v1.1).
  2. Clone or copy this repository to a folder on your Windows machine.

Scripts

windowSwitcher.ahk

Adds hotkeys (Win+Shift+<key>) that switch to a running application, or launch it if it isn't running. Pressing the hotkey again while that app is focused cycles to the next window in the same group.

Programs are configured in the Programs map at the top of the file. Each entry maps a name to the ahk_ criteria used to find its window:

'Chrome', { criteriaType: 'ahk_exe', criteriaValue: 'chrome.exe' },

When no matching window exists, the app is launched. By default the criteriaValue is run as-is, which only works for URIs (ms-clock:) and exe names registered in the Windows App Paths registry (chrome.exe, Code.exe, ...). Anything else - apps matched by ahk_class, or exes Windows can't find by bare name - needs an explicit launch path, provided through a Windows user environment variable. Each entry's run property reads one, e.g.:

'Obsidian', { criteriaType: 'ahk_exe', criteriaValue: 'Obsidian.exe', run: EnvGet('OBSIDIAN_PATH') },

The script reads these variables (set only the ones you need - an unset variable falls back to the default behavior above):

VariableProgramTypical value
OBSIDIAN_PATHObsidian%LocalAppData%\Programs\Obsidian\Obsidian.exe
OUTLOOK_PATHOutlook (new)%LocalAppData%\Microsoft\WindowsApps\olk.exe
TERMINAL_PATHWindows Terminal%LocalAppData%\Microsoft\WindowsApps\wt.exe
TEAMS_PATHMicrosoft Teams%LocalAppData%\Microsoft\WindowsApps\ms-teams.exe
WEBSTORM_PATHWebStormwherever your webstorm64.exe lives
ZED_PATHZedwherever your zed.exe lives

To set a variable, pick one of:

  • GUI:Win+Rrundll32 sysdm.cpl,EditEnvironmentVariables → under User variables click New... and enter the name (e.g. OBSIDIAN_PATH) and the full path to the exe.

  • PowerShell:

    [Environment]::SetEnvironmentVariable('OBSIDIAN_PATH',"$env:LOCALAPPDATA\Programs\Obsidian\Obsidian.exe",'User')

Afterwards, fully exit the running script (tray icon → Exit) and start it again from Explorer - a tray Reload keeps the process's old environment and won't pick up new variables, and a terminal opened before the change needs to be reopened before launching the script from it.

To make a new program launchable, add a run: EnvGet('YOUR_VAR') property to its Programs entry and set that variable.

Hotkeys are registered near the bottom via mapKey(shortcut, program), e.g.:

mapKey('+#r', 'Chrome')

To add a new shortcut, add an entry to Programs and a corresponding mapKey(...) call.

Hotkey modifier symbols

Prefix one or more of these to a key name to build a shortcut string, e.g. '+#r' = Shift+Win+R:

SymbolModifierExample -> Meaning
#Win#r -> Win+R
!Alt!r -> Alt+R
^Ctrl^r -> Ctrl+R
+Shift+r -> Shift+R
&Combine two keys into a custom hotkeya & b -> A and B held together
<Use the left key of a modifier pair<^r -> Left Ctrl+R
>Use the right key of a modifier pair>^r -> Right Ctrl+R
*Wildcard: fire even if extra modifiers are held*r -> R (with any combination of modifiers)
~Passthrough: don't block the key's native function~r -> R (native action still happens)
$Force the keyboard hook (avoids Send re-triggering)$r -> R

Modifiers can be combined, e.g. +#r (used throughout windowSwitcher.ahk).

Finding a program's ahk_class / ahk_exe with Window Spy

Window Spy is a tool bundled with AutoHotkey that shows the class name, exe name, and other details of whatever window is under your mouse. Use it to find the criteriaType/criteriaValue for a new Programs entry:

  1. Make sure AutoHotkey is installed, then run any .ahk script (e.g. double-click windowSwitcher.ahk) so an AutoHotkey icon (green "H") appears in the system tray, near the clock.
  2. Right-click the tray icon and choose Window Spy from the menu.
  3. Click on, or just hover your mouse over, the window of the program you want to map. Window Spy updates live as you move the mouse.
  4. In the Window Spy window, note the "ahk_class" value (for criteriaType: 'ahk_class') or the "ahk_exe" value (for criteriaType: 'ahk_exe') - either works, pick whichever value looks more stable/unique for that app.
  5. Add a new entry to the Programs map in windowSwitcher.ahk using the value you copied, then add a mapKey('<shortcut>', '<name>') call for it.
  6. Right-click the AutoHotkey tray icon and choose Reload to apply your changes.

virtualDesktopSwitcher.ahk

Adds hotkeys for navigating Windows virtual desktops (create, delete, switch to previous/next, jump to a specific desktop number). See the ; === key mapping === section in the file for the exact bindings.

startWindowSwitcher.ps1

A small PowerShell helper that starts windowSwitcher.ahk. Useful for launching the script automatically (e.g. from a shortcut, Task Scheduler, or the Startup folder) without having to double-click the .ahk file manually. Update the path in the script to match where you placed this repository before using it.

Running the scripts

  • Manually: double-click a .ahk file (requires AutoHotkey to be installed) to run it. An AutoHotkey tray icon will appear while the script is active.
  • Via PowerShell: run startWindowSwitcher.ps1 to launch windowSwitcher.ahk.
  • At Windows startup: place a shortcut to the .ahk file(s) (or to startWindowSwitcher.ps1) in the Startup folder (Win+Rshell:startup), or create a Task Scheduler task that runs at logon.

To stop a running script, right-click its tray icon and choose Exit, or use Reload to apply changes after editing.

About

Autohotkey scripts

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ahk-scripts

Personal AutoHotkey v2 scripts for window and virtual desktop management on Windows.

Prerequisites

  1. Download and install AutoHotkey v2.0 from https://www.autohotkey.com/ (make sure to pick the v2 installer, not v1.1).
  2. Clone or copy this repository to a folder on your Windows machine.

Scripts

windowSwitcher.ahk

Adds hotkeys (Win+Shift+<key>) that switch to a running application, or launch it if it isn't running. Pressing the hotkey again while that app is focused cycles to the next window in the same group.

Programs are configured in the Programs map at the top of the file. Each entry maps a name to the ahk_ criteria used to find its window:

'Chrome', { criteriaType: 'ahk_exe', criteriaValue: 'chrome.exe' },

When no matching window exists, the app is launched. By default the criteriaValue is run as-is, which only works for URIs (ms-clock:) and exe names registered in the Windows App Paths registry (chrome.exe, Code.exe, ...). Anything else - apps matched by ahk_class, or exes Windows can't find by bare name - needs an explicit launch path, provided through a Windows user environment variable. Each entry's run property reads one, e.g.:

'Obsidian', { criteriaType: 'ahk_exe', criteriaValue: 'Obsidian.exe', run: EnvGet('OBSIDIAN_PATH') },

The script reads these variables (set only the ones you need - an unset variable falls back to the default behavior above):

VariableProgramTypical value
OBSIDIAN_PATHObsidian%LocalAppData%\Programs\Obsidian\Obsidian.exe
OUTLOOK_PATHOutlook (new)%LocalAppData%\Microsoft\WindowsApps\olk.exe
TERMINAL_PATHWindows Terminal%LocalAppData%\Microsoft\WindowsApps\wt.exe
TEAMS_PATHMicrosoft Teams%LocalAppData%\Microsoft\WindowsApps\ms-teams.exe
WEBSTORM_PATHWebStormwherever your webstorm64.exe lives
ZED_PATHZedwherever your zed.exe lives

To set a variable, pick one of:

  • GUI:Win+Rrundll32 sysdm.cpl,EditEnvironmentVariables → under User variables click New... and enter the name (e.g. OBSIDIAN_PATH) and the full path to the exe.

  • PowerShell:

    [Environment]::SetEnvironmentVariable('OBSIDIAN_PATH',"$env:LOCALAPPDATA\Programs\Obsidian\Obsidian.exe",'User')

Afterwards, fully exit the running script (tray icon → Exit) and start it again from Explorer - a tray Reload keeps the process's old environment and won't pick up new variables, and a terminal opened before the change needs to be reopened before launching the script from it.

To make a new program launchable, add a run: EnvGet('YOUR_VAR') property to its Programs entry and set that variable.

Hotkeys are registered near the bottom via mapKey(shortcut, program), e.g.:

mapKey('+#r', 'Chrome')

To add a new shortcut, add an entry to Programs and a corresponding mapKey(...) call.

Hotkey modifier symbols

Prefix one or more of these to a key name to build a shortcut string, e.g. '+#r' = Shift+Win+R:

SymbolModifierExample -> Meaning
#Win#r -> Win+R
!Alt!r -> Alt+R
^Ctrl^r -> Ctrl+R
+Shift+r -> Shift+R
&Combine two keys into a custom hotkeya & b -> A and B held together
<Use the left key of a modifier pair<^r -> Left Ctrl+R
>Use the right key of a modifier pair>^r -> Right Ctrl+R
*Wildcard: fire even if extra modifiers are held*r -> R (with any combination of modifiers)
~Passthrough: don't block the key's native function~r -> R (native action still happens)
$Force the keyboard hook (avoids Send re-triggering)$r -> R

Modifiers can be combined, e.g. +#r (used throughout windowSwitcher.ahk).

Finding a program's ahk_class / ahk_exe with Window Spy

Window Spy is a tool bundled with AutoHotkey that shows the class name, exe name, and other details of whatever window is under your mouse. Use it to find the criteriaType/criteriaValue for a new Programs entry:

  1. Make sure AutoHotkey is installed, then run any .ahk script (e.g. double-click windowSwitcher.ahk) so an AutoHotkey icon (green "H") appears in the system tray, near the clock.
  2. Right-click the tray icon and choose Window Spy from the menu.
  3. Click on, or just hover your mouse over, the window of the program you want to map. Window Spy updates live as you move the mouse.
  4. In the Window Spy window, note the "ahk_class" value (for criteriaType: 'ahk_class') or the "ahk_exe" value (for criteriaType: 'ahk_exe') - either works, pick whichever value looks more stable/unique for that app.
  5. Add a new entry to the Programs map in windowSwitcher.ahk using the value you copied, then add a mapKey('<shortcut>', '<name>') call for it.
  6. Right-click the AutoHotkey tray icon and choose Reload to apply your changes.

virtualDesktopSwitcher.ahk

Adds hotkeys for navigating Windows virtual desktops (create, delete, switch to previous/next, jump to a specific desktop number). See the ; === key mapping === section in the file for the exact bindings.

startWindowSwitcher.ps1

A small PowerShell helper that starts windowSwitcher.ahk. Useful for launching the script automatically (e.g. from a shortcut, Task Scheduler, or the Startup folder) without having to double-click the .ahk file manually. Update the path in the script to match where you placed this repository before using it.

Running the scripts

  • Manually: double-click a .ahk file (requires AutoHotkey to be installed) to run it. An AutoHotkey tray icon will appear while the script is active.
  • Via PowerShell: run startWindowSwitcher.ps1 to launch windowSwitcher.ahk.
  • At Windows startup: place a shortcut to the .ahk file(s) (or to startWindowSwitcher.ps1) in the Startup folder (Win+Rshell:startup), or create a Task Scheduler task that runs at logon.

To stop a running script, right-click its tray icon and choose Exit, or use Reload to apply changes after editing.

About

Autohotkey scripts

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

ahk-scripts

Personal AutoHotkey v2 scripts for window and virtual desktop management on Windows.

Prerequisites

  1. Download and install AutoHotkey v2.0 from https://www.autohotkey.com/ (make sure to pick the v2 installer, not v1.1).
  2. Clone or copy this repository to a folder on your Windows machine.

Scripts

windowSwitcher.ahk

Adds hotkeys (Win+Shift+<key>) that switch to a running application, or launch it if it isn't running. Pressing the hotkey again while that app is focused cycles to the next window in the same group.

Programs are configured in the Programs map at the top of the file. Each entry maps a name to the ahk_ criteria used to find its window:

'Chrome', { criteriaType: 'ahk_exe', criteriaValue: 'chrome.exe' },

When no matching window exists, the app is launched. By default the criteriaValue is run as-is, which only works for URIs (ms-clock:) and exe names registered in the Windows App Paths registry (chrome.exe, Code.exe, ...). Anything else - apps matched by ahk_class, or exes Windows can't find by bare name - needs an explicit launch path, provided through a Windows user environment variable. Each entry's run property reads one, e.g.:

'Obsidian', { criteriaType: 'ahk_exe', criteriaValue: 'Obsidian.exe', run: EnvGet('OBSIDIAN_PATH') },

The script reads these variables (set only the ones you need - an unset variable falls back to the default behavior above):

VariableProgramTypical value
OBSIDIAN_PATHObsidian%LocalAppData%\Programs\Obsidian\Obsidian.exe
OUTLOOK_PATHOutlook (new)%LocalAppData%\Microsoft\WindowsApps\olk.exe
TERMINAL_PATHWindows Terminal%LocalAppData%\Microsoft\WindowsApps\wt.exe
TEAMS_PATHMicrosoft Teams%LocalAppData%\Microsoft\WindowsApps\ms-teams.exe
WEBSTORM_PATHWebStormwherever your webstorm64.exe lives
ZED_PATHZedwherever your zed.exe lives

To set a variable, pick one of:

  • GUI:Win+Rrundll32 sysdm.cpl,EditEnvironmentVariables → under User variables click New... and enter the name (e.g. OBSIDIAN_PATH) and the full path to the exe.

  • PowerShell:

    [Environment]::SetEnvironmentVariable('OBSIDIAN_PATH',"$env:LOCALAPPDATA\Programs\Obsidian\Obsidian.exe",'User')

Afterwards, fully exit the running script (tray icon → Exit) and start it again from Explorer - a tray Reload keeps the process's old environment and won't pick up new variables, and a terminal opened before the change needs to be reopened before launching the script from it.

To make a new program launchable, add a run: EnvGet('YOUR_VAR') property to its Programs entry and set that variable.

Hotkeys are registered near the bottom via mapKey(shortcut, program), e.g.:

mapKey('+#r', 'Chrome')

To add a new shortcut, add an entry to Programs and a corresponding mapKey(...) call.

Hotkey modifier symbols

Prefix one or more of these to a key name to build a shortcut string, e.g. '+#r' = Shift+Win+R:

SymbolModifierExample -> Meaning
#Win#r -> Win+R
!Alt!r -> Alt+R
^Ctrl^r -> Ctrl+R
+Shift+r -> Shift+R
&Combine two keys into a custom hotkeya & b -> A and B held together
<Use the left key of a modifier pair<^r -> Left Ctrl+R
>Use the right key of a modifier pair>^r -> Right Ctrl+R
*Wildcard: fire even if extra modifiers are held*r -> R (with any combination of modifiers)
~Passthrough: don't block the key's native function~r -> R (native action still happens)
$Force the keyboard hook (avoids Send re-triggering)$r -> R

Modifiers can be combined, e.g. +#r (used throughout windowSwitcher.ahk).

Finding a program's ahk_class / ahk_exe with Window Spy

Window Spy is a tool bundled with AutoHotkey that shows the class name, exe name, and other details of whatever window is under your mouse. Use it to find the criteriaType/criteriaValue for a new Programs entry:

  1. Make sure AutoHotkey is installed, then run any .ahk script (e.g. double-click windowSwitcher.ahk) so an AutoHotkey icon (green "H") appears in the system tray, near the clock.
  2. Right-click the tray icon and choose Window Spy from the menu.
  3. Click on, or just hover your mouse over, the window of the program you want to map. Window Spy updates live as you move the mouse.
  4. In the Window Spy window, note the "ahk_class" value (for criteriaType: 'ahk_class') or the "ahk_exe" value (for criteriaType: 'ahk_exe') - either works, pick whichever value looks more stable/unique for that app.
  5. Add a new entry to the Programs map in windowSwitcher.ahk using the value you copied, then add a mapKey('<shortcut>', '<name>') call for it.
  6. Right-click the AutoHotkey tray icon and choose Reload to apply your changes.

virtualDesktopSwitcher.ahk

Adds hotkeys for navigating Windows virtual desktops (create, delete, switch to previous/next, jump to a specific desktop number). See the ; === key mapping === section in the file for the exact bindings.

startWindowSwitcher.ps1

A small PowerShell helper that starts windowSwitcher.ahk. Useful for launching the script automatically (e.g. from a shortcut, Task Scheduler, or the Startup folder) without having to double-click the .ahk file manually. Update the path in the script to match where you placed this repository before using it.

Running the scripts

  • Manually: double-click a .ahk file (requires AutoHotkey to be installed) to run it. An AutoHotkey tray icon will appear while the script is active.
  • Via PowerShell: run startWindowSwitcher.ps1 to launch windowSwitcher.ahk.
  • At Windows startup: place a shortcut to the .ahk file(s) (or to startWindowSwitcher.ps1) in the Startup folder (Win+Rshell:startup), or create a Task Scheduler task that runs at logon.

To stop a running script, right-click its tray icon and choose Exit, or use Reload to apply changes after editing.

About

Autohotkey scripts

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ahk-scripts

Personal AutoHotkey v2 scripts for window and virtual desktop management on Windows.

Prerequisites

  1. Download and install AutoHotkey v2.0 from https://www.autohotkey.com/ (make sure to pick the v2 installer, not v1.1).
  2. Clone or copy this repository to a folder on your Windows machine.

Scripts

windowSwitcher.ahk

Adds hotkeys (Win+Shift+<key>) that switch to a running application, or launch it if it isn't running. Pressing the hotkey again while that app is focused cycles to the next window in the same group.

Programs are configured in the Programs map at the top of the file. Each entry maps a name to the ahk_ criteria used to find its window:

'Chrome', { criteriaType: 'ahk_exe', criteriaValue: 'chrome.exe' },

When no matching window exists, the app is launched. By default the criteriaValue is run as-is, which only works for URIs (ms-clock:) and exe names registered in the Windows App Paths registry (chrome.exe, Code.exe, ...). Anything else - apps matched by ahk_class, or exes Windows can't find by bare name - needs an explicit launch path, provided through a Windows user environment variable. Each entry's run property reads one, e.g.:

'Obsidian', { criteriaType: 'ahk_exe', criteriaValue: 'Obsidian.exe', run: EnvGet('OBSIDIAN_PATH') },

The script reads these variables (set only the ones you need - an unset variable falls back to the default behavior above):

VariableProgramTypical value
OBSIDIAN_PATHObsidian%LocalAppData%\Programs\Obsidian\Obsidian.exe
OUTLOOK_PATHOutlook (new)%LocalAppData%\Microsoft\WindowsApps\olk.exe
TERMINAL_PATHWindows Terminal%LocalAppData%\Microsoft\WindowsApps\wt.exe
TEAMS_PATHMicrosoft Teams%LocalAppData%\Microsoft\WindowsApps\ms-teams.exe
WEBSTORM_PATHWebStormwherever your webstorm64.exe lives
ZED_PATHZedwherever your zed.exe lives

To set a variable, pick one of:

  • GUI:Win+Rrundll32 sysdm.cpl,EditEnvironmentVariables → under User variables click New... and enter the name (e.g. OBSIDIAN_PATH) and the full path to the exe.

  • PowerShell:

    [Environment]::SetEnvironmentVariable('OBSIDIAN_PATH',"$env:LOCALAPPDATA\Programs\Obsidian\Obsidian.exe",'User')

Afterwards, fully exit the running script (tray icon → Exit) and start it again from Explorer - a tray Reload keeps the process's old environment and won't pick up new variables, and a terminal opened before the change needs to be reopened before launching the script from it.

To make a new program launchable, add a run: EnvGet('YOUR_VAR') property to its Programs entry and set that variable.

Hotkeys are registered near the bottom via mapKey(shortcut, program), e.g.:

mapKey('+#r', 'Chrome')

To add a new shortcut, add an entry to Programs and a corresponding mapKey(...) call.

Hotkey modifier symbols

Prefix one or more of these to a key name to build a shortcut string, e.g. '+#r' = Shift+Win+R:

SymbolModifierExample -> Meaning
#Win#r -> Win+R
!Alt!r -> Alt+R
^Ctrl^r -> Ctrl+R
+Shift+r -> Shift+R
&Combine two keys into a custom hotkeya & b -> A and B held together
<Use the left key of a modifier pair<^r -> Left Ctrl+R
>Use the right key of a modifier pair>^r -> Right Ctrl+R
*Wildcard: fire even if extra modifiers are held*r -> R (with any combination of modifiers)
~Passthrough: don't block the key's native function~r -> R (native action still happens)
$Force the keyboard hook (avoids Send re-triggering)$r -> R

Modifiers can be combined, e.g. +#r (used throughout windowSwitcher.ahk).

Finding a program's ahk_class / ahk_exe with Window Spy

Window Spy is a tool bundled with AutoHotkey that shows the class name, exe name, and other details of whatever window is under your mouse. Use it to find the criteriaType/criteriaValue for a new Programs entry:

  1. Make sure AutoHotkey is installed, then run any .ahk script (e.g. double-click windowSwitcher.ahk) so an AutoHotkey icon (green "H") appears in the system tray, near the clock.
  2. Right-click the tray icon and choose Window Spy from the menu.
  3. Click on, or just hover your mouse over, the window of the program you want to map. Window Spy updates live as you move the mouse.
  4. In the Window Spy window, note the "ahk_class" value (for criteriaType: 'ahk_class') or the "ahk_exe" value (for criteriaType: 'ahk_exe') - either works, pick whichever value looks more stable/unique for that app.
  5. Add a new entry to the Programs map in windowSwitcher.ahk using the value you copied, then add a mapKey('<shortcut>', '<name>') call for it.
  6. Right-click the AutoHotkey tray icon and choose Reload to apply your changes.

virtualDesktopSwitcher.ahk

Adds hotkeys for navigating Windows virtual desktops (create, delete, switch to previous/next, jump to a specific desktop number). See the ; === key mapping === section in the file for the exact bindings.

startWindowSwitcher.ps1

A small PowerShell helper that starts windowSwitcher.ahk. Useful for launching the script automatically (e.g. from a shortcut, Task Scheduler, or the Startup folder) without having to double-click the .ahk file manually. Update the path in the script to match where you placed this repository before using it.

Running the scripts

  • Manually: double-click a .ahk file (requires AutoHotkey to be installed) to run it. An AutoHotkey tray icon will appear while the script is active.
  • Via PowerShell: run startWindowSwitcher.ps1 to launch windowSwitcher.ahk.
  • At Windows startup: place a shortcut to the .ahk file(s) (or to startWindowSwitcher.ps1) in the Startup folder (Win+Rshell:startup), or create a Task Scheduler task that runs at logon.

To stop a running script, right-click its tray icon and choose Exit, or use Reload to apply changes after editing.

About

Autohotkey scripts

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ahk-scripts

Personal AutoHotkey v2 scripts for window and virtual desktop management on Windows.

Prerequisites

  1. Download and install AutoHotkey v2.0 from https://www.autohotkey.com/ (make sure to pick the v2 installer, not v1.1).
  2. Clone or copy this repository to a folder on your Windows machine.

Scripts

windowSwitcher.ahk

Adds hotkeys (Win+Shift+<key>) that switch to a running application, or launch it if it isn't running. Pressing the hotkey again while that app is focused cycles to the next window in the same group.

Programs are configured in the Programs map at the top of the file. Each entry maps a name to the ahk_ criteria used to find its window:

'Chrome', { criteriaType: 'ahk_exe', criteriaValue: 'chrome.exe' },

When no matching window exists, the app is launched. By default the criteriaValue is run as-is, which only works for URIs (ms-clock:) and exe names registered in the Windows App Paths registry (chrome.exe, Code.exe, ...). Anything else - apps matched by ahk_class, or exes Windows can't find by bare name - needs an explicit launch path, provided through a Windows user environment variable. Each entry's run property reads one, e.g.:

'Obsidian', { criteriaType: 'ahk_exe', criteriaValue: 'Obsidian.exe', run: EnvGet('OBSIDIAN_PATH') },

The script reads these variables (set only the ones you need - an unset variable falls back to the default behavior above):

VariableProgramTypical value
OBSIDIAN_PATHObsidian%LocalAppData%\Programs\Obsidian\Obsidian.exe
OUTLOOK_PATHOutlook (new)%LocalAppData%\Microsoft\WindowsApps\olk.exe
TERMINAL_PATHWindows Terminal%LocalAppData%\Microsoft\WindowsApps\wt.exe
TEAMS_PATHMicrosoft Teams%LocalAppData%\Microsoft\WindowsApps\ms-teams.exe
WEBSTORM_PATHWebStormwherever your webstorm64.exe lives
ZED_PATHZedwherever your zed.exe lives

To set a variable, pick one of:

  • GUI:Win+Rrundll32 sysdm.cpl,EditEnvironmentVariables → under User variables click New... and enter the name (e.g. OBSIDIAN_PATH) and the full path to the exe.

  • PowerShell:

    [Environment]::SetEnvironmentVariable('OBSIDIAN_PATH',"$env:LOCALAPPDATA\Programs\Obsidian\Obsidian.exe",'User')

Afterwards, fully exit the running script (tray icon → Exit) and start it again from Explorer - a tray Reload keeps the process's old environment and won't pick up new variables, and a terminal opened before the change needs to be reopened before launching the script from it.

To make a new program launchable, add a run: EnvGet('YOUR_VAR') property to its Programs entry and set that variable.

Hotkeys are registered near the bottom via mapKey(shortcut, program), e.g.:

mapKey('+#r', 'Chrome')

To add a new shortcut, add an entry to Programs and a corresponding mapKey(...) call.

Hotkey modifier symbols

Prefix one or more of these to a key name to build a shortcut string, e.g. '+#r' = Shift+Win+R:

SymbolModifierExample -> Meaning
#Win#r -> Win+R
!Alt!r -> Alt+R
^Ctrl^r -> Ctrl+R
+Shift+r -> Shift+R
&Combine two keys into a custom hotkeya & b -> A and B held together
<Use the left key of a modifier pair<^r -> Left Ctrl+R
>Use the right key of a modifier pair>^r -> Right Ctrl+R
*Wildcard: fire even if extra modifiers are held*r -> R (with any combination of modifiers)
~Passthrough: don't block the key's native function~r -> R (native action still happens)
$Force the keyboard hook (avoids Send re-triggering)$r -> R

Modifiers can be combined, e.g. +#r (used throughout windowSwitcher.ahk).

Finding a program's ahk_class / ahk_exe with Window Spy

Window Spy is a tool bundled with AutoHotkey that shows the class name, exe name, and other details of whatever window is under your mouse. Use it to find the criteriaType/criteriaValue for a new Programs entry:

  1. Make sure AutoHotkey is installed, then run any .ahk script (e.g. double-click windowSwitcher.ahk) so an AutoHotkey icon (green "H") appears in the system tray, near the clock.
  2. Right-click the tray icon and choose Window Spy from the menu.
  3. Click on, or just hover your mouse over, the window of the program you want to map. Window Spy updates live as you move the mouse.
  4. In the Window Spy window, note the "ahk_class" value (for criteriaType: 'ahk_class') or the "ahk_exe" value (for criteriaType: 'ahk_exe') - either works, pick whichever value looks more stable/unique for that app.
  5. Add a new entry to the Programs map in windowSwitcher.ahk using the value you copied, then add a mapKey('<shortcut>', '<name>') call for it.
  6. Right-click the AutoHotkey tray icon and choose Reload to apply your changes.

virtualDesktopSwitcher.ahk

Adds hotkeys for navigating Windows virtual desktops (create, delete, switch to previous/next, jump to a specific desktop number). See the ; === key mapping === section in the file for the exact bindings.

startWindowSwitcher.ps1

A small PowerShell helper that starts windowSwitcher.ahk. Useful for launching the script automatically (e.g. from a shortcut, Task Scheduler, or the Startup folder) without having to double-click the .ahk file manually. Update the path in the script to match where you placed this repository before using it.

Running the scripts

  • Manually: double-click a .ahk file (requires AutoHotkey to be installed) to run it. An AutoHotkey tray icon will appear while the script is active.
  • Via PowerShell: run startWindowSwitcher.ps1 to launch windowSwitcher.ahk.
  • At Windows startup: place a shortcut to the .ahk file(s) (or to startWindowSwitcher.ps1) in the Startup folder (Win+Rshell:startup), or create a Task Scheduler task that runs at logon.

To stop a running script, right-click its tray icon and choose Exit, or use Reload to apply changes after editing.

About

Autohotkey scripts

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

ahk-scripts

Personal AutoHotkey v2 scripts for window and virtual desktop management on Windows.

Prerequisites

  1. Download and install AutoHotkey v2.0 from https://www.autohotkey.com/ (make sure to pick the v2 installer, not v1.1).
  2. Clone or copy this repository to a folder on your Windows machine.

Scripts

windowSwitcher.ahk

Adds hotkeys (Win+Shift+<key>) that switch to a running application, or launch it if it isn't running. Pressing the hotkey again while that app is focused cycles to the next window in the same group.

Programs are configured in the Programs map at the top of the file. Each entry maps a name to the ahk_ criteria used to find its window:

'Chrome', { criteriaType: 'ahk_exe', criteriaValue: 'chrome.exe' },

When no matching window exists, the app is launched. By default the criteriaValue is run as-is, which only works for URIs (ms-clock:) and exe names registered in the Windows App Paths registry (chrome.exe, Code.exe, ...). Anything else - apps matched by ahk_class, or exes Windows can't find by bare name - needs an explicit launch path, provided through a Windows user environment variable. Each entry's run property reads one, e.g.:

'Obsidian', { criteriaType: 'ahk_exe', criteriaValue: 'Obsidian.exe', run: EnvGet('OBSIDIAN_PATH') },

The script reads these variables (set only the ones you need - an unset variable falls back to the default behavior above):

VariableProgramTypical value
OBSIDIAN_PATHObsidian%LocalAppData%\Programs\Obsidian\Obsidian.exe
OUTLOOK_PATHOutlook (new)%LocalAppData%\Microsoft\WindowsApps\olk.exe
TERMINAL_PATHWindows Terminal%LocalAppData%\Microsoft\WindowsApps\wt.exe
TEAMS_PATHMicrosoft Teams%LocalAppData%\Microsoft\WindowsApps\ms-teams.exe
WEBSTORM_PATHWebStormwherever your webstorm64.exe lives
ZED_PATHZedwherever your zed.exe lives

To set a variable, pick one of:

  • GUI:Win+Rrundll32 sysdm.cpl,EditEnvironmentVariables → under User variables click New... and enter the name (e.g. OBSIDIAN_PATH) and the full path to the exe.

  • PowerShell:

    [Environment]::SetEnvironmentVariable('OBSIDIAN_PATH',"$env:LOCALAPPDATA\Programs\Obsidian\Obsidian.exe",'User')

Afterwards, fully exit the running script (tray icon → Exit) and start it again from Explorer - a tray Reload keeps the process's old environment and won't pick up new variables, and a terminal opened before the change needs to be reopened before launching the script from it.

To make a new program launchable, add a run: EnvGet('YOUR_VAR') property to its Programs entry and set that variable.

Hotkeys are registered near the bottom via mapKey(shortcut, program), e.g.:

mapKey('+#r', 'Chrome')

To add a new shortcut, add an entry to Programs and a corresponding mapKey(...) call.

Hotkey modifier symbols

Prefix one or more of these to a key name to build a shortcut string, e.g. '+#r' = Shift+Win+R:

SymbolModifierExample -> Meaning
#Win#r -> Win+R
!Alt!r -> Alt+R
^Ctrl^r -> Ctrl+R
+Shift+r -> Shift+R
&Combine two keys into a custom hotkeya & b -> A and B held together
<Use the left key of a modifier pair<^r -> Left Ctrl+R
>Use the right key of a modifier pair>^r -> Right Ctrl+R
*Wildcard: fire even if extra modifiers are held*r -> R (with any combination of modifiers)
~Passthrough: don't block the key's native function~r -> R (native action still happens)
$Force the keyboard hook (avoids Send re-triggering)$r -> R

Modifiers can be combined, e.g. +#r (used throughout windowSwitcher.ahk).

Finding a program's ahk_class / ahk_exe with Window Spy

Window Spy is a tool bundled with AutoHotkey that shows the class name, exe name, and other details of whatever window is under your mouse. Use it to find the criteriaType/criteriaValue for a new Programs entry:

  1. Make sure AutoHotkey is installed, then run any .ahk script (e.g. double-click windowSwitcher.ahk) so an AutoHotkey icon (green "H") appears in the system tray, near the clock.
  2. Right-click the tray icon and choose Window Spy from the menu.
  3. Click on, or just hover your mouse over, the window of the program you want to map. Window Spy updates live as you move the mouse.
  4. In the Window Spy window, note the "ahk_class" value (for criteriaType: 'ahk_class') or the "ahk_exe" value (for criteriaType: 'ahk_exe') - either works, pick whichever value looks more stable/unique for that app.
  5. Add a new entry to the Programs map in windowSwitcher.ahk using the value you copied, then add a mapKey('<shortcut>', '<name>') call for it.
  6. Right-click the AutoHotkey tray icon and choose Reload to apply your changes.

virtualDesktopSwitcher.ahk

Adds hotkeys for navigating Windows virtual desktops (create, delete, switch to previous/next, jump to a specific desktop number). See the ; === key mapping === section in the file for the exact bindings.

startWindowSwitcher.ps1

A small PowerShell helper that starts windowSwitcher.ahk. Useful for launching the script automatically (e.g. from a shortcut, Task Scheduler, or the Startup folder) without having to double-click the .ahk file manually. Update the path in the script to match where you placed this repository before using it.

Running the scripts

  • Manually: double-click a .ahk file (requires AutoHotkey to be installed) to run it. An AutoHotkey tray icon will appear while the script is active.
  • Via PowerShell: run startWindowSwitcher.ps1 to launch windowSwitcher.ahk.
  • At Windows startup: place a shortcut to the .ahk file(s) (or to startWindowSwitcher.ps1) in the Startup folder (Win+Rshell:startup), or create a Task Scheduler task that runs at logon.

To stop a running script, right-click its tray icon and choose Exit, or use Reload to apply changes after editing.

About

Autohotkey scripts

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages