feat: updated patches to latest versions

This commit is contained in:
Ryan Kes 2020-12-01 10:52:26 +01:00
parent eed6a6bc19
commit bde1fc1e63
16 changed files with 391 additions and 718 deletions

View file

@ -1,5 +1,5 @@
# $Id$ # $Id$
# Maintainer: Ryan Kes <alrayyes@gmail.com> # Maintainer: Ryan Kes <ryan@ryankes.eu>
pkgname=higherlearning-dwm pkgname=higherlearning-dwm
pkgver=6.2 pkgver=6.2
@ -9,23 +9,21 @@ url="http://dwm.suckless.org"
arch=('i686' 'x86_64') arch=('i686' 'x86_64')
license=('MIT') license=('MIT')
options=(zipman) options=(zipman)
depends=('libx11' 'libxinerama' 'libxft' 'freetype2' 'dmenu' 'otf-nerd-fonts-fira-code') depends=('libx11' 'libxinerama' 'libxft' 'freetype2' 'dmenu')
optdepends=('gllock-git' 'higherlearning-st') optdepends=('gllock-git' 'higherlearning-st')
conflicts=('dwm') conflicts=('dwm')
install=dwm.install install=dwm.install
_patches=( _patches=(
"dwm-systray-20190208-cb3f58a.diff" "dwm-systray-6.2.diff"
"dwm-noborder-20170207-bb3bd6f.diff" "dwm-noborder-6.2.diff"
"dwm-autostart-20161205-bb3bd6f.diff" "local-autostart-20200610-cb3f58a.diff"
"dwm-cyclelayouts-20180524-6.2.diff" "dwm-cyclelayouts-20180524-6.2.diff"
"dwm-gridmode-20170909-ceac8c9.diff" "local-gridmode-20170909-ceac8c9.diff"
"dwm-r1615-selfrestart.diff" "local-r1615-selfrestart.diff"
"local-hide_vacant_tags-git-20160626-7af4d43.diff" "dwm-hide_vacant_tags-6.2.diff"
"local-statuscolors-20181008-b69c870.diff" "local-scratchpad-6.2.diff"
"local-fancybar-2019018-b69c870.diff" "local-alpha-20201019-61bb8b2.diff"
"local-scratchpad-20170207-bb3bd6f.diff"
"local-alpha-20180613-b69c870.diff"
) )
source=(http://dl.suckless.org/dwm/dwm-$pkgver.tar.gz source=(http://dl.suckless.org/dwm/dwm-$pkgver.tar.gz
@ -34,23 +32,21 @@ source=(http://dl.suckless.org/dwm/dwm-$pkgver.tar.gz
"${_patches[@]}") "${_patches[@]}")
md5sums=('9929845ccdec4d2cc191f16210dd7f3d' md5sums=('9929845ccdec4d2cc191f16210dd7f3d'
'598fcb5275d7f036807765370b5a226d' '071eefef57eb3362989a4e3501d2de7b'
'939f403a71b6e85261d09fc3412269ee' '939f403a71b6e85261d09fc3412269ee'
'31a7569d7f3d43846f59e854ec5d1da0' '1dfc635c0f4c4c670beb20cbb7234c0f'
'fbb786263f2d714b18368ff64779d669' '453062a348098b240e55f40623f14ed0'
'46ff022e2a2c6139e71399eb19d1aebb' '6f1cd0869b315c9ec03d182af6c31ce2'
'5baffd8c124095d06b133e9b31a854b2' '5baffd8c124095d06b133e9b31a854b2'
'6055775113fd4dc06200bc6aaafb72fb' 'ed77898009dea962f66a9dd607729549'
'aa3d5f3c45057a2a6ee73aede3fc218a' '8c3ad89cb98dd2b9152075b6e29cb579'
'd2781ac29048fc50e42e0f11e6cf7bce' 'c446b71a8b8cce25db86a47805500dfa'
'c5469c1457955a8447e05ec5118b3ce6' '8e7bef8198d212f8c33efbf160b44b87'
'77e3bfab2270dde73caf4e1b14566386' '3f50d21e606afd5c8b3c67dbbbb9ea32')
'7381051e12596394791092f0d39a2dd2'
'60a545c6661638af619913e2a093ebf8')
prepare() { prepare() {
cd $srcdir/dwm-$pkgver cd $srcdir/dwm-$pkgver
sed -i "25 a \ \t{ NULL, NULL }," "$srcdir/$(basename ${_patches[4]})" #sed -i "25 a \ \t{ NULL, NULL }," "$srcdir/$(basename ${_patches[4]})"
for patch in "${_patches[@]}"; do for patch in "${_patches[@]}"; do
echo "Applying patch $(basename $patch)..." echo "Applying patch $(basename $patch)..."

View file

@ -12,34 +12,20 @@
- [[https://dwm.suckless.org/patches/gridmode/][gridmode]] - [[https://dwm.suckless.org/patches/gridmode/][gridmode]]
- [[https://dwm.suckless.org/patches/selfrestart/][selfrestart]] - [[https://dwm.suckless.org/patches/selfrestart/][selfrestart]]
- [[https://dwm.suckless.org/patches/hide_vacant_tags/][hide_vacant_tags]] - [[https://dwm.suckless.org/patches/hide_vacant_tags/][hide_vacant_tags]]
- [[https://dwm.suckless.org/patches/statuscolors/][statuscolors]]
- [[https://dwm.suckless.org/patches/fancybar/][fancybar]]
- [[https://dwm.suckless.org/patches/scratchpad/][scratchpad]] - [[https://dwm.suckless.org/patches/scratchpad/][scratchpad]]
- [[https://dwm.suckless.org/patches/alpha/][alpha]] - [[https://dwm.suckless.org/patches/alpha/][alpha]]
** Installation ** Installation
:PROPERTIES:
:CUSTOM_ID: installation
:END:
#+BEGIN_EXAMPLE shell #+BEGIN_EXAMPLE shell
makepkg -si makepkg -si
#+END_EXAMPLE #+END_EXAMPLE
** Further Notes ** Further Notes
:PROPERTIES:
:CUSTOM_ID: further-notes
:END:
- Default font is - Default font is
[[https://github.com/ryanoasis/nerd-fonts/blob/master/patched-fonts/FiraCode][Fira Code Nerd Font Mono]] [[https://github.com/ryanoasis/nerd-fonts/blob/master/patched-fonts/FiraCode][Fira Code Nerd Font Mono]]
- When modifying [[https://github.com/alrayyes/dwm/blob/master/config.h][config.h]] be sure to run =updpkgsums= to update checksums before - When modifying [[https://github.com/alrayyes/dwm/blob/master/config.h][config.h]] be sure to run =updpkgsums= to update checksums before
running =makepkg -si= running =makepkg -si=
** License ** License
:PROPERTIES:
:CUSTOM_ID: license
:END:
This theme is released under the MIT License. For more information read This theme is released under the MIT License. For more information read
the [[file:LICENSE.org][license]]. the [[file:LICENSE.org][license]].

103
config.h
View file

@ -1,15 +1,16 @@
/* See LICENSE file for copyright and license details. */ /* See LICENSE file for copyright and license details. */
/* appearance */ /* appearance */
static const unsigned int borderpx = 1; /* border pixel of windows */ static const unsigned int borderpx = 2; /* border pixel of windows */
static const unsigned int snap = 32; /* snap pixel */ static const unsigned int snap = 32; /* snap pixel */
static const unsigned int systraypinning = 0; /* 0: sloppy systray follows selected monitor, >0: pin systray to monitor X */ static const unsigned int systraypinning = 1; /* 0: sloppy systray follows selected monitor, >0: pin systray to monitor X */
static const unsigned int systrayspacing = 2; /* systray spacing */ static const unsigned int systrayspacing = 2; /* systray spacing */
static const int systraypinningfailfirst = 1; /* 1: if pinning fails, display systray on the first monitor, False: display systray on the last monitor*/ static const int systraypinningfailfirst = 1; /* 1: if pinning fails, display systray on the first monitor, False: display systray on the last monitor*/
static const int showsystray = 1; /* 0 means no systray */ static const int showsystray = 1; /* 0 means no systray */
static const int showbar = 1; /* 0 means no bar */ static const int showbar = 1; /* 0 means no bar */
static const int topbar = 1; /* 0 means bottom bar */ static const int topbar = 1; /* 0 means bottom bar */
static const char *fonts[] = { "FuraCode Nerd Font:style=Regular:pixelsize=18:antialias=true:autohint=true" }; static const char *fonts[] = { "Hack Nerd Font Mono:size=10" };
static const char dmenufont[] = "Hack Nerd Font Mono:size=10";
static const char col_gray1[] = "#222222"; static const char col_gray1[] = "#222222";
static const char col_gray2[] = "#444444"; static const char col_gray2[] = "#444444";
static const char col_gray3[] = "#bbbbbb"; static const char col_gray3[] = "#bbbbbb";
@ -19,81 +20,19 @@ static const char col_black[] = "#000000";
static const char col_red[] = "#ff0000"; static const char col_red[] = "#ff0000";
static const char col_yellow[] = "#ffff00"; static const char col_yellow[] = "#ffff00";
static const char col_white[] = "#ffffff"; static const char col_white[] = "#ffffff";
static const char status_white[] = "#dddddd";
static const char status_black[] = "#000";
static const unsigned int baralpha = 0xd0; static const unsigned int baralpha = 0xd0;
static const unsigned int borderalpha = OPAQUE; static const unsigned int borderalpha = OPAQUE;
static const char *colors[][3] = { static const char *colors[][3] = {
/* fg bg border */ /* fg bg border */
[SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
[SchemeSel] = { col_gray4, col_cyan, col_cyan }, [SchemeSel] = { col_gray4, col_cyan, col_cyan },
[SchemeWarn] = { col_black, col_yellow, col_red }, //[SchemeWarn] = { col_black, col_yellow, col_red },
[SchemeUrgent]= { col_white, col_red, col_red }, //[SchemeUrgent]= { col_white, col_red, col_red },
{ "#404040", col_gray1, col_gray1 }, /* bar 1 seperator */
{ status_black, "#404040", "#404040" }, /* bar 1 */
{ "#E84F4F", "#404040", "#404040" }, /* bar 2 seperator */
{ status_black, "#E84F4F", "#E84F4F" }, /* bar 2 */
{ "#B8D68C", "#E84F4F", "#E84F4F" }, /* bar 3 seperator */
{ status_black, "#B8D68C", "#B8D68C" }, /* bar 3 */
{ "#E1AA5D", "#B8D68C", "#B8D68C" }, /* bar 4 seperator */
{ status_black, "#E1AA5D", "#E1AA5D" }, /* bar 4 */
{ "#7DC1CF", "#E1AA5D", "#E1AA5D" }, /* bar 5 seperator */
{ status_black, "#7DC1CF", "#7DC1CF" }, /* bar 5 */
{ "#9B64FB", "#7DC1CF", "#7DC1CF" }, /* bar 6 seperator */
{ status_black, "#9B64FB", "#9B64FB" }, /* bar 6 */
{ "#6D878D", "#9B64FB", "#9B64FB" }, /* bar 7 seperator */
{ status_black, "#6D878D", "#6D878D" }, /* bar 7 */
{ "#dddddd", "#6D878D", "#6D878D" }, /* bar 8 seperator */
{ status_black, "#dddddd", "#dddddd" }, /* bar 8 */
{ "#404040", "#dddddd", "#dddddd" }, /* bar 9 seperator */
{ status_black, "#404040", "#404040" }, /* bar 9 */
{ "#D23D3D", "#404040", "#404040" }, /* bar 10 seperator */
{ status_black, "#D23D3D", "#D23D3D" }, /* bar 10 */
{ "#A0CF5D", "#D23D3D", "#D23D3D" }, /* bar 11 seperator */
{ status_black, "#A0CF5D", "#A0CF5D" }, /* bar 11 */
{ "#F39D21", "#A0CF5D", "#A0CF5D" }, /* bar 12 seperator */
{ status_black, "#F39D21", "#F39D21" }, /* bar 12 */
{ "#4E9FB1", "#F39D21", "#F39D21" }, /* bar 13 seperator */
{ status_black, "#4E9FB1", "#4E9FB1" }, /* bar 13 */
//{ "#8542FF", "#4E9FB1", "#4E9FB1" }, /* bar 14 seperator */
//{ status_black, "#8542FF", "#8542FF" }, /* bar 14 */
//{ "#42717B", "#8542FF", "#8542FF" }, /* bar 15 seperator */
//{ status_black, "#42717B", "#42717B" }, /* bar 15 */
//{ "#dddddd", "#42717B", "#42717B" }, /* bar 16 seperator */
//{ status_black, "#dddddd", "#dddddd" }, /* bar 16 */
}; };
static const unsigned int alphas[][3] = { static const unsigned int alphas[][3] = {
/* fg bg border */ /* fg bg border */
[SchemeNorm] = { OPAQUE, baralpha, borderalpha }, [SchemeNorm] = { OPAQUE, baralpha, borderalpha },
[SchemeSel] = { OPAQUE, baralpha, borderalpha }, [SchemeSel] = { OPAQUE, baralpha, borderalpha },
[SchemeWarn] = { OPAQUE, baralpha, borderalpha },
[SchemeUrgent] = { OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha }, /* bar 1 seperator */
{ OPAQUE, baralpha, borderalpha }, /* bar 1 */
{ OPAQUE, baralpha, borderalpha }, /* bar 2 seperator */
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
}; };
/* tagging */ /* tagging */
@ -105,16 +44,24 @@ static const Rule rules[] = {
* WM_NAME(STRING) = title * WM_NAME(STRING) = title
*/ */
/* class instance title tags mask isfloating monitor */ /* class instance title tags mask isfloating monitor */
{ "Syncthing GTK", NULL, NULL, 0, 1, -1 },
{ "Toggl Desktop", NULL, NULL, 0, 1, -1 },
{ "Gimp", NULL, NULL, 0, 1, -1 }, { "Gimp", NULL, NULL, 0, 1, -1 },
{ "firefox", NULL, NULL, 1 << 8, 0, -1 }, { "Syncthing GTK", NULL, NULL, 0, 1, -1 },
{ "Gpodder", NULL, NULL, 1 << 3, 0, -1 },
{ "Brave-browser", NULL, NULL, 0, 0, 1 },
{ "Firefox", NULL, NULL, 0, 0, 1 },
{ "iceweasel", NULL, NULL, 0, 0, 1 },
{ "Element", NULL, NULL, 1 << 2, 0, -1 },
{ "Element-Nightly", NULL, NULL, 1 << 2, 0, -1 },
{ "Slack", NULL, NULL, 1 << 2, 0, -1 },
{ "castero", NULL, NULL, 1 << 3, 0, -1 },
{ "Spt", NULL, NULL, 1 << 3, 0, -1 },
{ "Spotify", NULL, NULL, 1 << 3, 0, -1 }, { "Spotify", NULL, NULL, 1 << 3, 0, -1 },
{ "ncmpcpp", NULL, NULL, 1 << 3, 0, -1 },
{ "mutt", NULL, NULL, 1 << 5, 0, -1 }, { "jetbrains-webstorm", NULL, NULL, 1 << 7, 0, -1 },
{ "weechat", NULL, NULL, 1 << 6, 0, -1 },
{ "Slack", NULL, NULL, 1 << 6, 0, -1 }, { "Emacs", NULL, NULL, 1 << 8, 0, -1 },
}; };
/* layout(s) */ /* layout(s) */
@ -145,7 +92,7 @@ static const Layout layouts[] = {
/* commands */ /* commands */
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
static const char *dmenucmd[] = { "/home/alrayyes/.scripts/dmenu-frequency" }; static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
static const char *termcmd[] = { "st", NULL }; static const char *termcmd[] = { "st", NULL };
static const char scratchpadname[] = "scratchpad"; static const char scratchpadname[] = "scratchpad";
static const char *scratchpadcmd[] = { "st", "-t", scratchpadname, "-g", "120x34", NULL }; static const char *scratchpadcmd[] = { "st", "-t", scratchpadname, "-g", "120x34", NULL };
@ -154,7 +101,8 @@ static const char *scratchpadcmd[] = { "st", "-t", scratchpadname, "-g", "120x34
static Key keys[] = { static Key keys[] = {
/* modifier key function argument */ /* modifier key function argument */
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, //{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
//{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
{ MODKEY, XK_grave, togglescratch, {.v = scratchpadcmd } }, { MODKEY, XK_grave, togglescratch, {.v = scratchpadcmd } },
{ MODKEY, XK_b, togglebar, {0} }, { MODKEY, XK_b, togglebar, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1 } }, { MODKEY, XK_j, focusstack, {.i = +1 } },
@ -209,4 +157,3 @@ static Button buttons[] = {
{ ClkTagBar, MODKEY, Button1, tag, {0} }, { ClkTagBar, MODKEY, Button1, tag, {0} },
{ ClkTagBar, MODKEY, Button3, toggletag, {0} }, { ClkTagBar, MODKEY, Button3, toggletag, {0} },
}; };

View file

@ -1,7 +1,7 @@
/* See LICENSE file for copyright and license details. */ /* See LICENSE file for copyright and license details. */
/* appearance */ /* appearance */
static const unsigned int borderpx = 1; /* border pixel of windows */ static const unsigned int borderpx = 2; /* border pixel of windows */
static const unsigned int snap = 32; /* snap pixel */ static const unsigned int snap = 32; /* snap pixel */
static const unsigned int systraypinning = 1; /* 0: sloppy systray follows selected monitor, >0: pin systray to monitor X */ static const unsigned int systraypinning = 1; /* 0: sloppy systray follows selected monitor, >0: pin systray to monitor X */
static const unsigned int systrayspacing = 2; /* systray spacing */ static const unsigned int systrayspacing = 2; /* systray spacing */
@ -9,7 +9,8 @@ static const int systraypinningfailfirst = 1; /* 1: if pinning fails, display
static const int showsystray = 1; /* 0 means no systray */ static const int showsystray = 1; /* 0 means no systray */
static const int showbar = 1; /* 0 means no bar */ static const int showbar = 1; /* 0 means no bar */
static const int topbar = 1; /* 0 means bottom bar */ static const int topbar = 1; /* 0 means bottom bar */
static const char *fonts[] = { "FuraCode Nerd Font:style=Regular:pixelsize=14:antialias=true:autohint=true" }; static const char *fonts[] = { "Hack Nerd Font Mono:size=10" };
static const char dmenufont[] = "Hack Nerd Font Mono:size=10";
static const char col_gray1[] = "#222222"; static const char col_gray1[] = "#222222";
static const char col_gray2[] = "#444444"; static const char col_gray2[] = "#444444";
static const char col_gray3[] = "#bbbbbb"; static const char col_gray3[] = "#bbbbbb";
@ -19,81 +20,19 @@ static const char col_black[] = "#000000";
static const char col_red[] = "#ff0000"; static const char col_red[] = "#ff0000";
static const char col_yellow[] = "#ffff00"; static const char col_yellow[] = "#ffff00";
static const char col_white[] = "#ffffff"; static const char col_white[] = "#ffffff";
static const char status_white[] = "#dddddd";
static const char status_black[] = "#000";
static const unsigned int baralpha = 0xd0; static const unsigned int baralpha = 0xd0;
static const unsigned int borderalpha = OPAQUE; static const unsigned int borderalpha = OPAQUE;
static const char *colors[][3] = { static const char *colors[][3] = {
/* fg bg border */ /* fg bg border */
[SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
[SchemeSel] = { col_gray4, col_cyan, col_cyan }, [SchemeSel] = { col_gray4, col_cyan, col_cyan },
[SchemeWarn] = { col_black, col_yellow, col_red }, //[SchemeWarn] = { col_black, col_yellow, col_red },
[SchemeUrgent]= { col_white, col_red, col_red }, //[SchemeUrgent]= { col_white, col_red, col_red },
{ "#404040", col_gray1, col_gray1 }, /* bar 1 seperator */
{ status_black, "#404040", "#404040" }, /* bar 1 */
{ "#E84F4F", "#404040", "#404040" }, /* bar 2 seperator */
{ status_black, "#E84F4F", "#E84F4F" }, /* bar 2 */
{ "#B8D68C", "#E84F4F", "#E84F4F" }, /* bar 3 seperator */
{ status_black, "#B8D68C", "#B8D68C" }, /* bar 3 */
{ "#E1AA5D", "#B8D68C", "#B8D68C" }, /* bar 4 seperator */
{ status_black, "#E1AA5D", "#E1AA5D" }, /* bar 4 */
{ "#7DC1CF", "#E1AA5D", "#E1AA5D" }, /* bar 5 seperator */
{ status_black, "#7DC1CF", "#7DC1CF" }, /* bar 5 */
{ "#9B64FB", "#7DC1CF", "#7DC1CF" }, /* bar 6 seperator */
{ status_black, "#9B64FB", "#9B64FB" }, /* bar 6 */
{ "#6D878D", "#9B64FB", "#9B64FB" }, /* bar 7 seperator */
{ status_black, "#6D878D", "#6D878D" }, /* bar 7 */
{ "#dddddd", "#6D878D", "#6D878D" }, /* bar 8 seperator */
{ status_black, "#dddddd", "#dddddd" }, /* bar 8 */
{ "#404040", "#dddddd", "#dddddd" }, /* bar 9 seperator */
{ status_black, "#404040", "#404040" }, /* bar 9 */
{ "#D23D3D", "#404040", "#404040" }, /* bar 10 seperator */
{ status_black, "#D23D3D", "#D23D3D" }, /* bar 10 */
{ "#A0CF5D", "#D23D3D", "#D23D3D" }, /* bar 11 seperator */
{ status_black, "#A0CF5D", "#A0CF5D" }, /* bar 11 */
{ "#F39D21", "#A0CF5D", "#A0CF5D" }, /* bar 12 seperator */
{ status_black, "#F39D21", "#F39D21" }, /* bar 12 */
{ "#4E9FB1", "#F39D21", "#F39D21" }, /* bar 13 seperator */
{ status_black, "#4E9FB1", "#4E9FB1" }, /* bar 13 */
//{ "#8542FF", "#4E9FB1", "#4E9FB1" }, /* bar 14 seperator */
//{ status_black, "#8542FF", "#8542FF" }, /* bar 14 */
//{ "#42717B", "#8542FF", "#8542FF" }, /* bar 15 seperator */
//{ status_black, "#42717B", "#42717B" }, /* bar 15 */
//{ "#dddddd", "#42717B", "#42717B" }, /* bar 16 seperator */
//{ status_black, "#dddddd", "#dddddd" }, /* bar 16 */
}; };
static const unsigned int alphas[][3] = { static const unsigned int alphas[][3] = {
/* fg bg border */ /* fg bg border */
[SchemeNorm] = { OPAQUE, baralpha, borderalpha }, [SchemeNorm] = { OPAQUE, baralpha, borderalpha },
[SchemeSel] = { OPAQUE, baralpha, borderalpha }, [SchemeSel] = { OPAQUE, baralpha, borderalpha },
[SchemeWarn] = { OPAQUE, baralpha, borderalpha },
[SchemeUrgent] = { OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha }, /* bar 1 seperator */
{ OPAQUE, baralpha, borderalpha }, /* bar 1 */
{ OPAQUE, baralpha, borderalpha }, /* bar 2 seperator */
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
{ OPAQUE, baralpha, borderalpha },
}; };
/* tagging */ /* tagging */
@ -105,16 +44,24 @@ static const Rule rules[] = {
* WM_NAME(STRING) = title * WM_NAME(STRING) = title
*/ */
/* class instance title tags mask isfloating monitor */ /* class instance title tags mask isfloating monitor */
{ "Syncthing GTK", NULL, NULL, 0, 1, -1 },
{ "Toggl Desktop", NULL, NULL, 0, 1, -1 },
{ "Gimp", NULL, NULL, 0, 1, -1 }, { "Gimp", NULL, NULL, 0, 1, -1 },
{ "iceweasel", NULL, NULL, 1 << 8, 0, -1 }, { "Syncthing GTK", NULL, NULL, 0, 1, -1 },
{ "Gpodder", NULL, NULL, 1 << 3, 0, -1 },
{ "Brave-browser", NULL, NULL, 0, 0, 1 },
{ "Firefox", NULL, NULL, 0, 0, 1 },
{ "iceweasel", NULL, NULL, 0, 0, 1 },
{ "Element", NULL, NULL, 1 << 2, 0, -1 },
{ "Element-Nightly", NULL, NULL, 1 << 2, 0, -1 },
{ "Slack", NULL, NULL, 1 << 2, 0, -1 },
{ "castero", NULL, NULL, 1 << 3, 0, -1 },
{ "Spt", NULL, NULL, 1 << 3, 0, -1 },
{ "Spotify", NULL, NULL, 1 << 3, 0, -1 }, { "Spotify", NULL, NULL, 1 << 3, 0, -1 },
{ "ncmpcpp", NULL, NULL, 1 << 3, 0, -1 },
{ "mutt", NULL, NULL, 1 << 5, 0, -1 }, { "jetbrains-webstorm", NULL, NULL, 1 << 7, 0, -1 },
{ "weechat", NULL, NULL, 1 << 6, 0, -1 },
{ "Slack", NULL, NULL, 1 << 6, 0, -1 }, { "Emacs", NULL, NULL, 1 << 8, 0, -1 },
}; };
/* layout(s) */ /* layout(s) */
@ -145,7 +92,7 @@ static const Layout layouts[] = {
/* commands */ /* commands */
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
static const char *dmenucmd[] = { "/home/alrayyes/.scripts/dmenu-frequency" }; static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
static const char *termcmd[] = { "st", NULL }; static const char *termcmd[] = { "st", NULL };
static const char scratchpadname[] = "scratchpad"; static const char scratchpadname[] = "scratchpad";
static const char *scratchpadcmd[] = { "st", "-t", scratchpadname, "-g", "120x34", NULL }; static const char *scratchpadcmd[] = { "st", "-t", scratchpadname, "-g", "120x34", NULL };
@ -154,7 +101,8 @@ static const char *scratchpadcmd[] = { "st", "-t", scratchpadname, "-g", "120x34
static Key keys[] = { static Key keys[] = {
/* modifier key function argument */ /* modifier key function argument */
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, //{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
//{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
{ MODKEY, XK_grave, togglescratch, {.v = scratchpadcmd } }, { MODKEY, XK_grave, togglescratch, {.v = scratchpadcmd } },
{ MODKEY, XK_b, togglebar, {0} }, { MODKEY, XK_b, togglebar, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1 } }, { MODKEY, XK_j, focusstack, {.i = +1 } },
@ -209,4 +157,3 @@ static Button buttons[] = {
{ ClkTagBar, MODKEY, Button1, tag, {0} }, { ClkTagBar, MODKEY, Button1, tag, {0} },
{ ClkTagBar, MODKEY, Button3, toggletag, {0} }, { ClkTagBar, MODKEY, Button3, toggletag, {0} },
}; };

View file

@ -1,39 +0,0 @@
commit 5918623c5bd7fda155bf9dc3d33890c4ae1722d0
Author: Simon Bremer <simon.bremer@tum.de>
Date: Thu Dec 22 17:31:07 2016 +0100
Applied and fixed autostart patch for previous version;
diff --git a/dwm.c b/dwm.c
index d27cb67..066ed71 100644
--- a/dwm.c
+++ b/dwm.c
@@ -194,6 +194,7 @@ static void resizeclient(Client *c, int x, int y, int w, int h);
static void resizemouse(const Arg *arg);
static void restack(Monitor *m);
static void run(void);
+static void runAutostart(void);
static void scan(void);
static int sendevent(Client *c, Atom proto);
static void sendmon(Client *c, Monitor *m);
@@ -1386,6 +1387,12 @@ run(void)
}
void
+runAutostart(void) {
+ system("cd ~/.dwm; ./autostart_blocking.sh");
+ system("cd ~/.dwm; ./autostart.sh &");
+}
+
+void
scan(void)
{
unsigned int i, num;
@@ -2145,6 +2152,7 @@ main(int argc, char *argv[])
checkotherwm();
setup();
scan();
+ runAutostart();
run();
cleanup();
XCloseDisplay(dpy);

View file

@ -1,8 +1,8 @@
diff --git a/dwm.c b/dwm.c diff --git a/dwm.c b/dwm.c
index b2bc9bd..d9a333a 100644 index 4465af1..c4aa3de 100644
--- a/dwm.c --- a/dwm.c
+++ b/dwm.c +++ b/dwm.c
@@ -469,7 +469,7 @@ attachstack(Client *c) @@ -416,7 +416,7 @@ attachstack(Client *c)
void void
buttonpress(XEvent *e) buttonpress(XEvent *e)
{ {
@ -11,7 +11,7 @@ index b2bc9bd..d9a333a 100644
Arg arg = {0}; Arg arg = {0};
Client *c; Client *c;
Monitor *m; Monitor *m;
@@ -484,9 +484,13 @@ buttonpress(XEvent *e) @@ -431,9 +431,14 @@ buttonpress(XEvent *e)
} }
if (ev->window == selmon->barwin) { if (ev->window == selmon->barwin) {
i = x = 0; i = x = 0;
@ -19,6 +19,7 @@ index b2bc9bd..d9a333a 100644
+ for (c = m->clients; c; c = c->next) + for (c = m->clients; c; c = c->next)
+ occ |= c->tags == 255 ? 0 : c->tags; + occ |= c->tags == 255 ? 0 : c->tags;
+ do { + do {
+ /* do not reserve space for vacant tags */
+ if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i)) + if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
+ continue; + continue;
x += TEXTW(tags[i]); x += TEXTW(tags[i]);
@ -27,9 +28,9 @@ index b2bc9bd..d9a333a 100644
if (i < LENGTH(tags)) { if (i < LENGTH(tags)) {
click = ClkTagBar; click = ClkTagBar;
arg.ui = 1 << i; arg.ui = 1 << i;
@@ -836,19 +840,17 @@ drawbar(Monitor *m) @@ -709,19 +714,19 @@ drawbar(Monitor *m)
}
resizebarwin(m);
for (c = m->clients; c; c = c->next) { for (c = m->clients; c; c = c->next) {
- occ |= c->tags; - occ |= c->tags;
+ occ |= c->tags == 255 ? 0 : c->tags; + occ |= c->tags == 255 ? 0 : c->tags;
@ -38,8 +39,10 @@ index b2bc9bd..d9a333a 100644
} }
x = 0; x = 0;
for (i = 0; i < LENGTH(tags); i++) { for (i = 0; i < LENGTH(tags); i++) {
+ /* do not draw vacant tags */
+ if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i)) + if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
+ continue; + continue;
+
w = TEXTW(tags[i]); w = TEXTW(tags[i]);
drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]); drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i); drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i);

View file

@ -1,14 +1,23 @@
From 9102fdb9c670218373bbe83c891c8e8138d6a6f4 Mon Sep 17 00:00:00 2001
From: redacted <redacted@example.com>
Date: Tue, 23 Apr 2019 00:39:27 +0100
Subject: [PATCH] added noborder patch
---
dwm.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/dwm.c b/dwm.c diff --git a/dwm.c b/dwm.c
index d27cb67..ad6b4df 100644 index 4465af1..685eca1 100644
--- a/dwm.c --- a/dwm.c
+++ b/dwm.c +++ b/dwm.c
@@ -1287,6 +1287,13 @@ resizeclient(Client *c, int x, int y, int w, int h) @@ -1282,6 +1282,13 @@ resizeclient(Client *c, int x, int y, int w, int h)
c->oldw = c->w; c->w = wc.width = w; c->oldw = c->w; c->w = wc.width = w;
c->oldh = c->h; c->h = wc.height = h; c->oldh = c->h; c->h = wc.height = h;
wc.border_width = c->bw; wc.border_width = c->bw;
+ if (((nexttiled(c->mon->clients) == c && !nexttiled(c->next)) + if (((nexttiled(c->mon->clients) == c && !nexttiled(c->next))
+ || &monocle == c->mon->lt[c->mon->sellt]->arrange) + || &monocle == c->mon->lt[c->mon->sellt]->arrange)
+ && !c->isfullscreen) { + && !c->isfullscreen && !c->isfloating) {
+ c->w = wc.width += c->bw * 2; + c->w = wc.width += c->bw * 2;
+ c->h = wc.height += c->bw * 2; + c->h = wc.height += c->bw * 2;
+ wc.border_width = 0; + wc.border_width = 0;
@ -16,3 +25,6 @@ index d27cb67..ad6b4df 100644
XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
configure(c); configure(c);
XSync(dpy, False); XSync(dpy, False);
--
2.21.0

View file

@ -1,3 +1,16 @@
From 4001ccae7b1a41bdcb247b0cf095a51af7b68c28 Mon Sep 17 00:00:00 2001
From: Igor Gevka <igor.gevka@gmail.com>
Date: Sun, 16 Feb 2020 15:03:10 -0800
Subject: [PATCH] [PATCH] Implements a system tray for dwm.
Original author: Jan Christoph Ebersbach <jceb@e-jc.de>, inspired by http://code.google.com/p/dwm-plus
URL: http://dwm.suckless.org/patches/systray
dwm 6.2 port by Igor Gevka <igor.gevka@gmail.com>
---
config.def.h | 4 +
dwm.c | 404 +++++++++++++++++++++++++++++++++++++++++++++++----
2 files changed, 382 insertions(+), 26 deletions(-)
diff --git a/config.def.h b/config.def.h diff --git a/config.def.h b/config.def.h
index 1c0b587..2d824d1 100644 index 1c0b587..2d824d1 100644
--- a/config.def.h --- a/config.def.h
@ -14,7 +27,7 @@ index 1c0b587..2d824d1 100644
static const int topbar = 1; /* 0 means bottom bar */ static const int topbar = 1; /* 0 means bottom bar */
static const char *fonts[] = { "monospace:size=10" }; static const char *fonts[] = { "monospace:size=10" };
diff --git a/dwm.c b/dwm.c diff --git a/dwm.c b/dwm.c
index 4465af1..4bccb41 100644 index 4465af1..3e361fa 100644
--- a/dwm.c --- a/dwm.c
+++ b/dwm.c +++ b/dwm.c
@@ -57,12 +57,30 @@ @@ -57,12 +57,30 @@
@ -155,7 +168,7 @@ index 4465af1..4bccb41 100644
for (i = 0; i < CurLast; i++) for (i = 0; i < CurLast; i++)
drw_cur_free(drw, cursor[i]); drw_cur_free(drw, cursor[i]);
for (i = 0; i < LENGTH(colors); i++) for (i = 0; i < LENGTH(colors); i++)
@@ -512,9 +553,52 @@ cleanupmon(Monitor *mon) @@ -512,9 +553,57 @@ cleanupmon(Monitor *mon)
void void
clientmessage(XEvent *e) clientmessage(XEvent *e)
{ {
@ -176,7 +189,12 @@ index 4465af1..4bccb41 100644
+ c->mon = selmon; + c->mon = selmon;
+ c->next = systray->icons; + c->next = systray->icons;
+ systray->icons = c; + systray->icons = c;
+ XGetWindowAttributes(dpy, c->win, &wa); + if (!XGetWindowAttributes(dpy, c->win, &wa)) {
+ /* use sane defaults */
+ wa.width = bh;
+ wa.height = bh;
+ wa.border_width = 0;
+ }
+ c->x = c->oldx = c->y = c->oldy = 0; + c->x = c->oldx = c->y = c->oldy = 0;
+ c->w = c->oldw = wa.width; + c->w = c->oldw = wa.width;
+ c->h = c->oldh = wa.height; + c->h = c->oldh = wa.height;
@ -208,7 +226,7 @@ index 4465af1..4bccb41 100644
if (!c) if (!c)
return; return;
if (cme->message_type == netatom[NetWMState]) { if (cme->message_type == netatom[NetWMState]) {
@@ -567,7 +651,7 @@ configurenotify(XEvent *e) @@ -567,7 +656,7 @@ configurenotify(XEvent *e)
for (c = m->clients; c; c = c->next) for (c = m->clients; c; c = c->next)
if (c->isfullscreen) if (c->isfullscreen)
resizeclient(c, m->mx, m->my, m->mw, m->mh); resizeclient(c, m->mx, m->my, m->mw, m->mh);
@ -217,7 +235,7 @@ index 4465af1..4bccb41 100644
} }
focus(NULL); focus(NULL);
arrange(NULL); arrange(NULL);
@@ -652,6 +736,11 @@ destroynotify(XEvent *e) @@ -652,6 +741,11 @@ destroynotify(XEvent *e)
if ((c = wintoclient(ev->window))) if ((c = wintoclient(ev->window)))
unmanage(c, 1); unmanage(c, 1);
@ -229,7 +247,7 @@ index 4465af1..4bccb41 100644
} }
void void
@@ -695,19 +784,23 @@ dirtomon(int dir) @@ -695,19 +789,23 @@ dirtomon(int dir)
void void
drawbar(Monitor *m) drawbar(Monitor *m)
{ {
@ -256,7 +274,7 @@ index 4465af1..4bccb41 100644
for (c = m->clients; c; c = c->next) { for (c = m->clients; c; c = c->next) {
occ |= c->tags; occ |= c->tags;
if (c->isurgent) if (c->isurgent)
@@ -728,7 +821,7 @@ drawbar(Monitor *m) @@ -728,7 +826,7 @@ drawbar(Monitor *m)
drw_setscheme(drw, scheme[SchemeNorm]); drw_setscheme(drw, scheme[SchemeNorm]);
x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
@ -265,7 +283,7 @@ index 4465af1..4bccb41 100644
if (m->sel) { if (m->sel) {
drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); 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, bh, lrpad / 2, m->sel->name, 0);
@@ -739,7 +832,7 @@ drawbar(Monitor *m) @@ -739,7 +837,7 @@ drawbar(Monitor *m)
drw_rect(drw, x, 0, w, bh, 1, 1); drw_rect(drw, x, 0, w, bh, 1, 1);
} }
} }
@ -274,7 +292,7 @@ index 4465af1..4bccb41 100644
} }
void void
@@ -776,8 +869,11 @@ expose(XEvent *e) @@ -776,8 +874,11 @@ expose(XEvent *e)
Monitor *m; Monitor *m;
XExposeEvent *ev = &e->xexpose; XExposeEvent *ev = &e->xexpose;
@ -287,7 +305,7 @@ index 4465af1..4bccb41 100644
} }
void void
@@ -862,10 +958,17 @@ getatomprop(Client *c, Atom prop) @@ -862,10 +963,17 @@ getatomprop(Client *c, Atom prop)
unsigned long dl; unsigned long dl;
unsigned char *p = NULL; unsigned char *p = NULL;
Atom da, atom = None; Atom da, atom = None;
@ -306,7 +324,7 @@ index 4465af1..4bccb41 100644
XFree(p); XFree(p);
} }
return atom; return atom;
@@ -899,6 +1002,16 @@ getstate(Window w) @@ -899,6 +1007,16 @@ getstate(Window w)
return result; return result;
} }
@ -323,7 +341,7 @@ index 4465af1..4bccb41 100644
int int
gettextprop(Window w, Atom atom, char *text, unsigned int size) gettextprop(Window w, Atom atom, char *text, unsigned int size)
{ {
@@ -1003,7 +1116,7 @@ killclient(const Arg *arg) @@ -1003,7 +1121,7 @@ killclient(const Arg *arg)
{ {
if (!selmon->sel) if (!selmon->sel)
return; return;
@ -332,7 +350,7 @@ index 4465af1..4bccb41 100644
XGrabServer(dpy); XGrabServer(dpy);
XSetErrorHandler(xerrordummy); XSetErrorHandler(xerrordummy);
XSetCloseDownMode(dpy, DestroyAll); XSetCloseDownMode(dpy, DestroyAll);
@@ -1091,6 +1204,12 @@ maprequest(XEvent *e) @@ -1091,6 +1209,12 @@ maprequest(XEvent *e)
{ {
static XWindowAttributes wa; static XWindowAttributes wa;
XMapRequestEvent *ev = &e->xmaprequest; XMapRequestEvent *ev = &e->xmaprequest;
@ -345,7 +363,7 @@ index 4465af1..4bccb41 100644
if (!XGetWindowAttributes(dpy, ev->window, &wa)) if (!XGetWindowAttributes(dpy, ev->window, &wa))
return; return;
@@ -1215,6 +1334,16 @@ propertynotify(XEvent *e) @@ -1215,6 +1339,16 @@ propertynotify(XEvent *e)
Window trans; Window trans;
XPropertyEvent *ev = &e->xproperty; XPropertyEvent *ev = &e->xproperty;
@ -362,7 +380,7 @@ index 4465af1..4bccb41 100644
if ((ev->window == root) && (ev->atom == XA_WM_NAME)) if ((ev->window == root) && (ev->atom == XA_WM_NAME))
updatestatus(); updatestatus();
else if (ev->state == PropertyDelete) else if (ev->state == PropertyDelete)
@@ -1265,6 +1394,20 @@ recttomon(int x, int y, int w, int h) @@ -1265,6 +1399,20 @@ recttomon(int x, int y, int w, int h)
return r; return r;
} }
@ -383,7 +401,7 @@ index 4465af1..4bccb41 100644
void void
resize(Client *c, int x, int y, int w, int h, int interact) resize(Client *c, int x, int y, int w, int h, int interact)
{ {
@@ -1272,6 +1415,14 @@ resize(Client *c, int x, int y, int w, int h, int interact) @@ -1272,6 +1420,14 @@ resize(Client *c, int x, int y, int w, int h, int interact)
resizeclient(c, x, y, w, h); resizeclient(c, x, y, w, h);
} }
@ -398,7 +416,7 @@ index 4465af1..4bccb41 100644
void void
resizeclient(Client *c, int x, int y, int w, int h) resizeclient(Client *c, int x, int y, int w, int h)
{ {
@@ -1344,6 +1495,19 @@ resizemouse(const Arg *arg) @@ -1344,6 +1500,19 @@ resizemouse(const Arg *arg)
} }
} }
@ -418,7 +436,7 @@ index 4465af1..4bccb41 100644
void void
restack(Monitor *m) restack(Monitor *m)
{ {
@@ -1433,26 +1597,36 @@ setclientstate(Client *c, long state) @@ -1433,26 +1602,36 @@ setclientstate(Client *c, long state)
} }
int int
@ -466,7 +484,7 @@ index 4465af1..4bccb41 100644
} }
return exists; return exists;
} }
@@ -1466,7 +1640,7 @@ setfocus(Client *c) @@ -1466,7 +1645,7 @@ setfocus(Client *c)
XA_WINDOW, 32, PropModeReplace, XA_WINDOW, 32, PropModeReplace,
(unsigned char *) &(c->win), 1); (unsigned char *) &(c->win), 1);
} }
@ -475,7 +493,7 @@ index 4465af1..4bccb41 100644
} }
void void
@@ -1555,6 +1729,10 @@ setup(void) @@ -1555,6 +1734,10 @@ setup(void)
wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False); wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False); netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
@ -486,7 +504,7 @@ index 4465af1..4bccb41 100644
netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False); netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False); netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False);
@@ -1562,6 +1740,9 @@ setup(void) @@ -1562,6 +1745,9 @@ setup(void)
netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False); netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False);
netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False); netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False);
netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False); netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False);
@ -496,7 +514,7 @@ index 4465af1..4bccb41 100644
/* init cursors */ /* init cursors */
cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr); cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr);
cursor[CurResize] = drw_cur_create(drw, XC_sizing); cursor[CurResize] = drw_cur_create(drw, XC_sizing);
@@ -1570,6 +1751,8 @@ setup(void) @@ -1570,6 +1756,8 @@ setup(void)
scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
for (i = 0; i < LENGTH(colors); i++) for (i = 0; i < LENGTH(colors); i++)
scheme[i] = drw_scm_create(drw, colors[i], 3); scheme[i] = drw_scm_create(drw, colors[i], 3);
@ -505,7 +523,7 @@ index 4465af1..4bccb41 100644
/* init bars */ /* init bars */
updatebars(); updatebars();
updatestatus(); updatestatus();
@@ -1701,7 +1884,18 @@ togglebar(const Arg *arg) @@ -1701,7 +1889,18 @@ togglebar(const Arg *arg)
{ {
selmon->showbar = !selmon->showbar; selmon->showbar = !selmon->showbar;
updatebarpos(selmon); updatebarpos(selmon);
@ -525,7 +543,7 @@ index 4465af1..4bccb41 100644
arrange(selmon); arrange(selmon);
} }
@@ -1796,11 +1990,18 @@ unmapnotify(XEvent *e) @@ -1796,11 +1995,18 @@ unmapnotify(XEvent *e)
else else
unmanage(c, 0); unmanage(c, 0);
} }
@ -544,7 +562,7 @@ index 4465af1..4bccb41 100644
Monitor *m; Monitor *m;
XSetWindowAttributes wa = { XSetWindowAttributes wa = {
.override_redirect = True, .override_redirect = True,
@@ -1811,10 +2012,15 @@ updatebars(void) @@ -1811,10 +2017,15 @@ updatebars(void)
for (m = mons; m; m = m->next) { for (m = mons; m; m = m->next) {
if (m->barwin) if (m->barwin)
continue; continue;
@ -561,7 +579,7 @@ index 4465af1..4bccb41 100644
XMapRaised(dpy, m->barwin); XMapRaised(dpy, m->barwin);
XSetClassHint(dpy, m->barwin, &ch); XSetClassHint(dpy, m->barwin, &ch);
} }
@@ -1990,6 +2196,121 @@ updatestatus(void) @@ -1990,6 +2201,121 @@ updatestatus(void)
if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext))) if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
strcpy(stext, "dwm-"VERSION); strcpy(stext, "dwm-"VERSION);
drawbar(selmon); drawbar(selmon);
@ -580,7 +598,7 @@ index 4465af1..4bccb41 100644
+ else + else
+ i->w = (int) ((float)bh * ((float)w / (float)h)); + i->w = (int) ((float)bh * ((float)w / (float)h));
+ applysizehints(i, &(i->x), &(i->y), &(i->w), &(i->h), False); + applysizehints(i, &(i->x), &(i->y), &(i->w), &(i->h), False);
+ /* force icons into the systray dimenons if they don't want to */ + /* force icons into the systray dimensions if they don't want to */
+ if (i->h > bh) { + if (i->h > bh) {
+ if (i->w == i->h) + if (i->w == i->h)
+ i->w = bh; + i->w = bh;
@ -683,7 +701,7 @@ index 4465af1..4bccb41 100644
} }
void void
@@ -2057,6 +2378,16 @@ wintoclient(Window w) @@ -2057,6 +2383,16 @@ wintoclient(Window w)
return NULL; return NULL;
} }
@ -700,7 +718,7 @@ index 4465af1..4bccb41 100644
Monitor * Monitor *
wintomon(Window w) wintomon(Window w)
{ {
@@ -2110,6 +2441,22 @@ xerrorstart(Display *dpy, XErrorEvent *ee) @@ -2110,6 +2446,22 @@ xerrorstart(Display *dpy, XErrorEvent *ee)
return -1; return -1;
} }
@ -723,3 +741,6 @@ index 4465af1..4bccb41 100644
void void
zoom(const Arg *arg) zoom(const Arg *arg)
{ {
--
2.17.1

View file

@ -1,19 +1,16 @@
diff -up a/config.def.h b/config.def.h diff -up -N a/config.def.h b/config.def.h
--- a/config.def.h --- a/config.def.h 2020-12-01 10:32:18.704229651 +0100
+++ b/config.def.h +++ b/config.def.h 2020-12-01 10:33:45.017561313 +0100
@@ -20,7 +20,8 @@ static const char col_black[] = "# @@ -16,11 +16,18 @@ static const char col_gray2[] = "#
static const char col_red[] = "#ff0000"; static const char col_gray3[] = "#bbbbbb";
static const char col_yellow[] = "#ffff00"; static const char col_gray4[] = "#eeeeee";
static const char col_white[] = "#ffffff"; static const char col_cyan[] = "#005577";
-
+static const unsigned int baralpha = 0xd0; +static const unsigned int baralpha = 0xd0;
+static const unsigned int borderalpha = OPAQUE; +static const unsigned int borderalpha = OPAQUE;
static const char *colors[][3] = { static const char *colors[][3] = {
/* fg bg border */ /* fg bg border */
[SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
@@ -28,6 +29,11 @@ static const char *colors[][3] = { [SchemeSel] = { col_gray4, col_cyan, col_cyan },
[SchemeWarn] = { col_black, col_yellow, col_red },
[SchemeUrgent]= { col_white, col_red, col_red },
}; };
+static const unsigned int alphas[][3] = { +static const unsigned int alphas[][3] = {
+ /* fg bg border */ + /* fg bg border */
@ -23,9 +20,9 @@ diff -up a/config.def.h b/config.def.h
/* tagging */ /* tagging */
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
diff -up a/config.mk b/config.mk diff -up -N a/config.mk b/config.mk
--- a/config.mk 2019-02-02 13:55:28.000000000 +0100 --- a/config.mk 2020-12-01 10:32:18.704229651 +0100
+++ b/config.mk 2019-03-12 18:34:52.780703276 +0100 +++ b/config.mk 2020-12-01 10:34:10.574227241 +0100
@@ -22,7 +22,7 @@ FREETYPEINC = /usr/include/freetype2 @@ -22,7 +22,7 @@ FREETYPEINC = /usr/include/freetype2
# includes and libs # includes and libs
@ -35,9 +32,9 @@ diff -up a/config.mk b/config.mk
# flags # flags
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
diff -up a/drw.c b/drw.c diff -up -N a/drw.c b/drw.c
--- a/drw.c 2019-02-02 13:55:28.000000000 +0100 --- a/drw.c 2020-12-01 10:32:18.704229651 +0100
+++ b/drw.c 2019-03-12 18:34:52.780703276 +0100 +++ b/drw.c 2020-12-01 10:38:15.630881362 +0100
@@ -61,7 +61,7 @@ utf8decode(const char *c, long *u, size_ @@ -61,7 +61,7 @@ utf8decode(const char *c, long *u, size_
} }
@ -47,7 +44,7 @@ diff -up a/drw.c b/drw.c
{ {
Drw *drw = ecalloc(1, sizeof(Drw)); Drw *drw = ecalloc(1, sizeof(Drw));
@@ -70,8 +70,14 @@ drw_create(Display *dpy, int screen, Win @@ -70,8 +70,11 @@ drw_create(Display *dpy, int screen, Win
drw->root = root; drw->root = root;
drw->w = w; drw->w = w;
drw->h = h; drw->h = h;
@ -56,15 +53,12 @@ diff -up a/drw.c b/drw.c
+ drw->visual = visual; + drw->visual = visual;
+ drw->depth = depth; + drw->depth = depth;
+ drw->cmap = cmap; + drw->cmap = cmap;
+ drw->visual = visual;
+ drw->depth = depth;
+ drw->cmap = cmap;
+ drw->drawable = XCreatePixmap(dpy, root, w, h, depth); + drw->drawable = XCreatePixmap(dpy, root, w, h, depth);
+ drw->gc = XCreateGC(dpy, drw->drawable, 0, NULL); + drw->gc = XCreateGC(dpy, drw->drawable, 0, NULL);
XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter); XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter);
return drw; return drw;
@@ -87,7 +93,7 @@ drw_resize(Drw *drw, unsigned int w, uns @@ -87,7 +90,7 @@ drw_resize(Drw *drw, unsigned int w, uns
drw->h = h; drw->h = h;
if (drw->drawable) if (drw->drawable)
XFreePixmap(drw->dpy, drw->drawable); XFreePixmap(drw->dpy, drw->drawable);
@ -73,7 +67,7 @@ diff -up a/drw.c b/drw.c
} }
void void
@@ -193,21 +199,22 @@ drw_fontset_free(Fnt *font) @@ -193,21 +196,22 @@ drw_fontset_free(Fnt *font)
} }
void void
@ -100,7 +94,7 @@ diff -up a/drw.c b/drw.c
{ {
size_t i; size_t i;
Clr *ret; Clr *ret;
@@ -217,7 +224,7 @@ drw_scm_create(Drw *drw, const char *clr @@ -217,7 +221,7 @@ drw_scm_create(Drw *drw, const char *clr
return NULL; return NULL;
for (i = 0; i < clrcount; i++) for (i = 0; i < clrcount; i++)
@ -109,7 +103,7 @@ diff -up a/drw.c b/drw.c
return ret; return ret;
} }
@@ -273,9 +280,7 @@ drw_text(Drw *drw, int x, int y, unsigne @@ -273,9 +277,7 @@ drw_text(Drw *drw, int x, int y, unsigne
} else { } else {
XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel); XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
@ -120,9 +114,9 @@ diff -up a/drw.c b/drw.c
x += lpad; x += lpad;
w -= lpad; w -= lpad;
} }
diff -up a/drw.h b/drw.h diff -up -N a/drw.h b/drw.h
--- a/drw.h 2019-02-02 13:55:28.000000000 +0100 --- a/drw.h 2020-12-01 10:32:18.704229651 +0100
+++ b/drw.h 2019-03-12 18:34:52.780703276 +0100 +++ b/drw.h 2020-12-01 10:39:11.374210543 +0100
@@ -20,6 +20,9 @@ typedef struct { @@ -20,6 +20,9 @@ typedef struct {
Display *dpy; Display *dpy;
int screen; int screen;
@ -153,9 +147,9 @@ diff -up a/drw.h b/drw.h
/* Cursor abstraction */ /* Cursor abstraction */
Cur *drw_cur_create(Drw *drw, int shape); Cur *drw_cur_create(Drw *drw, int shape);
diff -up a/dwm.c b/dwm.c diff -up -N a/dwm.c b/dwm.c
--- a/dwm.c 2019-03-13 09:31:38.313322535 +0100 --- a/dwm.c 2020-12-01 10:32:18.704229651 +0100
+++ b/dwm.c 2019-03-12 18:34:52.780703276 +0100 +++ b/dwm.c 2020-12-01 10:42:35.324191552 +0100
@@ -58,6 +58,8 @@ @@ -58,6 +58,8 @@
#define TAGMASK ((1 << LENGTH(tags)) - 1) #define TAGMASK ((1 << LENGTH(tags)) - 1)
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
@ -165,16 +159,7 @@ diff -up a/dwm.c b/dwm.c
#define SYSTEM_TRAY_REQUEST_DOCK 0 #define SYSTEM_TRAY_REQUEST_DOCK 0
/* XEMBED messages */ /* XEMBED messages */
@@ -74,6 +76,8 @@ @@ -270,6 +272,7 @@ static Client *wintosystrayicon(Window w
#define VERSION_MINOR 0
#define XEMBED_EMBEDDED_VERSION (VERSION_MAJOR << 16) | VERSION_MINOR
+#define OPAQUE 0xffU
+
/* enums */
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
enum { SchemeNorm, SchemeSel, SchemeWarn, SchemeUrgent }; /* color schemes */
@@ -272,6 +276,7 @@ static Client *wintosystrayicon(Window w
static int xerror(Display *dpy, XErrorEvent *ee); static int xerror(Display *dpy, XErrorEvent *ee);
static int xerrordummy(Display *dpy, XErrorEvent *ee); static int xerrordummy(Display *dpy, XErrorEvent *ee);
static int xerrorstart(Display *dpy, XErrorEvent *ee); static int xerrorstart(Display *dpy, XErrorEvent *ee);
@ -182,7 +167,7 @@ diff -up a/dwm.c b/dwm.c
static void zoom(const Arg *arg); static void zoom(const Arg *arg);
/* variables */ /* variables */
@@ -310,6 +315,11 @@ static Drw *drw; @@ -312,6 +315,11 @@ static Drw *drw;
static Monitor *mons, *selmon; static Monitor *mons, *selmon;
static Window root, wmcheckwin; static Window root, wmcheckwin;
@ -194,7 +179,7 @@ diff -up a/dwm.c b/dwm.c
/* configuration, allows nested code to access above variables */ /* configuration, allows nested code to access above variables */
#include "config.h" #include "config.h"
@@ -1786,7 +1796,8 @@ setup(void) @@ -1844,7 +1852,8 @@ setup(void)
sw = DisplayWidth(dpy, screen); sw = DisplayWidth(dpy, screen);
sh = DisplayHeight(dpy, screen); sh = DisplayHeight(dpy, screen);
root = RootWindow(dpy, screen); root = RootWindow(dpy, screen);
@ -204,7 +189,7 @@ diff -up a/dwm.c b/dwm.c
if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
die("no fonts could be loaded."); die("no fonts could be loaded.");
lrpad = drw->fonts->h; lrpad = drw->fonts->h;
@@ -1821,7 +1832,7 @@ setup(void) @@ -1879,7 +1888,7 @@ setup(void)
/* init appearance */ /* init appearance */
scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
for (i = 0; i < LENGTH(colors); i++) for (i = 0; i < LENGTH(colors); i++)
@ -213,7 +198,7 @@ diff -up a/dwm.c b/dwm.c
/* init system tray */ /* init system tray */
updatesystray(); updatesystray();
/* init bars */ /* init bars */
@@ -2098,7 +2109,9 @@ updatebars(void) @@ -2157,7 +2166,9 @@ updatebars(void)
Monitor *m; Monitor *m;
XSetWindowAttributes wa = { XSetWindowAttributes wa = {
.override_redirect = True, .override_redirect = True,
@ -224,7 +209,7 @@ diff -up a/dwm.c b/dwm.c
.event_mask = ButtonPressMask|ExposureMask .event_mask = ButtonPressMask|ExposureMask
}; };
XClassHint ch = {"dwm", "dwm"}; XClassHint ch = {"dwm", "dwm"};
@@ -2108,9 +2121,9 @@ updatebars(void) @@ -2167,9 +2178,9 @@ updatebars(void)
w = m->ww; w = m->ww;
if (showsystray && m == systraytomon(m)) if (showsystray && m == systraytomon(m))
w -= getsystraywidth(); w -= getsystraywidth();
@ -237,17 +222,7 @@ diff -up a/dwm.c b/dwm.c
XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor); XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
if (showsystray && m == systraytomon(m)) if (showsystray && m == systraytomon(m))
XMapRaised(dpy, systray->win); XMapRaised(dpy, systray->win);
@@ -2403,7 +2416,8 @@ updatesystray(void) @@ -2610,6 +2621,43 @@ systraytomon(Monitor *m) {
XMapSubwindows(dpy, systray->win);
/* redraw background */
XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColBg].pixel);
- XFillRectangle(dpy, systray->win, drw->gc, 0, 0, w, bh);
+// XFillRectangle(dpy, systray->win, drw->gc, 0, 0, w, bh);
+ XFillRectangle(dpy, systray->win, XCreateGC(dpy, root, 0, NULL), 0, 0, w, bh);
XSync(dpy, False);
}
@@ -2552,6 +2566,43 @@ systraytomon(Monitor *m) {
} }
void void

View file

@ -0,0 +1,164 @@
diff -up a/dwm.1 b/dwm.1
--- a/dwm.1 2020-12-01 10:01:44.217062949 +0100
+++ b/dwm.1 2020-12-01 10:04:30.247194027 +0100
@@ -30,6 +30,14 @@ top left corner. The tags which are app
indicated with an empty square in the top left corner.
.P
dwm draws a small border around windows to indicate the focus state.
+.P
+On start, dwm can start additional programs that may be specified in two special
+shell scripts (see the FILES section below), autostart_blocking.sh and
+autostart.sh. The former is executed first and dwm will wait for its
+termination before starting. The latter is executed in the background before
+dwm enters its handler loop.
+.P
+Either of these files may be omitted.
.SH OPTIONS
.TP
.B \-v
@@ -152,6 +160,21 @@ Toggles focused window between floating
.TP
.B Mod1\-Button3
Resize focused window while dragging. Tiled windows will be toggled to the floating state.
+.SH FILES
+The files containing programs to be started along with dwm are searched for in
+the following directories:
+.IP "1. $XDG_DATA_HOME/dwm"
+.IP "2. $HOME/.local/share/dwm"
+.IP "3. $HOME/.dwm"
+.P
+The first existing directory is scanned for any of the autostart files below.
+.TP 15
+autostart.sh
+This file is started as a shell background process before dwm enters its handler
+loop.
+.TP 15
+autostart_blocking.sh
+This file is started before any autostart.sh; dwm waits for its termination.
.SH CUSTOMIZATION
dwm is customized by creating a custom config.h and (re)compiling the source
code. This keeps it fast, secure and simple.
diff -up a/dwm.c b/dwm.c
--- a/dwm.c 2020-12-01 10:01:44.217062949 +0100
+++ b/dwm.c 2020-12-01 10:07:15.937309505 +0100
@@ -29,6 +29,7 @@
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
+#include <sys/stat.h>
#include <sys/wait.h>
#include <X11/cursorfont.h>
#include <X11/keysym.h>
@@ -222,6 +223,7 @@ static void resizemouse(const Arg *arg);
static void resizerequest(XEvent *e);
static void restack(Monitor *m);
static void run(void);
+static void runautostart(void);
static void scan(void);
static int sendevent(Window w, Atom proto, int m, long d0, long d1, long d2, long d3, long d4);
static void sendmon(Client *c, Monitor *m);
@@ -269,8 +271,12 @@ static int xerrorstart(Display *dpy, XEr
static void zoom(const Arg *arg);
/* variables */
+static const char autostartblocksh[] = "autostart_blocking.sh";
+static const char autostartsh[] = "autostart.sh";
static Systray *systray = NULL;
static const char broken[] = "broken";
+static const char dwmdir[] = "dwm";
+static const char localshare[] = ".local/share";
static char stext[256];
static int screen;
static int sw, sh; /* X display screen geometry width, height */
@@ -1557,6 +1563,83 @@ run(void)
}
void
+runautostart(void)
+{
+ char *pathpfx;
+ char *path;
+ char *xdgdatahome;
+ char *home;
+ struct stat sb;
+
+ if ((home = getenv("HOME")) == NULL)
+ /* this is almost impossible */
+ return;
+
+ /* if $XDG_DATA_HOME is set and not empty, use $XDG_DATA_HOME/dwm,
+ * otherwise use ~/.local/share/dwm as autostart script directory
+ */
+ xdgdatahome = getenv("XDG_DATA_HOME");
+ if (xdgdatahome != NULL && *xdgdatahome != '\0') {
+ /* space for path segments, separators and nul */
+ pathpfx = ecalloc(1, strlen(xdgdatahome) + strlen(dwmdir) + 2);
+
+ if (sprintf(pathpfx, "%s/%s", xdgdatahome, dwmdir) <= 0) {
+ free(pathpfx);
+ return;
+ }
+ } else {
+ /* space for path segments, separators and nul */
+ pathpfx = ecalloc(1, strlen(home) + strlen(localshare)
+ + strlen(dwmdir) + 3);
+
+ if (sprintf(pathpfx, "%s/%s/%s", home, localshare, dwmdir) < 0) {
+ free(pathpfx);
+ return;
+ }
+ }
+
+ /* check if the autostart script directory exists */
+ if (! (stat(pathpfx, &sb) == 0 && S_ISDIR(sb.st_mode))) {
+ /* the XDG conformant path does not exist or is no directory
+ * so we try ~/.dwm instead
+ */
+ char *pathpfx_new = realloc(pathpfx, strlen(home) + strlen(dwmdir) + 3);
+ if(pathpfx_new == NULL) {
+ free(pathpfx);
+ return;
+ }
+ pathpfx = pathpfx_new;
+
+ if (sprintf(pathpfx, "%s/.%s", home, dwmdir) <= 0) {
+ free(pathpfx);
+ return;
+ }
+ }
+
+ /* try the blocking script first */
+ path = ecalloc(1, strlen(pathpfx) + strlen(autostartblocksh) + 2);
+ if (sprintf(path, "%s/%s", pathpfx, autostartblocksh) <= 0) {
+ free(path);
+ free(pathpfx);
+ }
+
+ if (access(path, X_OK) == 0)
+ system(path);
+
+ /* now the non-blocking script */
+ if (sprintf(path, "%s/%s", pathpfx, autostartsh) <= 0) {
+ free(path);
+ free(pathpfx);
+ }
+
+ if (access(path, X_OK) == 0)
+ system(strcat(path, " &"));
+
+ free(pathpfx);
+ free(path);
+}
+
+void
scan(void)
{
unsigned int i, num;
@@ -2501,6 +2584,7 @@ main(int argc, char *argv[])
die("pledge");
#endif /* __OpenBSD__ */
scan();
+ runautostart();
run();
cleanup();
XCloseDisplay(dpy);

View file

@ -1,148 +0,0 @@
diff -up a/dwm.c b/dwm.c
--- a/dwm.c
+++ b/dwm.c
@@ -56,6 +56,7 @@
#define WIDTH(X) ((X)->w + 2 * (X)->bw)
#define HEIGHT(X) ((X)->h + 2 * (X)->bw)
#define TAGMASK ((1 << LENGTH(tags)) - 1)
+#define TAGSLENGTH (LENGTH(tags))
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
#define SYSTEM_TRAY_REQUEST_DOCK 0
@@ -80,7 +81,7 @@ enum { SchemeNorm, SchemeSel }; /* color
enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
NetSystemTray, NetSystemTrayOP, NetSystemTrayOrientation, NetSystemTrayOrientationHorz,
NetWMFullscreen, NetActiveWindow, NetWMWindowType,
- NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
+ NetWMWindowTypeDialog, NetClientList, NetDesktopNames, NetDesktopViewport, NetNumberOfDesktops, NetCurrentDesktop, NetLast }; /* EWMH atoms */
enum { Manager, Xembed, XembedInfo, XLast }; /* Xembed atoms */
enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
@@ -231,11 +232,15 @@ static void scan(void);
static int sendevent(Window w, Atom proto, int m, long d0, long d1, long d2, long d3, long d4);
static void sendmon(Client *c, Monitor *m);
static void setclientstate(Client *c, long state);
+static void setcurrentdesktop(void);
+static void setdesktopnames(void);
static void setfocus(Client *c);
static void setfullscreen(Client *c, int fullscreen);
static void setlayout(const Arg *arg);
static void setmfact(const Arg *arg);
+static void setnumdesktops(void);
static void setup(void);
+static void setviewport(void);
static void seturgent(Client *c, int urg);
static void showhide(Client *c);
static void sigchld(int unused);
@@ -251,6 +256,7 @@ static void toggleview(const Arg *arg);
static void unfocus(Client *c, int setfocus);
static void unmanage(Client *c, int destroyed);
static void unmapnotify(XEvent *e);
+static void updatecurrentdesktop(void);
static void updatebarpos(Monitor *m);
static void updatebars(void);
static void updateclientlist(void);
@@ -1652,6 +1658,16 @@ setclientstate(Client *c, long state)
XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32,
PropModeReplace, (unsigned char *)data, 2);
}
+void
+setcurrentdesktop(void){
+ long data[] = { 0 };
+ XChangeProperty(dpy, root, netatom[NetCurrentDesktop], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)data, 1);
+}
+void setdesktopnames(void){
+ XTextProperty text;
+ Xutf8TextListToTextProperty(dpy, tags, TAGSLENGTH, XUTF8StringStyle, &text);
+ XSetTextProperty(dpy, root, &text, netatom[NetDesktopNames]);
+}
int
sendevent(Window w, Atom proto, int mask, long d0, long d1, long d2, long d3, long d4)
@@ -1689,6 +1705,12 @@ sendevent(Window w, Atom proto, int mask
}
void
+setnumdesktops(void){
+ long data[] = { TAGSLENGTH };
+ XChangeProperty(dpy, root, netatom[NetNumberOfDesktops], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)data, 1);
+}
+
+void
setfocus(Client *c)
{
if (!c->neverfocus) {
@@ -1797,6 +1819,10 @@ setup(void)
netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False);
netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False);
netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False);
+ netatom[NetDesktopViewport] = XInternAtom(dpy, "_NET_DESKTOP_VIEWPORT", False);
+ netatom[NetNumberOfDesktops] = XInternAtom(dpy, "_NET_NUMBER_OF_DESKTOPS", False);
+ netatom[NetCurrentDesktop] = XInternAtom(dpy, "_NET_CURRENT_DESKTOP", False);
+ netatom[NetDesktopNames] = XInternAtom(dpy, "_NET_DESKTOP_NAMES", False);
xatom[Manager] = XInternAtom(dpy, "MANAGER", False);
xatom[Xembed] = XInternAtom(dpy, "_XEMBED", False);
xatom[XembedInfo] = XInternAtom(dpy, "_XEMBED_INFO", False);
@@ -1824,6 +1850,10 @@ setup(void)
/* EWMH support per view */
XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
PropModeReplace, (unsigned char *) netatom, NetLast);
+ setnumdesktops();
+ setcurrentdesktop();
+ setdesktopnames();
+ setviewport();
XDeleteProperty(dpy, root, netatom[NetClientList]);
/* select events */
wa.cursor = cursor[CurNormal]->cursor;
@@ -1835,6 +1865,11 @@ setup(void)
grabkeys();
focus(NULL);
}
+void
+setviewport(void){
+ long data[] = { 0, 0 };
+ XChangeProperty(dpy, root, netatom[NetDesktopViewport], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)data, 2);
+}
void
@@ -1983,6 +2018,7 @@ toggletag(const Arg *arg)
focus(NULL);
arrange(selmon);
}
+ updatecurrentdesktop();
}
void
@@ -1994,6 +2030,7 @@ toggleview(const Arg *arg)
selmon->tagset[selmon->seltags] = newtagset;
focus(NULL);
arrange(selmon);
+ updatecurrentdesktop();
}
}
@@ -2109,6 +2146,15 @@ updateclientlist()
XA_WINDOW, 32, PropModeAppend,
(unsigned char *) &(c->win), 1);
}
+void updatecurrentdesktop(void){
+ long rawdata[] = { selmon->tagset[selmon->seltags] };
+ int i=0;
+ while(*rawdata >> i+1){
+ i++;
+ }
+ long data[] = { i };
+ XChangeProperty(dpy, root, netatom[NetCurrentDesktop], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)data, 1);
+}
int
updategeom(void)
@@ -2421,6 +2467,7 @@ view(const Arg *arg)
selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
focus(NULL);
arrange(selmon);
+ updatecurrentdesktop();
}
Client *

