Repository navigation
Releases: carlo9890/gnome-window-control
Release list
GNOME Window Control v19
What's new
- No change in behaviour for
wctlor the extension. When the extension is disabled, it now removes its pending timers in one place that a reviewer can check. This release goes to the extensions.gnome.org review.
Install
Extension:
gnome-extensions install window-control@carlo9890.github.io_v19.zipLog out and back in (Wayland), or press Alt+F2, type r, Enter (X11), then:
gnome-extensions enable window-control@carlo9890.github.iowctl:
curl -fsSL https://github.com/carlo9890/gnome-window-control/releases/download/v19/install-wctl.sh | bashGNOME Window Control v18
What's new
- A D-Bus method that hits a bug now fails with
org.gnome.gjs.JSError.<name>instead of answeringfalseor an empty list. WaitForWindowandWaitForGeometryno longer answerorg.freedesktop.DBus.Error.Failedfor a bug; on GNOME 45-49 such a call can end in a D-Bus timeout.- The
InvalidArgsmessages ofResizeandMoveResizeare reworded. - An extension copied by hand without its compiled schema no longer enables. Install with
./scripts/build.sh installor from extensions.gnome.org.
Install
Extension:
gnome-extensions install window-control@carlo9890.github.io_v18.zipLog out and back in (Wayland), or press Alt+F2, type r, Enter (X11), then:
gnome-extensions enable window-control@carlo9890.github.iowctl:
curl -fsSL https://github.com/carlo9890/gnome-window-control/releases/download/v18/install-wctl.sh | bashGNOME Window Control v17
What's new
- Breaking: an empty
-s ""now fails withSubstring must not be empty; before, it matched every window. - Breaking:
wctlexits 5 (was 1) when it cannot reach the session bus, and namesDBUS_SESSION_BUS_ADDRESSin the hint. - Breaking:
wctl rules testexits 0 (was 2) when the matched rule names a missing monitor;--jsonreports"skipped": "no such monitor". wctl rules add --class-prefix <TEXT> tile left(or"class_prefix"in rules.json) matches the start of the WM class. It needs the v17 extension.wctl list --jsonhashas_been_shown,falsefor a window that mutter has not mapped and placed yet.WCTL_VERSION=v17 ./install-wctl.shpins the release to install (v17 or later) and verifies its checksum.
Fixed
- Installing with
curl ... | bashfailed at once with an unbound-variable error. - Control characters in a window title or WM class could corrupt the output of
wctl info,focused,listandrules test; they now show as?. wctl rules addandwctl rules removereplaced a symlinked rules.json with a regular file.wctl waitcould return a window that was created minimized and never shown.- Tab completion of a window id in bash and zsh could freeze the prompt.
Install
Extension:
gnome-extensions install window-control@carlo9890.github.io_v17.zipLog out and back in (Wayland), or press Alt+F2, type r, Enter (X11), then:
gnome-extensions enable window-control@carlo9890.github.iowctl:
curl -fsSL https://github.com/carlo9890/gnome-window-control/releases/download/v17/install-wctl.sh | bashGNOME Window Control v16
Changed
- Enabling and disabling the extension no longer writes "Enabling extension...", "Extension enabled", "Disabling extension..." and "Extension disabled" to the journal.
Fixed
- The extension now removes its pending unmaximize timer whenever a shortcut or a rule gives up the wait, and on disable, in a form the extensions.gnome.org review accepts. v15 was not published there for this reason.
Install
Extension:
gnome-extensions install window-control@carlo9890.github.io_v16.zipLog out and back in (Wayland), or press Alt+F2, type r, Enter (X11), then:
gnome-extensions enable window-control@carlo9890.github.iowctl:
curl -fsSL https://github.com/carlo9890/gnome-window-control/releases/download/v16/install-wctl.sh | bashGNOME Window Control v15
What's new
- A rule can match the start or the end of a title:
"title_prefix"and"title_suffix"inrules.json, orwctl rules add --title-prefix Report tile left. Extension andwctlmust both be v15. wctl rules add -c Slack --workspace 2writes a rule that only moves the window to a workspace or a monitor.
Changed
- A selector that matches no window (
-c,-t,-s,-p,focused) exits 2, not 1.wctl rules removewith an index past the end exits 1, not 2. wctl minimizeon a window the shell does not let minimize exits 3 with "cannot be minimized"; it printed "Window minimized".
Fixed
- An unreadable
rules.jsonleft the old rules active; it now turns them off, as an invalid file does. wctl rules addandremovereset the file mode ofrules.json.- When one keyboard shortcut could not be registered, some shortcuts stayed active and
keybindingswas still reported.
Install
Extension:
gnome-extensions install window-control@carlo9890.github.io_v15.zipLog out and back in (Wayland), or press Alt+F2, type r, Enter (X11), then:
gnome-extensions enable window-control@carlo9890.github.iowctl:
curl -fsSL https://github.com/carlo9890/gnome-window-control/releases/download/v15/install-wctl.sh | bashGNOME Window Control v14
Fixed
- The extension no longer blocks GNOME Shell while it reads
rules.json. rules.json: an array given fortileor for aplacetoken is now refused by the extension, aswctl rules checkalready did.- Bash completion offers the
wctl rulessubcommand options after--timeout. - The extension description now names the keyboard shortcuts and the window rules.
Install
Extension:
gnome-extensions install window-control@carlo9890.github.io_v14.zipLog out and back in (Wayland), or press Alt+F2, type r, Enter (X11), then:
gnome-extensions enable window-control@carlo9890.github.iowctl:
curl -fsSL https://github.com/carlo9890/gnome-window-control/releases/download/v14/install-wctl.sh | bashGNOME Window Control v13
What's new
wctl minimize <WINDOW> --no-animationandwctl unminimize <WINDOW> --no-animationhide and show a window without the shell's minimize animation, for a window a script toggles, such as a popup.wctl activate <ID> --no-animationrestores and focuses a minimized window in one step, without the animation. The flag takes a window ID only.- On GNOME 49 and later, a
placeortilerule inrules.jsontakes effect before a Wayland window is drawn, so the window opens in place instead of jumping there. - Three D-Bus methods serve the flags:
MinimizeNoAnimation,UnminimizeNoAnimationandActivateNoAnimation. wctl version --jsonreports the capabilitiesno-animationandactivate-no-animationwhen the loaded extension supports them.- Leave a frame between a
--no-animationminimize and the unminimize that reverses it; within the same frame the skip falls on the window's next animation instead.
Fixed
- A
rules.jsonsaved at the moment a window opened could apply the wrong rule to that window.
Install
Extension:
gnome-extensions install window-control@carlo9890.github.io_v13.zipLog out and back in (Wayland), or press Alt+F2, type r, Enter (X11), then:
gnome-extensions enable window-control@carlo9890.github.iowctl:
curl -fsSL https://github.com/carlo9890/gnome-window-control/releases/download/v13/install-wctl.sh | bashGNOME Window Control v12
What's new
- Windows place themselves when they open: rules in
~/.config/gnome-window-control/rules.jsontile, place or center a new window
by class, title or app id, and can send it to a workspace or monitor. wctl rules add -c kitty tile leftwrites a rule;wctl rules list,
wctl rules remove 0,wctl rules checkandwctl rules test -c kitty
manage, validate and explain the file.- Keyboard shortcuts:
Super+Ctrlplus a numpad key tiles the focused window to
the matching grid cell, andSuper+Ctrl+KP_Addtoggles wide-right and
wide-left. Every shortcut is a GSettings key you can rebind or unbind. - Two new tile positions,
wide-leftandwide-right:wctl tile focused wide-right. wctl version --jsonlists the extension'scapabilities, so a script can
ask forrulesorkeybindingsby name.
Install
Extension:
gnome-extensions install window-control@carlo9890.github.io_v12.zipLog out and back in (Wayland), or press Alt+F2, type r, Enter (X11), then:
gnome-extensions enable window-control@carlo9890.github.iowctl:
curl -fsSL https://github.com/carlo9890/gnome-window-control/releases/download/v12/install-wctl.sh | bashGNOME Window Control v11
Breaking
wctl workspace Nnow exits 2 when the workspace does not exist and 3 when the
shell refused the switch. It used to report both the same way.- A usage error is now reported as a usage error. Commands using
focusedor
-c/-t/-s/-pcalled the bus first, sowctl tile -c kitty nowheresaid the
extension was not running instead of naming the bad position.
Fixed
wctl -t --jsonand friends:--jsonand--settledare no longer taken out
of the value slot of-t/-s/-c, so a window whose title is--jsoncan be
addressed.wctl placeandwctl centerno longer echo back a rectangle the shell never
used, and out-of-range coordinates are refused instead of wrapping.wctl sticky <WINDOW> offreports failure when the window stays on all
workspaces. With workspaces-only-on-primary, a window on a secondary monitor
does, and the command used to claim success.- Activating by PID 0 no longer picks an arbitrary window, and an empty
-s
substring no longer matches every open window inwctl activateand
wctl wait. - The state commands reject stray trailing arguments, and
wctl wait -prefuses
a PID that is not a positive number. - Window PIDs are no longer written to the journal.
Install
Extension:
gnome-extensions install window-control@carlo9890.github.io_v11.zipLog out and back in (Wayland), or press Alt+F2, type r, Enter (X11), then:
gnome-extensions enable window-control@carlo9890.github.iowctl:
curl -fsSL https://github.com/carlo9890/gnome-window-control/releases/download/v11/install-wctl.sh | bashGNOME Window Control v10
What's new
wctl workarea [<MONITOR>] [--json]reports a monitor's usable area — the rectangle minus panels and docks, whichwctl monitorsnever gave you. Defaults to the primary monitor.wctl resolve-place [--monitor <N>] <X> <Y> <W> <H> --jsonreports the rectangle a placement resolves to, with no window and nothing moved. Use it to size a window before it exists.--jsononplace,tileandcenterreports the workarea used and the rectangle wctl resolved, so a script can verify a placement by comparing against it instead of recomputing the percentages.--settledonplace,tileandcenterreturns only once the frame has stopped changing, and reports where it stopped.wctl version --jsonreports the extension version GNOME Shell has actually loaded and whether it matches this wctl — so an install the shell has not picked up yet shows as a mismatch instead of looking fine.wctl --timeout <SECONDS>, or$WCTL_TIMEOUT, bounds how long any call waits for GNOME Shell to reply. The default is still 25 s, which is far too long for a command bound to a key.
You must act on
- Upgrade the extension and wctl together.
Move,ResizeandMoveResizeno longer return a success flag; they raise a named D-Bus error instead, so an older wctl cannot read the new reply. On Wayland the extension needs a logout to take effect —wctl version --jsontells you which side of that you are on. - Exit codes now say why a command failed: 2 not found, 3 refused (the frame is pinned by fullscreen, maximize or tiling), 4 timed out, 5 extension unusable. 1 remains the catch-all for usage errors, so a script that only tests for a non-zero status is unaffected.
Fixed
- A geometry command refused because the window was tiled now says so. It used to report "not found", because a bare success flag could not say which failure had happened and the guess could not see tiling at all.
Install
Extension:
gnome-extensions install window-control@carlo9890.github.io_v10.zipLog out and back in (Wayland), or press Alt+F2, type r, Enter (X11), then:
gnome-extensions enable window-control@carlo9890.github.iowctl:
curl -fsSL https://github.com/carlo9890/gnome-window-control/releases/download/v10/install-wctl.sh | bash