1
0
mirror of https://github.com/tiyn/dwm.git synced 2025-10-15 20:31:18 +02:00

85 Commits

Author SHA1 Message Date
tiyn
cdd41ed4aa config: start onboard as floating 2025-03-10 00:22:36 +01:00
tiyn
e82ea595c8 modified kepassxc settings 2025-03-04 05:43:50 +01:00
27c10d4bd7 added zen to config 2025-02-09 07:35:57 +01:00
c357419eaf added window configs 2025-01-09 04:41:34 +01:00
a4257742ce added teamspeak to monitor settings 2024-03-28 05:57:01 +01:00
c7ff6b6a42 added telegram 2024-01-22 00:48:52 +01:00
04ba42ca7f readme: updated 2023-12-11 20:22:59 +01:00
a12c7638d0 config updated to match newest patch 2023-12-11 01:22:18 +01:00
ca94ba21a6 added elements to config 2023-11-06 21:52:59 +01:00
4c8265265f added sonixd to rules 2023-11-05 18:22:20 +01:00
d286e168ef added rules 2023-11-04 23:49:51 +01:00
b9c7e4b9a1 remove unneeded code of terminal and dmenu 2023-10-26 06:08:50 +02:00
380d63f8fd changed hotkeys 2023-10-26 05:54:27 +02:00
008c92268a changed icons 2023-10-25 04:31:06 +02:00
8fcd0666ff added installation guide 2023-10-24 06:08:59 +02:00
1dd7519235 updated gitignore 2023-10-24 06:04:44 +02:00
0035d03900 added classic alt-tabbing 2023-10-24 06:02:58 +02:00
1a7568c158 updated hotkeys 2023-10-24 05:47:43 +02:00
32e01b8179 added notitle patch to config 2023-10-24 05:45:24 +02:00
18bc15180f cycling windows when middle click on window name 2023-10-24 04:09:40 +02:00
c4f7ace2f4 added cyclelayouts patch to readme 2023-10-24 03:36:26 +02:00
633070875e added zeroastag patch to readme 2023-10-24 03:17:27 +02:00
c556f40832 updated readme 2023-10-23 04:23:02 +02:00
b88f60d2e7 added alpha patch to readme 2023-10-22 05:29:27 +02:00
4ff8663e88 added gitignore 2023-10-15 03:30:44 +02:00
ca7a863c1a updated readme 2023-10-15 03:27:00 +02:00
722caafce3 added systray patch to Readme 2023-10-13 14:11:31 +02:00
3d72376cef added systray patch to Readme 2023-10-13 04:40:23 +02:00
15ac6f9754 updated readme 2023-10-13 03:23:18 +02:00
fc7eb3f7c2 readme updated 2023-08-22 15:20:35 +02:00
1fada364c0 cleanup: unused programs removed 2023-01-11 01:40:10 +01:00
TiynGER
c376355cfe config: setting merged master+bottomstack config.def.h as config 2020-12-27 18:57:58 +01:00
TiynGER
767d7e124e changing colors 2020-05-30 19:56:55 +02:00
TiynGER
9addd105de basic icon 2020-05-30 18:10:54 +02:00
TiynGER
1e28cca03d new icons 2020-05-29 17:33:58 +02:00
TiynGER
5a92ec4807 update config 2020-05-29 16:53:56 +02:00
TiynGER
116548d4a1 removing alpha patch 2020-05-29 14:12:14 +02:00
tiyn
fbd7aa1468 firefox better now 2020-05-28 21:03:11 +00:00
TiynGER
2ab6d4df92 fixing layouts 2020-05-28 02:15:58 +02:00
TiynGER
9228d0d79f Merge branch 'config' of ssh+git://github/tiynger/dwm into config 2020-05-28 01:48:41 +02:00
TiynGER
0da1eba5da statuscmd added 2020-05-28 01:48:32 +02:00
Marten Kante
8c87d02376 Update README.md 2020-05-14 19:20:17 +00:00
TiynGER
b5bb901fea shortcuts specified in readme 2020-05-10 00:20:55 +02:00
TiynGER
ce8e36d874 removing a bunch of shortcuts 2020-05-10 00:03:08 +02:00
TiynGER
8fc905a914 disabled alpha tmp 2020-04-18 22:23:36 +02:00
TiynGER
e173a53c7f update readme 2020-04-07 22:32:13 +02:00
TiynGER
0edb06f677 new config 2020-04-07 22:27:48 +02:00
TiynGER
0e09a836d3 rm config.h 2020-04-07 22:09:01 +02:00
TiynGER
9170e1e2f2 missing 2020-04-07 22:07:27 +02:00
TiynGER
a3cbe17ccf firefox 2020-04-06 19:08:23 +02:00
TiynGER
e94c3b8bcd lets try qutebrowser 2020-04-06 01:34:20 +02:00
TiynGER
2af267744c making Monocle the default layout 2020-04-05 00:12:36 +02:00
TiynGER
483b197eb5 new color 2020-04-02 01:23:47 +02:00
TiynGER
da3b3a372c its preview time 2020-03-31 20:20:57 +02:00
TiynGER
f0d878b8a2 formatting readme 2020-03-31 15:15:25 +02:00
TiynGER
92abb3b304 update readme 2020-03-31 11:06:24 +02:00
TiynGER
3807c7106d update readme 2020-03-31 10:37:20 +02:00
TiynGER
37fa8a2f71 updates for new deck layout 2020-03-31 10:20:57 +02:00
TiynGER
9ea35a00a9 new option 2020-03-31 10:20:02 +02:00
TiynGER
8c92c1941d updating readme 2020-03-31 10:13:48 +02:00
TiynGER
685c69599e new config for new patch 2020-03-31 10:12:04 +02:00
TiynGER
2314f013d8 updating readme 2020-03-31 10:05:22 +02:00
TiynGER
b1d4290a00 update readme 2020-03-31 09:57:22 +02:00
TiynGER
90d5ce64d7 fixing font for emojis 2020-03-30 21:19:19 +02:00
TiynGER
eb0271878b monitor keys added 2020-03-30 17:13:55 +02:00
TiynGER
c98f008b1e thats the right one 2020-03-30 15:14:18 +02:00
TiynGER
c40dc12e8c enabling 0 tag 2020-03-29 22:05:42 +02:00
TiynGER
fb9efccff1 minor changes to config.h 2020-03-29 21:57:52 +02:00
Marten Kante
08c631234c Update README.md 2020-03-29 17:30:57 +02:00
TiynGER
4c2c587c0a adding README 2020-03-29 16:23:15 +02:00
TiynGER
1eb5dafe1d removing unneeded line 2020-03-29 16:21:22 +02:00
TiynGER
643db6de4c toggle floating added 2020-03-29 16:19:37 +02:00
TiynGER
d4c979c649 new font 2020-03-29 11:34:27 +02:00
TiynGER
d1fb53de7d enable color emojis 2020-03-29 11:23:44 +02:00
TiynGER
9e0818634f new border 2020-03-29 00:31:40 +01:00
TiynGER
ed5afc2a28 minor fixes in shortcuts 2020-03-29 00:28:34 +01:00
TiynGER
71a8ed6bb0 friendship with cyan over, orange is my new best friend 2020-03-29 00:21:38 +01:00
TiynGER
66c73c08ab change colors 2020-03-29 00:07:43 +01:00
TiynGER
b7c7db8d3d bigger? 2020-03-28 23:46:13 +01:00
TiynGER
fd23800043 maybe inconsolata 2020-03-28 23:42:18 +01:00
TiynGER
5e34669153 no emoji font 2020-03-28 23:36:49 +01:00
TiynGER
a862f85599 emoji font 2020-03-28 23:34:46 +01:00
TiynGER
eb34580110 changing font 2020-03-28 23:29:31 +01:00
Marten Kante
41598088e8 Delete README 2020-03-28 23:16:11 +01:00
TiynGER
bd524f38f4 adding config 2020-03-28 20:15:02 +01:00
7 changed files with 210 additions and 447 deletions