View file

@ -1,73 +0,0 @@
diff -up a/dwm.c b/dwm.c
--- a/dwm.c
+++ b/dwm.c
@@ -822,10 +822,10 @@ dirtomon(int dir)
void
drawbar(Monitor *m)
{
- int x, w, sw = 0, stw = 0;
+ int x, w, sw = 0, stw = 0, tw, mw, ew = 0;
int boxs = drw->fonts->h / 9;
int boxw = drw->fonts->h / 6 + 2;
- unsigned int i, occ = 0, urg = 0;
+ unsigned int i, occ = 0, urg = 0, n = 0;
char *ts = stext;
char *tp = stext;
int tx = 0;
@@ -854,6 +854,8 @@ drawbar(Monitor *m)
resizebarwin(m);
for (c = m->clients; c; c = c->next) {
+ if (ISVISIBLE(c))
+ n++;
occ |= c->tags == 255 ? 0 : c->tags;
if (c->isurgent)
urg |= c->tags;
@@ -872,15 +874,39 @@ drawbar(Monitor *m)
x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
if ((w = m->ww - sw - stw - 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);
- 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);
+ if (n > 0) {
+ tw = TEXTW(m->sel->name) + lrpad;
+ mw = (tw >= w || n == 1) ? 0 : (w - tw) / (n - 1);
+
+ i = 0;
+ for (c = m->clients; c; c = c->next) {
+ if (!ISVISIBLE(c) || c == m->sel)
+ continue;
+ tw = TEXTW(c->name);
+ if(tw < mw)
+ ew += (mw - tw);
+ else
+ i++;
+ }
+ if (i > 0)
+ mw += ew / i;
+
+ for (c = m->clients; c; c = c->next) {
+ if (!ISVISIBLE(c))
+ continue;
+ tw = MIN(m->sel == c ? w : mw, TEXTW(c->name));
+
+ drw_setscheme(drw, scheme[m->sel == c ? SchemeSel : SchemeNorm]);
+ if (tw > 0) /* trap special handling of 0 in drw_text */
+ drw_text(drw, x, 0, tw, bh, lrpad / 2, c->name, 0);
+ if (c->isfloating)
+ drw_rect(drw, x + boxs, boxs, boxw, boxw, c->isfixed, 0);
+ x += tw;
+ w -= tw;
+ }
}
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ drw_rect(drw, x, 0, w, bh, 1, 1);
}
drw_map(drw, m->barwin, 0, 0, m->ww - stw, bh);
}

