Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ryzhpolsos/redeye/llms.txt

Use this file to discover all available pages before exploring further.

RedEye intercepts keyboard input system-wide using a low-level Windows keyboard hook (WH_KEYBOARD_LL). This means hotkeys registered in keyBindings.xml fire regardless of which application currently has focus — they are true global shortcuts. The hotkey configuration lives in a single file and is loaded from the root <config> element, outside the <layout> block.

The keyBindings.xml file

All hotkey definitions are wrapped in a <hotkeys> element. RedEye registers each <hotkey> child as a global key combination when LoadConfig() runs at startup.
<!-- config/keyBindings.xml -->
<hotkeys>
    <!-- System UI hotkeys -->
    <hotkey keys="Win"   action="window.toggle(startMenu)"/>
    <hotkey keys="Win+R" action="powerSearch.open()"/>

    <!-- Launcher hotkeys -->
    <hotkey keys="Win+T" action="shellExecute('cmd.exe')"/>
    <hotkey keys="Win+B" action="shellExecute('http:')"/>

    <!-- Block Win key side-effect on Win+L -->
    <hotkey keys="Win+L" action=""/>
</hotkeys>
This file is imported from config.xml at the root level:
<config>
    <layout>...</layout>
    <import from="config/keyBindings.xml"/>
</config>

<hotkey> syntax

<hotkey keys="Modifier+Key" action="expression"/>
AttributeRequiredDescription
keysyesThe key combination as a +-separated string
actionyesAn RWML expression to evaluate when the hotkey fires
continueno"true" to let the key event pass through to other applications after the action runs (default: "false")
multiActivateno"true" to fire repeatedly while keys are held (default: "false", fires once on key-up)

Key name format

Key names are separated by +. The following modifier names are recognized:
NameMaps to
WinLeft or right Windows key
CtrlLeft or right Control key
AltLeft or right Alt key
ShiftLeft or right Shift key
Letter keys are written as single uppercase characters: AZ. Digit keys use their character: 09. Two special characters are also supported:
SymbolKey
.Period / full stop
,Comma
Any other key name that is not in the modifier map is matched literally against the .NET Keys enum string (e.g. F1, Home, Insert, Space).

Key combination ordering

Modifiers and the triggering key can be written in any order in the keys attribute. RedEye sorts all keys alphabetically before comparing, so Win+R and R+Win are treated identically.

Default key bindings

These are the bindings shipped with RedEye:
KeysActionDescription
Winwindow.toggle(startMenu)Open or close the start menu
Win+RpowerSearch.open()Open the PowerSearch launcher
Win+TshellExecute('cmd.exe')Launch a Command Prompt
Win+BshellExecute('http:')Open the default web browser
Win+L(empty)Blocked — see note below

Available action expressions

The action attribute accepts any RWML expression, including function calls with arguments:

Shell window functions

<hotkey keys="Win"     action="window.toggle(startMenu)"/>
<hotkey keys="Win+Esc" action="window.hide(startMenu)"/>
<hotkey keys="Win+C"   action="window.show(configUtil)"/>
ExpressionDescription
window.show(id)Show a shell window by its id
window.hide(id)Hide a shell window by its id
window.toggle(id)Toggle a shell window’s visibility

Launching programs

<hotkey keys="Win+T" action="shellExecute('cmd.exe')"/>
<hotkey keys="Win+B" action="shellExecute('http:')"/>
<hotkey keys="Win+N" action="shellExecute('notepad.exe')"/>
<hotkey keys="Win+E" action="shellExecute('explorer.exe')"/>
ExpressionDescription
shellExecute(path)Launch a program or open a URL/file
shellExecute(path, args)Launch a program with command-line arguments
shellExecuteHidden(path, args)Launch without a visible window (for background commands)

PowerSearch

<hotkey keys="Win+R" action="powerSearch.open()"/>

Shell control

<hotkey keys="Win+Ctrl+R" action="shell.restart()"/>

Window manager (when enabled)

<hotkey keys="Win+D" action="wapi.toggleAllWindows()"/>
<hotkey keys="Win+M" action="wapi.minimizeAllWindows()"/>
ExpressionDescription
wapi.minimizeAllWindows()Minimize all tracked application windows
wapi.restoreAllWindows()Restore all minimized windows
wapi.toggleAllWindows()Toggle between minimized and restored for all windows

The Win+L system binding

Win+L is a hardcoded Windows system shortcut that locks the workstation. Because it is processed by winlogon.exe before any keyboard hook can intercept it, RedEye cannot change what Win+L does. However, the empty-action entry in keyBindings.xml serves a different purpose: it prevents the Win key’s release from triggering the start menu toggle after you press Win+L.
<hotkey keys="Win+L" action=""/>
<!-- Win+L is a system keybind, so RedEye can't really change its action,
     but this will block Win keybind from activating when Win+L is pressed -->
You cannot intercept or override Win+L with a custom action. The empty action="" only suppresses the secondary Win key-up event that would otherwise fire window.toggle(startMenu).

Adding your own bindings

Open config/keyBindings.xml and add <hotkey> elements inside <hotkeys>:
1

Open the bindings file

Edit config/keyBindings.xml in any text editor.
2

Add a hotkey element

Insert a new <hotkey> with your chosen key combination and action:
<hotkey keys="Win+Shift+S" action="shellExecute('SnippingTool.exe')"/>
3

Restart the shell

Changes take effect only after a shell restart. Run shell.restart() from PowerSearch or from a bound hotkey if you have one:
<hotkey keys="Win+Ctrl+R" action="shell.restart()"/>

<keyHandler> for raw key events

In addition to <hotkey>, you can register a <keyHandler> to receive every individual key event and decide whether to pass it through. Key handlers run before hotkeys and receive two context variables: ${keyName} (the .NET Keys enum name for the pressed key) and ${isUp} ("true" on key-up, "false" on key-down):
<hotkeys>
    <keyHandler action="..." continue="true"/>
</hotkeys>
A <keyHandler> fires on every keystroke system-wide, including inside other applications. Keep the action expression lightweight and always set continue="true" unless you deliberately want to consume the key event globally.

Build docs developers (and LLMs) love