baskerville / bspwm

A tiling window manager based on binary space partitioning
BSD 2-Clause "Simplified" License
7.79k stars 414 forks source link

i3 Style Tabs #970

Closed InvalidWaldo closed 3 years ago

InvalidWaldo commented 5 years ago

I don't know about others, but the only thing stopping me from switching to BSPWM full time, is the i3 style tabs.

While this is not an actual "issue" but a feature request. How difficult would it be to implement i3 style tabs into BSPWM?

cadr10 commented 5 years ago

Pretty sure bspwm limits itself to being just a window manager and only that. Many of the features that you have on other wm you have to manually craft here. You can probably do it with query and implement somewhere but why. If you want fanciness stick with i3 or even go for awesome.

mdutra commented 5 years ago

An alternative to tabs is to use the monocle layout and rofi to switch between windows.

Rofi includes, out of the box, a mode for selecting windows of the current desktop:

rofi -modi windowcd -show windowcd

Then you can use ctrl + n, ctrl + p or tab to select the window.

TheZoq2 commented 5 years ago

I wrote this a year or two ago which does pretty much what i3 stacks do, though it does it by resizing the windows. https://github.com/thezoq2/bspwmstackablewindows

alexherbo2 commented 5 years ago

@TheZoq2 Can you do a video on it?

TheZoq2 commented 5 years ago

There is one, it's a bit hidden, but check the demo link in the readme

-------- Original Message -------- On 29 Sep 2019, 18:12, Alex Leferry 2> wrote:

@TheZoq2 Can you do a video on it?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

alexherbo2 commented 5 years ago

The link is broken. I figured it out in the raw README.

https://gfycat.com/ScentedBackCrustacean

InvalidWaldo commented 5 years ago

Pretty sure bspwm limits itself to being just a window manager and only that. Many of the features that you have on other wm you have to manually craft here. You can probably do it with query and implement somewhere but why. If you want fanciness stick with i3 or even go for awesome.

@cadr10 Surprisingly enough, that's pretty unhelpful 😮. Do you get paid commission to throw people at competing projects that do not even seem to try to fulfill similar objectives or do you just take pleasure in random gatekeeping?

Either way, thanks @TheZoq2 looks like an interesting way of doing it, and seems to solve the problem at hand 😄

alexherbo2 commented 5 years ago

There is ways around to hack, but i3 tab style is not possible in bspwm by nature. For arranging windows, bspwm uses a binary tree (a container is limited to 2 windows), while i3 uses an n-ary tree (the number of windows in a container is not limited).

InvalidWaldo commented 5 years ago

I don't mind a hack solution, hence why I don't mind the proposed solution. Besides theoretically speaking, there are workaround to that issue as well. But as you said they'd be ways around to hack into it, instead of proper solutions, (at least the ones I was thinking of).

TheZoq2 commented 5 years ago

bspwm uses a binary tree (a container is limited to 2 windows), while i3 uses an n-ary tree (the number of windows in a container is not limited).

I don't really think this is a real problem. As my project shows, you can go from a binary tree to a list of n nodes that are children of a parent. Just traverse the tree in a depth first manner and add the leaves as you find them. Then you could just change the rendering of those nodes if they are in a stack.

I do agree that it doesn't seem to be in the scope of BSPWM itself though, as I don't think it does any rendering outside of windows and their borders. But that to me is a scope issue, not an internal representation issue

astier commented 4 years ago

Would love to have this feature. Also the only thing which holds me back from bspwm. However I think the name stacked is more appropriate than tabbed. What I basically need is to be able to stack windows on top of each other while having a second window or more beside the stack. Monocle is not sufficient because this would stack all windows on top of each other. I also don't agree that this is not the responsibility of a window manager like suggested by @cadr10 if this is not the responsibility of a wm to manage where windows are placed then who is responsible for that. By this logic monocle should also not exist in bspwm.

Btw I don't mean that I actually need tabs which I visually can see like in i3. I just want the ability to stack windows like in monocle. Its more like the deck-patch in dwm.

thugcee commented 4 years ago

Suckless Tabbed might be a solution: https://tools.suckless.org/tabbed/

It works with programs supporting XEmbed. I'm using it with Alacritty.

astier commented 4 years ago

Suckless Tabbed might be a solution: https://tools.suckless.org/tabbed/

@thugcee its not because it can only stack windows of the same program. It can not mix different programs. Correct me if I'm wrong.

thugcee commented 4 years ago

Suckless Tabbed might be a solution: https://tools.suckless.org/tabbed/

@thugcee its not because it can only stack windows of the same program. It can not mix different programs. Correct me if I'm wrong.

You can mix different programs. Any program implementing XEmbed can be attached.

mdutra commented 4 years ago

Here's a video on bspwm + tabbed: https://youtu.be/tx_dtIijpco

astier commented 4 years ago

@thugcee You are right. Last time I used it this somehow didn't work.

shiro commented 4 years ago

Would love to have this feature. Also the only thing which holds me back from bspwm. However I think the name stacked is more appropriate than tabbed. What I basically need is to be able to stack windows on top of each other while having a second window or more beside the stack. Monocle is not sufficient because this would stack all windows on top of each other. I also don't agree that this is not the responsibility of a window manager like suggested by @cadr10 if this is not the responsibility of a wm to manage where windows are placed then who is responsible for that. By this logic monocle should also not exist in bspwm.

Btw I don't mean that I actually need tabs which I visually can see like in i3. I just want the ability to stack windows like in monocle. Its more like the deck-patch in dwm.

I also have the same exact use case in i3, can't live without it. "Stacking" is not possible with tabbed as far as I know (pls correct me if I'm wrong).

thugcee commented 4 years ago

This is my integration of tabbed with BSPWM: https://gist.github.com/thugcee/87158c313070c666efd43c0a64a2a2e7 It allows seamless joining any neighbouring windows into a tabbed instance (spawned on demand) and separating them back (tabbed closed on last window removed).

copper4eva commented 4 years ago

I wish more window managers had this function built in. It would be great if bspwm did.

isentropic commented 3 years ago

I suggest to use https://github.com/alnj/polywins

marcospb19 commented 3 years ago

"If this is not the responsibility of a wm to manage where windows are placed then who is responsible for that."

Yep, that's the only thing that has kept me away from bspwm. I don't really see a reason for have this to not be implemented. I find the workarounds to this problem to look so hacky that I don't wanna use them, it's kinda sad ngl.

alfiedotwtf commented 3 years ago

I don't really see a reason to have this not implemented yet.

We look forward to your pull request

marcospb19 commented 3 years ago

Oh, so you're saying that bspwm is running out of contributors? Well, I didn't knew that :(. I thought that the team don't wanted this to be in, not that they needed help doing it, cause I thought it was simple.

InvalidWaldo commented 3 years ago

@alfiedotwtf next time you want to be this "helpful":

  1. Open a text editor of choice.
  2. Type your message in.
  3. Keep it to yourself.

You'll save us all time and energy, especially given that life is currently stressful for many many people around the world.

Moving on from that, I'm surprised this is still getting visibility/responses. My use case has definitely changed and this is no longer an issue for me, but glad to see people have contributed different solutions/alternatives.

Thank you all for that 😄