View file

@ -1,19 +1,7 @@
From b04bb473cf9818277d33a591f7fe2dfae96afaaf Mon Sep 17 00:00:00 2001 diff -up -N a/config.def.h b/config.def.h
From: Joshua Haase <hahj87@gmail.com> --- a/config.def.h 2020-12-01 10:10:57.007393876 +0100
Date: Mon, 15 Aug 2016 17:06:18 -0500 +++ b/config.def.h 2020-12-01 10:13:17.190767226 +0100
Subject: [PATCH] Apply modified gridmode patch. @@ -40,11 +40,13 @@ static const float mfact = 0.55; /*
---
config.def.h | 3 +++
layouts.c | 27 +++++++++++++++++++++++++++
2 files changed, 30 insertions(+)
create mode 100644 layouts.c
diff --git a/config.def.h b/config.def.h
index a9ac303..30b7c4a 100644
--- a/config.def.h
+++ b/config.def.h
@@ -36,11 +36,13 @@ 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 nmaster = 1; /* number of clients in master area */
static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
@ -24,22 +12,25 @@ index a9ac303..30b7c4a 100644
{ "><>", NULL }, /* no layout function means floating behavior */ { "><>", NULL }, /* no layout function means floating behavior */
{ "[M]", monocle }, { "[M]", monocle },
+ { "HHH", grid }, + { "HHH", grid },
{ NULL, NULL },
}; };
/* key definitions */ @@ -81,6 +83,7 @@ static Key keys[] = {
@@ -76,6 +78,7 @@ static Key keys[] = {
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
+ { MODKEY, XK_g, setlayout, {.v = &layouts[3]} }, + { MODKEY, XK_g, setlayout, {.v = &layouts[3]} },
{ MODKEY|ControlMask, XK_comma, cyclelayout, {.i = -1 } },
{ MODKEY|ControlMask, XK_period, cyclelayout, {.i = +1 } },
{ MODKEY, XK_space, setlayout, {0} }, { MODKEY, XK_space, setlayout, {0} },
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} }, @@ -119,4 +122,3 @@ static Button buttons[] = {
{ MODKEY, XK_0, view, {.ui = ~0 } }, { ClkTagBar, MODKEY, Button1, tag, {0} },
diff --git a/layouts.c b/layouts.c { ClkTagBar, MODKEY, Button3, toggletag, {0} },
new file mode 100644 };
index 0000000..d26acf3 -
--- /dev/null diff -up -N a/layouts.c b/layouts.c
+++ b/layouts.c --- a/layouts.c 1970-01-01 01:00:00.000000000 +0100
+++ b/layouts.c 2020-12-01 10:14:11.740781107 +0100
@@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
+void +void
+grid(Monitor *m) { +grid(Monitor *m) {
@ -68,6 +59,3 @@ index 0000000..d26acf3
+ i++; + i++;
+ } + }
+} +}
--
2.14.1

