GithubHelp home page GithubHelp logo

baskerville / bspwm Goto Github PK

View Code? Open in Web Editor NEW
7.5K 134.0 420.0 3.16 MB

A tiling window manager based on binary space partitioning

License: BSD 2-Clause "Simplified" License

C 97.45% Shell 1.89% Makefile 0.66%

bspwm's Introduction

Description

bspwm is a tiling window manager that represents windows as the leaves of a full binary tree.

It only responds to X events, and the messages it receives on a dedicated socket.

bspc is a program that writes messages on bspwm's socket.

bspwm doesn't handle any keyboard or pointer inputs: a third party program (e.g. sxhkd) is needed in order to translate keyboard and pointer events to bspc invocations.

The outlined architecture is the following:

        PROCESS          SOCKET
sxhkd  -------->  bspc  <------>  bspwm

Configuration

The default configuration file is $XDG_CONFIG_HOME/bspwm/bspwmrc: this is simply a shell script that calls bspc.

An argument is passed to that script to indicate whether is was executed after a restart ($1 -gt 0) or not ($1 -eq 0).

Keyboard and pointer bindings are defined with sxhkd.

Example configuration files can be found in the examples directory.

Monitors, desktops and windows

bspwm holds a list of monitors.

A monitor is just a rectangle that contains desktops.

A desktop is just a pointer to a tree.

Monitors only show the tree of one desktop at a time (their focused desktop).

The tree is a partition of a monitor's rectangle into smaller rectangular regions.

Each node in a tree either has zero or two children.

Each internal node is responsible for splitting a rectangle in half.

A split is defined by two parameters: the type (horizontal or vertical) and the ratio (a real number r such that 0 < r < 1).

Each leaf node holds exactly one window.

Insertion modes

When bspwm receives a new window, it inserts it into a window tree at the specified insertion point (a leaf) using the insertion mode specified for that insertion point.

The insertion mode tells bspwm how it should alter the tree in order to insert new windows on a given insertion point.

By default the insertion point is the focused window and its insertion mode is automatic.

Manual mode

The user can specify a region in the insertion point where the next new window should appear by sending a node -p|--presel-dir DIR message to bspwm.

The DIR argument allows to specify how the insertion point should be split (horizontally or vertically) and if the new window should be the first or the second child of the new internal node (the insertion point will become its brother).

After doing so the insertion point goes into manual mode.

Let's consider the following scenario:

            a                          a                          a
           / \                        / \                        / \
          1   b         --->         c   b         --->         c   b
          ^  / \                    / \ / \                    / \ / \
            2   3                  4  1 2  3                  d  1 2  3
                                   ^                         / \
                                                            5   4
                                                            ^

+-----------------------+  +-----------------------+  +-----------------------+
|           |           |  |           |           |  |     |     |           |
|           |     2     |  |     4     |     2     |  |  5  |  4  |     2     |
|           |           |  |     ^     |           |  |  ^  |     |           |
|     1     |-----------|  |-----------|-----------|  |-----------|-----------|
|     ^     |           |  |           |           |  |           |           |
|           |     3     |  |     1     |     3     |  |     1     |     3     |
|           |           |  |           |           |  |           |           |
+-----------------------+  +-----------------------+  +-----------------------+

            X                          Y                          Z 

In state X, the insertion point is 1.

We send the following message to bspwm: node -p north.

Then add a new window: 4, this leads to state Y: the new internal node, c becomes a's first child.

Finally we send another message: node -p west and add window 5.

The ratio of the preselection (that ends up being the ratio of the split of the new internal node) can be changed with the node -o|--presel-ratio message.

Automatic mode

The automatic mode, as opposed to the manual mode, doesn't require any user choice. The way the new window is inserted is determined by the value of the automatic scheme and the initial polarity settings.

Longest side scheme

When the value of the automatic scheme is longest_side, the window will be attached as if the insertion point was in manual mode and the split direction was chosen based on the dimensions of the tiling rectangle and the initial polarity.

