25

Power Toys is an open source toolbox that contains a lot of very useful tools for Windows 10+ and I use it on a daily basis at work. One of them though I really wish I could use in my personal system, which is an Ubuntu 20.04.4. That tool is called FancyZones.

You can follow the link for a detailed explanation of all features of it, but in abstract, FancyZones is a tool for zoning your screen area, so you can place windows in these zones. The way it works is, I drag the window with left mouse button down and while at that, I right click, so the zones will show up. When I let go of left mouse button, the window will fill the zone, or I can cancel that by right clicking again while still dragging.

The zones should be fully customizable and it should be possible to change between zoning layouts per monitor through a keyboard shortcut.

For example, I have the laptop monitor and an ultra-wide monitor. The laptop monitor has a layout with 4 zones one on each corner, while the ultra-wide monitor has 3 layouts, 1 is the same as the the laptop's, 2 is 4 zones side by side and 3 is a focused space on the left a little under what a normal monitor would have and the rest to the right is the unfocused content. This one also has another zone on top of it emulating a 720p size monitor for when I screen-share, so I can share just a window with the perfect proportion and size, which means people can enjoy full-screen without having to zoom to understand what I'm sharing

It's not a requirement, but if possible, I would like for it to be available within Ubuntu Software app

muru
  • 207,228

4 Answers4

34

There is the Tiling Assistant extension (see this post for how to install GNOME Shell extensions: How to install GNOME Shell extensions in Ubuntu 22.04 LTS?). It's an awesome extension that greatly expands the default GNOME tiling experience and is extremely customizable. The extension offers basic quarter tiling, as well as Windows-like tiling, both by dragging a window with the mouse and using customizable keyboard shortcuts. By default the options menu of the extension has only two tabs: General and Keybindings, shown in the following screenshots:

enter image description here

enter image description here

However, the real power of the extension and what is of more interest to you lies in a hidden tab. This tab can be found if you click the lamp icon on the top left of the extension window, select Advanced..., and toggle Advanced / Experimental Settings on:

enter image description here

Then you'll also have access to the Layouts tab:

enter image description here

The Layouts tab has a list of predefined custom layouts that you can use and also lets you add your own custom layouts. To tile a window to a custom layout, you drag the window with your mouse while holding the Alt key. Then a preview of the layout comes up and you drop the window where you want.

To change the layout you can use the Ctrl+Alt+O shortcut, which opens a pop-up window that lets you select another layout.

To add a custom layout:

You define a layout's rectangles by entering their x and y coordinate as well as their width and height into a text entry separated by --. They are floating point values and can range from 0 to 1. The point (0,0) represents the top-left of your workspace and (1,1) the bottom-right. A loopType is set by appending --h or --v to the text entry for a horizontal and a vertical loop respectively. You can attach an app by using the Add Button to the right of a text entry. It acts like a toggle. If you already attached an app to it, clicking it again, will remove the app.

For example, to add a 3 columns layout, you click the + button at the bottom of the Layouts tab and add the following (screenshot from the project's User Guide linked below):

enter image description here

You can find more in the extension's User Guide.

Here is how three windows look on my desktop using a customized 3-Columns layout with:

  • Rect 0: 0--0--0.25--1
  • Rect 1: 0.25--0--0.5--1
  • Rect 2: 0.75--0--0.25--1

final desktop with custom layout

5

I tried a handful of tiling solutions and put my notes here: https://gist.github.com/bmaupin/5ebd4d7fd52f8911e14fa55cd58aee2d

Here are my current recommendations in order:

Tiling Shell

I'm currently using Tiling Shell. Out of all the tiling extensions, it seems to me to be most similar to FancyZones. It works really well out of the box, with useful default layouts. Ctrl works out of the box to snap to a zone, and Ctrl plus Alt works to span multiple zones.

The only con I found is that if you want to configure more than just the layouts (e.g. remove the gap between zones, disable the snap assistant popup), you have to do that through the Gnome Extension Manager.

gSnap

gSnap was what I used previously. It's another great extension and also works well, although I don't care as much for its default settings, and on rare occasions the functionality to snap to a zone would simply stop working on certain workspaces.

I did make a couple changes to make it function more like FancyZones:

  1. Click the tray icon > Settings

  2. I unchecked Show tabs. FancyZones doesn't have them and I really didn't like how much space they took up or how they sometimes covered up parts of the screen I was trying to see. Plus there are plenty of other ways to change windows (from the app icon in the dock, Alt+Tab, etc).

  3. I checked Hold CTRL to snap windows. FancyZones doesn't snap windows to zones by default either. The default behaviour of gSnap is to snap every window to a zone, which I didn't like. Sometimes I don't want to move a window to a zone, especially smaller windows. And when a new window popped up (e.g. a password prompt) it would snap it to a zone, spreading the UI elements out to places where I wasn't expecting them to be.

You can also further imitate FancyZones by setting the margins in the gSnap settings, although I didn't do this.

Tiling Assistant

I tried Tiling Assistant and it's not my first choice. It seems just as powerful and customisable as Tiling Shell (and more so than gSnap) but with a less intuitive UX. Also, layout support in Tiling Assistant is still labeled as "experimental."

bmaupin
  • 5,371
2

Pygrid has been my goto for years

dez93_2000
  • 1,241
2

I just ran into Linux-PowerToys and it looks very similar to Windows PowerToys. You can create zones and drag apps to the zone just similar to Windows PowerToys.

daniekpo
  • 121
  • 2