View file

@ -1,23 +1,16 @@
# HG changeset patch diff -up -N a/config.def.h b/config.def.h
# User Barbu Paul - Gheorghe <barbu.paul.gheorghe@gmail.com> --- a/config.def.h 2020-12-01 10:21:09.920859006 +0100
# Date 1354650884 -7200 +++ b/config.def.h 2020-12-01 10:22:27.167535028 +0100
# Node ID 6c472a21a5887c5295a331c48c4da188ec2c8413 @@ -66,6 +66,8 @@ static char dmenumon[2] = "0"; /* compon
# Parent aaab44133a6830c9a00263731d098c01cc1d6fb5 static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
selfrestart now magically locates the current dwm (no need to hardcode a path) static const char *termcmd[] = { "st", NULL };
diff -r aaab44133a68 -r 6c472a21a588 config.def.h
--- a/config.def.h Tue Dec 04 21:54:44 2012 +0200
+++ b/config.def.h Tue Dec 04 21:54:44 2012 +0200
@@ -54,6 +54,8 @@
static const char *termcmd[] = { "urxvtc", NULL };
static const char *filemancmd[] = { "thunar", NULL };
+#include "selfrestart.c" +#include "selfrestart.c"
+ +
static Key keys[] = { static Key keys[] = {
/* modifier key function argument */ /* modifier key function argument */
{ MODKEY, XK_r, spawn, {.v = dmenucmd } }, { MODKEY, XK_p, spawn, {.v = dmenucmd } },
@@ -89,6 +91,7 @@ @@ -103,6 +105,7 @@ static Key keys[] = {
TAGKEYS( XK_7, 6) TAGKEYS( XK_7, 6)
TAGKEYS( XK_8, 7) TAGKEYS( XK_8, 7)
TAGKEYS( XK_9, 8) TAGKEYS( XK_9, 8)
@ -25,14 +18,9 @@ diff -r aaab44133a68 -r 6c472a21a588 config.def.h
{ MODKEY|ShiftMask, XK_q, quit, {0} }, { MODKEY|ShiftMask, XK_q, quit, {0} },
}; };
@@ -108,4 +111,3 @@ diff -up -N a/selfrestart.c b/selfrestart.c
{ ClkTagBar, MODKEY, Button1, tag, {0} }, --- a/selfrestart.c 1970-01-01 01:00:00.000000000 +0100
{ ClkTagBar, MODKEY, Button3, toggletag, {0} }, +++ b/selfrestart.c 2020-12-01 10:24:06.714211651 +0100
};
-
diff -r aaab44133a68 -r 6c472a21a588 selfrestart.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/selfrestart.c Tue Dec 04 21:54:44 2012 +0200
@@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
+#include <unistd.h> +#include <unistd.h>
+#include <sys/types.h> +#include <sys/types.h>