Let's consider the following scenario, where the initial polarity is set to second_child:

             1                          a                          a
             ^                         / \                        / \
                         --->         1   2         --->         1   b
                                          ^                         / \
                                                                   2   3
                                                                       ^

 +-----------------------+  +-----------------------+  +-----------------------+
 |                       |  |           |           |  |           |           |
 |                       |  |           |           |  |           |     2     |
 |                       |  |           |           |  |           |           |
 |           1           |  |     1     |     2     |  |     1     |-----------|
 |           ^           |  |           |     ^     |  |           |           |
 |                       |  |           |           |  |           |     3     |
 |                       |  |           |           |  |           |     ^     |
 +-----------------------+  +-----------------------+  +-----------------------+

             X                          Y                          Z

In state X, a new window is added.

Since 1 is wide, it gets split vertically and 2 is added as a's second child given the initial polarity.

This leads to Y where we insert window 3. 2 is tall and is therefore split horizontally. 3 is once again added as b's second child.

Alternate scheme

When the value of the automatic scheme is alternate, the window will be attached as if the insertion point was in manual mode and the split direction was chosen based on the split type of the insertion point's parent and the initial polarity. If the parent is split horizontally, the insertion point will be split vertically and vice versa.

Spiral scheme

When the value of the automatic scheme is spiral, the window will take the space of the insertion point.

Let's dive into the details with the following scenario:

             a                          a                          a
            / \                        / \                        / \
           1   b         --->         1   c         --->         1   d
              / \                        / \                        / \
             2   3                      4   b                      5   c
             ^                          ^  / \                     ^  / \
                                          3   2                      b   4
                                                                    / \
                                                                   3   2

 +-----------------------+  +-----------------------+  +-----------------------+
 |           |           |  |           |           |  |           |           |
 |           |     2     |  |           |     4     |  |           |     5     |
 |           |     ^     |  |           |     ^     |  |           |     ^     |
 |     1     |-----------|  |     1     |-----------|  |     1     |-----------|
 |           |           |  |           |     |     |  |           |  3  |     |
 |           |     3     |  |           |  3  |  2  |  |           |-----|  4  |
 |           |           |  |           |     |     |  |           |  2  |     |
 +-----------------------+  +-----------------------+  +-----------------------+

             X                          Y                          Z

In state X, the insertion point, 2 is in automatic mode.

When we add a new window, 4, the whole tree rooted at b is reattached, as the second child of a new internal node, c.

The splitting parameters of b (type: horizontal, ratio: ½) are copied to c and b is rotated by 90° clockwise.

The tiling rectangle of 4 in state Y is equal to the tiling rectangle of 2 in state X.

Then the insertion of 5, with 4 as insertion point, leads to Z.

The spiral automatic scheme generates window spirals that rotate clockwise (resp. anti-clockwise) if the insertion point is the first (resp. second) child of its parent.

Supported protocols and standards

  • The RandR and Xinerama protocols.
  • A subset of the EWMH and ICCCM standards.

Community

Want to get in touch with other bspwm users or you need help? Join us on our:

bspwm's People

Contributors

andrewsmike avatar baskerville avatar c00kiemon5ter avatar dannycolin avatar drike avatar emanuele6 avatar helvethor avatar ideasman42 avatar jaagr avatar jvvv avatar mranno avatar msteen avatar mvollrath avatar mynameiscosmo avatar neeasade avatar nfnty avatar odnh avatar olmokramer avatar quite avatar rye761 avatar seerlite avatar sjtio avatar stebalien avatar stoeckmann avatar svenstaro avatar thomasadam avatar thwischm avatar vrakfall avatar xaverh avatar ykxvyxzi4obyikk7f7bk6cq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bspwm's Issues

configurable grabmod key

Hello,

My keyboard does not have a Mod4 button (windows logo key), so I would like to use Mod1 for mouse-related shortcuts instead. In the wmii window manager, there was a "grabmod" setting that let people configure this.

