hyprwm / Hyprland

Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
https://hyprland.org
BSD 3-Clause "New" or "Revised" License
19.07k stars 793 forks source link

Separate windows from containers #87

Open Ashe opened 2 years ago

Ashe commented 2 years ago

Firstly, I wanted to congratulate you. Hyprland feels great when opening new windows and I can only imagine how it's going to feel in weeks, months, years!

You say on your README that you need testers / feedback, so here it is. I really hope this is useful as these are my reasons for clinging onto sway despite wanting a fresh window manager. Even though I wrote a fair bit of feedback, I really hope you don't take it personally as I still think the program is great, if anything I wrote a lot because I want to switch and I want to flag things that are important to myself and potentially others too!

FEEDBACK

My feedback might be taken the wrong way, but what I want from Hyprland is to be i3/sway, but nice-feeling and looking. Now I don't know if the development ethos is to branch off from i3/sway or to steal users from it, but my feedback can be summed up to 'it doesn't operate in the way I'd expect it to like in sway'.

The biggest thing for me is the idea of containers vs windows. In sway, I can specify that I want a container of windows stacked vertically or horizontally. By nesting these containers, I can make any formation I like quickly and efficiently. When making a tabbed layout, I can easily control which windows I want in the tabbed grouping, and which ones I do not. I can also traverse the hierarchy of containers and select an entire group so that I can move them around etc.

Another benefit i3/sway has is that when resizing a container, it's kind of like you're acting on the splits in-between windows:

image

If I hold the right mouse button on the left white window, I'd resize only that border to the left or right. Resizing any of the other windows will affect both the left/right horizotnal split, and the up/down vertical split. This example works fine in isolation in Hyprland, but because of the way containers are laid out, it's hard to know whether I'm going to resize the right 'edge' of a window. Many times when I resize, I actually am affecting the opposite edge and growing the window in the wrong direction, ruining the structures of my other containers. If I then try to resize those containers, that can have a knock on effect depending on their trees as well.

While resizing is largely fixed by intelligently recognising how we want to resize and which edge we want to grow/shrink, containers play a big part in this in the sense that it's hard to know who is the parent of what. Here's an example in sway of 3 windows, where the latter 2 are in their own container:

image

In Hyprland, this is how ALL windows feel. Rather than them all being in a common parent, it feels like they 'belong' to another window, but it's hard to know if A owns B or if B owns A, compounding the resizing issue. Since containers are at the core of i3 or sway, you know what owns what simply by how you instantiate your windows. You can also visualise where you're moving windows with the mouse in sway (I can't printscreen this sadly), which helps reorganise windows.

image

Here's how I WANT my windows to be - notice how the titlebar (that I enabled for debugging this) shows that the container has 3 windows inside it. This means that I can explicitly resize a child in the container, or the container itself. Here's why it matters when resizing:

In the first example, the last two windows are in their own group and occupy 50% of the space each. If I resize the split between the first and second window, I actually resize all three windows. The windows still share 50% of the space each, but since the space is growing they both widen in size.

In the second example, resizing the split between the first and second DOESN'T affect the third window, since I'm simply saying that the first window takes up less of the container, the middle window takes up more, and the last window is unchanged. This allows me to have my 3 column setup and have confidence in what I'm resizing in sway, and I find it really hard to manage my windows in Hyprland because of this.

IN GOOD NEWS

I really love how you handle workspaces. I still can't get a dynamic workspace system going in sway without relying on scripts. I really hate cluttering my scripts folder with things specific to my window manager to patch holes. I really like the ability to just make a new workspace on the fly and move things into it. While I can make new workspaces on the fly in sway, it's really difficult to actually move things into it since the workspace has to already exist in order to move things into it (unless I say 'move into workspace n'). You get top marks for this!

I also LOVE the animations and fadeins. It just feels like a more premium experience and I do value it!

vaxerski commented 2 years ago

Now I don't know if the development ethos is to branch off from i3/sway or to steal users from it (...)

Hyprland is not aiming to be a replacement to sway or i3. Sway and i3 are manual tilers, while Hyprland is a dynamic one. That pretty much makes them different from the get-go.

I can see how you want windows to operate. Although this might be added in the future as a separate layout, (doubt though) dwindle is by design a binary tree, so a container with 3 windows is absolutely not possible.

When resizing, your layout changes because each "container" is simply a node in a binary tree. The split ratio is a percentage that the first node takes. The rest is allocated to the second node. By resizing the parent node, the split ratio does not change, but since the physical dimensions of the parent changed, the pixel size will change.

Although a layout with a multi tree is possible to implement, it absolutely will not be soon, if ever. I understand some people love it for its predictability and programmability, but I personally hated i3's approach and found it way more confusing than helpful. It was the original kick for me to start Hypr.

Let me reiterate: Hyprland is not Sway, and is not trying to replace sway. Hyprland is a successor to popular dynamic TWMs (bspdwm, Hypr, dwm, xmonad) with compositors like compton or picom. Its aim is to provide a clean and smooth dynamically tiled experience.

Although that is the goal for now, my goals might change once Hyprland gets to the point of "it just works, pretty much with everything".

For now though, the top of the waitlist for a new layout is taken by master-stack. Before that though, see the todo list (projects tab)

Ashe commented 2 years ago

Thank you for your response and I'm sorry I didn't see it sooner!

I am so glad you have a clear picture of what you want Hyprland to be, and even though it doesn't fit my needs personally, I'm still very excited by the project and to see where it goes.

I have also used BSPWM in the past, and when I had 2 monitors BSPWM was a fun and easy window manager. I only went back to i3 then sway for tabbed containers, although pseudotiling is something I dearly miss. I can see the appeal of a binary tree and I'll be cheering you on :)

Thanks for your hard work :) I see you added low prio to the issue, but honestly since this isn't something that is in alignment with the project's goals, I wouldn't be upset if you just closed it entirely!

Good luck!