ExquisiteW is a customizable GUI driven window manager utility for Windows 10 that lets you create custom window layouts and then quickly move and resize windows to zones using a GUI or keyboard shortcuts.
After layouts have been configured, and ExquisiteW is running, you can use ExquisiteW to move and resize the window under the mouse to a specific zones in one of 2 ways:
- Activate the ExquisiteW GUI (using your configured trigger) and then either:
- Click on the zone you want
- Press the zone's activator key
- Press the global keyboard shortcut you have defined for the zone
ExquisiteW was inspired by Exquisite and the beta version was written in AutoHotKey by Malcev.
- Features
- How It Works
- Getting It
- Using It
- Limitations And Known Bugs
- Support / Help
- Inspiration
- Credits
- Custom layouts (currently through a JSON configuration file)
- GUI for moving + resizing the window under the mouse
- Customizable keyboard shortcuts
- Multi-monitor support to move + resize a window to another monitor from the GUI
- ExquisiteW uses layouts to define a set of zones
- You can have multiple layouts
- A layout represents the usable area of a monitor (the taskbar is automatically excluded)
- A layout is a 12 row by 12 column representation of a a monitor (for the same reason as the inspiration for ExquisiteW)
- Each layout can have multiple zones
- A zone represents the location and area of the monitor where you want a window to be moved and resized to
- Windows 10 *
- AutoHotKey 2.0
* I only have Windows 10 machines. I do not have access to Windows 11 (nor do I really want it). If you have Windows 11 and are willing to help me test ExquisiteW, please contact me.
- Go to https://github.com/imthenachoman/ExquisiteW/releases
- Download the latest release ZIP file
- Extract the ZIP file to wherever you like/want
- Edit
settings.ini
andlayouts.json
to your liking - Run/execute
ExquisiteW.ahk
You'll get a notification letting you know it's running, along with what ExquisiteW's GUI activation trigger is.
- You can customize the global shortcut/trigger used to show ExquisiteW's GUI
- ExquisiteW's GUI will show you all of your configured layouts
- Each layout will have 1+ buttons to represent each zone in that layout
- Each button/zone will be visually placed in the layout to represent the area of the monitor the window will be moved and resized to
- Clicking on a zone, or pressing the zone's activator key, will move and resize the window that was under the mouse when you activated the GUI
- If you have multiple monitors, ExquisiteW's GUI will let you select the monitor you want to move and resize the window to
- You can configure a global shortcut/trigger for a specific zone
- This will let you move and resize the window under the mouse without opening ExquisiteW's GUI
There are two configuration files used by ExquisiteW:
This is a standard INI file with some global, non-layout specific settings.
Setting | Valid Options | Default | Description |
---|---|---|---|
Update Check Frequency |
whole number greater than -1 | 24 |
How often to check for updates, in hours:
|
Setting | Valid Options | Default | Description |
---|---|---|---|
Close After Selection |
1 or 0 |
1 |
|
Opacity |
whole number from 0 to 100 |
100 |
|
Trigger |
AHK HotKey | ^!d (ctrl + alt + d ) |
The global keyboard shortcut to show ExquisiteW's GUI when the mouse is over a window/application that can be resized |
Number Of Layouts In A Row |
whole number greater than 3 | 4 |
Number of layouts per row in ExquisiteW's GUI; 3 is the minimum |
Layout Box Width In Pixels |
whole number greater than 50 | 200 |
Width of each layout (in pixels) in ExquisiteW's GUI; 50 is the minimum |
Layout Box Height In Pixels |
whole number greater than 50 | 125 |
Height of each layout (in pixels) in ExquisiteW's GUI; 50 is the minimum |
layouts.json
is a JSON formatted configuration file where layouts are defined. The structure of layouts.json
is below. See layouts.json
for a real example.
{
"windowPaddingInPixels" : number, //optional
"padAtMonitorEdges" : bool, //optional
"layouts" : [
{
"name" : string,
"windowPaddingInPixels" : number, //optional
"padAtMonitorEdges" : bool, //optional
"zones" : [
{
"topLeftRowNumber" : 0-12,
"topLeftColumnNumber" : 0-12,
"numberOfRows" : 1-12,
"numberOfColumns" : 1-12,
"activator" : single letter, //optional
"hotkey" : AutoHotKey HotKey, //optional
"windowPaddingInPixels" : whole number greater than 1, //optional
"padAtMonitorEdges" : bool //optional
},
{...}
]
},
{...}
]
}
Property | Valid Options | Description |
---|---|---|
windowPaddingInPixels |
number | Global window padding for all zones in all layouts (see windowPaddingInPixels ) |
padAtMonitorEdges |
true or false |
Global setting for if padding should be added when a window is at the edge of the monitor (see padAtMonitorEdges ) |
layouts * |
array of layouts | All of the layouts |
layouts[].name * |
string | Name of the layout to show in the GUI |
layouts[].windowPaddingInPixels |
number | Window padding for all of zones in this layout (see windowPaddingInPixels ) |
layouts[].padAtMonitorEdges |
number | Setting for this layout for if padding should be added when a window is at the edge of the monitor (see padAtMonitorEdges ) |
layouts[].zones * |
array of zones | All of the zones for this layout |
layouts[].zones[].topLeftRowNumber * |
0 - 11 |
Row number of the top left corner of the window (see How It Works) |
layouts[].zones[].topLeftColumnNumber * |
0 - 11 |
Column number of the top left corner of the window (see How It Works) |
layouts[].zones[].numberOfRows * |
1 - 12 |
Height of the window, in number of rows (see How It Works) |
layouts[].zones[].numberOfColumns * |
1 - 12 |
Width of the window, in number of columns (see How It Works) |
layouts[].zones[].activator |
letter | Single letter to activate a zone/button in the GUI |
layouts[].zones[].hotkey |
AHK HotKey | Global shortcut to activate a zone without the GUI (see layouts[].zones[].hotkey ) |
layouts[].zones[].windowPaddingInPixels |
number | Window padding for this zone in this layout (see windowPaddingInPixels ) |
layouts[].zones[].padAtMonitorEdges |
number | Setting for this zone in this layout for if padding should be added when a window is at the edge of the monitor (see padAtMonitorEdges ) |
* required properties
- You can add a custom padding (in pixels) around a window when it is moved and resized
- Window padding can be set in 3 places:
- globally, for all layouts, by setting the
windowPaddingInPixels
property at the root oflayouts.json
- for all zones of a specific layout by setting the
windowPaddingInPixels
property for a layout - for a specific zone by setting the
windowPaddingInPixels
property of a specific zone
- globally, for all layouts, by setting the
- If
windowPaddingInPixels
is not set for a zone, it will use the value ofwindowPaddingInPixels
for the layout - If
windowPaddingInPixels
is not set for a layout, it will use the global value ofwindowPaddingInPixels
- If you have set
windowPaddingInPixels
then padding will be added to all four sides of the window - If the window is at the edge of the monitor, you may not want padding added to that edge
- This lets you disable padding at the edge
- This setting can be set in 3 places:
- globally, for all layouts, by setting the
padAtMonitorEdges
property at the root oflayouts.json
- for all zones of a specific layout by setting the
padAtMonitorEdges
property for a layout - for a specific zone by setting the
padAtMonitorEdges
property of a specific zone
- globally, for all layouts, by setting the
- If
padAtMonitorEdges
is not set for a zone, it will use the value ofpadAtMonitorEdges
for the layout - If
padAtMonitorEdges
is not set for a layout, it will use the global value ofpadAtMonitorEdges
- This is an AutoHotKey HotKey
- If set, a global keyboard shortcut will be created and associated to the zone
- When the ExquisiteW GUI is not active, and this keyboard shortcut is used, the current window under the mouse will be moved and resized according to the zone's configuration
Since ExquisiteW is written in AutoHotKey, it uses AHK's structure for defining hotkeys. You can read about it and see examples at https://www.autohotkey.com/docs/v2/Hotkeys.htm.
Issue | Type | Details |
---|---|---|
No support for administrator windows | limitation | ExquisiteW cannot move and resize windows running as an administrator. |
Not monitor/desktop change aware | limitation | ExquisiteW does not know when your monitor arrangement/configuration changes, or your desktop changes. You will need to manually reload ExquisiteW when you make those kinds of changes. |
You can get support/help in one of two ways:
- Open an issue at https://github.com/imthenachoman/ExquisiteW/issues
- Contact me at the information listed in my GitHub profile
- My daily driver is Linux (Debian + KDE Plasma)
- Exquisite (without the W) is a window manager for KDE written by qewer33
- It is the best window manager I have ever seen
- I still use Windows 10 on some machines
- Windows 10 built-in window snapping is adequate
- FancyZones (part of PowerToys) is awesome but you have to drag/drop windows and that's a lot of mouse travel (especially on an ultrawide monitor)
So I* decided to build a Windows clone of Exquisite.
Disclaimer: I didn't know AutoHotKey when I started. I reached out to Malcev who created the beta version for me. I took his's code -- with his permission -- and ran with it. (In the interest of transprency, I paid him for his work.)
- Malcev for the initial version
- andymbody for https://www.autohotkey.com/boards/viewtopic.php?p=540471#p540471
- jNizM for https://www.autohotkey.com/boards/viewtopic.php?p=540898#p540898
- just me for https://www.autohotkey.com/boards/viewtopic.php?p=539922#p539922 and https://www.autohotkey.com/boards/viewtopic.php?p=540310#p540310
- neogna2 for https://www.autohotkey.com/boards/viewtopic.php?p=539921#p539921
- niCode for https://www.autohotkey.com/boards/viewtopic.php?p=540587#p540587
- ntepa for https://www.autohotkey.com/boards/viewtopic.php?p=540461#p540461
- teadrinker for https://www.autohotkey.com/boards/viewtopic.php?p=540162#p540162