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
21.41k stars 899 forks source link

"fullscreen, 2" (ignore gaps) #7242

Open Vladimir-csp opened 2 months ago

Vladimir-csp commented 2 months ago

Description

Intermediate mode for fullscreen that ignores gaps, but keeps bar(s).

MahouShoujoMivutilde commented 2 months ago

Like fullscreen 1 +

master {
    no_gaps_when_only = 1 # single monocle, basically
}

dwindle {
    no_gaps_when_only = 1 # single monocle, basically
}

?

https://github.com/user-attachments/assets/f069b10a-b76f-44c6-8f48-1c38927c5a11

EDIT:

Oh, I see that you've tried it in another issue. So there is an option to do what you want, but presudotiling, which you also want, doesn't work when no_gaps_when_only is enabled. I'm pretty sure it ...used to work? Haven't used it in ages, tho.

Vladimir-csp commented 2 months ago

I'm moving in from sway and experimenting with everything. Sometimes the whole screen for a single window is way too much, but sometimes it is perfect and border is useless. TLDR what I want is to be able to switch on the fly between two states: 1. single tile on workspace is limited and has border, 2. single tile on workspace is maximized with no border.

Currently I'm using:

$HGAP = 200
# single window width limit for ws 1,2
workspace = r[1-2] w[t1], gapsout:0 $HGAP 0 $HGAP
workspace = r[1-2] w[g1], gapsout:0 $HGAP 0 $HGAP
# single window smart gaps emulation for ws 3-10
workspace = r[3-10] w[t1], border:0, decoration:0

I can tweak the gap with hyprctl keyword '$HGAP' N, i.e. from kanshi to keep the window size sane while hopping monitors (another potential feature request: setting gaps in reverse, by remaining area size. Would eliminate all the kanshi scripting hassle).

But this rule arrangement has downsides: switching from gapped single window to no gaps and back is not trivial, that is why I made different states on different workspaces. border:0, decoration:0 also strips borders from floating windows on that workspaces. And there is no "reverse smart gaps" like in sway.

fullscreen, 1 is a great feature though, it also very neatly replaces single group container with no extra shortcuts to manage. So I thought fullscreen, 2 ignoring the gaps and keeping bars would be perfect (and possibly also disabling borders, fullscreen, 3?).

Alternative features for these goals or in their general direction would be:

LDAP commented 2 months ago

Not sure if I understand what you try to achieve. Try this: Disable no_gaps_when_only and then use this binding:

bind = $mainMod, F, fullscreen, 1

and these rules:

workspace=f[0],rounding:false,bordersize:0,gapsout:0
workspace=f[1],rounding:false,bordersize:0,gapsout:0

which disable gaps if a window is fullscreened.

Vladimir-csp commented 2 months ago

Good idea!

$HGAP = 200
workspace = r[1-10] w[tv1] f[-1], gapsout:0 $HGAP 0 $HGAP
workspace = r[1-10] f[1], gapsout:0 0 0 0
windowrulev2 = noborder, fullscreen:1

(edit: optimized and fixed corner cases with group/tile mixes) Now single tiles or groups are contained, and I can maximize them dropping borders. I guess the initial request is is fulfilled with this construct. Downsides are: no floating windows while maximized, have to unmaximize to see any new windows.

Per-workspace dispatcher variant of no_gaps_when_only would be great.