feat: add portable Windows zone manager

This commit is contained in:
Steve Cliff
2026-08-20 08:57:41 +01:00
parent 318300ef79
commit 6ddecad74d
15 changed files with 1760 additions and 4 deletions
+45 -4
View File
@@ -10,6 +10,8 @@ menu entry, or registry settings.
## What FancyWin does
- Snaps a dragged window into the zone beneath the mouse pointer.
- Shows a transparent, click-through guide with every zone's outline and name
while Shift-dragging.
- Moves the focused window between zones with keyboard shortcuts.
- Supports different layouts for different monitors.
- Uses percentages, so layouts adapt to resolution, orientation, display
@@ -17,10 +19,10 @@ menu entry, or registry settings.
- Reloads its configuration automatically after the YAML file changes.
- Lets you exclude applications that should never be moved.
FancyWin is a window-moving backend rather than a complete PowerToys
replacement. It does not display a zone overlay or include a visual layout
editor. It also does not currently remember application positions, combine
multiple zones, or assign layouts per virtual desktop.
FancyWin is a focused window manager rather than a complete PowerToys
replacement. It does not include a visual layout editor and does not currently
remember application positions, combine multiple zones, or assign layouts per
virtual desktop.
## Getting started
@@ -78,6 +80,12 @@ version: 1
gap: 8
shift_drag: true
overlay:
enabled: true
color: "#00AEEF"
opacity: 90
border_width: 3
layouts:
- monitor: "*"
zones:
@@ -118,10 +126,35 @@ use.
| `version` | Configuration format. This must currently be `1`. |
| `gap` | Inward spacing, in pixels, applied to every edge of every zone. Valid range: `0``500`. |
| `shift_drag` | Enables or disables mouse snapping when Shift is held at the end of a drag. |
| `overlay` | Controls the transparent zone guide shown during Shift-dragging. |
| `layouts` | One or more monitor layouts containing zones. |
| `excluded_apps` | Applications FancyWin must not move. May be empty. |
| `hotkeys` | Global keyboard shortcuts. May be empty. |
### Zone overlay
The overlay appears after a window has begun moving and Shift is held. It shows
all zones on the monitor beneath the pointer, using the same gap-adjusted
rectangles that windows snap into. Each outline contains the zone's `name`, or
`Zone N` when its name is empty. Releasing Shift or the mouse button immediately
hides it.
```yaml
overlay:
enabled: true
color: "#00AEEF"
opacity: 90
border_width: 3
```
- `enabled` turns the guide on or off.
- `color` is an outline and label color in `#RRGGBB` format.
- `opacity` is from `1` to `100` percent.
- `border_width` is from `1` to `20` physical pixels.
The guide is transparent between its outlines, does not receive mouse input,
does not take keyboard focus, and does not appear in Alt+Tab.
### Zone coordinates
Each zone is a rectangle described as percentages of the monitor's usable work
@@ -296,6 +329,14 @@ borders, but it cannot override size rules imposed by the application itself.
Wait at least two seconds and check the console. FancyWin keeps using the last
valid configuration when a new edit cannot be parsed or validated.
### The zone overlay does not appear
- Confirm `overlay.enabled` and `shift_drag` are both `true`.
- Begin moving the window before expecting the guide; a stationary Shift-click
is intentionally ignored.
- Keep Shift held during the drag.
- Check the console for `cannot show zone overlay` errors.
## Project relationship
FancyWin is an independent implementation and does not contain Microsoft