List, move and tile windows from a script, a rules file or the keyboard. It works on Wayland, where wmctrl and xdotool reach only XWayland windows, and on X11. * Scripts: list every window with its ID, title, WM class, PID, workspace, monitor and geometry. Activate, move, resize, minimize, maximize, fullscreen, keep above, make sticky or close a window, move it to another workspace or monitor, or wait until a window opens. Use the wctl command-line client or any D-Bus client, such as gdbus. * Rules: a rule in ~/.config/gnome-window-control/rules.json places a matching window when it opens. The extension reads that file and never writes it. * Keyboard: Super+Ctrl and a numpad key tile the focused window on a 4x2 grid. You can rebind or unbind every shortcut in GSettings. No preferences window and no panel icon. When you disable the extension, the D-Bus interface, the rules and the shortcuts stop. IMPORTANT: the D-Bus interface has no access control. Any application in your session can read your window titles and control your windows. Do not enable the extension if that is not acceptable to you. wctl is a separate download and is not installed with this extension. Get it and the full documentation from the project page.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-A-004 warning
extension files should not contain excessive ungated console logging
File contains 21 ungated console.log/warn/error calls (threshold: 5).
extension.js:1179
console.log(`[${this.metadata.name}] Enabling extension...`)
extension.js:1184
console.log(`[${this.metadata.name}] D-Bus service registered at ${DBUS_OBJECT_PATH}`)
extension.js:1194
console.log(`[${this.metadata.name}] Extension enabled`)
extension.js:1198
console.log(`[${this.metadata.name}] Disabling extension...`)
extension.js:1212
console.log(`[${this.metadata.name}] D-Bus service unregistered`)
extension.js:1218
console.log(`[${this.metadata.name}] Extension disabled`)
extension.js:253
console.error(`[Window Control] ${label}() error: ${e.message}`)
extension.js:320
console.error(`[Window Control] ${label}() error: ${e.message}`)
extension.js:343
console.error(`[Window Control] ${label} error: ${e.message}`)
extension.js:372
console.error(`[Window Control] List() error: ${e.message}`)
EGO-A-004 warning
extension files should not contain excessive ungated console logging
File contains 8 ungated console.log/warn/error calls (threshold: 5).
rules.js:142
console.log(`[Window Control] no ${RULES_FILE}; window rules off`)
rules.js:155
console.log(`[Window Control] ${RULES_FILE}: ${this._rules.length} rule(s) loaded`)
rules.js:93
console.error(`[Window Control] window rules disabled: ${e.message}`)
rules.js:145
console.error(`[Window Control] ${RULES_FILE}: cannot read: ${e.message}`)
rules.js:259
console.error(`[Window Control] rules: initial configuration: ${e.message}`)
rules.js:340
console.error(`[Window Control] rules[${index}] -> ${id}: ${e.message}`)
rules.js:356
console.error(`[Window Control] rules[${index}] -> ${id}: ${e.message}`)
rules.js:158
console.warn(`[Window Control] ${RULES_FILE}: ${e.message}; window rules off`)
EGO-C49-003 error
extensions targeting GNOME 49 must not call maximize or unmaximize with Meta.MaximizeFlags
This extension explicitly targets GNOME Shell 49 but still passes `Meta.MaximizeFlags` to `maximize()` or `unmaximize()`.
window-helpers.js:33
win.maximize(Meta.MaximizeFlags.BOTH)
window-helpers.js:41
win.unmaximize(Meta.MaximizeFlags.BOTH)
EGO-C49-004 error
extensions targeting GNOME 49 must not call Meta.Window.get_maximized
This extension explicitly targets GNOME Shell 49 but still calls removed `Meta.Window.get_maximized()`.
window-helpers.js:22
win.get_maximized()
EGO-L-005 warning
owned object references should be released in disable()
Owned references that are cleaned up in `disable()` should also be released with `null` or `undefined`.
extension.js:112
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(
DBUS_INTERFACE_INFO,
this
)
| Version | Status |
|---|---|
| 19 (7) | Active |
| 18 (6) | Rejected |
| 17 (5) | Rejected |
| 16 (4) | Active |
| 15 (3) | Rejected |
| 14 (2) | Rejected |
| 11 (1) | Active |