Add functionality from tabbed-hjk
This commit is contained in:
parent
6a6bbc8230
commit
8965ff83b1
|
@ -33,14 +33,183 @@ static Bool npisrelative = False;
|
||||||
|
|
||||||
#define SETPROP(p) { \
|
#define SETPROP(p) { \
|
||||||
.v = (char *[]){ "/bin/sh", "-c", \
|
.v = (char *[]){ "/bin/sh", "-c", \
|
||||||
"prop=\"`xwininfo -children -id $1 | grep '^ 0x' |" \
|
"prop=\"$(xwininfo -children -id $1 | grep '^ 0x' |" \
|
||||||
"sed -e's@^ *\\(0x[0-9a-f]*\\) \"\\([^\"]*\\)\".*@\\1 \\2@' |" \
|
"sed -e's@^ *\\(0x[0-9a-f]*\\) \"\\([^\"]*\\)\".*@\\1 \\2@' |" \
|
||||||
"xargs -0 printf %b | dmenu -l 10 -w $1`\" &&" \
|
"tail -n +2 | dmenu -i -l 10 -p 'Switch to: ')\" &&" \
|
||||||
"xprop -id $1 -f $0 8s -set $0 \"$prop\"", \
|
"xprop -id $1 -f $0 8s -set $0 \"$prop\"", \
|
||||||
p, winid, NULL \
|
p, winid, NULL \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Modify the following line to match your terminal and software list */
|
||||||
|
#define OPENTERMSOFT(p) { \
|
||||||
|
.v = (char *[]){ "/bin/sh", "-c", \
|
||||||
|
"term='st' && titlearg='-t' && embedarg='-w' &&" \
|
||||||
|
"softlist=$(printf '%s\n' \"htop\" \"btm\" \"vim\" \"xplr\" \"ncmpcpp\" \"cmatrix\") &&" \
|
||||||
|
"printf '%s' \"$softlist\" |" \
|
||||||
|
"dmenu -p 'Softwares to run: ' |" \
|
||||||
|
"xargs -I {} $term $titlearg \"{}\" $embedarg $1 -e \"{}\"", \
|
||||||
|
p, winid, NULL \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Modify the following line to match your terminal*/
|
||||||
|
#define OPENTERM(p) { \
|
||||||
|
.v = (char *[]){ "/bin/sh", "-c", \
|
||||||
|
"term='st' && embedarg='-w' &&" \
|
||||||
|
"cd \"$(xwininfo -children -id $1 | grep '^ 0x' |" \
|
||||||
|
"sed -e's@^ *\\(0x[0-9a-f]*\\) \"\\([^\"]*\\)\".*@\\1 \\2@' |" \
|
||||||
|
"dmenu -l 10 -p 'New term path based on: ' |" \
|
||||||
|
"cut -f 1 | xargs -I {} xprop -id \"{}\" | grep _NET_WM_PID |" \
|
||||||
|
"cut -d ' ' -f 3 | xargs -I {} pstree -p \"{}\" |" \
|
||||||
|
"cut -d '(' -f 3 | cut -d ')' -f 1 |" \
|
||||||
|
"xargs -I {} readlink -e /proc/\"{}\"/cwd/)\" &&" \
|
||||||
|
"$term $embedarg $1", \
|
||||||
|
p, winid, NULL \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* deskid: id for current workspace */
|
||||||
|
/* rootid: id for root window */
|
||||||
|
/* window: data for chosen window by dmenu */
|
||||||
|
/* wid: chosen window's window id */
|
||||||
|
/* wname: chosen window's name */
|
||||||
|
/* cwid: chosen window's child window id (tabbed window only) */
|
||||||
|
#define ATTACHWIN(p) { \
|
||||||
|
.v = (char *[]){ "/bin/sh", "-c", \
|
||||||
|
"deskid=$(xdotool get_desktop) &&" \
|
||||||
|
"rootid=\"$(xwininfo -root | grep \"Window id\" | cut -d ' ' -f 4)\" &&" \
|
||||||
|
"window=\"$(wmctrl -x -l | grep -E \" $deskid \" |" \
|
||||||
|
"grep -v $(printf '0x0%x' \"$1\") |" \
|
||||||
|
"cut -d ' ' -f 1,4 | dmenu -i -l 5 -p \"Attach: \")\" &&" \
|
||||||
|
"wid=$(printf '%s' \"$window\" | cut -d ' ' -f 1) &&" \
|
||||||
|
"wname=$(printf '%s' \"$window\" | cut -d ' ' -f 2) &&" \
|
||||||
|
"[ \"$wname\" = \"tabbed.tabbed\" ] &&" \
|
||||||
|
"cwid=$(xwininfo -children -id \"$wid\" | grep '^ 0x' |" \
|
||||||
|
"sed -e 's@^ *\\(0x[0-9a-f]*\\) \"\\([^\"]*\\)\".*@\\1@') &&" \
|
||||||
|
"for id in $(printf '%s' \"$cwid\"); do xdotool windowreparent \"$id\" \"$rootid\"; done &&" \
|
||||||
|
"for id in $(printf '%s' \"$cwid\"); do xdotool windowreparent \"$id\" \"$1\"; done ||" \
|
||||||
|
"xdotool windowreparent \"$wid\" $1", \
|
||||||
|
p, winid, NULL \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ATTACHSELECTWIN(p) { \
|
||||||
|
.v = (char *[]){ "/bin/sh", "-c", \
|
||||||
|
"rootid=\"$(xwininfo -root | grep \"Window id\" | cut -d ' ' -f 4)\" &&" \
|
||||||
|
"wid=$(xdotool selectwindow) &&" \
|
||||||
|
"wname=$(xwininfo -id \"$wid\" | grep 'Window id:' | cut -d ' ' -f 5-) &&" \
|
||||||
|
"[ \"$wname\" = \"(has no name)\" ] &&" \
|
||||||
|
"cwid=$(xwininfo -children -id \"$wid\" | grep '^ 0x' |" \
|
||||||
|
"sed -e 's@^ *\\(0x[0-9a-f]*\\) \"\\([^\"]*\\)\".*@\\1@') &&" \
|
||||||
|
"for id in $(printf '%s' \"$cwid\"); do xdotool windowreparent \"$id\" \"$rootid\"; done &&" \
|
||||||
|
"for id in $(printf '%s' \"$cwid\"); do xdotool windowreparent \"$id\" \"$1\"; done ||" \
|
||||||
|
"xdotool windowreparent \"$wid\" $1", \
|
||||||
|
p, winid, NULL \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ATTACHALL(p) { \
|
||||||
|
.v = (char *[]){ "/bin/sh", "-c", \
|
||||||
|
"deskid=$(xdotool get_desktop) &&" \
|
||||||
|
"rootid=\"$(xwininfo -root | grep \"Window id\" | cut -d ' ' -f 4)\" &&" \
|
||||||
|
"window=\"$(wmctrl -x -l | grep -E \" $deskid \" |" \
|
||||||
|
"grep -v $(printf '0x0%x' \"$1\") | cut -d ' ' -f 1,4)\" &&" \
|
||||||
|
"IFS=':' &&" \
|
||||||
|
"for win in $(printf '%s' \"$window\" | tr '\n' ':'); do unset IFS &&" \
|
||||||
|
"wid=$(printf '%s' \"$win\" | cut -d ' ' -f 1) &&" \
|
||||||
|
"wname=$(printf '%s' \"$win\" | cut -d ' ' -f 2) &&" \
|
||||||
|
"[ \"$wname\" = \"tabbed.tabbed\" ] &&" \
|
||||||
|
"{ cwid=$(xwininfo -children -id \"$wid\" | grep '^ 0x' |" \
|
||||||
|
"sed -e 's@^ *\\(0x[0-9a-f]*\\) \"\\([^\"]*\\)\".*@\\1@') &&" \
|
||||||
|
"for id in $(printf '%s' \"$cwid\"); do xdotool windowreparent \"$id\" \"$rootid\"; done &&" \
|
||||||
|
"for id in $(printf '%s' \"$cwid\"); do xdotool windowreparent \"$id\" \"$1\"; done; } ||" \
|
||||||
|
"xdotool windowreparent \"$wid\" $1; done", \
|
||||||
|
p, winid, NULL \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define DETACHWIN(p) { \
|
||||||
|
.v = (char *[]){ "/bin/sh", "-c", \
|
||||||
|
"rootid=\"$(xwininfo -root | grep \"Window id\" | cut -d ' ' -f 4)\" &&" \
|
||||||
|
"wid=\"$(xwininfo -children -id $1 | grep '^ 0x' |" \
|
||||||
|
"sed -e 's@^ *\\(0x[0-9a-f]*\\) \"\\([^\"]*\\)\".*@\\1 \\2@' |" \
|
||||||
|
"dmenu -i -l 5 -p 'Detach: ' | cut -d ' ' -f 1)\" &&" \
|
||||||
|
"xwininfo -id $wid -stats | grep -q 'IsUnMapped' && xdotool windowmap $wid;" \
|
||||||
|
"xdotool windowreparent \"$wid\" \"$rootid\" &&" \
|
||||||
|
"xdotool windowactivate $1", \
|
||||||
|
p, winid, NULL \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define DETACHALL(p) { \
|
||||||
|
.v = (char *[]){ "/bin/sh", "-c", \
|
||||||
|
"rootid=\"$(xwininfo -root | grep \"Window id\" | cut -d ' ' -f 4)\" &&" \
|
||||||
|
"wid=\"$(xwininfo -children -id $1 | grep '^ 0x' |" \
|
||||||
|
"sed -e 's@^ *\\(0x[0-9a-f]*\\) \"\\([^\"]*\\)\".*@\\1@')\" &&" \
|
||||||
|
"IFS=':' &&" \
|
||||||
|
"for id in $(printf '%s' \"$wid\" | tr '\n' ':'); do unset IFS &&" \
|
||||||
|
"xdotool windowreparent \"$id\" \"$rootid\" &&" \
|
||||||
|
"xwininfo -id $id -stats |" \
|
||||||
|
"grep -q 'IsUnMapped' &&" \
|
||||||
|
"xdotool windowmap $id; done", \
|
||||||
|
p, winid, NULL \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define SHOWHIDDEN(p) { \
|
||||||
|
.v = (char *[]){ "/bin/sh", "-c", \
|
||||||
|
"cwin=\"$(xwininfo -children -id $1 | grep '^ 0x' |" \
|
||||||
|
"sed -e 's@^ *\\(0x[0-9a-f]*\\) \"\\([^\"]*\\)\".*@\\1 \\2@')\" &&" \
|
||||||
|
"IFS=':' &&" \
|
||||||
|
"for win in $(printf '%s' \"$cwin\" | tr '\n' ':'); do unset IFS &&" \
|
||||||
|
"cwid=$(printf '%s' \"$win\" | cut -d ' ' -f 1) &&" \
|
||||||
|
"xwininfo -id $cwid -stats |" \
|
||||||
|
"grep -q 'IsUnMapped' &&" \
|
||||||
|
"printf '%s\n' \"$win\"; done |" \
|
||||||
|
"dmenu -i -l 5 -p \"Show hidden window:\" |" \
|
||||||
|
"cut -d ' ' -f 1 |" \
|
||||||
|
"xargs -I {} xdotool windowmap \"{}\"", \
|
||||||
|
p, winid, NULL \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define SHOWHIDDENALL(p) { \
|
||||||
|
.v = (char *[]){ "/bin/sh", "-c", \
|
||||||
|
"cwid=\"$(xwininfo -children -id $1 | grep '^ 0x' |" \
|
||||||
|
"sed -e 's@^ *\\(0x[0-9a-f]*\\) \"\\([^\"]*\\)\".*@\\1@')\" &&" \
|
||||||
|
"IFS=':' &&" \
|
||||||
|
"for id in $(printf '%s' \"$cwid\" | tr '\n' ':'); do unset IFS &&" \
|
||||||
|
"xwininfo -id $id -stats | " \
|
||||||
|
"grep -q 'IsUnMapped' &&" \
|
||||||
|
"xdotool windowmap $id; done", \
|
||||||
|
p, winid, NULL \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define HIDEWINDOW(p) { \
|
||||||
|
.v = (char *[]){ "/bin/sh", "-c", \
|
||||||
|
"cwid=\"$(xwininfo -children -id $1 | grep '^ 0x' |" \
|
||||||
|
"sed -e 's@^ *\\(0x[0-9a-f]*\\) \"\\([^\"]*\\)\".*@\\1@')\" &&" \
|
||||||
|
"IFS=':' && winnum=0 &&" \
|
||||||
|
"for id in $(printf '%s' \"$cwid\" | tr '\n' ':'); do unset IFS &&" \
|
||||||
|
"xwininfo -id $id -stats | " \
|
||||||
|
"grep -q 'IsViewable' &&" \
|
||||||
|
"winnum=$(($winnum+1)); done;" \
|
||||||
|
"[ $winnum -gt 1 ] &&" \
|
||||||
|
"{ xwininfo -children -id $1 | grep '^ 0x' | head -n 1 |" \
|
||||||
|
"sed -e 's@^ *\\(0x[0-9a-f]*\\) \"\\([^\"]*\\)\".*@\\1@' |" \
|
||||||
|
"xargs -I {} xdotool windowunmap \"{}\"; }", \
|
||||||
|
p, winid, NULL \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
#if XRESOURCES_PATCH
|
#if XRESOURCES_PATCH
|
||||||
/*
|
/*
|
||||||
* Xresources preferences to load at startup
|
* Xresources preferences to load at startup
|
||||||
|
@ -99,7 +268,7 @@ static const Key keys[] = {
|
||||||
{ MODKEY|ShiftMask, XK_k, movetab, { .i = +1 } },
|
{ MODKEY|ShiftMask, XK_k, movetab, { .i = +1 } },
|
||||||
{ MODKEY, XK_Tab, rotate, { .i = 0 } },
|
{ MODKEY, XK_Tab, rotate, { .i = 0 } },
|
||||||
|
|
||||||
{ MODKEY, XK_slash, spawn, SETPROP("_TABBED_SELECT_TAB") },
|
{ MODKEY|ShiftMask, XK_comma, spawn, SETPROP("_TABBED_SELECT_TAB") },
|
||||||
{ MODKEY, XK_1, move, { .i = 0 } },
|
{ MODKEY, XK_1, move, { .i = 0 } },
|
||||||
{ MODKEY, XK_2, move, { .i = 1 } },
|
{ MODKEY, XK_2, move, { .i = 1 } },
|
||||||
{ MODKEY, XK_3, move, { .i = 2 } },
|
{ MODKEY, XK_3, move, { .i = 2 } },
|
||||||
|
@ -117,6 +286,17 @@ static const Key keys[] = {
|
||||||
{ MODKEY|ShiftMask, XK_u, toggle, { .v = (void*) &urgentswitch } },
|
{ MODKEY|ShiftMask, XK_u, toggle, { .v = (void*) &urgentswitch } },
|
||||||
|
|
||||||
{ 0, XK_F11, fullscreen, { 0 } },
|
{ 0, XK_F11, fullscreen, { 0 } },
|
||||||
|
/* Unique functionality */
|
||||||
|
{ MODKEY|ShiftMask, XK_f, spawn, OPENTERMSOFT("_TABBED_SELECT_TERMAPP") },
|
||||||
|
{ MODKEY|ShiftMask, XK_g, spawn, OPENTERM("_TABBED_TERM") },
|
||||||
|
{ MODKEY|ShiftMask, XK_h, spawn, ATTACHWIN("_TABBED_ATTACH_WIN") },
|
||||||
|
{ MODKEY|ShiftMask, XK_r, spawn, ATTACHSELECTWIN("_TABBED_ATTACH_WIN") },
|
||||||
|
{ MODKEY|ShiftMask, XK_t, spawn, ATTACHALL("_TABBED_ATTACH_ALL") },
|
||||||
|
{ MODKEY|ShiftMask, XK_y, spawn, DETACHWIN("_TABBED_DETACH_WIN") },
|
||||||
|
{ MODKEY|ShiftMask, XK_b, spawn, DETACHALL("_TABBED_DETACH_ALL") },
|
||||||
|
{ MODKEY|ShiftMask, XK_n, spawn, HIDEWINDOW("_TABBED_HIDE_WINDOW") },
|
||||||
|
{ MODKEY|ShiftMask, XK_m, spawn, SHOWHIDDEN("_TABBED_SHOW_HIDDEN") },
|
||||||
|
{ MODKEY|ShiftMask, XK_i, spawn, SHOWHIDDENALL("_TABBED_SHOW_HIDDEN_ALL") },
|
||||||
#if HIDETABS_PATCH
|
#if HIDETABS_PATCH
|
||||||
{ MODKEY, XK_Shift_L, showbar, { .i = 1 } },
|
{ MODKEY, XK_Shift_L, showbar, { .i = 1 } },
|
||||||
{ ShiftMask, XK_Control_L, showbar, { .i = 1 } },
|
{ ShiftMask, XK_Control_L, showbar, { .i = 1 } },
|
||||||
|
|
Loading…
Reference in a new issue