You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Save and restore complex Windows desktop layouts from a simple folder, with no installation beyond Windows itself.
3
+
Save and restore complex Windows desktop layouts from a simple folder, with no installation required.
4
4
5
5
This project uses PowerShell plus built-in Windows APIs to:
6
6
7
7
- Capture the current monitor-aware window arrangement
8
8
- Restore named layouts from a text file
9
+
- Reorganize windows across multiple virtual desktops without dragging them around manually
9
10
- Work across different monitor numbering by matching monitors by position
10
11
- Support multiple monitor setups such as `3 monitors`, `ultrawide`, or `laptop`
11
12
- Support both per-window rules and cascade rules for multi-instance apps
@@ -15,38 +16,45 @@ This project uses PowerShell plus built-in Windows APIs to:
15
16
- Windows can renumber monitors after events such as screensaver/sleep/wake, but this tool identifies monitors by position rather than number
16
17
- Similar home and office monitor layouts can still match even when positions and sizes are close but not identical
17
18
- Different monitor resolutions still work because window placement uses percentages instead of fixed pixel coordinates
19
+
- Virtual desktops are tedious to organize by hand when you first open a group of windows; this tool can place them on the right desktops for you
20
+
- You can also use partial layouts, for example a `MyProject.cmd` script that opens a few apps and then runs `WindowLayout.cmd -ApplyLayout "MyProject"` to arrange only those windows
18
21
- Configurations can be copied from computer to computer
19
22
20
23
## What It Looks Like
21
24
22
-
The launcher shows layouts in the form:
25
+
Setup examples:
23
26
24
27
-`3 monitors - developer`: IDE large, CAD smaller
25
28
-`3 monitors - engineer`: CAD large, IDE smaller
26
29
-`ultrawide - developer`: IDE on the left
27
30
-`ultrawide - engineer`: CAD on the left
28
-
-`laptop - laptop`: mostly full-screen windows on a single monitor
31
+
-`laptop - default`: mostly full-screen windows on a single monitor
29
32
30
33
You can also apply a layout directly from an interactive terminal or from a shortcut script:
When `WindowLayout\window_layouts.txt` is reformatted, the script also regenerates one `.cmd` file per saved layout inside `WindowLayout\`, for example `WindowLayout\WindowLayout - 3 monitors - developer.cmd`.
40
+
36
41
## Features
37
42
38
43
-`No dependencies`: runs with built-in Windows PowerShell and .NET only
39
-
-`Portable`: works from a folder such as the desktop
44
+
-`Portable`: runs directly from a folder such as the desktop
40
45
-`Monitor setups`: separate physical monitor arrangements from window layouts
41
46
-`Relative monitor matching`: matches the current monitors to a saved setup by relative position, not Windows numbering
42
-
-`Capture workflow`: captures the current layout into`current_layout.txt`, which you can trim and copy into `window_layouts.txt`
47
+
-`Capture workflow`: saves the current layout to`current_layout.txt`, which you can trim and copy into `window_layouts.txt`
43
48
-`Readable config`: uses a pipe-delimited text format instead of JSON
44
49
-`Regex titles`: supports `regex` title matching, including `|` inside regex patterns
45
50
-`Cascade support`: capture emits both a cascade row and individual rows for multi-instance apps
51
+
-`Virtual desktops`: captures and restores a manually editable desktop number for each window
52
+
-`Editable percentages`: capture writes integer `x`, `y`, `w`, and `h` values, but you can manually change them to decimals for finer positioning
53
+
-`Ignore list`: processes without a valid desktop number are written to `processes_to_ignore.txt` and excluded from future captures and restores
46
54
47
55
## Folder Layout
48
56
49
-
Release zip contents:
57
+
Folder contents:
50
58
51
59
```text
52
60
WindowLayout.cmd
@@ -57,24 +65,28 @@ WindowLayout/
57
65
58
66
`window_layouts.txt` is created on first run.
59
67
68
+
Per-layout `.cmd` shortcut scripts inside `WindowLayout\` are generated from `window_layouts.txt` when it is reformatted.
69
+
60
70
`current_layout.txt` is generated only when you capture a layout.
61
71
72
+
`processes_to_ignore.txt` is updated automatically when capture finds processes without a valid desktop number.
73
+
62
74
## Quick Start
63
75
64
-
1. Download the release zip and extract it.
76
+
1. Download or copy the folder.
65
77
2. Keep `WindowLayout.cmd` next to the `WindowLayout` folder.
66
78
3. Double-click `WindowLayout.cmd`.
67
79
4. Choose a saved layout, or capture the current layout.
68
80
5. After capture, copy the parts you want from `current_layout.txt` into `window_layouts.txt`.
69
81
70
-
Capture usually sees more windows than you want to keep, including helper windows and some windows that are not obvious to the user. Trim the captured file before keeping it.
82
+
Capture usually sees more windows than you want to keep, including helper windows and some windows that are not obvious at first glance. Processes without a valid desktop number are not written to `current_layout.txt`; instead, their process names are added to `WindowLayout\processes_to_ignore.txt`.
71
83
72
84
## Configuration Model
73
85
74
86
The config separates:
75
87
76
88
-`MonitorSetup`: the physical monitor arrangement
77
-
-`Layout`: the app/window arrangement for that monitor setup
89
+
-`Layout`: the window arrangement for that monitor setup
78
90
79
91
Example:
80
92
@@ -96,10 +108,10 @@ primary | 0 | 0
96
108
97
109
[Layout developer]
98
110
monitorSetup | 3 monitors
99
-
processName | title | match | x | y | w | h | monitorRole | cascade
100
-
chrome.exe | Main | contains | 20 | 20 | 60 | 70 | primary | no
101
-
chrome.exe | Personal | contains | 0 | 0 | 30 | 100 | lower-left | no
0 commit comments