Skip to main content

Desktop switcher popup for BSPWM

Project description

BSPHUD

Desktop switcher popup for bspwm.

BSPHUD screenshot

BSPHUD is a window that pops up in the middle of your screen and gives an overview of the desktops on the currently focused monitor. Each desktop is represented by a black box. If the box is filled, there are windows on that desktop. The box with a ring around it is the currently focused desktop.

The idea is that you bind BSPHUD to the modifier key (not a combination; the modifier key itself) that you normally use for window management hotkeys, so that BSPHUD pops up right before you're about to switch to a different desktop, send a window to a different monitor, etc.

Installation

You can install through pip, Python's package manager:

pip install bsphud

And then launch BSPHUD like so:

python -m bsphud

Or you can simply copy src/bsphud/bsphud.py to a safe location and run it with Python:

python bsphud.py

Or you can even just run it directly:

./bsphud.py

BSPHUD has no dependencies except for Python and Tkinter. Tkinter is usually included with Python, but sometimes it's not, for example on minimal systems or if you compiled Python yourself and didn't explicitly enable Tkinter.

Configuration

BSPHUD will pop up when you send it SIGUSR1 and close when you send it SIGUSR2. Sending SIGUSR1 when the window is already open will cause BSPHUD to refresh the state of the desktop. BSPHUD writes its pid to /tmp/bsphud.pid.

Below is an example configuration with sxhkd:

# Show BSPHUD when left super is held down
Super_L
	kill -10 $(cat /tmp/bsphud.pid)

# Hide BSPHUD when left super is released
@Super_L
	kill -12 $(cat /tmp/bsphud.pid)

# If you have something like this
# (a shortcut to reload sxhkd),
# it is wise to add a delay before sending the signal,
# to prevent sxhkd from locking up
super + @Escape
	sleep 1; pkill -USR1 -x sxhkd ; notify-send sxhkd reloaded

# Any shortcuts that change 
# desktops/windows need to also send SIGUSR1
# in order to keep the BSPHUD display
# up to date with the state of the window manager

# super + <number> to switch to that desktop
# and super + shift + <number> to move window to that desktop
super + {_,shift + }{1-9,0}
	bspc {desktop -f,node -d} 'focused:^{1-9,10}' --follow; kill -10 $(cat /tmp/bsphud.pid)

# super + comma and super + period to cycle monitors
super + {_,shift} + {comma,period}
	bspc {monitor -f, node -m} {prev,next} --follow; kill -10 $(cat /tmp/bsphud.pid)

Misc notes

  • there needs to be a rule that tells bspwm to not manage the BSPHUD window. BSPHUD creates this rule automatically. Since the window is unmanaged, the border is actually drawn by BSPHUD itself, not by bspwm. BSPHUD queries your preferred border width and color using bspc query.

  • If you plan to run multiple instances of BSPHUD (e.g. multiuser system), it is wise to change the location of the PID file. For example:

python -m bsphud.py --pidfile /var/run/user/$(id -u)/bsphud.pid
  • bug: If you send a SIGUSR signal to BSPHUD immediately after launching it, it might crash. Working on it!

  • BSPHUD is inspired by the venerable XFCE desktop envrionment, which has a comparable feature built-in.

License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bsphud-1.0.0.tar.gz (42.6 kB view details)

Uploaded Source

Built Distribution

bsphud-1.0.0-py3-none-any.whl (29.5 kB view details)

Uploaded Python 3

File details

Details for the file bsphud-1.0.0.tar.gz.

File metadata

  • Download URL: bsphud-1.0.0.tar.gz
  • Upload date:
  • Size: 42.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.3

File hashes

Hashes for bsphud-1.0.0.tar.gz
Algorithm Hash digest
SHA256 d2ad96db55240f362ff1ef541c6fb36b6b4ac01bcaf8351abda36f3ea6774266
MD5 4e1d67ae470284e7440dc59cd65d5a8a
BLAKE2b-256 6c6556b06cbda09a4cc50e572af79301dbc5ef9c2b7268a1b4eff4b8ea2a4ae7

See more details on using hashes here.

File details

Details for the file bsphud-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: bsphud-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 29.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.3

File hashes

Hashes for bsphud-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 83378e9113a41a4651e65a6c66cb44fa915b61c1779085339fdca97d3535ae8a
MD5 b567064d7941c2e42e61529fa6e2364d
BLAKE2b-256 4e2120f8a16b3c0dcd87bb6af2f957345f24ff32c35e4f0ca0e4a63eab5da99c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page