76
README.md Normal file
View File

@@ -0,0 +1,76 @@
# dwm
This is my patched version of dwm. The base version is directly from
suckless.org.
This belongs to my larbs installation script and depends heavily on its scripts
and programs.
It is supposed to work in the environment after the larbs-base-installation.
This is my patched version of dwm. The base version is directly from suckless.org.
This repository is set up according to the
[suckless entry of my wiki](https://github.com/tiyn/wiki/blob/master/wiki/linux/suckless.md).
## Patches
The list below shows the currently applied patches to the master branch.
- dwm-activetagindicatorbar-6.2.diff (show bar as window indicator)
- dwm-actualfullscreen-20191112-cb3f58a.diff (enables true fullscreen)
- dwm-alpha-20180613-b69c870.diff (adds transparency)
- dwm-bottomstack-20160719-56a31dc.diff (adds bottomstack and bottomstackhorizontal layout)
- dwm-center-6.1.diff (adds ability to center floating windows at launch)
- dwm-cyclelayouts-20180524-6.2.diff (adds ability to cycle through layouts)
- dwm-deck-6.0.diff (adds deck layout)
- dwm-noborder-6.2.diff (removes border if there is only one window)
- dwm-notitle-6.2.diff (removes window title in the middle of the bar)
- dwm-pertag-20170513-ceac8c9.diff (allows having a layout/mwfact/barpos/nmaster per tag)
- dwm-quitprompt-20220718-6613d9f.diff (adds a confirmation prompt before exiting dwm)
- dwm-status2d-6.2.diff (adds colors and ability to draw rectangles)
- dwm-statusallmons-6.2.diff (display statusbar on every monitors)
- dwm-statuscmd-6.2.diff (enables dwmblocks compatibility)
- dwm-systray-6.2.diff (adds a systray to statusbar)
- dwm-zeroastag-22032023-0aea805.diff (adds a tenth tag on 0)
## Hotkeys
There are various shortcuts and hotkeys used in this version. Included in my
build are the following.
| ModKey | Shift | Key | Function |
| ------ | ----- | --- | -------- |
| Super | | h | (Tiling/Deck) Focus window higher in stack than current |
| Super | | j | (Tiling/Deck) Focus window lower in stack than current |
| Super | | k | (Tiling/Deck) Focus window higher in stack than current |
| Super | | l | (Tiling/Deck) Focus window lower in stack than current |
| Super | | 1/2/.../9/0 | Show tag 1/2/.../9/0 |
| Super | | . | Show monitor lower in stack |
| Super | | , | Show monitor higher in stack |
| Super | Shift | Escape | Quit dwm with call for confirmation |
| Super | Shift | b | Toggle dwmbar |
| Super | Shift | c | Enable deck(/card) layout |
| Super | Shift | d | Toggle floating/tiled for selected window |
| Super | Shift | f | Toggle fullscreen |
| Super | Shift | h | (Tiling/Deck) Make current window the master window |
| Super | Shift | j | (Tiling/Deck) Make current window the master window |
| Super | Shift | k | (Tiling/Deck) Make current window the master window |
| Super | Shift | m | Enable monocle layout |
| Super | Shift | o | (Tiling/Deck) Increase master window size |
| Super | Shift | q | Close current window |
| Super | Shift | t | Enable tiling layout |
| Super | Shift | u | Enable bottomstack layout |
| Super | Shift | v | Enable bottomstackhorizontal layout |
| Super | Shift | z | (Tiling/Deck) Decrease master window size |
| Super | Shift | 1/2/.../9/0 | Add current window to tag 1/2/.../9/0 |
| Super | Shift | . | Add to monitor lower in stack |
| Super | Shift | , | Add to monitor higher in stack |
| Alt | | Tab | (Tiling/Deck) Focus window lower in stack than current |
## Installation
The following programs are required to be installed for full functionality.
- [dmenu](https://github.com/tiyn/dmenu)
The most basic way is to clone the repository and then invoke make.
- `git clone https://github.com/tiyn/dwm`
- `make clean install`

View File

@@ -1,24 +1,33 @@
/* See LICENSE file for copyright and license details. */
/* for media keys */
#include <X11/XF86keysym.h>
/* appearance */
static const unsigned int borderpx = 1; /* border pixel of windows */
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 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 showsystray = 1; /* 0 means no systray */
static const int showbar = 1; /* 0 means no bar */
static const int topbar = 1; /* 0 means bottom bar */
static const char *fonts[] = { "monospace:size=10" };
static const char dmenufont[] = "monospace:size=10";
static const char col_gray1[] = "#222222";
static const char col_gray2[] = "#444444";
static const char col_gray3[] = "#bbbbbb";
static const char col_gray4[] = "#eeeeee";
static const char col_cyan[] = "#005577";
static const unsigned int baralpha = 0xd0;
static const char normbgcolor[] = "#0e0f14";
static const char normbordercolor[] = "#363b47";
static const char normfgcolor[] = "#dfdfdf";
static const char selfgcolor[] = "#eeeeee";
static const char selbordercolor[] = "#555a63";
static const char selbgcolor[] = "#282828";
static const unsigned int baralpha = 0xff;
static const unsigned int borderalpha = OPAQUE;
static const char *colors[][3] = {
/* fg bg border */
[SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
[SchemeSel] = { col_gray4, col_cyan, col_cyan },
[SchemeNorm] = { normfgcolor, normbgcolor, normbordercolor },
[SchemeSel] = { selfgcolor, selbgcolor, selbordercolor },
};
static const unsigned int alphas[][3] = {
/* fg bg border */
[SchemeNorm] = { OPAQUE, baralpha, borderalpha },
@@ -26,32 +35,52 @@ static const unsigned int alphas[][3] = {
};
/* tagging */
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
static const char *tags[] = { "", "", "", "", "", "", "", "", "", "" };
static const Rule rules[] = {
/* xprop(1):
* WM_CLASS(STRING) = instance, class
* WM_NAME(STRING) = title
*/
/* class instance title tags mask isfloating monitor */
{ "Gimp", NULL, NULL, 0, 1, -1 },
{ "Firefox", NULL, NULL, 1 << 8, 0, -1 },
/* class instance title tags center float mon */
{ "firefox", 0, 0, 1 << 1, 0, 0, -1 },
{ "zen", 0, 0, 1 << 1, 0, 0, -1 },
{ "Lutris", 0, 0, 1 << 2, 0, 0, 0 },
{ "zenity", 0, 0, 0, 0, 1, -1 },
{ "steam", 0, 0, 1 << 2, 0, 0, 0 },
{ "discord", 0, 0, 1 << 2, 0, 0, 1 },
{ "TeamSpeak", 0, 0, 1 << 2, 0, 0, 1 },
{ "Element", 0, 0, 1 << 2, 0, 0, 1 },
{ "Signal", 0, 0, 1 << 4, 0, 0, 1 },
{ "TelegramDesktop", 0, 0, 1 << 4, 0, 0, 1 },
{ "threema-web", 0, 0, 1 << 4, 0, 0, 1 },
{ "thunderbird", 0, 0, 1 << 4, 0, 0, 1 },
{ "Sonixd", 0, 0, 1 << 8, 0, 0, 1 },
{ "KeePassXC", 0, "Unlock Database - KeePassXC", 1 << 1, 0, 0, 0 },
{ "KeePassXC", 0, 0, 1 << 9, 0, 0, 0 },
{ "easyeffects", 0, 0, 1 << 9, 0, 0, 1 },
{ "pavucontrol", 0, 0, 1 << 9, 0, 0, 1 },
{ "Onboard", 0, 0, 0, 0, 1, 0 },
};
/* layout(s) */
static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
static const float mfact = 0.5; /* factor of master area size [0.05..0.95] */
static const int nmaster = 1; /* number of clients in master area */
static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
static const Layout layouts[] = {
/* symbol arrange function */
{ "[]=", tile }, /* first entry is default */
{ "><>", NULL }, /* no layout function means floating behavior */
{ "[M]", monocle },
{ "M", monocle },
{ "T", tile }, /* first entry is default */
{ "D", deck },
{ "B", bstack },
{ "B", bstackhoriz },
{ "F", NULL }, /* no layout function means floating behavior */
{ NULL, NULL },
};
/* key definitions */
#define MODKEY Mod1Mask
#define MODKEY Mod4Mask
#define TAGKEYS(KEY,TAG) \
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
@@ -61,36 +90,35 @@ static const Layout layouts[] = {
/* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
/* commands */
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 Key keys[] = {
/* modifier key function argument */
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
{ MODKEY, XK_b, togglebar, {0} },
{ MODKEY|ShiftMask, XK_Escape, quitprompt, {0} },
{ MODKEY|ShiftMask, XK_b, togglebar, {0} },
{ MODKEY|ShiftMask, XK_c, setlayout, {.v = &layouts[2]} },
{ MODKEY|ShiftMask, XK_d, togglefloating, {0} },
{ MODKEY|ShiftMask, XK_f, togglefullscr, {0} },
{ MODKEY, XK_h, focusstack, {.i = -1} },
{ MODKEY|ShiftMask, XK_h, zoom, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1} },
{ MODKEY|ShiftMask, XK_j, zoom, {0} },
{ MODKEY, XK_k, focusstack, {.i = -1} },
{ MODKEY, XK_i, incnmaster, {.i = +1 } },
{ MODKEY, XK_d, incnmaster, {.i = -1 } },
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
{ MODKEY, XK_Return, zoom, {0} },
{ MODKEY, XK_Tab, view, {0} },
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
{ MODKEY, XK_space, setlayout, {0} },
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
{ MODKEY|ShiftMask, XK_k, zoom, {0} },
{ MODKEY, XK_l, focusstack, {.i = +1} },
{ MODKEY|ShiftMask, XK_m, setlayout, {.v = &layouts[0]} },
{ MODKEY|ShiftMask, XK_o, setmfact, {.f = +0.05} },
{ MODKEY|ShiftMask, XK_q, killclient, {0} },
{ MODKEY|ShiftMask, XK_t, setlayout, {.v = &layouts[1]} },
{ MODKEY|ShiftMask, XK_u, setlayout, {.v = &layouts[3]} },
{ MODKEY|ShiftMask, XK_v, setlayout, {.v = &layouts[4]} },
{ MODKEY|ShiftMask, XK_z, setmfact, {.f = -0.05} },
{ MODKEY, XK_0, view, {.ui = ~0} },
{ MODKEY|ShiftMask, XK_0, tag, {.ui = ~0} },
{ MODKEY, XK_comma, focusmon, {.i = -1} },
{ MODKEY, XK_period, focusmon, {.i = +1} },
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1} },
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1} },
{ Mod1Mask, XK_Tab, focusstack, {.i = +1} },
TAGKEYS(XK_1, 0)
TAGKEYS(XK_2, 1)
TAGKEYS(XK_3, 2)
@@ -100,17 +128,19 @@ static Key keys[] = {
TAGKEYS(XK_7, 6)
TAGKEYS(XK_8, 7)
TAGKEYS(XK_9, 8)
{ MODKEY|ShiftMask, XK_q, quit, {0} },
TAGKEYS(XK_0, 9)
};
/* button definitions */
/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkClientWin, or ClkRootWin */
static Button buttons[] = {
/* click event mask button function argument */
{ ClkLtSymbol, 0, Button1, setlayout, {0} },
{ ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
{ ClkWinTitle, 0, Button2, zoom, {0} },
{ ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
{ ClkLtSymbol, 0, Button1, cyclelayout, {.i = +1} },
{ ClkLtSymbol, 0, Button2, focusstack, {.i = +1} },
{ ClkLtSymbol, 0, Button3, cyclelayout, {.i = -1} },
{ ClkStatusText, 0, Button1, sigdwmblocks, {.i = 1} },
{ ClkStatusText, 0, Button2, sigdwmblocks, {.i = 2} },
{ ClkStatusText, 0, Button3, sigdwmblocks, {.i = 3} },
{ ClkClientWin, MODKEY, Button1, movemouse, {0} },
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} },
@@ -119,4 +149,3 @@ static Button buttons[] = {
{ ClkTagBar, MODKEY, Button1, tag, {0} },
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
};

View File

@@ -22,7 +22,7 @@ FREETYPEINC = /usr/include/freetype2
# includes and libs
INCS = -I${X11INC} -I${FREETYPEINC}
LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} -lXrender
LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS}
# flags
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}