View file

@ -1,27 +1,7 @@
diff -up a/config.def.h b/config.def.h
--- a/config.def.h
+++ b/config.def.h
@@ -72,6 +72,8 @@ static const Layout layouts[] = {
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
static const char *termcmd[] = { "st", NULL };
+static const char scratchpadname[] = "scratchpad";
+static const char *scratchpadcmd[] = { "st", "-t", scratchpadname, "-g", "120x34", NULL };
#include "selfrestart.c"
@@ -79,6 +81,7 @@ static Key keys[] = {
/* modifier key function argument */
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
+ { MODKEY, XK_grave, togglescratch, {.v = scratchpadcmd } },
{ MODKEY, XK_b, togglebar, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1 } },
{ MODKEY, XK_k, focusstack, {.i = -1 } },
diff -up a/dwm.c b/dwm.c diff -up a/dwm.c b/dwm.c
--- a/dwm.c --- a/dwm.c 2019-06-06 21:23:27.023328450 +0200
+++ b/dwm.c +++ b/dwm.c 2019-06-20 15:07:01.089767947 +0200
@@ -246,6 +246,7 @@ static void tagmon(const Arg *arg); @@ -213,6 +213,7 @@ static void tagmon(const Arg *arg);
static void tile(Monitor *); static void tile(Monitor *);
static void togglebar(const Arg *arg); static void togglebar(const Arg *arg);
static void togglefloating(const Arg *arg); static void togglefloating(const Arg *arg);
@ -29,7 +9,7 @@ diff -up a/dwm.c b/dwm.c
static void toggletag(const Arg *arg); static void toggletag(const Arg *arg);
static void toggleview(const Arg *arg); static void toggleview(const Arg *arg);
static void unfocus(Client *c, int setfocus); static void unfocus(Client *c, int setfocus);
@@ -312,6 +313,8 @@ static Window root, wmcheckwin; @@ -273,6 +274,8 @@ static Window root, wmcheckwin;
/* configuration, allows nested code to access above variables */ /* configuration, allows nested code to access above variables */
#include "config.h" #include "config.h"
@ -38,10 +18,11 @@ diff -up a/dwm.c b/dwm.c
/* compile-time check if all tags fit into an unsigned int bit array. */ /* compile-time check if all tags fit into an unsigned int bit array. */
struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
@@ -1238,6 +1241,13 @@ manage(Window w, XWindowAttributes *wa) @@ -1052,6 +1055,14 @@ manage(Window w, XWindowAttributes *wa)
&& (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my); && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my);
c->bw = borderpx; c->bw = borderpx;
+ selmon->tagset[selmon->seltags] &= ~scratchtag;
+ if (!strcmp(c->name, scratchpadname)) { + if (!strcmp(c->name, scratchpadname)) {
+ c->mon->tagset[c->mon->seltags] |= c->tags = scratchtag; + c->mon->tagset[c->mon->seltags] |= c->tags = scratchtag;
+ c->isfloating = True; + c->isfloating = True;
@ -52,7 +33,15 @@ diff -up a/dwm.c b/dwm.c
wc.border_width = c->bw; wc.border_width = c->bw;
XConfigureWindow(dpy, w, CWBorderWidth, &wc); XConfigureWindow(dpy, w, CWBorderWidth, &wc);
XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel); XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel);
@@ -2013,6 +2023,28 @@ togglefloating(const Arg *arg) @@ -1661,6 +1672,7 @@ spawn(const Arg *arg)
{
if (arg->v == dmenucmd)
dmenumon[0] = '0' + selmon->num;
+ selmon->tagset[selmon->seltags] &= ~scratchtag;
if (fork() == 0) {
if (dpy)
close(ConnectionNumber(dpy));
@@ -1748,6 +1760,28 @@ togglefloating(const Arg *arg)
} }
void void