Thanks for your consideration.

Dependency on xcb-cursor is too new; breaks any system != ArchLinux

Hi,

The changes to bspwm to support changing the XCursor for resizing uses xcb-cursor, but that is absolutely new and not found on any system that I can tell except ArchLinux. See:

http://lists.x.org/archives/xcb/2013-January/008097.html

This currently means I am unable to compile or use bspwm on FreeBSD or any other system.

Perhaps you should consider using standard XCursor techniques until XCB have finalised the API a bit? Or just revert that feature for now?

-- Thomas Adam

Move/Resize while tiled

The ability to move/resize windows without floating them (as in awesome) would be really useful (for someone coming from awesome). Moving a tiled window would swap it with the window into which it was dragged. Resizing a tiled window would push/pull the fences along the nearest edge/corner (based on the initial mouse position).

PyCharm renders as a blank window

Running Pycharm 2.7.3 results in a blank window. The controls/widgets in the window are still there, because I can click around and activate them (menus, etc are visible when activated), but the main window is blank.

PyCharm is a Python IDE by JetBrains. If you'd like to see if you can reproduce this issue, you can download a trial version of PyCharm.

My environment:

bspwm (1b5b633)
Oracle Java 1.7.0_25-b15
Ubuntu 13.04

segmentation fault (core dumped)

when i look at bspwm.core with gdb it says:

#0  0x280b3fc4 in xcb_ewmh_set_supporting_wm_check ()
    from /usr/local/lib/libxcb-ewmh.so.1

segfault with "bspc desktop -m next"

I've just upgraded bspwm-git and updated my sxhkd config. I incorrectly set the hoykey to move a window to the other monitor as "bspc desktop -m next", and it segfaults. I realise now what I'm looking for is actually "bspc window -m next", but apparently moving a whole desktop should be possible also, so here's a bug report with journalctl log.

Jul 27 02:32:46 silver.local kernel: bspwm[2644]: segfault at 160 ip 0000000000404618 sp 00007fff621a2488 error 4 in bspwm[400000+10000]
Jul 27 02:32:46 silver.local systemd-coredump[3489]: Process 2644 (bspwm) dumped core.
Jul 27 02:32:46 silver.local systemd-logind[371]: Removed session 1.
Jul 27 02:32:46 silver.local systemd[1]: Stopping Session 1 of user milk.
Jul 27 02:32:46 silver.local systemd[1]: Stopping User Manager for 1000...
Jul 27 02:32:46 silver.local slim[379]: pam_unix(slim:session): session closed for user milk
Jul 27 02:32:46 silver.local su[2923]: pam_unix(su-l:session): session closed for user root
Jul 27 02:32:46 silver.local slim[379]: The server closed the connection.
Jul 27 02:32:46 silver.local slim[379]: xfce4-panel: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.
Jul 27 02:32:46 silver.local slim[379]: urxvt: X connection to ':0.0' broken, unable to recover, exiting.
Jul 27 02:32:46 silver.local slim[379]: Using method `randr'.
Jul 27 02:32:46 silver.local systemd[486]: Stopping Default.
Jul 27 02:32:46 silver.local systemd[486]: Stopped target Default.
Jul 27 02:32:46 silver.local systemd[486]: Starting Shutdown.
Jul 27 02:32:46 silver.local systemd[486]: Reached target Shutdown.
Jul 27 02:32:46 silver.local systemd[486]: Starting Exit the Session...
Jul 27 02:32:47 silver.local systemd[1]: Stopped User Manager for 1000.

Thanks for your time.

focus_follows_mouse should not hide floating windows

Hello,

When the focus_follows_mouse setting is enabled and there are floating windows, moving the mouse pointer onto a non-floating window causes overlapping floating windows to become obscured.

Please change focus_follows_mouse so that non-floating windows never obscure floating windows. However, note that it's acceptable for floating windows to obscure other floating windows.

Thanks for your consideration. 😺

startx results in a segfault

bspwm stopped working on my workstation as of 2c36390.

startx fails with the following in /var/log/syslog:

Sep 23 20:28:54 workstation acpid: client connected from 4092[0:0]
Sep 23 20:28:54 workstation acpid: 1 client rule loaded
Sep 23 20:28:55 workstation kernel: [  107.050820] NVRM: GPU at 0000:01:00: GPU-3736b905-88ce-b01a-e7f9-3e55a1fffb4c
Sep 23 20:28:55 workstation acpid: client connected from 4092[0:0]
Sep 23 20:28:55 workstation acpid: 1 client rule loaded
Sep 23 20:28:55 workstation kernel: [  107.387652] bspwm[4095]: segfault at 1f2000001f1 ip 000000000040d62a sp 00007fff4ab3dc40 error 4 in bspwm[400000+11000]

This is a dual-head workstation. I tested with an empty bspwmrc and a reduced .xinitrc:

[ -e "$PANEL_FIFO" ] && rm "$PANEL_FIFO"
mkfifo "$PANEL_FIFO"
exec bspwm -s "$PANEL_FIFO" -p W

The same version of bspwm works on my laptop.

Segfault while starting

New installation on a Mac Mini with two monitors results in a segault.

I've attached a gdb debug log

Starting program: /usr/local/bin/bspwm 

Program received signal SIGSEGV, Segmentation fault.
0x00000000004050c7 in remove_monitor (m=0x620fb0) at monitor.c:125
125             focus_node(mm, mm->desk, mm->desk->focus);
#0  0x00000000004050c7 in remove_monitor (m=0x620fb0) at monitor.c:125
        mm = 0x621030
        prev = 0x0
        next = 0x621030
#1  0x0000000000405c76 in import_monitors () at monitor.c:311
        mb = 0x621030
        next = 0x621030
        sres = 0x620cb0
        m = 0x620fb0
        mm = 0x621030
        len = 7
        outputs = 0x620cdc
        cookies = 0x7fffffff9ba0
        gpo = 0x61f6b0
#2  0x0000000000404280 in setup () at bspwm.c:224
        mask = 2048
        values = {64}
        net_atoms = {382, 392, 389, 385, 388, 383, 390, 403, 405, 443, 446, 
          404, 422, 421, 431, 427, 425, 423}
        qep = 0x61f770
        ifo = 0x7fffffffe000
#3  0x000000000040396c in main (argc=1, argv=0x7fffffffe0e8) at bspwm.c:73
        descriptors = {__fds_bits = {0 <repeats 16 times>}}
        socket_path = '\000' <repeats 255 times>
        fifo_path = 0x0
        sock_fd = 0
        ret_fd = 0
        dpy_fd = 0
        sel = 0
        n = 0
        sock_address = {sun_family = 0, sun_path = '\000' <repeats 107 times>}
        rsp_len = 0
        msg = '\000' <repeats 8191 times>
        rsp = '\000' <repeats 8191 times>
        event = 0x0
        opt = -1 '\377'
        sp = 0x0
A debugging session is active.

    Inferior 1 [process 19860] will be killed.

Quit anyway? (y or n) Please answer y or n.
A debugging session is active.

    Inferior 1 [process 19860] will be killed.

Quit anyway? (y or n)

bspwmrc

bspc config -m ^1 top_padding 28
bspc desktop ^1 -n one
bspc rule -a Pidgin -d three --floating

bspc config split_ratio         0.52
bspc config border_width        6
bspc config window_gap          6
bspc config urgent_border_color "#DE3333"
bspc config focused_border_color "#748FA4"
bspc config auto_alternate true
bspc config borderless_monocle  true
bspc config gapless_monocle     true

# Workaround for: https://github.com/baskerville/bspwm/issues/52
wmname LG3D

panel dzen2 & 
sleep 1
trayer --transparent true  --alpha 0 --edge top --align right --expand true --widthtype request --margin 200 --heighttype pixel --height 28 --tint 0x34322e &

pidgin &
sleep 1
# set after pidgin starts so that desktop #3 isn't focused on startup.
bspc config honor_ewmh_focus true

Re-instate some dzen2 mouse-actions

I think that commit 2c36390 "Remove mouse actions from the example dzen2 panel" should be reconsidered.

This commit removes the mouse-based monocle-mode toggle and desktop switching, which are both pretty useful features.

The only mouse-based action that I think should be removed is toggle-visibility, which is not an action that a user would expect, whereas the above two are definitely intuitive and convenient IMO.

Support Sticky Windows

bspwm ignores the sticky state (_NET_WM_STATE_STICKY). The sticky state is useful for programs like dropdown terminals. (sticky windows should appear on all desktops)

If --edge has no effect, the opposite edge should be moved

There is a lot of flexibility by being able push or pull any of the edges, however some convenience is lost when working with a small number of windows.

-----------------
|   A   |   B   |
|       |       |
-----------------

If you try to Push B's right edge, it will have no effect. If, when this happened, B's left edge was pulled, users would be able to primarily use 4 resizing hotkeys instead of 8. This behavior would be similar to tmux.

Makefile uses explicit bashisms which fail when SHELL != /bin/bash

Hi,

I'm not submitting a patch to fix this---but note that if one's login shell (SHELL in terms of environment variables) is anything other than "/bin/bash" then "make install" fails because that tries to do brace expansion.

One workaround is to set:

SHELL = /bin/bash

In the Makefile, however this will break on systems which aren't Linux. I'd be more inclined to remove these bashisms and list the install targets explicitly.

Windows lose focus when dragged between monitors.

When dragging a window from one monitor to another, it (the window) looses focus. Furthermore, even when focus_follows_pointer is enabled, monitor focus is not transferred to the destination monitor.

focus_follows_pointer and nitrogen

I noticed today that if focus_follows_pointer is set to true, the menu buttons in nitrogen (fill type/screen) act very wacky. While you can get the initial menu to pop up with a click, you can't select any of the options via the mouse.

If focus_follows_pointer is set to false, the issue does not happen.

My bspwmrc and sxhkdrc are the same as they were in #48 (comment) and #48 (comment)

Keep fullscreen state when swtiching desktops

I’d like bspwm to keep the fullscreen state of a window when I switch a desktop. Currently if I play a video using mplayer in fullscreen mode, switch to another desktop and then switch back mplayer is back in windowed mode instead of keeping it’s fullscreen state.

Swapping windows between desktops corrupts focus history

This is the relevant initial output of bspc query -T and bspc query -H:

  1 6 T ~
    V m 0.50
      m st-256color 0x1800001 4 484x292+718+394 R ------ *
      m st-256color 0x1600001 4 484x292+718+394 R ------
  2 6 T @
    V m 0.50
      m st-256color 0x1C00001 4 484x292+718+394 R ------ *
      m st-256color 0x1A00001 4 484x292+718+394 R ------

1
  1600001
  1800001
2
  1A00001
  1C00001
  • Execute bspc window -s 0x1800001 in terminal window 0x1C00001. There is no visible change. These are the new outputs:
  1 6 T ~
    V m 0.50
      m st-256color 0x1C00001 4 484x292+718+394 R ------
      m st-256color 0x1600001 4 484x292+718+394 R ------
  2 6 T @
    V m 0.50
      m st-256color 0x1800001 4 484x292+718+394 R ------
      m st-256color 0x1A00001 4 484x292+718+394 R ------

1
  1600001
  1800001
2
  1A00001
  1C00001
  • Execute bspc window -c, closing window 0x1C00001. A gap remains in its place.
  • Execute bspc window -f last to focus window 0x1A00001. This is the output of bspc query -T:
  1 6 T ~
    m st-256color 0x1600001 4 484x292+718+394 R ------
  2 6 T @
    V m 0.50
      m st-256color 0x1800001 4 484x292+718+394 R ------
      m st-256color 0x1A00001 4 484x292+718+394 R ------ *
  • Executing bspc query -H or bspc window -f last causes bspwm to exit.

Don't center floating windows that request a position.

As of 114881d, all floating windows are centered on map. However, this means that windows that request a specific location are mapped to the center of the screen regardless. This interferes with programs like ftjerm, tilda, etc.

Is there any way to avoid centring windows that request positions?

Moving the pointer to a different monitor does not move monitor focus.

When moving the pointer to an unfocused monitor, the monitor does not become focused until a window in said monitor is focused. An inverse of pointer_follows_monitor (monitor_focus_follow_pointer) would be nice. An alternative solution is to make focus_follows_pointer apply to monitor's (or their root windows) as well.

It should also be noted that clicking on the root window will focus that monitor.

focus_follows_pointer should not raise windows

Currently, focus_follows_pointer raises windows on focus. This makes working with floating windows (dialogs etc) extremely frustrating. As far as I can tell, it should be possible to give a window keyboard focus without raising it but I don't know nearly enough about xcb to implement this myself.

Reorganize Messages

Currently, while functional, bspwm's message language is a little chaotic and organic. This is a proposal to clean up the message language without breaking compatibility (for now). If I don't mention a message here, I am planning on leaving it alone. Also, I'm not asking you to implement this, just for input (unless you really want to implement this yourself).

New Language (flags omitted for clarity)

focus   window  left|right|up|down
                next|prev
                last
                nearest older|newer

        desktop next|prev
                last
                named NAME

        monitor left|right|up|down
                next|prev
                last
                named NAME

// I would have liked to use send_to but that would have
// created a conflict.
drop_to desktop next|prev
                named NAME

        monitor {left, right, up, down}
                {next, prev}
                named NAME

// A little confusing when paired with presel.
swap    left|right|up|down
        last
        with WINDOW_ID

toggle  visibility|fullscreen|floating|locked [on|off]

presel  left|right|up|down
        cancel

Translation

focus               -> focus window
shift               -> swap
swap                -> swap last
cycle               -> focus window
nearest             -> focus window nearest
toggle_attr         -> attr toggle
send_to             -> drop_to desktop named
drop_to             -> drop_to desktop
send_to_monitor     -> drop_to monitor named
drop_to_monitor     -> drop_to monitor
use                 -> focus desktop named
use_monitor         -> focus monitor named
focus_monitor       -> focus monitor
alternate           -> focus window last
alternate_desktop   -> focus desktop last
alternate_monitor   -> focus monitor last
cancel              -> presel cancel

I was planning on implementing this by duping the message string, trying to parse it with the new spec, and then falling back to the old spec with a deprecation warning.

Use of non-portable extension

in helpers.h a macro is defined when DEBUG flag is set, namely PRINTF
clang complains with:

./helpers.h:19:37: warning: Use of comma pasting extension is non-portable [-pedantic]
#  define PRINTF(x,...)   printf(x, ##__VA_ARGS__)
                                    ^

maybe you or me or someone wants to replace this with something portable.

Missing LICENSE

What is this wm licensed under? There is no way to tell from the repository.

set default mouse cursor to arrow shape

Hello,

bspwm inherits the X11 windowing system's default "X" shaped mouse cursor.

Could you please set the root window's mouse cursor to the normal arrow shape?

Thanks for your consideration.

Empty desktop and window command

The following:

bspc window -f WINDOW_SEL

will fail if the current desktop is empty (while bspc window WINDOW_SEL -f succeeds).

The problem is that all actions besides -f require a non null initial target.

xfce panel workspace switcher applet loses track of bspwm state

When bspwm starts up, the workspace switcher will show the layout of windows, but after some window opening and desktop switching, its state becomes inconsistent with bspwm. The worst part is that the applet loses track of what desktop I'm on.

I am curious if this is intended to be part of the EWMH support you added a while back?

Tint2 can show the list of tasks, but is this covered under EWMH as well?

gtk3 floating menu issue

Steps to reproduce:
-> open a GTK3 application.
-> set it to floating.
-> click on a menu item.
-> menu initially appears behind application.

Tested with Evince, Transmission, and a few other GTK3 applications.

History overflow

I use bspc to focus the previous window in terms of focus history.

$ bspc window -f $(bspc query -H | tail -n2 | head -n1 | awk '{ print $3 }')

The history retrieved from bspc query -H ends after 299 entries or just displays 299 lines.

The output from bspc query -H looks like this:

[...]
DVI-I-3 DVI-I-3-2 0x0
DVI-I-3 DVI-I-3-1 0x280003A
DVI-I-3 DVI-I-3-1 0x280262E
DVI-I-3 DVI-I-3-1 0x280003A
DVI-I-2 DVI-I-2-1 0x2600003
DVI-I-3 DVI-I-3-1 0x280003A
DVI-I-2 DVI-I-2-1 0x2600003
DVI-I-3 DVI-I-3-1 0x280003A
DVI-I-2 DVI-I-2-1 0x2600003
DVI-I-3 DVI-I-3-1 0x280003A
DVI-I-2 DVI-I-2-1 0x2600003
DVI-I-3 DVI-I-3-1 0x280003A
DVI-I-2 DVI-I-2-1 0x2600003
DVI-I-3 DVI-I-3-1 0x280003A
DVI-I-2 DVI-I-2-1 0x2600003
DVI-I-3 DVI-I-3-1 0x280003A
DVI-I-2 DVI-I-2-1 0x2600003
DVI-I-3 DVI-I-3-1 0x280003A
DVI-I-3 DVI-I-3-1 0x2800006
DVI-I-3 DVI-I-3-1 0x280262E
DVI

DVI is the entire last line.

$ bspwm -v
0.8.5

Left-click is sometimes not registered in Steam

  1. On the Steam main window, mouse-over the "Library" button at the top of the screen.
  2. Mouse-over the menu that appears and left-click on one of the items such as "Linux Games".
  3. Repeat step 2 while alternating with different menu items (such as "Favorites", etc).

Step (2) or (3) will fail some percentage of the time with the left-click going unregistered. I've experienced a failure rate of ~50%. Using the Enter key instead of left-click succeeds all of the time, though.

Workaround:

Do not bind focus on left-click in .config/sxhkd/sxhkdrc

#~button1
#     bspc pointer -g focus

pandoc to generate documentation?

Hi,

I see there's been a change to bspwm to use pandoc to generate the documentation. Is this really the only option available? I think requiring haskell to use this tool adds significant bloat/overhead to generate the documentation.

Inconsistent floating behavior

There are two different floating behaviors:

action: toggle float on an existing tiled window
result: floating windows float above the tree of other tiled windows.

 +-------------------------+             +-------------------------+
 |1           |2           |             |1                        |
 |            |            |   Toggle    |       +------+          |
 |            |            |   Float     |       |2     |          |
 |            |            |   ------>   |       |      |          |
 |            |            |             |       |      |          |
 |            |            |             |       +------+          |
 |            |            |             |                         |
 +-------------------------+             +-------------------------+

action: launch new application with --floating rule
result: floating windows take real space in the window layout as if it were tiled

action: alt+mouse1 drag floating window between monitors
result: floating windows take real space in the window layout as if it were tiled

 +-------------------------+             +-------------------------+
 |1                        |             |EMPTY       |1           |
 |                         |   Launch    |SPACE  +------+          |
 |                         |   Floating  |       |2     |          |
 |                         |   App       |       |      |          |
 |                         |   ------>   |       |      |          |
 |                         |             |       +------+          |
 |                         |             |            |            |
 +-------------------------+             +-------------------------+

In both cases, bspc query -T shows the same output.

Launch Floating App:

%  ~  bspc query --monitor 'DVI-0' -T
DVI-0 1920x1080+1920+0 0,0,22,0
  Desktop2 3 16 1 T *
    V m 0.50
      m Nautilus 0x1C0134D 1 3 673x611+2483+202 L f------ *
      m URxvt 0x81599B 1 3 564x292+2598+394 L -------

Toggle Float:

%  ~  bspc query --monitor 'DVI-0' -T
DVI-0 1920x1080+1920+0 0,0,22,0
  Desktop2 3 16 1 T *
    V m 0.50
      m Nautilus 0x1C0134D 1 3 673x611+2483+202 L f------ *
      m URxvt 0x81599B 1 3 564x292+2598+394 L -------

Which behavior is expected? according to answer on #17 it seems the correct behavior is when it takes up space in the tree layout?

Add an action to reset a monitor's desktops.

Almost every config I have seen first renames the default desktop and then adds new desktops. A monitor [-d|--desktops] names... to reset desktops would make this simpler.

The command would behave as follows:
Case 1: Equal or fewer existing desktops than replacing desktops

  1. Rename the existing desktops until we run out.
  2. Add the remaining new desktops.

Case 2: More existing desktops than replacing desktops

  1. Rename the existing desktops until we run out of new desktops.
  2. Move all windows from the remaining desktops onto the focused desktop.
  3. Remove the remaining desktops.

scan-build bugs

I decided to run scan-build (clang-analizer) on bspwm and it caught a couple of (potential) bugs.

You can browse the report here: http://drop.stebalien.com/bspwm-bug-report-2013-07-20/

I was able to trigger the restore.c bug with two blank lines period:


.

I'm reasonably certain that the arrange "bug" isn't triggerable but it might be a good idea to insert an extra else statement just in case.

While the dead increment is definitely a bug, the two dead assignments are just defensive coding.

Does not work with devilspie

For some reason, devilspie does not pick up on window open events when run under bspwm (it sees all open windows, just not new ones). I'm assuming this is because bspwm doesn't trigger some event that devilspie is expecting.

focus-follows-pointer

Hi,

What issues are you actually having with FFP which means you've ostracised it from master? The logs indicate some rewrites of this without any specifics as to the problems encountered or how they've been solved, and I think that simply removing this feature -- even to its own branch -- is somewhat odd.

Full screen games create new, unwanted Desktops, and re-order exisiting Desktops

After launching a game in full-screen mode, a new desktop is created ("Desktop3") and the order of existing desktops is changed. Ideally, the desktop configuration would remain unchanged.

Steps to reproduce:

  1. Start bspwm with 4 desktops named: one, two, three four.
  2. Launch game in full-screen mode via steam.
  3. Exit game

Expected:
The number, names and order of desktops remains the same as in (1).

Actual:
Desktops change to: "two, three, four, one, Desktop03" (or similar)

Environment:
Ubuntu
Dual monitors (left: portrait, right: landscape)

xkill does not work

Attempting to kill applications using xkill does not seem to have any effect.

Output is as follows:

$ xkill 
Select the window whose client you wish to kill with button 1....
$ 

take over existing windows on startup

Hello,

I run bspwm inside a loop (in case I accidentally quit it):

# window manager                                                                                        
while true; do                                                                    
  urxvt &                                                                         
  bspwm                                                                           
  #wmii                                                                           
  xmessage 'INSERT COIN TO CONTINUE' \                                            
  -buttons 'Insert Coin:0,Game Over' \                                            
  -default 'Insert Coin' -timeout 30 \                                            
  -center || break                                                                
done

When I have existing windows and I run bspc quit and then start bspwm again (all in the same X session), the new bspwm instance does not take over the previously existing windows.

In particular, I am unable to focus or click on any windows (even Mod4+click does not work). And none of my xbindkeys shortcuts have any effect. 😓

Thanks for your consideration.

Compress pointer tracking events.

Currently, every pointer tracking event is handled causing a significant amount of lag when resizing. This is a fairly common problem and most GUI toolkits handle it by dropping intermediate mouse positions.

One possible solution is to read up to x incoming messages into a queue before executing actions and compress sequential mouse events as encountered.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.