30
drw.c
View File

@@ -61,7 +61,7 @@ utf8decode(const char *c, long *u, size_t clen)
}
Drw *
drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap)
drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h)
{
Drw *drw = ecalloc(1, sizeof(Drw));
@@ -70,11 +70,8 @@ drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h
drw->root = root;
drw->w = w;
drw->h = h;
drw->visual = visual;
drw->depth = depth;
drw->cmap = cmap;
drw->drawable = XCreatePixmap(dpy, root, w, h, depth);
drw->gc = XCreateGC(dpy, drw->drawable, 0, NULL);
drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen));
drw->gc = XCreateGC(dpy, root, 0, NULL);
XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter);
return drw;
@@ -90,7 +87,7 @@ drw_resize(Drw *drw, unsigned int w, unsigned int h)
drw->h = h;
if (drw->drawable)
XFreePixmap(drw->dpy, drw->drawable);
drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, drw->depth);
drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen));
}
void
@@ -142,11 +139,11 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
* https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=916349
* and lots more all over the internet.
*/
FcBool iscol;
/*FcBool iscol;
if(FcPatternGetBool(xfont->pattern, FC_COLOR, 0, &iscol) == FcResultMatch && iscol) {
XftFontClose(drw->dpy, xfont);
return NULL;
}
}*/
font = ecalloc(1, sizeof(Fnt));
font->xfont = xfont;
@@ -196,22 +193,21 @@ drw_fontset_free(Fnt *font)
}
void
drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha)
drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
{
if (!drw || !dest || !clrname)
return;
if (!XftColorAllocName(drw->dpy, drw->visual, drw->cmap,
if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen),
DefaultColormap(drw->dpy, drw->screen),
clrname, dest))
die("error, cannot allocate color '%s'", clrname);
dest->pixel = (dest->pixel & 0x00ffffffU) | (alpha << 24);
}
/* Wrapper to create color schemes. The caller has to call free(3) on the
* returned color scheme when done using it. */
Clr *
drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount)
drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
{
size_t i;
Clr *ret;
@@ -221,7 +217,7 @@ drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], si
return NULL;
for (i = 0; i < clrcount; i++)
drw_clr_create(drw, &ret[i], clrnames[i], alphas[i]);
drw_clr_create(drw, &ret[i], clrnames[i]);
return ret;
}
@@ -277,7 +273,9 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
} else {
XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual, drw->cmap);
d = XftDrawCreate(drw->dpy, drw->drawable,
DefaultVisual(drw->dpy, drw->screen),
DefaultColormap(drw->dpy, drw->screen));
x += lpad;
w -= lpad;
}

