mirror of
https://github.com/alrayyes/dwm.git
synced 2024-11-24 20:46:22 +00:00
feat: updated patches to latest versions
This commit is contained in:
parent
eed6a6bc19
commit
bde1fc1e63
16 changed files with 391 additions and 718 deletions
44
PKGBUILD
44
PKGBUILD
|
@ -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)..."
|
||||||
|
|
14
README.org
14
README.org
|
@ -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]].
|
||||||
|
|
111
config.h
111
config.h
|
@ -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 */
|
||||||
|
@ -104,17 +43,25 @@ static const Rule rules[] = {
|
||||||
* WM_CLASS(STRING) = instance, class
|
* WM_CLASS(STRING) = instance, class
|
||||||
* 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 },
|
{ "Gimp", NULL, NULL, 0, 1, -1 },
|
||||||
{ "Toggl Desktop", NULL, NULL, 0, 1, -1 },
|
{ "Syncthing GTK", NULL, NULL, 0, 1, -1 },
|
||||||
{ "Gimp", NULL, NULL, 0, 1, -1 },
|
|
||||||
{ "firefox", NULL, NULL, 1 << 8, 0, -1 },
|
{ "Brave-browser", NULL, NULL, 0, 0, 1 },
|
||||||
{ "Gpodder", NULL, NULL, 1 << 3, 0, -1 },
|
{ "Firefox", NULL, NULL, 0, 0, 1 },
|
||||||
{ "Spotify", NULL, NULL, 1 << 3, 0, -1 },
|
{ "iceweasel", NULL, NULL, 0, 0, 1 },
|
||||||
{ "ncmpcpp", NULL, NULL, 1 << 3, 0, -1 },
|
|
||||||
{ "mutt", NULL, NULL, 1 << 5, 0, -1 },
|
{ "Element", NULL, NULL, 1 << 2, 0, -1 },
|
||||||
{ "weechat", NULL, NULL, 1 << 6, 0, -1 },
|
{ "Element-Nightly", NULL, NULL, 1 << 2, 0, -1 },
|
||||||
{ "Slack", NULL, NULL, 1 << 6, 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 },
|
||||||
|
|
||||||
|
{ "jetbrains-webstorm", NULL, NULL, 1 << 7, 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 } },
|
||||||
|
@ -189,7 +137,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)
|
||||||
{ MODKEY|ShiftMask, XK_r, self_restart, {0} },
|
{ MODKEY|ShiftMask, XK_r, self_restart, {0} },
|
||||||
{ MODKEY|ShiftMask, XK_q, quit, {0} },
|
{ MODKEY|ShiftMask, XK_q, quit, {0} },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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} },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
109
config_desktop.h
109
config_desktop.h
|
@ -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 */
|
||||||
|
@ -104,17 +43,25 @@ static const Rule rules[] = {
|
||||||
* WM_CLASS(STRING) = instance, class
|
* WM_CLASS(STRING) = instance, class
|
||||||
* 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 },
|
{ "Gimp", NULL, NULL, 0, 1, -1 },
|
||||||
{ "Toggl Desktop", NULL, NULL, 0, 1, -1 },
|
{ "Syncthing GTK", NULL, NULL, 0, 1, -1 },
|
||||||
{ "Gimp", NULL, NULL, 0, 1, -1 },
|
|
||||||
{ "iceweasel", NULL, NULL, 1 << 8, 0, -1 },
|
{ "Brave-browser", NULL, NULL, 0, 0, 1 },
|
||||||
{ "Gpodder", NULL, NULL, 1 << 3, 0, -1 },
|
{ "Firefox", NULL, NULL, 0, 0, 1 },
|
||||||
{ "Spotify", NULL, NULL, 1 << 3, 0, -1 },
|
{ "iceweasel", NULL, NULL, 0, 0, 1 },
|
||||||
{ "ncmpcpp", NULL, NULL, 1 << 3, 0, -1 },
|
|
||||||
{ "mutt", NULL, NULL, 1 << 5, 0, -1 },
|
{ "Element", NULL, NULL, 1 << 2, 0, -1 },
|
||||||
{ "weechat", NULL, NULL, 1 << 6, 0, -1 },
|
{ "Element-Nightly", NULL, NULL, 1 << 2, 0, -1 },
|
||||||
{ "Slack", NULL, NULL, 1 << 6, 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 },
|
||||||
|
|
||||||
|
{ "jetbrains-webstorm", NULL, NULL, 1 << 7, 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 } },
|
||||||
|
@ -189,7 +137,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)
|
||||||
{ MODKEY|ShiftMask, XK_r, self_restart, {0} },
|
{ MODKEY|ShiftMask, XK_r, self_restart, {0} },
|
||||||
{ MODKEY|ShiftMask, XK_q, quit, {0} },
|
{ MODKEY|ShiftMask, XK_q, quit, {0} },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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} },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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);
|
|
|
@ -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);
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
164
local-autostart-20200610-cb3f58a.diff
Normal file
164
local-autostart-20200610-cb3f58a.diff
Normal 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);
|
|
@ -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 *
|
|
|
@ -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);
|
|
||||||
}
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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>
|
|
@ -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
|
|
@ -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);
|
|
Loading…
Reference in a new issue