Tiling window manager with a twist! PaperWM is a Gnome Shell extension which provides scrollable tiling of windows and per monitor workspaces. It's inspired by paper notebooks and tiling window managers. Please see our github page to report issues, understand features, and learn how to configure PaperWM to your liking.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
Version | Status |
---|---|
47.1.0 (135) | Active |
47.1.0 (134) | Active |
47.0.0 (133) | Active |
46.17.1 (132) | Active |
46.17.0 (131) | Active |
46.16.1 (130) | Active |
46.16.0 (129) | Rejected |
46.15.1 (128) | Active |
46.15.0 (127) | Active |
46.14.0 (126) | Active |
46.13.8 (125) | Active |
46.13.7 (124) | Active |
46.13.6 (123) | Active |
46.13.5 (122) | Active |
46.13.4 (121) | Active |
46.13.3 (120) | Inactive |
46.13.2 (119) | Active |
46.13.1 (118) | Active |
46.13.0 (117) | Active |
46.12.1 (116) | Active |
46.12.0 (115) | Active |
46.11.2 (114) | Active |
46.11.1 (113) | Active |
46.10.2 (112) | Active |
46.10.1 (111) | Active |
46.10.0 (110) | Rejected |
46.9.1 (109) | Active |
46.9.0 (108) | Active |
46.8.1 (107) | Active |
46.8.0 (106) | Rejected |
46.7.0 (105) | Active |
46.6.7 (104) | Active |
46.6.6 (103) | Active |
46.6.5 (102) | Active |
44.18.0 (101) | Active |
46.6.4 (100) | Active |
46.6.3 (99) | Active |
46.6.2 (98) | Rejected |
46.6.1 (97) | Rejected |
46.6.0 (96) | Active |
46.5.1 (95) | Active |
46.5.0 (94) | Rejected |
46.4.1 (93) | Active |
46.4.0 (92) | Active |
46.3.2 (91) | Active |
46.3.1 (90) | Active |
46.3.0 (89) | Active |
46.2.0 (88) | Active |
46.1.0 (87) | Active |
46.0.0 (86) | Active |
46.0.0 (85) | Active |
45.14.0 (84) | Inactive |
45.13.0 (83) | Inactive |
45.12.2 (82) | Inactive |
45.12.1 (81) | Inactive |
45.12.0 (80) | Inactive |
45.11.0 (79) | Inactive |
45.10.1 (78) | Inactive |
45.10.0 (77) | Inactive |
45.9.2 (76) | Inactive |
45.9.1 (75) | Inactive |
45.9.0 (74) | Inactive |
45.8.1 (73) | Inactive |
45.8.0 (72) | Inactive |
44.17.0 (71) | Active |
45.7.0 (70) | Inactive |
44.16.0 (69) | Inactive |
45.6.0 (68) | Inactive |
44.15.2 (67) | Inactive |
45.5.0 (66) | Inactive |
45.4.2 (65) | Inactive |
44.15.1 (64) | Inactive |
44.15.0 (63) | Inactive |
45.4.1 (62) | Inactive |
44.14.0 (61) | Inactive |
45.4.0 (60) | Inactive |
59 | Inactive |
58 | Rejected |
57 | Inactive |
56 | Inactive |
55 | Inactive |
54 | Inactive |
53 | Inactive |
52 | Inactive |
51 | Inactive |
50 | Inactive |
49 | Inactive |
48 | Inactive |
47 | Inactive |
46 | Inactive |
45 | Inactive |
44 | Inactive |
43 | Rejected |
42 | Rejected |
41 | Inactive |
40 | Inactive |
39 | Inactive |
38 | Inactive |
37 | Inactive |
36 | Inactive |
35 | Inactive |
34 | Inactive |
33 | Inactive |
32 | Inactive |
31 | Inactive |
30 | Inactive |
29 | Inactive |
28 | Inactive |
27 | Inactive |
26 | Inactive |
25 | Inactive |
24 | Inactive |
23 | Inactive |
22 | Inactive |
21 | Inactive |
20 | Inactive |
19 | Inactive |
18 | Rejected |
17 | Inactive |
16 | Inactive |
15 | Inactive |
14 | Inactive |
13 | Inactive |
12 | Inactive |
11 | Inactive |
10 | Inactive |
9 | Inactive |
8 | Inactive |
7 | Inactive |
6 | Rejected |
5 | Inactive |
4 | Rejected |
3 | Rejected |
2 | Rejected |
1 | Rejected |
Just noticed I posted the change log notes (addressing the previous issues) to the old review. Re-posting here for convenience: - [x] **1 DONE**. Good pickup and call here - was a bit of a mess. Including a very interesting hard-coding of the `version` var (was written back before Gnome 40). In any case, the first commit here was fixing that and removing old/deprecated code that was for gnome 3.xx. - [x] **2 DONE**. `sessionModes` removed from metadata.json (not needed in PaperWM). Also improved the `safeCall` logging to only log if called method exists in module. - [x] **3 DONE**. I'm not sure of the original reason for setting `Extension` like it was doing. Replaced with a much simpler `var Extension = imports.misc.extensionUtils.getCurrentExtension();`. - [x] **4 DONE**. Removed `convenience.js` as it duplicates current Gnome ExtensionUtils and refactored modules that used it . - [x] **5 DONE**. Removed unneeded check. - [x] **6 DONE.**. did full review of all `mainloop.timeout_add` instances - most were actually (intended) as once off calls (e.g. destroy after first handler execution) - changed these to destroy after handler function execution. - [x] **7 DONE**. Went through and cleaned up `imports.xxx` references (and moving them to top where possible). - [x] **8 DONE**. We were actually delegating the animation through `utils.tweener`... which was actually using `Widget.ease(...)`. This was basically because it was easier to do this when we switched to `ease`. However, this is quite confusing for users/reviews. I've taken the opportunity now to rename `Tweener.addTween(...)` to `Ease.addEase(...)` etc. - [x] **9 DONE** (finally!). This was a very good point in the review. Polyfilling in functions on global gnome objects isn't the best approach here. I've now replaced the polyfills with backwards-compatible utility functions which is a cleaner/safer/better approach and should make this much easier to maintain going forward. - [x] **10 DONE**. Replaced the use of `print(...)` across PaperWM. - [x] **11 DONE**. Moved global scope creation of instances to `enable` in `Kludges.sj`, `liveAltTab.js`, `prefs.js`, `tiling.js`. Also cleaned up and removed unneeded imports dependencies and improved formatting. - [x] **12 DONE**. Hmm - we don't see an issue with importing Gtk and using accelerator_parse etc. But we have cleaned up and removed references to Gtk where not needed. - [x] **13 DONE**. We've removed the hot corner overriding/disabling from PaperWM. This was largely superfluous since hot corner works fine in PaperWM, and if users want to disable it they can do so via the usual gnome setting. Having two functions that disable hot corner (one in gnome and one in PaperWM) seems superfluous. - [x] **14 DONE**. Removed unneeded import in `minimap.js`. - [x] **15 DONE**. `destroy` should not call `dismissDispatcher` since `dismissDispatcher` calls `destroy`... leading to an infinite loop (recursion). - [x] **16 DONE**. All `log(...)` lines reviewed and removed superfluous logging; - [x] **17 DONE**. Lower-cased PaperWM schema id values and recompiled schema. - [x] **18 DONE**. Refactored to NOT call `setSchemas()` on Settings `init` (is now called on `enable`). - [x] **19 DONE**. nulled out vars (that we missed). Good pickup! - [x] **20 DONE**. Now untracking on `destroy()`. - [x] **21 DONE**. Refactored StackOverlay class - added proper destroy method and now removePreview on destroy. - [x] **22 DONE**. Timeouts are now oneshot (remove/destroy timeout after function callback). - [x] **23 DONE**. Added missing semicolons and other cleanup in `virtTiling.js`. - [x] **24 DONE**. Now using `add_style_class_name` and `remove_style_class_name` to not run over other extension styles. - [x] **25 DONE**. Removed Gdk import from Tiling.js. - [x] **26 DONE**. Removed module self reference from `keybindings.js` and `tiling.js`. - [x] **27 DONE**. Replaced `Gdk.Keymap` (which isn't available in Gnome 40+) with `Clutter.get_default_backend().get_default_seat().get_keymap()` and hence removed `Gdk` import from `keybindings.js`. Haven't been able to remove `Gtk` since we need `accelerator_parse` from `Gtk`.
Ah, so, in further testing it turns out that PaperWM definitely does need session mode `unlock-dialog`: **Justification:** PaperWM requires session mode `unlock-dialog` to maintain multi-monitor tiling layouts when locking/unlocking Gnome. Without this, tiled windows can move to different monitors on gnome unlock, which severely impacts/destroys user workflows and window placements. JustPerfection, is there somewhere I add a note for this justification? (in the extension somewhere?). I'm planning on submitting another version with this change to `metadata.json` - should I just submit this now, or would you prefer to finish a review of this version first?