9
drw.h
View File

@@ -20,9 +20,6 @@ typedef struct {
Display *dpy;
int screen;
Window root;
Visual *visual;
unsigned int depth;
Colormap cmap;
Drawable drawable;
GC gc;
Clr *scheme;
@@ -30,7 +27,7 @@ typedef struct {
} Drw;
/* Drawable abstraction */
Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap);
Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h);
void drw_resize(Drw *drw, unsigned int w, unsigned int h);
void drw_free(Drw *drw);
@@ -41,8 +38,8 @@ unsigned int drw_fontset_getwidth(Drw *drw, const char *text);
void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h);
/* Colorscheme abstraction */
void drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha);
Clr *drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount);
void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
/* Cursor abstraction */
Cur *drw_cur_create(Drw *drw, int shape);

View File

@@ -1,289 +0,0 @@
From f699934b8c8a9c15988ad359bf8fedd6c55abd53 Mon Sep 17 00:00:00 2001
From: Thomas Oltmann <thomas.oltmann.hhg@gmail.com>
Date: Wed, 13 Jun 2018 19:46:26 +0200
Subject: [PATCH] Allow dwm to have translucent bars, while keeping all the
text on it opaque, just like the alpha-patch for st. Updated for b69c870.
---
config.def.h | 7 ++++++
config.mk | 2 +-
drw.c | 26 ++++++++++++-----------
drw.h | 9 +++++---
dwm.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++------
5 files changed, 82 insertions(+), 22 deletions(-)
diff --git a/config.def.h b/config.def.h
index 1c0b587..4f68fe8 100644
--- a/config.def.h
+++ b/config.def.h
@@ -12,11 +12,18 @@ static const char col_gray2[] = "#444444";
static const char col_gray3[] = "#bbbbbb";
static const char col_gray4[] = "#eeeeee";
static const char col_cyan[] = "#005577";
+static const unsigned int baralpha = 0xd0;
+static const unsigned int borderalpha = OPAQUE;
static const char *colors[][3] = {
/* fg bg border */
[SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
[SchemeSel] = { col_gray4, col_cyan, col_cyan },
};
+static const unsigned int alphas[][3] = {
+ /* fg bg border */
+ [SchemeNorm] = { OPAQUE, baralpha, borderalpha },
+ [SchemeSel] = { OPAQUE, baralpha, borderalpha },
+};
/* tagging */
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
diff --git a/config.mk b/config.mk
index 25e2685..bef8de0 100644
--- a/config.mk
+++ b/config.mk
@@ -22,7 +22,7 @@ FREETYPEINC = /usr/include/freetype2
# includes and libs
INCS = -I${X11INC} -I${FREETYPEINC}
-LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS}
+LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} -lXrender
# flags
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
diff --git a/drw.c b/drw.c
index c638323..77fc113 100644
--- a/drw.c
+++ b/drw.c
@@ -61,7 +61,7 @@ utf8decode(const char *c, long *u, size_t clen)
}
Drw *
-drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h)
+drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap)
{
Drw *drw = ecalloc(1, sizeof(Drw));
@@ -70,8 +70,11 @@ drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h
drw->root = root;
drw->w = w;
drw->h = h;
- drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen));
- drw->gc = XCreateGC(dpy, root, 0, NULL);
+ drw->visual = visual;
+ drw->depth = depth;
+ drw->cmap = cmap;
+ drw->drawable = XCreatePixmap(dpy, root, w, h, depth);
+ drw->gc = XCreateGC(dpy, drw->drawable, 0, NULL);
XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter);
return drw;
@@ -87,7 +90,7 @@ drw_resize(Drw *drw, unsigned int w, unsigned int h)
drw->h = h;
if (drw->drawable)
XFreePixmap(drw->dpy, drw->drawable);
- drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen));
+ drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, drw->depth);
}
void
@@ -180,21 +183,22 @@ drw_fontset_free(Fnt *font)
}
void
-drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
+drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha)
{
if (!drw || !dest || !clrname)
return;
- if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen),
- DefaultColormap(drw->dpy, drw->screen),
+ if (!XftColorAllocName(drw->dpy, drw->visual, drw->cmap,
clrname, dest))
die("error, cannot allocate color '%s'", clrname);
+
+ dest->pixel = (dest->pixel & 0x00ffffffU) | (alpha << 24);
}
/* Wrapper to create color schemes. The caller has to call free(3) on the
* returned color scheme when done using it. */
Clr *
-drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
+drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount)
{
size_t i;
Clr *ret;
@@ -204,7 +208,7 @@ drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
return NULL;
for (i = 0; i < clrcount; i++)
- drw_clr_create(drw, &ret[i], clrnames[i]);
+ drw_clr_create(drw, &ret[i], clrnames[i], alphas[i]);
return ret;
}
@@ -260,9 +264,7 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
} else {
XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
- d = XftDrawCreate(drw->dpy, drw->drawable,
- DefaultVisual(drw->dpy, drw->screen),
- DefaultColormap(drw->dpy, drw->screen));
+ d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual, drw->cmap);
x += lpad;
w -= lpad;
}
diff --git a/drw.h b/drw.h
index 4bcd5ad..a56f523 100644
--- a/drw.h
+++ b/drw.h
@@ -20,6 +20,9 @@ typedef struct {
Display *dpy;
int screen;
Window root;
+ Visual *visual;
+ unsigned int depth;
+ Colormap cmap;
Drawable drawable;
GC gc;
Clr *scheme;
@@ -27,7 +30,7 @@ typedef struct {
} Drw;
/* Drawable abstraction */
-Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h);
+Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap);
void drw_resize(Drw *drw, unsigned int w, unsigned int h);
void drw_free(Drw *drw);
@@ -38,8 +41,8 @@ unsigned int drw_fontset_getwidth(Drw *drw, const char *text);
void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h);
/* Colorscheme abstraction */
-void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
-Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
+void drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha);
+Clr *drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount);
/* Cursor abstraction */
Cur *drw_cur_create(Drw *drw, int shape);
diff --git a/dwm.c b/dwm.c
index 4465af1..20f8309 100644
--- a/dwm.c
+++ b/dwm.c
@@ -57,6 +57,8 @@
#define TAGMASK ((1 << LENGTH(tags)) - 1)
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
+#define OPAQUE 0xffU
+
/* enums */
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
enum { SchemeNorm, SchemeSel }; /* color schemes */
@@ -232,6 +234,7 @@ static Monitor *wintomon(Window w);
static int xerror(Display *dpy, XErrorEvent *ee);
static int xerrordummy(Display *dpy, XErrorEvent *ee);
static int xerrorstart(Display *dpy, XErrorEvent *ee);
+static void xinitvisual();
static void zoom(const Arg *arg);
/* variables */
@@ -268,6 +271,11 @@ static Drw *drw;
static Monitor *mons, *selmon;
static Window root, wmcheckwin;
+static int useargb = 0;
+static Visual *visual;
+static int depth;
+static Colormap cmap;
+
/* configuration, allows nested code to access above variables */
#include "config.h"
@@ -1541,7 +1549,8 @@ setup(void)
sw = DisplayWidth(dpy, screen);
sh = DisplayHeight(dpy, screen);
root = RootWindow(dpy, screen);
- drw = drw_create(dpy, screen, root, sw, sh);
+ xinitvisual();
+ drw = drw_create(dpy, screen, root, sw, sh, visual, depth, cmap);
if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
die("no fonts could be loaded.");
lrpad = drw->fonts->h;
@@ -1569,7 +1578,7 @@ setup(void)
/* init appearance */
scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
for (i = 0; i < LENGTH(colors); i++)
- scheme[i] = drw_scm_create(drw, colors[i], 3);
+ scheme[i] = drw_scm_create(drw, colors[i], alphas[i], 3);
/* init bars */
updatebars();
updatestatus();
@@ -1804,16 +1813,18 @@ updatebars(void)
Monitor *m;
XSetWindowAttributes wa = {
.override_redirect = True,
- .background_pixmap = ParentRelative,
+ .background_pixel = 0,
+ .border_pixel = 0,
+ .colormap = cmap,
.event_mask = ButtonPressMask|ExposureMask
};
XClassHint ch = {"dwm", "dwm"};
for (m = mons; m; m = m->next) {
if (m->barwin)
continue;
- m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen),
- CopyFromParent, DefaultVisual(dpy, screen),
- CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
+ m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, depth,
+ InputOutput, visual,
+ CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa);
XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
XMapRaised(dpy, m->barwin);
XSetClassHint(dpy, m->barwin, &ch);
@@ -2110,6 +2121,43 @@ xerrorstart(Display *dpy, XErrorEvent *ee)
return -1;
}
+void
+xinitvisual()
+{
+ XVisualInfo *infos;
+ XRenderPictFormat *fmt;
+ int nitems;
+ int i;
+
+ XVisualInfo tpl = {
+ .screen = screen,
+ .depth = 32,
+ .class = TrueColor
+ };
+ long masks = VisualScreenMask | VisualDepthMask | VisualClassMask;
+
+ infos = XGetVisualInfo(dpy, masks, &tpl, &nitems);
+ visual = NULL;
+ for(i = 0; i < nitems; i ++) {
+ fmt = XRenderFindVisualFormat(dpy, infos[i].visual);
+ if (fmt->type == PictTypeDirect && fmt->direct.alphaMask) {
+ visual = infos[i].visual;
+ depth = infos[i].depth;
+ cmap = XCreateColormap(dpy, root, visual, AllocNone);
+ useargb = 1;
+ break;
+ }
+ }
+
+ XFree(infos);
+
+ if (! visual) {
+ visual = DefaultVisual(dpy, screen);
+ depth = DefaultDepth(dpy, screen);
+ cmap = DefaultColormap(dpy, screen);
+ }
+}
+
void
zoom(const Arg *arg)
{
--
2.17.0

60
dwm.c
View File

@@ -57,8 +57,6 @@
#define TAGMASK ((1 << LENGTH(tags)) - 1)
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
#define OPAQUE 0xffU
/* enums */
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
enum { SchemeNorm, SchemeSel }; /* color schemes */
@@ -234,7 +232,6 @@ static Monitor *wintomon(Window w);
static int xerror(Display *dpy, XErrorEvent *ee);
static int xerrordummy(Display *dpy, XErrorEvent *ee);
static int xerrorstart(Display *dpy, XErrorEvent *ee);
static void xinitvisual();
static void zoom(const Arg *arg);
/* variables */
@@ -271,11 +268,6 @@ static Drw *drw;
static Monitor *mons, *selmon;
static Window root, wmcheckwin;
static int useargb = 0;
static Visual *visual;
static int depth;
static Colormap cmap;
/* configuration, allows nested code to access above variables */
#include "config.h"
@@ -1549,8 +1541,7 @@ setup(void)
sw = DisplayWidth(dpy, screen);
sh = DisplayHeight(dpy, screen);
root = RootWindow(dpy, screen);
xinitvisual();
drw = drw_create(dpy, screen, root, sw, sh, visual, depth, cmap);
drw = drw_create(dpy, screen, root, sw, sh);
if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
die("no fonts could be loaded.");
lrpad = drw->fonts->h;
@@ -1578,7 +1569,7 @@ setup(void)
/* init appearance */
scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
for (i = 0; i < LENGTH(colors); i++)
scheme[i] = drw_scm_create(drw, colors[i], alphas[i], 3);
scheme[i] = drw_scm_create(drw, colors[i], 3);
/* init bars */
updatebars();
updatestatus();
@@ -1813,18 +1804,16 @@ updatebars(void)
Monitor *m;
XSetWindowAttributes wa = {
.override_redirect = True,
.background_pixel = 0,
.border_pixel = 0,
.colormap = cmap,
.background_pixmap = ParentRelative,
.event_mask = ButtonPressMask|ExposureMask
};
XClassHint ch = {"dwm", "dwm"};
for (m = mons; m; m = m->next) {
if (m->barwin)
continue;
m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, depth,
InputOutput, visual,
CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa);
m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen),
CopyFromParent, DefaultVisual(dpy, screen),
CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
XMapRaised(dpy, m->barwin);
XSetClassHint(dpy, m->barwin, &ch);
@@ -2121,43 +2110,6 @@ xerrorstart(Display *dpy, XErrorEvent *ee)
return -1;
}
void
xinitvisual()
{
XVisualInfo *infos;
XRenderPictFormat *fmt;
int nitems;
int i;
XVisualInfo tpl = {
.screen = screen,
.depth = 32,
.class = TrueColor
};
long masks = VisualScreenMask | VisualDepthMask | VisualClassMask;
infos = XGetVisualInfo(dpy, masks, &tpl, &nitems);
visual = NULL;
for(i = 0; i < nitems; i ++) {
fmt = XRenderFindVisualFormat(dpy, infos[i].visual);
if (fmt->type == PictTypeDirect && fmt->direct.alphaMask) {
visual = infos[i].visual;
depth = infos[i].depth;
cmap = XCreateColormap(dpy, root, visual, AllocNone);
useargb = 1;
break;
}
}
XFree(infos);
if (! visual) {
visual = DefaultVisual(dpy, screen);
depth = DefaultDepth(dpy, screen);
cmap = DefaultColormap(dpy, screen);
}
}
void
zoom(const Arg *arg)
{