Skip to content

Instantly share code, notes, and snippets.

@jpentland
Last active February 9, 2023 20:00
Show Gist options
  • Star 14 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save jpentland/468a42c172eb607bb950f5d00606312c to your computer and use it in GitHub Desktop.
Save jpentland/468a42c172eb607bb950f5d00606312c to your computer and use it in GitHub Desktop.
Add or remove windows from suckless' tabbed
#!/bin/sh
# Usage:
# tabc.sh <tabbed-id> <command>
# Commands:
# add <window-id> - Add window to tabbed
# remove <window-id> - Remove window from tabbed
# list - List all clients of tabbed
#
# Functions
#
# Get wid of root window
function get_root_wid {
xwininfo -root | awk '/Window id:/{print $4}'
}
# Get children of tabbed
function get_clients {
id=$1
xwininfo -id $id -children | sed -n '/[0-9]\+ \(child\|children\):/,$s/ \+\(0x[0-9a-z]\+\).*/\1/p'
}
# Get class of a wid
function get_class {
id=$1
xprop -id $id | sed -n '/WM_CLASS/s/.*, "\(.*\)"/\1/p'
}
#
# Main Program
#
tabbed=$1; shift
if [ "$(get_class $tabbed)" != "tabbed" ]; then
echo "Not an instance of tabbed" 2>&1
fi
cmd=$1; shift
case $cmd in
add)
wid=$1; shift
xdotool windowreparent $wid $tabbed
;;
remove)
wid=$1; shift
xdotool windowreparent $wid $(get_root_wid)
;;
list)
get_clients $tabbed
;;
esac
@thugcee
Copy link

thugcee commented Feb 22, 2020

You specify in shebang POSIX compatible sh shell and then you use not allowed function syntax.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment