BSPWM - Moving windows out of the way
This time I want to show you my attempt on a Scratchpad like feature for BSPWM. It is not exactly a Scratchpad like the one of the I3 window manager, but you could easily modify my code to make it more Scratchpadly (Scratchpad windows are hidden and floating, I don’t care about floating).
I added the following keyboard shortcuts to my sxhkrc
. The first one hides the current focused window. The second shortcut helps me to find the hidden window I want to unhide.
Code sxhkrc:
# hide window
super + period
bspc node -g hidden
# unhide window
super + ctrl + period
${HOME}/.config/bspwm/bspcmd unhide
If I want to get a previously hidden window back, I hit the defined shortcut and the script bspcmd
with the parameter unhide
is called.
The bspcmd
file is a bash script containing a set of functions to improve my workflow with BSPWM. For this post, I have shortened it to only show the necessary parts, when executed with unhide
as parameter.
The script also requires two additional programms:
- xtitle output the window title of the given window ID (WID)
- rofi a window switcher, application launcher and dmenu replacement
Code bspcmd:
#!/bin/bash
CMD=${1:-help}; shift
help() {
echo "Available commands:"
echo " * unhide - select and unhide window"
}
unhide() {
action=${1:-list}
case $action in
"list")
selection=`for id in $(bspc query -N -n .hidden); do
title=$(xtitle $id)
[[ -z "$title" ]] && title="<unnamed>"
echo $id $title
done | rofi -dmenu -i -p "Hidden windows" | cut -f1 -d' '`
[[ -z "$selection" ]] && exit 1
bspc node $selection -g hidden=off
;;
esac
}
case $CMD in
"help")
help
;;
"unhide")
unhide $1
;;
*)
help
;;
esac
The unhide()
function gathers all hidden windows, looks up the window title (if available) and displays a list using Rofi. On selecting a list entry, the hidden flag will be removed for that particular window so it will be displayed again.
KTHXBYE.