-
-
Save thugcee/87158c313070c666efd43c0a64a2a2e7 to your computer and use it in GitHub Desktop.
Suckless' tabbed integration with BSPWM. This configuration supports joining any two neighbouring windows into a new tabbed, removing windows from tabbed and when last window is from tabbed removed then tabbed instance is closed. This slightly modified `tabc.sh` allows to omit id of the removed window (the current one is removed by default).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Remove current tab from tabbed | |
super + mod1 + t; r | |
tabc.sh $(bspc query -N -n focused) remove | |
# At given direction: join two windows into a new tabbed or add window to an existing tabbed | |
super + mod1 + t; {Left,Down,Up,Right} | |
tabc.sh $(bspc query -N -n {west,south,north,east}) add $(bspc query -N -n focused) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define MODKEY Mod4Mask | |
static Key keys[] = { | |
/* modifier key function argument */ | |
{ MODKEY|Mod1Mask, XK_Return, focusonce, { 0 } }, | |
{ MODKEY|Mod1Mask, XK_Return, spawn, { 0 } }, | |
{ MODKEY|Mod1Mask, XK_Next, rotate, { .i = +1 } }, | |
{ MODKEY|Mod1Mask, XK_Prior, rotate, { .i = -1 } }, | |
{ MODKEY|Mod1Mask|ShiftMask, XK_Prior, movetab, { .i = -1 } }, | |
{ MODKEY|Mod1Mask|ShiftMask, XK_Next, movetab, { .i = +1 } }, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 | |
TABBED_CONFIG="-c -k -o #111111 -O #7A7777 -t #8F8E24 -T #FFFFFF" | |
# | |
# Functions | |
# | |
# Get wid of root window | |
get_root_wid () { | |
xwininfo -root | awk '/Window id:/{print $4}' | |
} | |
# Get children of tabbed | |
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 | |
get_class () { | |
id=$1 | |
xprop -id $id | sed -n '/WM_CLASS/s/.*, "\(.*\)"/\1/p' | |
} | |
# | |
# Main Program | |
# | |
tabbed=$1; shift | |
cmd=$1; shift | |
if [ "$(get_class $tabbed)" != "tabbed" ]; then | |
# It looks like what supposed to be an id of a tabbed window is not a | |
# tabbed. | |
if [ $cmd = "add" ]; then | |
# But this is the `add` command so lets join booth windows in a | |
# new tabbed instance. First start tabbed, add the target window | |
# and then proceed to normal `add`. | |
sibling=$tabbed | |
tabbed=$(tabbed $TABBED_CONFIG -d) && xdotool windowreparent $sibling $tabbed || exit 2 | |
else | |
# For other commands we need tunning tabbed instance | |
echo "$tabbed is not an instance of tabbed" | |
exit 1 | |
fi | |
fi | |
case $cmd in | |
add) | |
wid=$1; shift | |
xdotool windowreparent $wid $tabbed | |
;; | |
remove) | |
wid=$1 | |
# When there isn't supplied an id of a window to be removed | |
# from tabbed then remove the currently active one. | |
test -n "$win" || wid=$(get_clients $tabbed| head -1) | |
xdotool windowreparent $wid $(get_root_wid) | |
;; | |
list) | |
get_clients $tabbed | |
;; | |
esac |
License for above code is MIT (https://mit-license.org/).
Thank you! Sorry I deleted my comment, I noticed this isn't actually the upstream so I assume tabc.sh is under whatever license jpentland chooses (assuming there is license and the license wants derivatives to share alike).
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Sorry maybe I should explain it better. It's
tabbed/config.h
(gist file names can't contain/
, that's why you see_slash_
).So you should put or rather replace part of
config.h
in tabbed's source code. Tabbed follows suckless philosophy and to change it's configuration you have to edit and recompile code.No.