Close open windows gracefully and save them as a session. And you can restore them when necessary manually or automatically at startup. Most importantly, it supports both X11 and Wayland! This is a fork of Another Window Session Manager by nlpsuge. Main features: - Restore the previous session at startup. disabled by default. - Save running apps and windows automatically when necessary, this will be used to restore the previous session at startup. - Close running apps and windows automatically before Log Out, Restart, Power Off. disabled by default. - Close running windows gracefully - Close apps with multiple windows gracefully via ydotool so you don't lose sessions of this app (See also: How to make Close by rules work) - Save running apps and windows manually - Restore a selected session at startup (See also: #9). disabled by default. - Restore a saved session manually - Restore window state, including Always on Top, Always on Visible Workspace and maximization - Restore window workspace, size and position - Restore 2 column window tiling - Stash all supported window states so that those states will be restored after gnome shell restarts via Alt+F2 -> r or killall -3 gnome-shell. - Move windows to their own workspace according to a saved session - Support multi-monitor - Remove saved session to trash - Search saved session by the session name fuzzily Please report issues on Github.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
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()`.
moveSession.js:361
metaWindow.get_maximized()
moveSession.js:399
metaWindow.get_maximized()
saveSession.js:262
metaWindow.get_maximized()
EGO-X-004 warning
extensions should avoid synchronous file IO in shell code
Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.
ui/autoclose.js:551
GLib.file_get_contents(`/proc/${pid}/stat`)
| Version | Status |
|---|---|
| 60 (7) | Unreviewed |
| 60 (6) | Rejected |
| 5 | Rejected |
| 4 | Rejected |
| 3 | Rejected |
| 2 | Rejected |
| 1 | Rejected |
1. `prefsUtils.js` name is misleading for the filename that is going to be imported in the shell process. [Extension Best Practices Guidelines: Process Isolation](https://gjs.guide/extensions/review-guidelines/best-practices.html#process-isolation) A better name for that file would be `settingsUtils.js` 2. Timeout should be removed on destroy and before creating a new one: - line 189 `moveSession.js` - line 240 `ui/autostart.js` - line 242 `utils/tooltip.js` [EGO Review Guidelines: Timeout](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#remove-main-loop-sources) 3. Remove unnecessary try catch wrappers. disconnect doesn't need that: [Extension Best Practices Guidelines: Unnecessary try-catch](https://gjs.guide/extensions/review-guidelines/best-practices.html#avoid-unnecessary-try-catch-wrappers) 4. What is the use case of `utils/signal.js`? Please use `connectObject()` and `disconnectObject()`. You are doing it in some places then suddenly reverting back to `connect()` and `disconnect()` with custom made signal tracker. To add that, line 164-178 `windowTilingSupport.js` is another example of that. It's happening all over the package not only the files mentioned. 5. What are you exactly spawn commanding in line 235 `restoreSession.js`? Cannot be traced back easily. 6. Remove line 226-227, 717-718 `ui/autoclose.js`. That's selective disable. 7. Use aysnc for reading file content since you are in shell process (line 550 `ui/autoclose.js`): [Gio.File.load_contents_async](https://gjs-docs.gnome.org/gio20~2.0/gio.file#method-load_contents_async) 8. What's the reason for using `GLib.Source.set_name_by_id()` (line 420 `ui/autostart.js`)? 9. Not needed. line 136-148 `utils/WindowPicker.js`. The main disable isn't async. 10. The comment actually saying `Äî expected on first enable()` (line 147 `utils/WindowPicker.js`). Why? 11. What's the reason for GNOME 3 checks (line 84 `utils/fileUtils.js`)? This package is not for GNOME Shell 3.x. 12. That's not const and that shouldn't all CAPS (line 242 `utils/tooltip.js`). 13. Remove `template/launch-app.sh`. That shouldn't be used in an extension. 14. What's the reason for using `utils/function.js`? I don't see any reason for that module. 15. You should actually unsubscribe on window close request (line 131 `prefsWindowPickableEntry.js`).