diff --git a/.gitignore b/.gitignore index dbfec7b..72c4cc2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -./dwm -./*.o \ No newline at end of file +dwm +*.o diff --git a/config.def.h b/config.def.h index 9382511..f9c3cf8 100755 --- a/config.def.h +++ b/config.def.h @@ -20,13 +20,13 @@ enum showtab_modes { showtab_never, showtab_auto, showtab_nmodes, showtab_always static const int showtab = showtab_auto; /* Default tab bar show mode */ static const Bool toptab = False; /* False means bottom tab bar */ -static const char *fonts[] = { "fontawesome:size=15", "DejaVuSansMono Nerd Font Mono:size=13"} ; -static const char col_gray1[] = "#222222"; +static const char *fonts[] = { "fontawesome:size=15", "DejaVuSansM Nerd Font:size=13"}; +static const char col_gray1[] = "#1e1e2e"; static const char col_gray2[] = "#666666"; static const char col_gray3[] = "#bbbbbb"; static const char col_gray4[] = "#eeeeee"; static const char col_cyan[] = "#7733ee"; -static const char col_borderbar[] = "#222222"; +static const char col_borderbar[] = "#1e1e2e"; static const char *colors[][3] = { /* fg bg border */ [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, @@ -73,11 +73,13 @@ static const Rule rules[] = { /* class instance title tags mask iscentered isfloating isterminal noswallow monitor */ { "Gimp", NULL, NULL, 1 << 7, 0, 1, 0, 0, -1 }, + { "librewolf", NULL, NULL, 1 << 2, 0, 0, 0, -1, -1 }, { "LibreWolf", NULL, NULL, 1 << 2, 0, 0, 0, -1, -1 }, { "firefox", NULL, NULL, 1 << 2, 0, 0, 0, -1, -1 }, { "Brave-browser", NULL, NULL, 1 << 2, 0, 0, 0, -1, -1 }, { "St", NULL, NULL, 0, 0, 0, 1, 0, -1 }, - { "zoom", NULL, NULL, 1 << 1, 0, 0, 0, -1, -1 }, + { NULL, NULL, "Zoom Meeting", 1 << 1, 0, 1, 0, -1, -1 }, + { NULL, NULL, "Zoom Cloud Meetings", 1 << 1, 0, 1, 0, -1, -1 }, { "cmus", NULL, NULL, 1 << 3, 0, 0, 0, -1, -1 }, { "TelegramDesktop", NULL, NULL, 1 << 4, 0, 0, 0, -1, -1 }, { "Discord", NULL, NULL, 1 << 4, 0, 0, 0, -1, -1 }, @@ -122,31 +124,32 @@ static Key keys[] = { /* modifier key function argument */ { 0, XK_Print, spawn, SHCMD("~/scripts/screenshot.sh") }, { 0, XF86XK_PowerOff, spawn, SHCMD("~/scripts/poweroff.sh") }, - { 0, XF86XK_AudioMute, spawn, SHCMD("pulsemixer --toggle-mute") }, + { 0, XF86XK_AudioMute, spawn, SHCMD("~/scripts/mute.sh 1") }, { 0, XF86XK_AudioRaiseVolume, spawn, SHCMD("amixer set Master 1%+") }, { 0, XF86XK_AudioLowerVolume, spawn, SHCMD("amixer set Master 1%-") }, - { 0, XF86XK_AudioPrev, spawn, SHCMD("cmus-remote --prev") }, - { 0, XF86XK_AudioNext, spawn, SHCMD("cmus-remote --next") }, - { 0, XF86XK_AudioPause, spawn, SHCMD("cmus-remote --pause") }, - { 0, XF86XK_AudioPlay, spawn, SHCMD("cmus-remote --pause") }, - { 0, XF86XK_AudioStop, spawn, SHCMD("cmus-remote --stop") }, - { 0, XF86XK_AudioRewind, spawn, SHCMD("cmus-remote --seek -10") }, - { 0, XF86XK_AudioForward, spawn, SHCMD("cmus-remote --seek +10") }, + { 0, XF86XK_AudioPrev, spawn, SHCMD("~/scripts/playmus.sh 3") }, + { 0, XF86XK_AudioNext, spawn, SHCMD("~/scripts/playmus.sh 2") }, + { 0, XF86XK_AudioPause, spawn, SHCMD("~/scripts/playmus.sh 1") }, + { 0, XF86XK_AudioPlay, spawn, SHCMD("~/scripts/playmus.sh 1") }, + { 0, XF86XK_AudioStop, spawn, SHCMD("~/scripts/playmus.sh 1") }, { 0, XF86XK_MonBrightnessUp, spawn, SHCMD("brightnessctl s +5%")}, { 0, XF86XK_MonBrightnessDown, spawn, SHCMD("brightnessctl s 5%-")}, - { ControlMask, XK_space, spawn, SHCMD("dunstctl close") }, - { ControlMask|ShiftMask, XK_space, spawn, SHCMD("dunstctl close-all") }, + { ControlMask|ShiftMask, XK_space, spawn, SHCMD("dunstctl close") }, + { Mod1Mask|ShiftMask, NULL, spawn, SHCMD("~/scripts/switch-input.sh") }, { MODKEY|ShiftMask, XK_space, togglealwaysontop, {0} }, - { MODKEY, XK_w, spawn, SHCMD("firefox") }, + { MODKEY, XK_w, spawn, SHCMD("librewolf") }, { MODKEY, XK_c, spawn, SHCMD("~/scripts/showcal.sh") }, { MODKEY|ShiftMask, XK_l, spawn, SHCMD("slock.sh") }, + { MODKEY|ShiftMask, XK_d, spawn, SHCMD("killall Discord") }, { MODKEY|ShiftMask, XK_e, spawn, SHCMD("emacsclient --create-frame") }, { MODKEY|ShiftMask, XK_m, spawn, SHCMD("~/scripts/autostart.sh") }, { MODKEY|ShiftMask, XK_j, spawn, SHCMD("screenkey.sh") }, + { MODKEY|ShiftMask, XK_k, spawn, SHCMD("killall screenkey") }, { MODKEY|ShiftMask, XK_s, spawn, SHCMD("~/scripts/screenshot.sh 1") }, { MODKEY|ShiftMask, XK_n, spawn, SHCMD("~/scripts/network.sh") }, { MODKEY|ShiftMask, XK_x, spawn, SHCMD("mixer.sh") }, { MODKEY|ShiftMask, XK_t, spawn, SHCMD("telegram-desktop") }, + { MODKEY|ShiftMask, XK_a, spawn, SHCMD("~/scripts/start-jack.sh 1") }, { MODKEY, XK_p, spawn, {.v = dmenucmd } }, { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, { MODKEY, XK_b, togglebar, {0} }, @@ -167,6 +170,7 @@ static Key keys[] = { { MODKEY, XK_o, setlayout, {.v = &layouts[4]} }, { MODKEY, XK_space, setlayout, {0} }, { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, + { MODKEY|ShiftMask, XK_f, togglefullscr, {0} }, { MODKEY, XK_0, view, {.ui = ~0 } }, { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } }, { MODKEY, XK_comma, focusmon, {.i = -1 } }, diff --git a/config.def.h.orig b/config.def.h.orig index 050e620..061c0b5 100755 --- a/config.def.h.orig +++ b/config.def.h.orig @@ -7,6 +7,8 @@ static const unsigned int snap = 32; /* snap pixel */ static const int swallowfloating = 0; /* 1 means swallow floating windows by default */ static const int showbar = 1; /* 0 means no bar */ static const int topbar = 1; /* 0 means bottom bar */ +static const int vertpad = 10; /* vertical padding of bar */ +static const int sidepad = 10; /* horizontal padding of bar */ static const int user_bh = 0; /* 0 means that dwm will calculate bar height, >= 1 means dwm will user_bh as bar height */ static const int horizpadbar = 10; /* horizontal padding for statusbar */ static const int vertpadbar = 10; /* vertical padding for statusbar */ @@ -18,7 +20,7 @@ enum showtab_modes { showtab_never, showtab_auto, showtab_nmodes, showtab_always static const int showtab = showtab_auto; /* Default tab bar show mode */ static const Bool toptab = False; /* False means bottom tab bar */ -static const char *fonts[] = { "fontawesome:size=15", "DejaVuSansMono Nerd Font Mono:size=13"} ; +static const char *fonts[] = { "fontawesome:size=15", "DejaVuSansMono Nerd Font Mono:size=13"}; static const char col_gray1[] = "#222222"; static const char col_gray2[] = "#666666"; static const char col_gray3[] = "#bbbbbb"; @@ -75,7 +77,8 @@ static const Rule rules[] = { { "firefox", NULL, NULL, 1 << 2, 0, 0, 0, -1, -1 }, { "Brave-browser", NULL, NULL, 1 << 2, 0, 0, 0, -1, -1 }, { "St", NULL, NULL, 0, 0, 0, 1, 0, -1 }, - { "zoom", NULL, NULL, 1 << 1, 0, 0, 0, -1, -1 }, + { NULL, NULL, "Zoom Meeting", 1 << 1, 0, 1, 0, -1, -1 }, + { NULL, NULL, "Zoom Cloud Meetings", 1 << 1, 0, 1, 0, -1, -1 }, { "cmus", NULL, NULL, 1 << 3, 0, 0, 0, -1, -1 }, { "TelegramDesktop", NULL, NULL, 1 << 4, 0, 0, 0, -1, -1 }, { "Discord", NULL, NULL, 1 << 4, 0, 0, 0, -1, -1 }, @@ -120,31 +123,32 @@ static Key keys[] = { /* modifier key function argument */ { 0, XK_Print, spawn, SHCMD("~/scripts/screenshot.sh") }, { 0, XF86XK_PowerOff, spawn, SHCMD("~/scripts/poweroff.sh") }, - { 0, XF86XK_AudioMute, spawn, SHCMD("pulsemixer --toggle-mute") }, + { 0, XF86XK_AudioMute, spawn, SHCMD("~/scripts/mute.sh 1") }, { 0, XF86XK_AudioRaiseVolume, spawn, SHCMD("amixer set Master 1%+") }, { 0, XF86XK_AudioLowerVolume, spawn, SHCMD("amixer set Master 1%-") }, - { 0, XF86XK_AudioPrev, spawn, SHCMD("cmus-remote --prev") }, - { 0, XF86XK_AudioNext, spawn, SHCMD("cmus-remote --next") }, - { 0, XF86XK_AudioPause, spawn, SHCMD("cmus-remote --pause") }, - { 0, XF86XK_AudioPlay, spawn, SHCMD("cmus-remote --pause") }, - { 0, XF86XK_AudioStop, spawn, SHCMD("cmus-remote --stop") }, - { 0, XF86XK_AudioRewind, spawn, SHCMD("cmus-remote --seek -10") }, - { 0, XF86XK_AudioForward, spawn, SHCMD("cmus-remote --seek +10") }, + { 0, XF86XK_AudioPrev, spawn, SHCMD("~/scripts/playmus.sh 3") }, + { 0, XF86XK_AudioNext, spawn, SHCMD("~/scripts/playmus.sh 2") }, + { 0, XF86XK_AudioPause, spawn, SHCMD("~/scripts/playmus.sh 1") }, + { 0, XF86XK_AudioPlay, spawn, SHCMD("~/scripts/playmus.sh 1") }, + { 0, XF86XK_AudioStop, spawn, SHCMD("~/scripts/playmus.sh 1") }, { 0, XF86XK_MonBrightnessUp, spawn, SHCMD("brightnessctl s +5%")}, { 0, XF86XK_MonBrightnessDown, spawn, SHCMD("brightnessctl s 5%-")}, - { ControlMask, XK_space, spawn, SHCMD("dunstctl close") }, - { ControlMask|ShiftMask, XK_space, spawn, SHCMD("dunstctl close-all") }, + { ControlMask|ShiftMask, XK_space, spawn, SHCMD("dunstctl close") }, + { Mod1Mask|ShiftMask, NULL, spawn, SHCMD("~/scripts/switch-input.sh") }, { MODKEY|ShiftMask, XK_space, togglealwaysontop, {0} }, { MODKEY, XK_w, spawn, SHCMD("firefox") }, { MODKEY, XK_c, spawn, SHCMD("~/scripts/showcal.sh") }, { MODKEY|ShiftMask, XK_l, spawn, SHCMD("slock.sh") }, + { MODKEY|ShiftMask, XK_d, spawn, SHCMD("killall Discord") }, { MODKEY|ShiftMask, XK_e, spawn, SHCMD("emacsclient --create-frame") }, { MODKEY|ShiftMask, XK_m, spawn, SHCMD("~/scripts/autostart.sh") }, { MODKEY|ShiftMask, XK_j, spawn, SHCMD("screenkey.sh") }, + { MODKEY|ShiftMask, XK_k, spawn, SHCMD("killall screenkey") }, { MODKEY|ShiftMask, XK_s, spawn, SHCMD("~/scripts/screenshot.sh 1") }, { MODKEY|ShiftMask, XK_n, spawn, SHCMD("~/scripts/network.sh") }, { MODKEY|ShiftMask, XK_x, spawn, SHCMD("mixer.sh") }, { MODKEY|ShiftMask, XK_t, spawn, SHCMD("telegram-desktop") }, + { MODKEY|ShiftMask, XK_a, spawn, SHCMD("~/scripts/start-jack.sh 1") }, { MODKEY, XK_p, spawn, {.v = dmenucmd } }, { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, { MODKEY, XK_b, togglebar, {0} }, diff --git a/config.def.h.rej b/config.def.h.rej index 7848918..9f4d609 100644 --- a/config.def.h.rej +++ b/config.def.h.rej @@ -1,11 +1,10 @@ ---- config.def.h 2019-12-10 17:24:37.944708263 +1300 -+++ config.def.h 2019-12-10 17:44:38.447670711 +1300 -@@ -5,6 +5,8 @@ static const unsigned int borderpx = 1; - 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 int vertpad = 10; /* vertical padding of bar */ -+static const int sidepad = 10; /* horizontal padding of bar */ - static const char *fonts[] = { "monospace:size=10" }; - static const char dmenufont[] = "monospace:size=10"; - static const char col_gray1[] = "#222222"; +--- config.def.h ++++ config.def.h +@@ -78,6 +78,7 @@ static Key keys[] = { + { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, + { MODKEY, XK_space, setlayout, {0} }, + { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, ++ { MODKEY|ShiftMask, XK_f, togglefullscr, {0} }, + { MODKEY, XK_0, view, {.ui = ~0 } }, + { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } }, + { MODKEY, XK_comma, focusmon, {.i = -1 } }, diff --git a/config.h b/config.h index 9382511..f9c3cf8 100755 --- a/config.h +++ b/config.h @@ -20,13 +20,13 @@ enum showtab_modes { showtab_never, showtab_auto, showtab_nmodes, showtab_always static const int showtab = showtab_auto; /* Default tab bar show mode */ static const Bool toptab = False; /* False means bottom tab bar */ -static const char *fonts[] = { "fontawesome:size=15", "DejaVuSansMono Nerd Font Mono:size=13"} ; -static const char col_gray1[] = "#222222"; +static const char *fonts[] = { "fontawesome:size=15", "DejaVuSansM Nerd Font:size=13"}; +static const char col_gray1[] = "#1e1e2e"; static const char col_gray2[] = "#666666"; static const char col_gray3[] = "#bbbbbb"; static const char col_gray4[] = "#eeeeee"; static const char col_cyan[] = "#7733ee"; -static const char col_borderbar[] = "#222222"; +static const char col_borderbar[] = "#1e1e2e"; static const char *colors[][3] = { /* fg bg border */ [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, @@ -73,11 +73,13 @@ static const Rule rules[] = { /* class instance title tags mask iscentered isfloating isterminal noswallow monitor */ { "Gimp", NULL, NULL, 1 << 7, 0, 1, 0, 0, -1 }, + { "librewolf", NULL, NULL, 1 << 2, 0, 0, 0, -1, -1 }, { "LibreWolf", NULL, NULL, 1 << 2, 0, 0, 0, -1, -1 }, { "firefox", NULL, NULL, 1 << 2, 0, 0, 0, -1, -1 }, { "Brave-browser", NULL, NULL, 1 << 2, 0, 0, 0, -1, -1 }, { "St", NULL, NULL, 0, 0, 0, 1, 0, -1 }, - { "zoom", NULL, NULL, 1 << 1, 0, 0, 0, -1, -1 }, + { NULL, NULL, "Zoom Meeting", 1 << 1, 0, 1, 0, -1, -1 }, + { NULL, NULL, "Zoom Cloud Meetings", 1 << 1, 0, 1, 0, -1, -1 }, { "cmus", NULL, NULL, 1 << 3, 0, 0, 0, -1, -1 }, { "TelegramDesktop", NULL, NULL, 1 << 4, 0, 0, 0, -1, -1 }, { "Discord", NULL, NULL, 1 << 4, 0, 0, 0, -1, -1 }, @@ -122,31 +124,32 @@ static Key keys[] = { /* modifier key function argument */ { 0, XK_Print, spawn, SHCMD("~/scripts/screenshot.sh") }, { 0, XF86XK_PowerOff, spawn, SHCMD("~/scripts/poweroff.sh") }, - { 0, XF86XK_AudioMute, spawn, SHCMD("pulsemixer --toggle-mute") }, + { 0, XF86XK_AudioMute, spawn, SHCMD("~/scripts/mute.sh 1") }, { 0, XF86XK_AudioRaiseVolume, spawn, SHCMD("amixer set Master 1%+") }, { 0, XF86XK_AudioLowerVolume, spawn, SHCMD("amixer set Master 1%-") }, - { 0, XF86XK_AudioPrev, spawn, SHCMD("cmus-remote --prev") }, - { 0, XF86XK_AudioNext, spawn, SHCMD("cmus-remote --next") }, - { 0, XF86XK_AudioPause, spawn, SHCMD("cmus-remote --pause") }, - { 0, XF86XK_AudioPlay, spawn, SHCMD("cmus-remote --pause") }, - { 0, XF86XK_AudioStop, spawn, SHCMD("cmus-remote --stop") }, - { 0, XF86XK_AudioRewind, spawn, SHCMD("cmus-remote --seek -10") }, - { 0, XF86XK_AudioForward, spawn, SHCMD("cmus-remote --seek +10") }, + { 0, XF86XK_AudioPrev, spawn, SHCMD("~/scripts/playmus.sh 3") }, + { 0, XF86XK_AudioNext, spawn, SHCMD("~/scripts/playmus.sh 2") }, + { 0, XF86XK_AudioPause, spawn, SHCMD("~/scripts/playmus.sh 1") }, + { 0, XF86XK_AudioPlay, spawn, SHCMD("~/scripts/playmus.sh 1") }, + { 0, XF86XK_AudioStop, spawn, SHCMD("~/scripts/playmus.sh 1") }, { 0, XF86XK_MonBrightnessUp, spawn, SHCMD("brightnessctl s +5%")}, { 0, XF86XK_MonBrightnessDown, spawn, SHCMD("brightnessctl s 5%-")}, - { ControlMask, XK_space, spawn, SHCMD("dunstctl close") }, - { ControlMask|ShiftMask, XK_space, spawn, SHCMD("dunstctl close-all") }, + { ControlMask|ShiftMask, XK_space, spawn, SHCMD("dunstctl close") }, + { Mod1Mask|ShiftMask, NULL, spawn, SHCMD("~/scripts/switch-input.sh") }, { MODKEY|ShiftMask, XK_space, togglealwaysontop, {0} }, - { MODKEY, XK_w, spawn, SHCMD("firefox") }, + { MODKEY, XK_w, spawn, SHCMD("librewolf") }, { MODKEY, XK_c, spawn, SHCMD("~/scripts/showcal.sh") }, { MODKEY|ShiftMask, XK_l, spawn, SHCMD("slock.sh") }, + { MODKEY|ShiftMask, XK_d, spawn, SHCMD("killall Discord") }, { MODKEY|ShiftMask, XK_e, spawn, SHCMD("emacsclient --create-frame") }, { MODKEY|ShiftMask, XK_m, spawn, SHCMD("~/scripts/autostart.sh") }, { MODKEY|ShiftMask, XK_j, spawn, SHCMD("screenkey.sh") }, + { MODKEY|ShiftMask, XK_k, spawn, SHCMD("killall screenkey") }, { MODKEY|ShiftMask, XK_s, spawn, SHCMD("~/scripts/screenshot.sh 1") }, { MODKEY|ShiftMask, XK_n, spawn, SHCMD("~/scripts/network.sh") }, { MODKEY|ShiftMask, XK_x, spawn, SHCMD("mixer.sh") }, { MODKEY|ShiftMask, XK_t, spawn, SHCMD("telegram-desktop") }, + { MODKEY|ShiftMask, XK_a, spawn, SHCMD("~/scripts/start-jack.sh 1") }, { MODKEY, XK_p, spawn, {.v = dmenucmd } }, { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, { MODKEY, XK_b, togglebar, {0} }, @@ -167,6 +170,7 @@ static Key keys[] = { { MODKEY, XK_o, setlayout, {.v = &layouts[4]} }, { MODKEY, XK_space, setlayout, {0} }, { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, + { MODKEY|ShiftMask, XK_f, togglefullscr, {0} }, { MODKEY, XK_0, view, {.ui = ~0 } }, { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } }, { MODKEY, XK_comma, focusmon, {.i = -1 } }, diff --git a/drw.c b/drw.c index 8fd1ca4..490a592 100755 --- a/drw.c +++ b/drw.c @@ -202,6 +202,8 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrname) DefaultColormap(drw->dpy, drw->screen), clrname, dest)) die("error, cannot allocate color '%s'", clrname); + + dest->pixel |= 0xff << 24; } /* Wrapper to create color schemes. The caller has to call free(3) on the diff --git a/drw.o b/drw.o index 028b5df..7698233 100644 Binary files a/drw.o and b/drw.o differ diff --git a/dwm b/dwm index e53aa26..e0918a8 100755 Binary files a/dwm and b/dwm differ diff --git a/dwm-actualfullscreen-20211013-cb3f58a.diff b/dwm-actualfullscreen-20211013-cb3f58a.diff new file mode 100644 index 0000000..d3be230 --- /dev/null +++ b/dwm-actualfullscreen-20211013-cb3f58a.diff @@ -0,0 +1,68 @@ +From eea13010ffc3983392857ee1e3804e3aa1064d7a Mon Sep 17 00:00:00 2001 +From: Soenke Lambert +Date: Wed, 13 Oct 2021 18:21:09 +0200 +Subject: [PATCH] Fullscreen current window with [Alt]+[Shift]+[f] + +This actually fullscreens a window, instead of just hiding the statusbar +and applying the monocle layout. +--- + config.def.h | 1 + + dwm.1 | 3 +++ + dwm.c | 8 ++++++++ + 3 files changed, 12 insertions(+) + +diff --git a/config.def.h b/config.def.h +index 1c0b587..8cd3204 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -78,6 +78,7 @@ static Key keys[] = { + { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, + { MODKEY, XK_space, setlayout, {0} }, + { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, ++ { MODKEY|ShiftMask, XK_f, togglefullscr, {0} }, + { MODKEY, XK_0, view, {.ui = ~0 } }, + { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } }, + { MODKEY, XK_comma, focusmon, {.i = -1 } }, +diff --git a/dwm.1 b/dwm.1 +index 13b3729..a368d05 100644 +--- a/dwm.1 ++++ b/dwm.1 +@@ -116,6 +116,9 @@ Zooms/cycles focused window to/from master area (tiled layouts only). + .B Mod1\-Shift\-c + Close focused window. + .TP ++.B Mod1\-Shift\-f ++Toggle fullscreen for focused window. ++.TP + .B Mod1\-Shift\-space + Toggle focused window between tiled and floating state. + .TP +diff --git a/dwm.c b/dwm.c +index 4465af1..c1b899a 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -211,6 +211,7 @@ static void tagmon(const Arg *arg); + static void tile(Monitor *); + static void togglebar(const Arg *arg); + static void togglefloating(const Arg *arg); ++static void togglefullscr(const Arg *arg); + static void toggletag(const Arg *arg); + static void toggleview(const Arg *arg); + static void unfocus(Client *c, int setfocus); +@@ -1719,6 +1720,13 @@ togglefloating(const Arg *arg) + arrange(selmon); + } + ++void ++togglefullscr(const Arg *arg) ++{ ++ if(selmon->sel) ++ setfullscreen(selmon->sel, !selmon->sel->isfullscreen); ++} ++ + void + toggletag(const Arg *arg) + { +-- +2.30.2 + diff --git a/dwm.1 b/dwm.1 index 0bcc9b7..f4355da 100755 --- a/dwm.1 +++ b/dwm.1 @@ -131,6 +131,9 @@ Zooms/cycles focused window to/from master area (tiled layouts only). .B Mod1\-Shift\-c Close focused window. .TP +.B Mod1\-Shift\-f +Toggle fullscreen for focused window. +.TP .B Mod1\-Shift\-space Toggle focused window between tiled and floating state. .TP diff --git a/dwm.1.orig b/dwm.1.orig new file mode 100755 index 0000000..0bcc9b7 --- /dev/null +++ b/dwm.1.orig @@ -0,0 +1,191 @@ +.TH DWM 1 dwm\-VERSION +.SH NAME +dwm \- dynamic window manager +.SH SYNOPSIS +.B dwm +.RB [ \-v ] +.SH DESCRIPTION +dwm is a dynamic window manager for X. It manages windows in tiled, monocle +and floating layouts. Either layout can be applied dynamically, optimising the +environment for the application in use and the task performed. +.P +In tiled layouts windows are managed in a master and stacking area. The master +area on the left contains one window by default, and the stacking area on the +right contains all other windows. The number of master area windows can be +adjusted from zero to an arbitrary number. In monocle layout all windows are +maximised to the screen size. In floating layout windows can be resized and +moved freely. Dialog windows are always managed floating, regardless of the +layout applied. +.P +Windows are grouped by tags. Each window can be tagged with one or multiple +tags. Selecting certain tags displays all windows with these tags. +.P +Each screen contains two small status bars. +.P +One bar displays all available tags, the layout, the title of the focused +window, and the text read from the root window name property, if the screen is +focused. A floating window is indicated with an empty square and a maximised +floating window is indicated with a filled square before the windows title. The +selected tags are indicated with a different color. The tags of the focused +window are indicated with a filled square in the top left corner. The tags +which are applied to one or more windows are indicated with an empty square in +the top left corner. +.P +Another bar contains a tab for each window of the current view and allows +navigation between windows, especially in the monocle mode. The different +display modes of this bar are described under the Mod1\-w Keybord command +section. When a single tag is selected, that tag is indicated in the left corner +of the tab bar. +.P +dwm draws a small border around windows to indicate the focus state. +.SH OPTIONS +.TP +.B \-v +prints version information to standard output, then exits. +.SH USAGE +.SS Status bar +.TP +.B X root window name +is read and displayed in the status text area. It can be set with the +.BR xsetroot (1) +command. +.TP +.B Button1 +click on a tag label to display all windows with that tag, click on the layout +label toggles between tiled and floating layout, click on a window name in the +tab bar brings focus to that window. +.TP +.B Button3 +click on a tag label adds/removes all windows with that tag to/from the view. +.TP +.B Mod1\-Button1 +click on a tag label applies that tag to the focused window. +.TP +.B Mod1\-Button3 +click on a tag label adds/removes that tag to/from the focused window. +.SS Keyboard commands +.TP +.B Mod1\-Shift\-Return +Start +.BR st(1). +.TP +.B Mod1\-p +Spawn +.BR dmenu(1) +for launching other programs. +.TP +.B Mod1\-, +Focus previous screen, if any. +.TP +.B Mod1\-. +Focus next screen, if any. +.TP +.B Mod1\-Shift\-, +Send focused window to previous screen, if any. +.TP +.B Mod1\-Shift\-. +Send focused window to next screen, if any. +.TP +.B Mod1\-b +Toggles bar on and off. +.TP +.B Mod1\-t +Sets tiled layout. +.TP +.B Mod1\-f +Sets floating layout. +.TP +.B Mod1\-m +Sets monocle layout. +.TP +.B Mod1\-space +Toggles between current and previous layout. +.TP +.B Mod1\-j +Focus next window. +.TP +.B Mod1\-k +Focus previous window. +.TP +.B Mod1\-i +Increase number of windows in master area. +.TP +.B Mod1\-d +Decrease number of windows in master area. +.TP +.B Mod1\-l +Increase master area size. +.TP +.B Mod1\-h +Decrease master area size. +.TP +.B Mod1\-w +Cycle over the tab bar display modes: never displayed, always displayed, +displayed only in monocle mode when the view contains than one window (auto +mode). Some display modes can be disabled in the configuration, config.h. In +the default configuration only "never" and "auto" display modes are enabled. +.TP +.B Mod1\-Return +Zooms/cycles focused window to/from master area (tiled layouts only). +.TP +.B Mod1\-Shift\-c +Close focused window. +.TP +.B Mod1\-Shift\-space +Toggle focused window between tiled and floating state. +.TP +.B Mod1\-Tab +Toggles to the previously selected tags. +.TP +.B Mod1\-Shift\-[1..n] +Apply nth tag to focused window. +.TP +.B Mod1\-Shift\-0 +Apply all tags to focused window. +.TP +.B Mod1\-Control\-Shift\-[1..n] +Add/remove nth tag to/from focused window. +.TP +.B Mod1\-[1..n] +View all windows with nth tag. +.TP +.B Mod1\-0 +View all windows with any tag. +.TP +.B Mod1\-Control\-[1..n] +Add/remove all windows with nth tag to/from the view. +.TP +.B Mod1\-Shift\-q +Quit dwm. +.SS Mouse commands +.TP +.B Mod1\-Button1 +Move focused window while dragging. Tiled windows will be toggled to the floating state. +.TP +.B Mod1\-Button2 +Toggles focused window between floating and tiled state. +.TP +.B Mod1\-Button3 +Resize focused window while dragging. Tiled windows will be toggled to the floating state. +.SH CUSTOMIZATION +dwm is customized by creating a custom config.h and (re)compiling the source +code. This keeps it fast, secure and simple. +.SH SEE ALSO +.BR dmenu (1), +.BR st (1) +.SH ISSUES +Java applications which use the XToolkit/XAWT backend may draw grey windows +only. The XToolkit/XAWT backend breaks ICCCM-compliance in recent JDK 1.5 and early +JDK 1.6 versions, because it assumes a reparenting window manager. Possible workarounds +are using JDK 1.4 (which doesn't contain the XToolkit/XAWT backend) or setting the +environment variable +.BR AWT_TOOLKIT=MToolkit +(to use the older Motif backend instead) or running +.B xprop -root -f _NET_WM_NAME 32a -set _NET_WM_NAME LG3D +or +.B wmname LG3D +(to pretend that a non-reparenting window manager is running that the +XToolkit/XAWT backend can recognize) or when using OpenJDK setting the environment variable +.BR _JAVA_AWT_WM_NONREPARENTING=1 . +.SH BUGS +Send all bug reports with a patch to hackers@suckless.org. diff --git a/dwm.c b/dwm.c index f8e9b4b..ed3901e 100755 --- a/dwm.c +++ b/dwm.c @@ -64,7 +64,7 @@ #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) /* enums */ -enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ +enum { CurNormal, CurResize, CurMove, CurHand, CurLast }; /* cursor */ enum { SchemeNorm, SchemeSel, SchemeDis}; /* color schemes */ enum { NetSupported, NetWMName, NetWMState, NetWMCheck, NetWMFullscreen, NetActiveWindow, NetWMWindowType, @@ -239,6 +239,7 @@ static void tagmon(const Arg *arg); static void tile(Monitor *); static void togglebar(const Arg *arg); static void togglefloating(const Arg *arg); +static void togglefullscr(const Arg *arg); static void togglealwaysontop(const Arg *arg); static void toggletag(const Arg *arg); static void toggleview(const Arg *arg); @@ -1016,7 +1017,7 @@ drawbar(Monitor *m) x += w; } w = blw = TEXTW(m->ltsymbol); - drw_setscheme(drw, scheme[SchemeNorm]); + drw_setscheme(drw, scheme[SchemeDis]); x = drw_text(drw, x, y, w, th, lrpad / 2, m->ltsymbol, 0); if ((w = mw - sw - stw - x) > th) { @@ -1062,7 +1063,7 @@ drawtab(Monitor *m) { int sorted_label_widths[MAXTABS]; int tot_width; int maxsize = bh; - int x = 0; + int x = borderpx, y = borderpx; int w = 0; //view_info: indicate the tag which is displayed in the view @@ -1114,7 +1115,7 @@ drawtab(Monitor *m) { if(m->tab_widths[i] > maxsize) m->tab_widths[i] = maxsize; w = m->tab_widths[i]; drw_setscheme(drw, (c == m->sel) ? scheme[SchemeSel] : scheme[SchemeNorm]); - drw_text(drw, x, 0, w, th, lrpad / 2, c->name, 0); + drw_text(drw, x, y, w, th - borderpx * 2, lrpad / 2, c->name, 0); x += w; ++i; } @@ -1123,12 +1124,12 @@ drawtab(Monitor *m) { /* cleans interspace between window names and current viewed tag label */ w = m->ww - view_info_w - x; - drw_text(drw, x, 0, w, th, lrpad / 2, "", 0); + drw_text(drw, x, y, w, th - borderpx * 2, lrpad / 2, "", 0); /* view info */ x += w; w = view_info_w; - drw_text(drw, x, 0, w, th, lrpad / 2, view_info, 0); + drw_text(drw, x, y, w, th - borderpx * 2, lrpad / 2, view_info, 0); drw_map(drw, m->tabwin, 0, 0, m->ww, th); } @@ -2011,6 +2012,7 @@ setup(void) cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr); cursor[CurResize] = drw_cur_create(drw, XC_sizing); cursor[CurMove] = drw_cur_create(drw, XC_fleur); + cursor[CurHand] = drw_cur_create(drw, XC_hand2); /* init appearance */ if (LENGTH(tags) > LENGTH(tagsel)) die("too few color schemes for the tags"); @@ -2225,6 +2227,13 @@ togglealwaysontop(const Arg *arg) arrange(selmon); } +void +togglefullscr(const Arg *arg) +{ + if(selmon->sel) + setfullscreen(selmon->sel, !selmon->sel->isfullscreen); +} + void toggletag(const Arg *arg) { @@ -2352,18 +2361,20 @@ updatebars(void) }; XClassHint ch = {"dwm", "dwm"}; for (m = mons; m; m = m->next) { + if (!m->tabwin) { + m->tabwin = XCreateWindow(dpy, root, m->wx + sp, m->ty + (m->toptab ? vp : -vp), m->ww - 2 * sp, th, 0, DefaultDepth(dpy, screen), + CopyFromParent, DefaultVisual(dpy, screen), + CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); + XDefineCursor(dpy, m->tabwin, cursor[CurNormal]->cursor); + XMapRaised(dpy, m->tabwin); + } if (m->barwin) continue; m->barwin = XCreateWindow(dpy, root, m->wx + sp, m->by + vp, m->ww - 2 * sp, bh, 0, DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen), CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); - XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor); + XDefineCursor(dpy, m->barwin, cursor[CurHand]->cursor); XMapRaised(dpy, m->barwin); - m->tabwin = XCreateWindow(dpy, root, m->wx, m->ty, m->ww, th, 0, DefaultDepth(dpy, screen), - CopyFromParent, DefaultVisual(dpy, screen), - CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); - XDefineCursor(dpy, m->tabwin, cursor[CurNormal]->cursor); - XMapRaised(dpy, m->tabwin); XSetClassHint(dpy, m->barwin, &ch); } } @@ -2391,12 +2402,12 @@ updatebarpos(Monitor *m) if(m->showtab == showtab_always || ((m->showtab == showtab_auto) && (nvis > 1) && (m->lt[m->sellt]->arrange == monocle))){ - m->wh -= th; - m->ty = m->toptab ? m->wy : m->wy + m->wh; + m->wh = m->wh - vertpad - th; + m->ty = m->toptab ? m->wy : m->wy + m->wh + vertpad; if ( m->toptab ) - m->wy += th; + m->wy += th + vp; } else { - m->ty = -th; + m->ty = -th - vp; } } diff --git a/dwm.c.orig b/dwm.c.orig index 6f7f886..76fc91a 100755 --- a/dwm.c.orig +++ b/dwm.c.orig @@ -64,7 +64,7 @@ #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) /* enums */ -enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ +enum { CurNormal, CurResize, CurMove, CurHand, CurLast }; /* cursor */ enum { SchemeNorm, SchemeSel, SchemeDis}; /* color schemes */ enum { NetSupported, NetWMName, NetWMState, NetWMCheck, NetWMFullscreen, NetActiveWindow, NetWMWindowType, @@ -280,6 +280,8 @@ static int sw, sh; /* X display screen geometry width, height */ static int bh, blw = 0; /* bar geometry */ static int th = 0; /* tab bar geometry */ static int lrpad; /* sum of left and right padding for text */ +static int vp; /* vertical padding for bar */ +static int sp; /* side padding for bar */ static int (*xerrorxlib)(Display *, XErrorEvent *); static unsigned int numlockmask = 0; static void (*handler[LASTEvent]) (XEvent *) = { @@ -718,7 +720,7 @@ configurenotify(XEvent *e) //refreshing display of status bar. The tab bar is handled by the arrange() //method, which is called below for (m = mons; m; m = m->next){ - XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); + XMoveResizeWindow(dpy, m->barwin, m->wx + sp, m->by + vp, m->ww - 2 * sp, bh); } focus(NULL); arrange(NULL); @@ -911,12 +913,12 @@ drawstatusbar(Monitor *m, int bh, char* stext) { text = p; w += horizpadbar; - ret = x = m->ww - borderpx - w; + ret = x = m->ww - borderpx - w - 2 * sp; drw_setscheme(drw, scheme[LENGTH(colors)]); drw->scheme[ColFg] = scheme[SchemeNorm][ColFg]; drw->scheme[ColBg] = scheme[SchemeNorm][ColBg]; - drw_rect(drw, x, borderpx, w, bh, 1, 1); + drw_rect(drw, x, borderpx, w - 2 * sp, bh, 1, 1); x += horizpadbar / 2; /* process status text */ @@ -1014,12 +1016,12 @@ drawbar(Monitor *m) x += w; } w = blw = TEXTW(m->ltsymbol); - drw_setscheme(drw, scheme[SchemeNorm]); + drw_setscheme(drw, scheme[SchemeDis]); x = drw_text(drw, x, y, w, th, lrpad / 2, m->ltsymbol, 0); if ((w = mw - sw - stw - x) > th) { drw_setscheme(drw, scheme[SchemeNorm]); - drw_rect(drw, x, y, w, th, 1, 1); + drw_rect(drw, x, y, w - 2 * sp, th, 1, 1); } drw_map(drw, m->barwin, 0, 0, m->ww, bh); } @@ -1060,7 +1062,7 @@ drawtab(Monitor *m) { int sorted_label_widths[MAXTABS]; int tot_width; int maxsize = bh; - int x = 0; + int x = borderpx, y = borderpx; int w = 0; //view_info: indicate the tag which is displayed in the view @@ -1112,7 +1114,7 @@ drawtab(Monitor *m) { if(m->tab_widths[i] > maxsize) m->tab_widths[i] = maxsize; w = m->tab_widths[i]; drw_setscheme(drw, (c == m->sel) ? scheme[SchemeSel] : scheme[SchemeNorm]); - drw_text(drw, x, 0, w, th, lrpad / 2, c->name, 0); + drw_text(drw, x, y, w, th - borderpx * 2, lrpad / 2, c->name, 0); x += w; ++i; } @@ -1121,12 +1123,12 @@ drawtab(Monitor *m) { /* cleans interspace between window names and current viewed tag label */ w = m->ww - view_info_w - x; - drw_text(drw, x, 0, w, th, lrpad / 2, "", 0); + drw_text(drw, x, y, w, th - borderpx * 2, lrpad / 2, "", 0); /* view info */ x += w; w = view_info_w; - drw_text(drw, x, 0, w, th, lrpad / 2, view_info, 0); + drw_text(drw, x, y, w, th - borderpx * 2, lrpad / 2, view_info, 0); drw_map(drw, m->tabwin, 0, 0, m->ww, th); } @@ -1987,6 +1989,9 @@ setup(void) bh = user_bh ? user_bh : drw->fonts->h + 2 + vertpadbar + borderpx * 2; th = bh; updategeom(); + sp = sidepad; + vp = (topbar == 1) ? vertpad : - vertpad; + /* init atoms */ utf8string = XInternAtom(dpy, "UTF8_STRING", False); wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); @@ -2006,6 +2011,7 @@ setup(void) cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr); cursor[CurResize] = drw_cur_create(drw, XC_sizing); cursor[CurMove] = drw_cur_create(drw, XC_fleur); + cursor[CurHand] = drw_cur_create(drw, XC_hand2); /* init appearance */ if (LENGTH(tags) > LENGTH(tagsel)) die("too few color schemes for the tags"); @@ -2020,6 +2026,7 @@ setup(void) /* init bars */ updatebars(); updatestatus(); + updatebarpos(selmon); /* supporting window for NetWMCheck */ wmcheckwin = XCreateSimpleWindow(dpy, root, 0, 0, 1, 1, 0, 0, 0); XChangeProperty(dpy, wmcheckwin, netatom[NetWMCheck], XA_WINDOW, 32, @@ -2164,7 +2171,7 @@ togglebar(const Arg *arg) { selmon->showbar = selmon->pertag->showbars[selmon->pertag->curtag] = !selmon->showbar; updatebarpos(selmon); - XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); + XMoveResizeWindow(dpy, selmon->barwin, selmon->wx + sp, selmon->by + vp, selmon->ww - 2 * sp, bh); arrange(selmon); } @@ -2346,18 +2353,20 @@ updatebars(void) }; XClassHint ch = {"dwm", "dwm"}; for (m = mons; m; m = m->next) { + if (!m->tabwin) { + m->tabwin = XCreateWindow(dpy, root, m->wx + sp, m->ty + (m->toptab ? vp : -vp), m->ww - 2 * sp, th, 0, DefaultDepth(dpy, screen), + CopyFromParent, DefaultVisual(dpy, screen), + CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); + XDefineCursor(dpy, m->tabwin, cursor[CurNormal]->cursor); + XMapRaised(dpy, m->tabwin); + } if (m->barwin) continue; - m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen), + m->barwin = XCreateWindow(dpy, root, m->wx + sp, m->by + vp, m->ww - 2 * sp, bh, 0, DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen), CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); - XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor); + XDefineCursor(dpy, m->barwin, cursor[CurHand]->cursor); XMapRaised(dpy, m->barwin); - m->tabwin = XCreateWindow(dpy, root, m->wx, m->ty, m->ww, th, 0, DefaultDepth(dpy, screen), - CopyFromParent, DefaultVisual(dpy, screen), - CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); - XDefineCursor(dpy, m->tabwin, cursor[CurNormal]->cursor); - XMapRaised(dpy, m->tabwin); XSetClassHint(dpy, m->barwin, &ch); } } @@ -2371,12 +2380,12 @@ updatebarpos(Monitor *m) m->wy = m->my; m->wh = m->mh; if (m->showbar) { - m->wh -= bh; - m->by = m->topbar ? m->wy : m->wy + m->wh; + m->wh = m->wh - vertpad - bh; + m->by = m->topbar ? m->wy : m->wy + m->wh + vertpad; if ( m->topbar ) - m->wy += bh; + m->wy += bh + vp; } else { - m->by = -bh; + m->by = -bh - vp; } for(c = m->clients; c; c = c->next){ @@ -2385,12 +2394,12 @@ updatebarpos(Monitor *m) if(m->showtab == showtab_always || ((m->showtab == showtab_auto) && (nvis > 1) && (m->lt[m->sellt]->arrange == monocle))){ - m->wh -= th; - m->ty = m->toptab ? m->wy : m->wy + m->wh; + m->wh = m->wh - vertpad - th; + m->ty = m->toptab ? m->wy : m->wy + m->wh + vertpad; if ( m->toptab ) - m->wy += th; + m->wy += th + vp; } else { - m->ty = -th; + m->ty = -th - vp; } } diff --git a/dwm.c.rej b/dwm.c.rej index 2e76cf0..46ebb95 100644 --- a/dwm.c.rej +++ b/dwm.c.rej @@ -1,51 +1,10 @@ ---- dwm.c 2019-12-10 17:24:37.945708263 +1300 -+++ dwm.c 2019-12-10 17:41:46.192676099 +1300 -@@ -569,7 +571,7 @@ configurenotify(XEvent *e) - for (c = m->clients; c; c = c->next) - if (c->isfullscreen) - resizeclient(c, m->mx, m->my, m->mw, m->mh); -- XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); -+ XMoveResizeWindow(dpy, m->barwin, m->wx + sp, m->by + vp, m->ww - 2 * sp, bh); - } - focus(NULL); - arrange(NULL); -@@ -707,7 +709,7 @@ drawbar(Monitor *m) - if (m == selmon) { /* status is only drawn on selected monitor */ - drw_setscheme(drw, scheme[SchemeNorm]); - sw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ -- drw_text(drw, m->ww - sw, 0, sw, bh, 0, stext, 0); -+ drw_text(drw, m->ww - sw - 2 * sp, 0, sw, bh, 0, stext, 0); - } - - for (c = m->clients; c; c = c->next) { -@@ -733,12 +735,12 @@ drawbar(Monitor *m) - if ((w = m->ww - sw - x) > bh) { - if (m->sel) { - drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); -- drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0); -+ drw_text(drw, x, 0, w - 2 * sp, bh, lrpad / 2, m->sel->name, 0); - if (m->sel->isfloating) - drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); - } else { - drw_setscheme(drw, scheme[SchemeNorm]); -- drw_rect(drw, x, 0, w, bh, 1, 1); -+ drw_rect(drw, x, 0, w - 2 * sp, bh, 1, 1); - } - } - drw_map(drw, m->barwin, 0, 0, m->ww, bh); -@@ -1832,11 +1838,11 @@ updatebarpos(Monitor *m) - m->wy = m->my; - m->wh = m->mh; - if (m->showbar) { -- m->wh -= bh; -- m->by = m->topbar ? m->wy : m->wy + m->wh; -- m->wy = m->topbar ? m->wy + bh : m->wy; -+ m->wh = m->wh - vertpad - bh; -+ m->by = m->topbar ? m->wy : m->wy + m->wh + vertpad; -+ m->wy = m->topbar ? m->wy + bh + vp : m->wy; - } else -- m->by = -bh; -+ m->by = -bh - vp; - } - - void +--- dwm.c ++++ dwm.c +@@ -211,6 +211,7 @@ static void tagmon(const Arg *arg); + static void tile(Monitor *); + static void togglebar(const Arg *arg); + static void togglefloating(const Arg *arg); ++static void togglefullscr(const Arg *arg); + static void toggletag(const Arg *arg); + static void toggleview(const Arg *arg); + static void unfocus(Client *c, int setfocus); diff --git a/dwm.o b/dwm.o index d2e46e8..cdc3d36 100644 Binary files a/dwm.o and b/dwm.o differ diff --git a/util.o b/util.o index c0e1b2e..a853f4c 100644 Binary files a/util.o and b/util.o differ