diff --git a/config.def.h b/config.def.h index 93d51b9..bd3e56b 100644 --- a/config.def.h +++ b/config.def.h @@ -3,22 +3,23 @@ #include /* appearance */ -static const unsigned int borderpx = 4;/* border pixel of windows */ -static const unsigned int gappx = 15; /* gaps between windows */ -static const unsigned int snap = 32; /* snap pixel */ -static const int showbar= 1;/* 0 means no bar */ -static const int topbar = 1;/* 0 means bottom bar */ -static const char statussep = ';'; -static const int horizpadbar= 8;/* horizontal padding for statusbar */ -static const int vertpadbar = 12; /* vertical padding for statusbar */ -static const char *fonts[] = { "Ubuntu Mono:size=12" }; -static const char dmenufont[] = "Ubuntu Mono:size=12"; -static const char col_gray1[] = "#222222"; -static const char col_gray2[] = "#444444"; -static const char col_gray3[] = "#bbbbbb"; -static const char col_gray4[] = "#eeeeee"; -static const char col_cyan[]= "#005577"; -static const char *colors[][3] = { +static const unsigned int borderpx = 4; /* border pixel of windows */ +static const unsigned int gappx = 15; /* gaps between windows */ +static const unsigned int snap = 32; /* snap pixel */ +static const int showbar = 1; /* 0 means no bar */ +static const int showextrabar = 1; /* 0 means no extra bar */ +static const int topbar = 1; /* 0 means bottom bar */ +static const char statussep = ';'; +static const int horizpadbar = 8; /* horizontal padding for statusbar */ +static const int vertpadbar = 12; /* vertical padding for statusbar */ +static const char *fonts[] = { "Ubuntu Mono:size=12" }; +static const char dmenufont[] = "Ubuntu Mono:size=12"; +static const char col_gray1[] = "#222222"; +static const char col_gray2[] = "#444444"; +static const char col_gray3[] = "#bbbbbb"; +static const char col_gray4[] = "#eeeeee"; +static const char col_cyan[] = "#005577"; +static const char *colors[][3] = { /* fg bg border */ [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, [SchemeSel] = { col_gray4, col_cyan, col_cyan }, @@ -116,8 +117,8 @@ static const Key keys[] = { { 0, XF86XK_AudioMute, spawn, {.v = volmute } }, { SUPERKEY, XK_d, spawn, {.v = dmenucmd } }, { SUPERKEY, XK_Return, spawn, {.v = termcmd } }, - { SUPERKEY, XK_b, togglebar, {.i = 1} }, - { SUPERKEY|ShiftMask, XK_b, togglebar, {.i = 2} }, + { SUPERKEY, XK_b, togglebar, {0} }, + { SUPERKEY|ShiftMask, XK_b, toggleextrabar, {0} }, { ALTKEY, XK_Tab, focusstack, {.i = +1 } }, { SUPERKEY, XK_i, incnmaster, {.i = +1 } }, { SUPERKEY, XK_p, incnmaster, {.i = -1 } }, diff --git a/config.h b/config.h index 6c90603..bd3e56b 100644 --- a/config.h +++ b/config.h @@ -3,23 +3,24 @@ #include /* appearance */ -static const unsigned int borderpx = 4; /* border pixel of windows */ -static const unsigned int gappx = 15; /* gaps between windows */ -static const unsigned int snap = 32; /* snap pixel */ -static const int showbar = 1; /* 0 means no bar */ -static const int topbar = 1; /* 0 means bottom bar */ -static const char statussep = ';'; -static const int horizpadbar = 8; /* horizontal padding for statusbar */ -static const int vertpadbar = 12; /* vertical padding for statusbar */ -static const char *fonts[] = { "Ubuntu Mono:size=12" }; -static const char dmenufont[] = "Ubuntu Mono:size=12"; -static const char col_gray1[] = "#222222"; -static const char col_gray2[] = "#444444"; -static const char col_gray3[] = "#bbbbbb"; -static const char col_gray4[] = "#eeeeee"; -static const char col_cyan[] = "#005577"; -static const char *colors[][3] = { - /* fg bg border */ +static const unsigned int borderpx = 4; /* border pixel of windows */ +static const unsigned int gappx = 15; /* gaps between windows */ +static const unsigned int snap = 32; /* snap pixel */ +static const int showbar = 1; /* 0 means no bar */ +static const int showextrabar = 1; /* 0 means no extra bar */ +static const int topbar = 1; /* 0 means bottom bar */ +static const char statussep = ';'; +static const int horizpadbar = 8; /* horizontal padding for statusbar */ +static const int vertpadbar = 12; /* vertical padding for statusbar */ +static const char *fonts[] = { "Ubuntu Mono:size=12" }; +static const char dmenufont[] = "Ubuntu Mono:size=12"; +static const char col_gray1[] = "#222222"; +static const char col_gray2[] = "#444444"; +static const char col_gray3[] = "#bbbbbb"; +static const char col_gray4[] = "#eeeeee"; +static const char col_cyan[] = "#005577"; +static const char *colors[][3] = { + /* fg bg border */ [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, [SchemeSel] = { col_gray4, col_cyan, col_cyan }, }; @@ -32,39 +33,40 @@ static const Rule rules[] = { * WM_CLASS(STRING) = instance, class * WM_NAME(STRING) = title */ - /* class instance title tags mask isfloating monitor */ - // ----- 1 ----- - { "st-256color", NULL, NULL, 0, 0, -1 }, - // ----- 2 ----- - { "Nemo", NULL, NULL, 1 << 1, 0, -1 }, - { "Code", NULL, NULL, 1 << 1, 0, -1 }, - // ----- 3 ----- - { "thunderbird", NULL, NULL, 1 << 2, 0, -1 }, - { "KeePassXC", NULL, NULL, 1 << 2, 0, -1 }, - // ----- 4 ----- - { "vesktop", NULL, NULL, 1 << 3, 0, -1 }, - { "discord", NULL, NULL, 1 << 3, 0, -1 }, - { "KotatogramDesktop", NULL, NULL, 1 << 3, 0, -1 }, - // ----- 5 ----- - { "Steam", NULL, NULL, 1 << 4, 0, -1 }, - { "steam", NULL, NULL, 1 << 4, 0, -1 }, - { "steamwebhelper", NULL, NULL, 1 << 4, 0, -1 }, - // ----- 7 ----- - { "QjackCtl", NULL, NULL, 1 << 6, 1, -1 }, - { "PatchMatrix", NULL, NULL, 1 << 6, 0, -1 }, - { "Blueman-manager", NULL, NULL, 1 << 6, 0, -1 }, - { "corectrl", NULL, NULL, 1 << 6, 0, -1 }, - // ----- 9 ----- - { "firefox", NULL, NULL, 1 << 8, 0, -1 }, - { "librewolf-default", NULL, NULL, 1 << 8, 0, -1 }, - // ----- OTHER ----- - { "xwinwrap", NULL, NULL, 1 << 9, 0, -1 }, + /* class instance title tags mask isfloating monitor */ + // ----- 1 ----- + { "st-256color", NULL, NULL, 0, 0, -1 }, + // ----- 2 ----- + { "Nemo", NULL, NULL, 1 << 1, 0, -1 }, + { "Code", NULL, NULL, 1 << 1, 0, -1 }, + // ----- 3 ----- + { "thunderbird", NULL, NULL, 1 << 2, 0, -1 }, + { "KeePassXC", NULL, NULL, 1 << 2, 0, -1 }, + // ----- 4 ----- + { "vesktop", NULL, NULL, 1 << 3, 0, -1 }, + { "discord", NULL, NULL, 1 << 3, 0, -1 }, + { "KotatogramDesktop", NULL, NULL, 1 << 3, 0, -1 }, + { NULL, "Telegram", NULL, 1 << 3, 0, -1 }, + // ----- 5 ----- + { "Steam", NULL, NULL, 1 << 4, 0, -1 }, + { "steam", NULL, NULL, 1 << 4, 0, -1 }, + { "steamwebhelper", NULL, NULL, 1 << 4, 0, -1 }, + // ----- 7 ----- + { "QjackCtl", NULL, NULL, 1 << 6, 1, -1 }, + { "PatchMatrix", NULL, NULL, 1 << 6, 0, -1 }, + { "Blueman-manager", NULL, NULL, 1 << 6, 0, -1 }, + { "corectrl", NULL, NULL, 1 << 6, 0, -1 }, + // ----- 9 ----- + { "firefox", NULL, NULL, 1 << 8, 0, -1 }, + { "librewolf-default", NULL, NULL, 1 << 8, 0, -1 }, + // ----- OTHER ----- + { "xwinwrap", NULL, NULL, 1 << 9, 0, -1 }, }; /* layout(s) */ -static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */ -static const int nmaster = 1; /* number of clients in master area */ -static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ +static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */ +static const int nmaster = 1;/* number of clients in master area */ +static const int resizehints = 1;/* 1 means respect size hints in tiled resizals */ static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */ #include "layouts.c" @@ -81,10 +83,10 @@ static const Layout layouts[] = { #define SUPERKEY Mod4Mask #define ALTKEY Mod1Mask #define TAGKEYS(KEY,TAG) \ - { SUPERKEY, KEY, view, {.ui = 1 << TAG} }, \ - { SUPERKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \ - { SUPERKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \ - { SUPERKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} }, + { SUPERKEY, KEY, view, {.ui = 1 << TAG} }, \ + { SUPERKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \ + { SUPERKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \ + { SUPERKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} }, /* helper for spawning shell commands in the pre dwm-5.0 fashion */ #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } @@ -105,63 +107,62 @@ static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, static const char *termcmd[] = { "st", NULL }; static const Key keys[] = { - /* modifier key function argument */ - { 0, XK_Print, spawn, {.v = screenshot } }, - { ShiftMask, XK_Print, spawn, {.v = screenshotarea } }, - { 0, XF86XK_AudioRaiseVolume, spawn, {.v = volup } }, - { 0, XF86XK_AudioLowerVolume, spawn, {.v = voldown } }, - { 0, XF86XK_MonBrightnessUp, spawn, {.v = backlightup } }, - { 0, XF86XK_MonBrightnessDown, spawn, {.v = backlightdown } }, - { 0, XF86XK_AudioMute, spawn, {.v = volmute } }, - { SUPERKEY, XK_d, spawn, {.v = dmenucmd } }, - { SUPERKEY, XK_Return, spawn, {.v = termcmd } }, - { SUPERKEY, XK_b, togglebar, {.i = 1} }, - { SUPERKEY|ShiftMask, XK_b, togglebar, {.i = 2} }, - { ALTKEY, XK_Tab, focusstack, {.i = +1 } }, - { SUPERKEY, XK_i, incnmaster, {.i = +1 } }, - { SUPERKEY, XK_p, incnmaster, {.i = -1 } }, - { SUPERKEY, XK_o, setmfact, {.f = -0.05} }, - { SUPERKEY, XK_l, setmfact, {.f = +0.05} }, - { SUPERKEY|ShiftMask, XK_Return, zoom, {0} }, - { SUPERKEY, XK_q, killclient, {0} }, - { SUPERKEY, XK_g, setlayout, {.v = &layouts[0]} }, - { SUPERKEY, XK_t, setlayout, {.v = &layouts[1]} }, - { SUPERKEY, XK_f, setlayout, {.v = &layouts[2]} }, - { SUPERKEY, XK_m, setlayout, {.v = &layouts[3]} }, - { SUPERKEY|ShiftMask, XK_space, togglefloating, {0} }, -// { SUPERKEY, XK_comma, focusmon, {.i = -1 } }, -// { SUPERKEY, XK_period, focusmon, {.i = +1 } }, -// { SUPERKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, -// { SUPERKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, - { SUPERKEY|ShiftMask, XK_f, togglefullscr, {0} }, - TAGKEYS( XK_1, 0) - TAGKEYS( XK_2, 1) - TAGKEYS( XK_3, 2) - TAGKEYS( XK_4, 3) - TAGKEYS( XK_5, 4) - TAGKEYS( XK_6, 5) - TAGKEYS( XK_7, 6) - TAGKEYS( XK_8, 7) - TAGKEYS( XK_9, 8) - TAGKEYS( XK_0, 9) - TAGKEYS( XK_minus, 10) - TAGKEYS( XK_equal, 11) - { SUPERKEY|ShiftMask, XK_q, quitprompt, {0} }, + /* modifier key function argument */ + { 0, XK_Print, spawn, {.v = screenshot } }, + { ShiftMask, XK_Print, spawn, {.v = screenshotarea } }, + { 0, XF86XK_AudioRaiseVolume, spawn, {.v = volup } }, + { 0, XF86XK_AudioLowerVolume, spawn, {.v = voldown } }, + { 0, XF86XK_MonBrightnessUp, spawn, {.v = backlightup } }, + { 0, XF86XK_MonBrightnessDown, spawn, {.v = backlightdown } }, + { 0, XF86XK_AudioMute, spawn, {.v = volmute } }, + { SUPERKEY, XK_d, spawn, {.v = dmenucmd } }, + { SUPERKEY, XK_Return, spawn, {.v = termcmd } }, + { SUPERKEY, XK_b, togglebar, {0} }, + { SUPERKEY|ShiftMask, XK_b, toggleextrabar, {0} }, + { ALTKEY, XK_Tab, focusstack, {.i = +1 } }, + { SUPERKEY, XK_i, incnmaster, {.i = +1 } }, + { SUPERKEY, XK_p, incnmaster, {.i = -1 } }, + { SUPERKEY, XK_o, setmfact, {.f = -0.05} }, + { SUPERKEY, XK_l, setmfact, {.f = +0.05} }, + { SUPERKEY|ShiftMask, XK_Return, zoom, {0} }, + { SUPERKEY, XK_q, killclient, {0} }, + { SUPERKEY, XK_g, setlayout, {.v = &layouts[0]} }, +// { SUPERKEY, XK_t, setlayout, {.v = &layouts[1]} }, + { SUPERKEY, XK_f, setlayout, {.v = &layouts[2]} }, + { SUPERKEY, XK_m, setlayout, {.v = &layouts[3]} }, + { SUPERKEY|ShiftMask, XK_space, togglefloating, {0} }, +// { SUPERKEY, XK_comma, focusmon, {.i = -1 } }, +// { SUPERKEY, XK_period, focusmon, {.i = +1 } }, +// { SUPERKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, +// { SUPERKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, + { SUPERKEY|ShiftMask, XK_f, togglefullscr, {0} }, + TAGKEYS(XK_1, 0) + TAGKEYS(XK_2, 1) + TAGKEYS(XK_3, 2) + TAGKEYS(XK_4, 3) + TAGKEYS(XK_5, 4) + TAGKEYS(XK_6, 5) + TAGKEYS(XK_7, 6) + TAGKEYS(XK_8, 7) + TAGKEYS(XK_9, 8) + TAGKEYS(XK_0, 9) + TAGKEYS(XK_minus, 10) + TAGKEYS(XK_equal, 11) + { SUPERKEY|ShiftMask, XK_q, quitprompt, {0} }, }; /* button definitions */ /* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */ static const Button buttons[] = { - /* click event mask button function argument */ - { ClkLtSymbol, 0, Button1, setlayout, {0} }, - { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} }, - { ClkStatusText, 0, Button2, spawn, {.v = termcmd } }, - { ClkClientWin, SUPERKEY, Button1, movemouse, {0} }, - { ClkClientWin, SUPERKEY, Button2, togglefloating, {0} }, - { ClkClientWin, SUPERKEY, Button3, resizemouse, {0} }, - { ClkTagBar, 0, Button1, view, {0} }, - { ClkTagBar, 0, Button3, toggleview, {0} }, - { ClkTagBar, SUPERKEY, Button1, tag, {0} }, - { ClkTagBar, SUPERKEY, Button3, toggletag, {0} }, + /* clickevent mask button function argument */ + { ClkLtSymbol, 0, Button1, setlayout, {0} }, + { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} }, + { ClkStatusText, 0, Button2, spawn, {.v = termcmd } }, + { ClkClientWin, SUPERKEY, Button1, movemouse, {0} }, + { ClkClientWin, SUPERKEY, Button2, togglefloating, {0} }, + { ClkClientWin, SUPERKEY, Button3, resizemouse, {0} }, + { ClkTagBar, 0, Button1, view, {0} }, + { ClkTagBar, 0, Button3, toggleview, {0} }, + { ClkTagBar, SUPERKEY, Button1, tag, {0} }, + { ClkTagBar, SUPERKEY, Button3, toggletag, {0} }, }; - diff --git a/dwm b/dwm index 4a1f490..20fe676 100755 Binary files a/dwm and b/dwm differ diff --git a/dwm.c b/dwm.c index 5eb48bd..cdda013 100644 --- a/dwm.c +++ b/dwm.c @@ -125,6 +125,7 @@ struct Monitor { unsigned int sellt; unsigned int tagset[2]; int showbar; + int showextrabar; int topbar; Client *clients; Client *sel; @@ -211,6 +212,7 @@ static void showhide(Client *c); static void spawn(const Arg *arg); static void tag(const Arg *arg); static void togglebar(const Arg *arg); +static void toggleextrabar(const Arg *arg); static void togglefloating(const Arg *arg); static void togglefullscr(const Arg *arg); static void toggletag(const Arg *arg); @@ -655,6 +657,7 @@ createmon(void) m->mfact = mfact; m->nmaster = nmaster; m->showbar = showbar; + m->showextrabar = showextrabar; m->topbar = topbar; m->lt[0] = &layouts[0]; m->lt[1] = &layouts[1 % LENGTH(layouts)]; @@ -831,7 +834,7 @@ drawbar(Monitor *m) unsigned int i, occ = 0, urg = 0; Client *c; - if (!m->showbar) + if (!m->showbar && !m->showextrabar) return; /* draw status first so it can be overdrawn by tags later */ @@ -1826,6 +1829,14 @@ togglebar(const Arg *arg) selmon->showbar = selmon->pertag->showbars[selmon->pertag->curtag] = !selmon->showbar; updatebarpos(selmon); XMoveResizeWindow(dpy, selmon->barwin, selmon->wx + gappx, selmon->by + gappx, selmon->ww - 2 * gappx, bh); + arrange(selmon); +} + +void +toggleextrabar(const Arg *arg) +{ + selmon->showextrabar = !selmon->showextrabar; + updatebarpos(selmon); XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx + gappx, selmon->eby - gappx, selmon->ww - 2 * gappx, bh); arrange(selmon); } @@ -1998,17 +2009,23 @@ updatebarpos(Monitor *m) { m->wy = m->my; m->wh = m->mh; - m->wh -= bh * m->showbar * 2; m->wy = m->showbar ? m->wy + bh + gappx : m->wy; + if (m->showbar) { - m->by = m->topbar ? m->wy - bh - gappx : m->wy + m->wh + gappx; - m->eby = m->topbar ? m->wy + m->wh - gappx : m->wy - bh - gappx * 2; - m->wy = topbar ? m->wy : m->wy - gappx * 2; - m->wh = topbar ? m->wh - gappx * 2 : m->wh + gappx * 2; - } else { - m->by = -bh - gappx; - m->eby = -bh + gappx; + m->wh -= bh * m->showbar; + m->by = m->wy - bh - gappx; + m->wh = m->wh - gappx; } + else + m->by = -bh - gappx; + + if (m->showextrabar) { + m->wh -= bh * m->showextrabar; + m->eby = m->wy + m->wh; + m->wh = m->wh - gappx; + } + else + m->eby = -bh + gappx; } void diff --git a/dwm.o b/dwm.o index 5d8416a..6273efd 100644 Binary files a/dwm.o and b/dwm.o differ