Add init --sync and --prune for incremental monitor setup
`init` planned every file on every run and refused if any of them existed, so attaching a new monitor could not be configured without --force — which reallocated global workspace numbers by i3's current output order and renumbered the monitors already in use. - allocate_global_starts() keeps the block each known output already holds and gives new outputs the lowest free block; blocks of inactive outputs stay reserved. - read_allocations()/parse_allocation() read those blocks back out of the generated files (inverse of render_workspaces_for_output). - --sync writes only the missing files, --prune drops configs for outputs that are gone and frees their numbers. - Files without the auto-generated header are never written or deleted, --force included. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -103,10 +103,36 @@ Useful flags:
|
||||
| `-n N` / `--count N` | 8 | Workspaces per output |
|
||||
| `--config-dir PATH` | `~/.config/i3/pi3-smart-workspace` | Where to write |
|
||||
| `--dry-run` | off | Print to stdout, don't touch the filesystem |
|
||||
| `--force` | off | Overwrite existing files |
|
||||
| `--sync` | off | Only write configs for outputs that don't have one yet |
|
||||
| `--force` | off | Regenerate every file from scratch (renumbers workspaces) |
|
||||
| `--prune` | off | Delete generated configs for outputs that are no longer active |
|
||||
|
||||
Re-run `init --force` after plugging or unplugging a monitor to
|
||||
regenerate the per-output folders.
|
||||
### Plugging in a new monitor
|
||||
|
||||
Run:
|
||||
|
||||
```sh
|
||||
pi3-smart-workspace init --sync
|
||||
```
|
||||
|
||||
`--sync` writes a `workspaces.conf` only for the outputs that don't have
|
||||
one yet, and gives the newcomer the lowest block of global workspace
|
||||
numbers that isn't already taken. The monitors you already use keep the
|
||||
numbers they have, so your muscle memory survives — which a plain
|
||||
`--force` regeneration would not guarantee, since that allocates numbers
|
||||
by i3's current output order and can shuffle everything.
|
||||
|
||||
Configs for monitors that are merely switched off are left in place and
|
||||
their numbers stay reserved. Add `--prune` to delete them and free those
|
||||
numbers for a new screen:
|
||||
|
||||
```sh
|
||||
pi3-smart-workspace init --sync --prune
|
||||
```
|
||||
|
||||
Files that don't carry the `# Auto-generated by pi3-smart-workspace init`
|
||||
header are never overwritten or deleted, not even with `--force` — so
|
||||
anything you hand-tune in that directory is safe.
|
||||
|
||||
### Example config (manual)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user