View file

@ -1,83 +0,0 @@
From 35418d156fccb922710f6ca80a1f3972ba88b42f Mon Sep 17 00:00:00 2001
From: Danny O'Brien <danny@spesh.com>
Date: Mon, 8 Oct 2018 19:21:29 -0700
Subject: [PATCH] Add colors to status message in bar.
This patch matches the format used by
https://dwm.suckless.org/patches/statuscolors/ -- An \x01 character
switches to the normal foreground/color combo, \x02 switches to the
color combo used for selected tags, \03 is set by default to black on
yellow, \04 is white on red.
These color settings are defined in the colors array in config.def.h.
More can be added, but don't have more than 32, or you'll start hitting
real ASCII.
This applies cleanly on mainline dwm from commit 022d076 (Sat Jan 7
17:21:29 2017 +0100) until at least b69c870 (Sat Jun 2 17:15:42 2018
+020).
---
diff --git a/config.def.h b/config.def.h
@@ -16,10 +16,17 @@ static const char col_gray2[] = "#
static const char col_gray3[] = "#bbbbbb";
static const char col_gray4[] = "#eeeeee";
static const char col_cyan[] = "#005577";
+static const char col_black[] = "#000000";
+static const char col_red[] = "#ff0000";
+static const char col_yellow[] = "#ffff00";
+static const char col_white[] = "#ffffff";
+
static const char *colors[][3] = {
- /* fg bg border */
- [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
- [SchemeSel] = { col_gray4, col_cyan, col_cyan },
+ /* fg bg border */
+ [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
+ [SchemeSel] = { col_gray4, col_cyan, col_cyan },
+ [SchemeWarn] = { col_black, col_yellow, col_red },
+ [SchemeUrgent]= { col_white, col_red, col_red },
};
/* tagging */
diff --git a/dwm.c b/dwm.c
@@ -76,7 +76,7 @@
/* enums */
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
-enum { SchemeNorm, SchemeSel }; /* color schemes */
+enum { SchemeNorm, SchemeSel, SchemeWarn, SchemeUrgent }; /* color schemes */
enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
NetSystemTray, NetSystemTrayOP, NetSystemTrayOrientation, NetSystemTrayOrientationHorz,
NetWMFullscreen, NetActiveWindow, NetWMWindowType,
@@ -826,6 +826,10 @@ drawbar(Monitor *m)
int boxs = drw->fonts->h / 9;
int boxw = drw->fonts->h / 6 + 2;
unsigned int i, occ = 0, urg = 0;
+ char *ts = stext;
+ char *tp = stext;
+ int tx = 0;
+ char ctmp;
Client *c;
if(showsystray && m == systraytomon(m))
@@ -835,7 +839,17 @@ drawbar(Monitor *m)
if (m == selmon) { /* status is only drawn on selected monitor */
drw_setscheme(drw, scheme[SchemeNorm]);
sw = TEXTW(stext) - lrpad / 2 + 2; /* 2px right padding */
- drw_text(drw, m->ww - sw - stw, 0, sw, bh, lrpad / 2 - 2, stext, 0);
+ while (1) {
+ if ((unsigned int)*ts > LENGTH(colors)) { ts++; continue ; }
+ ctmp = *ts;
+ *ts = '\0';
+ drw_text(drw, m->ww - sw + tx, 0, sw - tx, bh, 0, tp, 0);
+ tx += TEXTW(tp) -lrpad;
+ if (ctmp == '\0') { break; }
+ drw_setscheme(drw, scheme[(unsigned int)(ctmp-1)]);
+ *ts = ctmp;
+ tp = ++ts;
+ }
}
resizebarwin(m);