Giter Site home page Giter Site logo

bakkeby / dwm-flexipatch Goto Github PK

View Code? Open in Web Editor NEW
1.1K 24.0 226.0 1023 KB

A dwm build with preprocessor directives to decide which patches to include during build time

License: MIT License

Makefile 0.53% C 98.48% Roff 0.69% Shell 0.30%
flexipatch dwm suckless

dwm-flexipatch's People

Contributors

ampnbsp avatar bagellll avatar bakkeby avatar dev-null-undefined avatar dislabled avatar gx2b avatar mhdna avatar monosans avatar salastro avatar speedie1337 avatar ultrahalf avatar utkarshverma avatar verschmelzen avatar ysl2 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dwm-flexipatch's Issues

Feature request: _IS_FLOATING patch

A patch, that adds a _IS_FLOATING xproperty for floating windows,
so you can add compositor rules accordingly, for example (with a picom fork with rounded corners) adding this to your picom.conf

rounded-corners-exclude = [ "! _IS_FLOATING@:32c = 1" ];

rounds all floating windows

patch:

diff --git a/dwm.c b/dwm.c
index 664c527..2e05488 100644
--- a/dwm.c
+++ b/dwm.c
@@ -1075,6 +1075,10 @@ manage(Window w, XWindowAttributes *wa)
 	arrange(c->mon);
 	XMapWindow(dpy, c->win);
 	focus(NULL);
+
+	Atom target = XInternAtom(dpy, "_IS_FLOATING", 0);
+	unsigned int floating[1] = {c->isfloating};
+	XChangeProperty(dpy, c->win, target, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)floating, 1);
 }
 
 void
@@ -1720,6 +1724,10 @@ togglefloating(const Arg *arg)
 		resize(selmon->sel, selmon->sel->x, selmon->sel->y,
 			selmon->sel->w, selmon->sel->h, 0);
 	arrange(selmon);
+
+	Atom target = XInternAtom(dpy, "_IS_FLOATING", 0);
+	unsigned int floating[1] = {selmon->sel->isfloating};
+    XChangeProperty(dpy, selmon->sel->win, target, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)floating, 1);
 }
 
 v

CENTEREDFLOATINGMASTER_PATCH + CFACTS

I find the Center floating master a very useful layout for my workflow, but due to resizehints 1 some windows in the stack are sized unequally, I noticed that with Mod+Shift+H/L with the cfacts patch enabled enables the user to resize the windows in the stack, but one issue I have with it is every time I press the keybindings to change the cfact it pulls the master window from the background back on top of everything ....

best scenario to reproduce this is to use CENTEREDFLOATINGMASTER_PATCH / layout and open 3 windows (for example Brave, Discord, and a file manager) place 1 in the master, then MOD+J 2x to put the master in the background, and then Mod+Shift+H & Mod+Shift+L to change cfacts, every time you change cfat it will pull up the master back to focus ...

it would be good if changing cfact wouldn't pull the master back in to focus

monocle layout & pertag don't respect gaps

when I switch to monocle gaps are disabled ... can you make it in such a way to respect gaps so that we can have monocle window with gaps?

also, when i toggle on / off gaps, it toggles them on all tags regardelss of the pertag patch, it would be good to have the ability to have gaps on on 1 tag in 1 layout and gaps off in a different layout on a different tag ...
^^

Manual Patching?

I have this enhanced fakefullscreen patch that enables tiling fullscreen only when it's needed made by Aaron Duxler (made ru_gaps patch as well). This patch is not published though. I'm not a C developer and struggled with patches a bit, so these repos are a godsend. Is it ever a good idea to apply patches to dwm-flexipatch such as this one?


Also, since it's gibberish to me, if you could add these functionalities to the patch, I would really appreciate it:
the patch tries to distinguish between tiling fullscreen (two or more visible clients) and normal fullscreen (single visible client including monocle mode):

  • normal fullscreen without always on top (but removes the bar, just always other clients to lay on top of it).
  • tiling fullscreen removes border of mpv if "F" is pressed twice.
  • chromium, as opposed to firefox, does not adapt itself to the limited viewport automatically in tiling fullscreen. I fix this by moving its position on the stack.
    image

The patch:

diff -up a/dwm.c b/dwm.c
--- a/dwm.c	2019-09-26 12:43:27.579531242 +0200
+++ b/dwm.c	2019-09-26 21:54:20.177938682 +0200
@@ -1476,12 +1476,17 @@ setfullscreen(Client *c, int fullscreen)
 		XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
 			PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1);
 		c->isfullscreen = 1;
-		c->oldstate = c->isfloating;
-		c->oldbw = c->bw;
-		c->bw = 0;
-		c->isfloating = 1;
-		resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
-		XRaiseWindow(dpy, c->win);
+		if ( selmon->lt[selmon->sellt]->arrange == &monocle ||  
+				(nexttiled(selmon->clients) != NULL && 
+				nexttiled(nexttiled(selmon->clients)->next) == NULL))
+		{
+			c->oldstate = c->isfloating;
+			c->oldbw = c->bw;
+			c->bw = 0;
+			c->isfloating = 1;
+			resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
+			XRaiseWindow(dpy, c->win);
+		}
 	} else if (!fullscreen && c->isfullscreen){
 		XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
 			PropModeReplace, (unsigned char*)0, 0);

missleading variable?

when including vanitygaps patch on top of the listed patches bellow I get this make error
CFLAGS = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION="6.2" -DXINERAMA LDFLAGS = -L/usr/X11R6/lib -lX11 -lXinerama -lfontconfig -lXft -lXrender CC = cc cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"6.2\" -DXINERAMA drw.c cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"6.2\" -DXINERAMA dwm.c In file included from patch/include.c:179, from dwm.c:470: patch/tile.c: In function ‘tile’: patch/tile.c:12:2: warning: implicit declaration of function ‘getgaps’; did you mean ‘setgaps’? [-Wimplicit-function-declaration] 12 | getgaps(m, &oh, &ov, &ih, &iv, &n); | ^~~~~~~ | setgaps cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"6.2\" -DXINERAMA util.c cc -o dwm drw.o dwm.o util.o -L/usr/X11R6/lib -lX11 -lXinerama -lfontconfig -lXft -lXrender /usr/bin/ld: dwm.o: in function tile':
dwm.c:(.text+0xc1e): undefined reference to getgaps' collect2: error: ld returned 1 exit status make: *** [Makefile:26: dwm] Error 1
patches included in this error are
patches that I have enabled
ALPHA
ATTACHBOTTOM
AUTORESIZE
AWESOMEBAR
CENTER
CFACTS
CYCLELAYOUTS
EWMHTAGS
HIDEVACANTTAGS
IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT
MOVESTACK
NODMENU
PERTAG
SCRATCHPAD
SYSTRAY
SWITCHTAG
TOGGLEFULLSCREEN
VANITYGAPS
WINDOWROLERULE
ZOOMSWAP

and it wont build

patches included in 2nd error are
ALPHA
ATTACHBOTTOM
AUTORESIZE
AWESOMEBAR
CENTER
CFACTS
CYCLELAYOUTS
EWMHTAGS
HIDEVACANTTAGS
IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT
MOVESTACK
NODMENU
PERTAG
SCRATCHPAD
SYSTRAY
SWITCHTAG
TOGGLEFULLSCREEN
VANITYGAPS
WINDOWROLERULE
ZOOMSWAP
CENTEREDMASTER_LAYOUT
DECK_LAYOUT
MONOCLE_LAYOUT
TILE_LAYOUT

and ran the flexipatch finalizer on top of the 2nd combination of patches

dwm build options:
CFLAGS   = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION="6.2" -DXINERAMA
LDFLAGS  = -L/usr/X11R6/lib -lX11 -lXinerama -lfontconfig -lXft -lXrender
CC       = cc
cp config.def.h config.h
cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"6.2\" -DXINERAMA drw.c
cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"6.2\" -DXINERAMA dwm.c
dwm.c: In function ‘zoom’:
dwm.c:2377:2: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
 2377 |  if (!selmon->lt[selmon->sellt]->arrange
      |  ^~
dwm.c:2383:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
 2383 |   if (c == nexttiled(selmon->clients)) {
      |   ^~
cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"6.2\" -DXINERAMA util.c
cc -o dwm drw.o dwm.o util.o -L/usr/X11R6/lib -lX11 -lXinerama -lfontconfig -lXft -lXrender

I have no clue what this means mate
or how to fix it

patch incompatibility?

with the following patches selected

$ sudo make clean install
[sudo] password for kronikpillow:
rm -f dwm drw.o dwm.o util.o dwm-6.2.tar.gz
dwm build options:
CFLAGS   = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION="6.2" -DXINERAMA
LDFLAGS  = -L/usr/X11R6/lib -lX11 -lXinerama -lfontconfig -lXft -lXrender
CC       = cc
cp config.def.h config.h
cp patches.def.h patches.h
cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"6.2\" -DXINERAMA drw.c
cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"6.2\" -DXINERAMA dwm.c
dwm.c: In function ‘drawbar’:
dwm.c:1567:23: error: ‘boxw’ undeclared (first use in this function)
 1567 |     drw_rect(drw, x + boxw, 0, w - ( 2 * boxw + 1), boxw, m->sel->isfixed, 0);
      |                       ^~~~
dwm.c:1567:23: note: each undeclared identifier is reported only once for each function it appears in
In file included from patch/include.h:161,
                 from dwm.c:411:
dwm.c: At top level:
patch/fibonacci.h:1:13: warning: ‘dwindle’ declared ‘static’ but never defined [-Wunused-function]
    1 | static void dwindle(Monitor *m);
      |             ^~~~~~~
make: *** [Makefile:18: dwm.o] Error 1

broken with no errors

em... the following patches combined together result in a broken dwm, but the make process shows no errors ... I am confused

#define AWESOMEBAR_PATCH 1
#define BARPADDING_PATCH 1
#define CENTER_PATCH 1
#define CFACTS_PATCH 1
#define DWMC_PATCH 1
#define EWMHTAGS_PATCH 1
#define FAKEFULLSCREEN_CLIENT_PATCH 1
#define HIDEVACANTTAGS_PATCH 1
#define NODMENU_PATCH 1
#define PERTAG_PATCH 1
#define SCRATCHPAD_PATCH 1
#define SHIFTVIEW_PATCH 1
#define SYSTRAY_PATCH 1
#define TAGINTOSTACK_ONEMASTER_PATCH 1
#define TAGMONFIXFS_PATCH 1
#define TOGGLEFULLSCREEN_PATCH 1
#define VANITYGAPS_PATCH 1
#define WINDOWROLERULE_PATCH 1
#define XRDB_PATCH 1
#define ZOOMSWAP_PATCH 1
#define CENTEREDFLOATINGMASTER_LAYOUT 1
#define DECK_LAYOUT 1
#define TILE_LAYOUT 1

DRAGMFACT + DRAGCFACT (patch idea)

I haven't tried this and dunno if it works or not, cuz lately I'm exhausted from all the patch testing in here, need a break, but had an idea that if it's not already possible, that it could be a good idea, to have a patch that works with DRAGMFACT + DRAGCFACT, eg so that you can drag CFACTS with your mouse as well :)

btw: Glad I'm keeping you busy :D

alternative tags make error

dwm build options:
CFLAGS   = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION="6.2" -DXINERAMA
LDFLAGS  = -L/usr/X11R6/lib -lX11 -lXinerama -lfontconfig -lXft -lXrender
CC       = cc
cp patches.def.h patches.h
cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"6.2\" -DXINERAMA drw.c
cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"6.2\" -DXINERAMA dwm.c
In file included from dwm.c:283:
config.h:42:79: warning: excess elements in struct initializer
   42 |  { "Gimp",     NULL,       NULL,       0,            1,           0,          0,         -1 },
      |                                                                               ^
config.h:42:79: note: (near initialization for ‘rules[0]’)
config.h:42:90: warning: excess elements in struct initializer
   42 |  { "Gimp",     NULL,       NULL,       0,            1,           0,          0,         -1 },
      |                                                                                          ^
config.h:42:90: note: (near initialization for ‘rules[0]’)
config.h:43:79: warning: excess elements in struct initializer
   43 |  { "Firefox",  NULL,       NULL,       1 << 8,       0,           0,          0,         -1 },
      |                                                                               ^
config.h:43:79: note: (near initialization for ‘rules[1]’)
config.h:43:90: warning: excess elements in struct initializer
   43 |  { "Firefox",  NULL,       NULL,       1 << 8,       0,           0,          0,         -1 },
      |                                                                                          ^
config.h:43:90: note: (near initialization for ‘rules[1]’)
dwm.c: In function ‘drawbar’:
dwm.c:743:56: error: ‘tagsalt’ undeclared (first use in this function); did you mean ‘tags’?
  743 |   wdelta = selmon->alttag ? abs(TEXTW(tags[i]) - TEXTW(tagsalt[i])) / 2 : 0;
      |                                                        ^~~~~~~
dwm.c:59:61: note: in definition of macro ‘TEXTW’
   59 | #define TEXTW(X)                (drw_fontset_getwidth(drw, (X)) + lrpad)
      |                                                             ^
dwm.c:743:56: note: each undeclared identifier is reported only once for each function it appears in
  743 |   wdelta = selmon->alttag ? abs(TEXTW(tags[i]) - TEXTW(tagsalt[i])) / 2 : 0;
      |                                                        ^~~~~~~
dwm.c:59:61: note: in definition of macro ‘TEXTW’
   59 | #define TEXTW(X)                (drw_fontset_getwidth(drw, (X)) + lrpad)
      |                                                             ^
In file included from patch/include.c:2,
                 from dwm.c:285:
At top level:
patch/alternativetags.c:2:1: warning: ‘togglealttag’ defined but not used [-Wunused-function]
    2 | togglealttag()
      | ^~~~~~~~~~~~
make: *** [Makefile:18: dwm.o] Error 1

stacker patch request

could you include the stacker patch? I got addicted to it, it's especially useful when using the centered floating master as the main layout :D

fakefullscreen_client + centered floating master

when using the centered floating master, and toggling the fakefullscreen_client patch, about 10-15% of the fullscreen window gets cut off from the actual window size, refreshing the window (for example Brave Browser) doesn't rescale it to the new centered floating master size, only way I was able to get it to rescale the window to fit it all in fake full screen was to switch to tile layout then back to centered floating master with the fakefullscreen_client toggled ... if your unable to replicate what I'm talking about or don't understand ill record a new video :)

Warp patch cannot build

I've been trying to build this with the Warp patch but I'm getting this error.

patch/warp.c:16:19: error: ‘Monitorhas no member namedby’; did you meanmy’?
   16 |      (y > c->mon->by && y < c->mon->by + bh) ||
      |                   ^~
      |                   my
patch/warp.c:16:37: error: ‘Monitorhas no member namedby’; did you meanmy’?
   16 |      (y > c->mon->by && y < c->mon->by + bh) ||
      |                                     ^~
      |                                     my
patch/warp.c:17:13: error: ‘Monitorhas no member namedtopbar17 |      (c->mon->topbar && !y))
      |             ^~

Currently this is the only patch I have enabled.

can't build

can't build with the following patch list

❯ make
dwm build options:
CFLAGS   = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=200809L -DVERSION="6.2" -DXINERAMA
LDFLAGS  = -L/usr/X11R6/lib -lX11 -lXinerama -lfontconfig -lXft     -lX11-xcb -lxcb -lxcb-res
CC       = cc
cp config.def.h config.h
cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=200809L -DVERSION=\"6.2\" -DXINERAMA drw.c
cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=200809L -DVERSION=\"6.2\" -DXINERAMA dwm.c
cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=200809L -DVERSION=\"6.2\" -DXINERAMA util.c
cc -o dwm drw.o dwm.o util.o -L/usr/X11R6/lib -lX11 -lXinerama -lfontconfig -lXft     -lX11-xcb -lxcb -lxcb-res
/usr/bin/ld: dwm.o: undefined reference to symbol 'XRenderFindVisualFormat'
/usr/bin/ld: /usr/lib/libXrender.so.1: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [Makefile:26: dwm] Error 1

dwmblocks commands issue

Hi, I recently updated my dwm build with your files and noticed something odd. For some reason, the module that's at the far right can only be clicked while the other modules are ignored. I tried looking around for a solution but couldn't get it. This used to work on an earlier build of yours. I don't know if has to do with the barrules that is in the dwm.c file. Thanks for reading!

fakefullscreen missing definitions in default configs

IF FAKEFULLSCREEN definitions not set in the default config, the patch doesn't apply

there is only #if FAKEFULLSCREEN_CLIENT_PATCH

also the FAKEFULLSCREEN.c gets deleted when running flexipatch finalized, and I assume that the patch doesn't apply since everything goes missing

help with merging status2d with systray patch

hey bakkeby, im stuck again with a couple of patches that conflicts with systray and other patches.
the status2d patch wants me to

-		drw_setscheme(drw, scheme[SchemeNorm]);
-		tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
-		drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0);
+		tw = m->ww - drawstatusbar(m, bh, stext);

and i have in my dwm.c this

                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);

and the attachaside patch wants me to

-#define ISVISIBLE(C)            ((C->tags & C->mon->tagset[C->mon->seltags]))
+#define ISVISIBLEONTAG(C, T)    ((C->tags & T))
+#define ISVISIBLE(C)            ISVISIBLEONTAG(C, C->mon->tagset[C->mon->seltags])

and i have this

#define ISVISIBLE(C)            ((C->tags & C->mon->tagset[C->mon->seltags]) || C->issticky)
#define LENGTH(X)               (sizeof X / sizeof X[0])

and cfacts patch wants me to do

-			h = (m->wh - my) / (MIN(n, m->nmaster) - i);
+			h = (m->wh - my) * (c->cfact / mfacts);

and i have in my dwm.c

 h = (m->wh - my) / (MIN(n, m->nmaster) - i) - m->gappx;

should i just do this?

h = (m->wh - my) * (c->cfact / mfacts) - m->gappx;

cfacts

did something about cfacts change? it's behaving unexpectedly with me, I don't remember it being like this ... what i mean is ... windows in the stack, for example, if i have 2 windows in the stack, and MOD+SHIFT+L on the first window and expand that window, when I try to return it with MOD+SHIFT+R it wont do it, and the other way around as well, the only way I can do it, is if I actually focus the 2nd window in the stack, and then move it in the counter direction ... i remember being able to change cfacts in both directions on the same window

can't compile with swallow patch

when I enable swallow patch this is what i get

$ make
dwm build options:
CFLAGS   = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION="6.2" -DXINERAMA
LDFLAGS  = -L/usr/X11R6/lib -lX11 -lXinerama -lfontconfig -lXft -lXrender
CC       = cc
cp config.def.h config.h
cp patches.def.h patches.h
cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE
-D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"6.2\" -DXINERAMA drw.c
cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE
-D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"6.2\" -DXINERAMA dwm.c
cc -c -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE
-D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"6.2\" -DXINERAMA util.c
cc -o dwm drw.o dwm.o util.o -L/usr/X11R6/lib -lX11 -lXinerama -lfontconfig -lXft -lXrender
/usr/bin/ld: dwm.o: in function `manage':
dwm.c:(.text+0x39dc): undefined reference to `xcb_res_query_client_ids'
/usr/bin/ld: dwm.c:(.text+0x39ef): undefined reference to `xcb_res_query_client_ids_reply'
/usr/bin/ld: dwm.c:(.text+0x39ff): undefined reference to `xcb_res_query_client_ids_ids_iterator'
/usr/bin/ld: dwm.c:(.text+0x3a2c): undefined reference to `xcb_res_client_id_value_value'
/usr/bin/ld: dwm.c:(.text+0x3a39): undefined reference to `xcb_res_client_id_value_next'
/usr/bin/ld: dwm.o: in function `main':
dwm.c:(.text.startup+0xae): undefined reference to `XGetXCBConnection'
collect2: error: ld returned 1 exit status
make: *** [Makefile:29: dwm] Error 1```

Congrats

First off congrats on this project, great job! I've forked it here and made a few changes myself.

If you have the time, could you give me a quick rundown of adding a new module to patch in like this one for example. Creating the .c file etc

Cheers

no swallow settings not being respected

for some reason the no swallow settings are not being respected when using xorg-xev to checkout my key press symbols, it gets swallowed, I'm unable to figure out why, but on Luke's dwm it doesn't get swallowed with the same settings

my config.h
my build

scratchpads

Hello Stein,
I've tried numerous patches all working without problem, with just one query concerning scratvchpads. There are three alternitves in flexipatch. Two are variations of the same patch, I believe; SCRATCHPAD_PATCH and SCRATCHPAD_KEEP_POSITION_AND_SIZE_PATCH, which I beleive both use the included 3 'scratchpad' key mappings in config.def.h, along with 3 user-defined scratchpads, bound to MOD1 xkb_grave.

I haven't been able to get these to work, even after trying different key mappings subsituting the given xkb_grave for, e.g. xkb_apostrophe, and xkb_minus, which should work on my keybopard setup.
All other key mappings work, for all other patches I've tried, inlcuding for the SCRATCHPAD_ALT_1_PATCH (i.e xkb_minus, xkb_=), which works fine as a scratchpad in dwm_flexipatch.
My preference is for the 'named' scratchpads thoughi due ot their persistence, not the _ALT_PATCH. And, scratchpads are particlulary neat and useful to me (important).

So, I wonder if you can confirm they are working as applied by flexipatch, and if they are, why I ma be getting this non-functionality.

==== btw. I'm enjoying use of your flexipatch. It has helped me explore functionality although I'm a 1 year long user of dwm with patches.

Kind Regards,
John

Feature Request: on_empty_keys patch

This patch is a port of InstantWM's on_empty_keys.
It allows you to configure key bindings for empty workspaces. Like so:

static const char* firefoxcmd[] = {"firefox", NULL};
static Key on_empty_keys[] = {
	/* modifier key            function                argument */
	{ 0,        XK_f,          spawn,                  {.v = firefoxcmd } },
};

patch:

diff --git a/config.def.h b/config.def.h
index 1c0b587..2da2290 100644
--- a/config.def.h
+++ b/config.def.h
@@ -113,3 +113,9 @@ static Button buttons[] = {
 	{ ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
 };
 
+static const char* firefoxcmd[] = {"firefox", NULL};
+static Key on_empty_keys[] = {
+	/* modifier key            function                argument */
+	{ 0,        XK_f,          spawn,                  {.v = firefoxcmd } },
+};
+
diff --git a/dwm.c b/dwm.c
index 664c527..11bfaf0 100644
--- a/dwm.c
+++ b/dwm.c
@@ -141,6 +141,9 @@ typedef struct {
 	int monitor;
 } Rule;
 
+
+static int isempty;
+
 /* function declarations */
 static void applyrules(Client *c);
 static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);
@@ -804,6 +807,16 @@ focus(Client *c)
 	}
 	selmon->sel = c;
 	drawbars();
+
+	if (!c){
+		if (!isempty) {
+			isempty = 1;
+			grabkeys();
+		}
+	} else if (isempty) {
+		isempty = 0;
+		grabkeys();
+	}
 }
 
 /* there are some broken focus acquiring clients needing extra handling */
@@ -961,6 +974,14 @@ grabkeys(void)
 				for (j = 0; j < LENGTH(modifiers); j++)
 					XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,
 						True, GrabModeAsync, GrabModeAsync);
+
+		if(!selmon->sel) {
+			for (i = 0; i < LENGTH(on_empty_keys); i++)
+				if ((code = XKeysymToKeycode(dpy, on_empty_keys[i].keysym)))
+					for (j = 0; j < LENGTH(modifiers); j++)
+						XGrabKey(dpy, code, on_empty_keys[i].mod | modifiers[j], root,
+								True, GrabModeAsync, GrabModeAsync);
+		}
 	}
 }
 
@@ -997,6 +1018,13 @@ keypress(XEvent *e)
 		&& CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
 		&& keys[i].func)
 			keys[i].func(&(keys[i].arg));
+	if(!selmon->sel) {
+		for (i = 0; i < LENGTH(on_empty_keys); i++)
+			if (keysym == on_empty_keys[i].keysym
+					&& CLEANMASK(on_empty_keys[i].mod) == CLEANMASK(ev->state)
+					&& on_empty_keys[i].func)
+				on_empty_keys[i].func(&(on_empty_keys[i].arg));
+	}
 }
 
 void

Feature request

Hi dude, can you make a pertag save layouts patch so whatever layout I set my tags to when I quit dwm the layouts are saved for the tags. Then when I start dwm next, the tags are the same layouts I last set them to instead of all reverting back to the first layout (tiled usually).

need some help in fixing dwm.c for the statuscmd-signal and systray patch.

im sorry if this not the right place to ask for help for this but im facing a issue where the dwm-systray-6.2.diff patch and dwm-statuscmd-signal-6.2.diff patch are not able merge properly in dwm.c as
the dwm-systray-6.2.diff patch want me to do this-

@@ -439,7 +475,7 @@ buttonpress(XEvent *e)
 			arg.ui = 1 << i;
 		} else if (ev->x < x + blw)
 			click = ClkLtSymbol;
-		else if (ev->x > selmon->ww - TEXTW(stext))
+		else if (ev->x > selmon->ww - TEXTW(stext) - getsystraywidth())
 			click = ClkStatusText;
 		else
 			click = ClkWinTitle;

and the dwm-statuscmd-signal-6.2.diff wants me to do this

@@ -439,9 +445,26 @@ buttonpress(XEvent *e)
 			arg.ui = 1 << i;
 		} else if (ev->x < x + blw)
 			click = ClkLtSymbol;
-		else if (ev->x > selmon->ww - TEXTW(stext))
+		else if (ev->x > (x = selmon->ww - TEXTW(stext) + lrpad)) {
 			click = ClkStatusText;
-		else
+
+			char *text = rawstext;
+			int i = -1;
+			char ch;
+			dwmblockssig = 0;
+			while (text[++i]) {
+				if ((unsigned char)text[i] < ' ') {
+					ch = text[i];
+					text[i] = '\0';
+					x += TEXTW(text) - lrpad;
+					text[i] = ch;
+					text += i+1;
+					i = -1;
+					if (x >= ev->x) break;
+					dwmblockssig = ch;
+				}
+			}
+		} else
 			click = ClkWinTitle;

im not sure how to combine this line else if (ev->x > selmon->ww - TEXTW(stext) - getsystraywidth()) and else if (ev->x > (x = selmon->ww - TEXTW(stext) + lrpad)) { as i want to use both the systray and i need statuscmd-signal for the dwmblocks for clickable status bar.
i have it like this right now

	//	else if (ev->x > selmon->ww - TEXTW(stext) - getsystraywidth())
	//		click = ClkStatusText;
		else if (ev->x > (x = selmon->ww - TEXTW(stext) + lrpad)) {
			click = ClkStatusText;

i have comment out the first to lines because status bar wont recognize clicks if that line is enabled. after commenting out im able to click on statusbar just fine but having some positioning issues like the from left to right clock battery and volume modules appear on statusbar to click on volume i need to click on battery because i have 1 icon in the systray so its causing positioning issues. maybe im wrong. i can send u my configs and screenshots if necessary.
BTW im using everything vanilla patched everything myself not using flexipatch.

Documentation: Add SPTAGMASK hint

When the scratchpad patch is added, the tagmask is altered, so to get a window onto all tags you have to do ~SPTAGSMASK instead of ~0, because otherwise, your window gets centred/the previous scratchpad position if the scratchpad remember patch is applied, this should be in a small comment either in the config.h or in the patches.h

Systray & Alpha bug

Just a small bug I've noticed, when using the systray patch together with alpha, icons have a ugly black background. Changing the following code

/* use parents background color */
swa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
XChangeWindowAttributes(dpy, c->win, CWBackPixel, &swa);

To something like;

swa.background_pixel = "#282828";

Should change the color, however alpha ignores that and prints black #000000. Disabling alpha patch makes systray use SchemeNorm bar bg color again.

Perhaps there is some wizardry you can conjure up to make these 2 patches play nicely together.
tray

Different colors for each tag

How can I create seperate color schemes for each tag? Say all tags bg the same bug tag1 is red tag2 is green tag3 is yellow etc?

layouts bug

there seems to be a bug when I enable the cfacts patch, after opening many windows in the stack, the bottom border of the last window in the stack is like moving around, and it's creating a gap between it and the edge of the screen ... this doesn't happen without the dwmc patch, had to backward patch my build to figure out where the bug came from :)

link to video

more CENTERED_FLOATING_MASTER bugs :)

I dunno if this is in the combination with the stacker patch that you just made and I applied it, or in general a bug in the centered floating master, but when you open 4 windows in the centered floating master layout and you then want to close them (killclient) the first 3 windows in the layout get closed, but the 4th wont no matter how many times I press the killclient button, then when I change from tag 1 to tag 2, and back to tag 1, i am able to kill the client that was stuck as a 4th window

patch request

would love it if you would make this scratchpad available dwm-scratchpad

it's different to the scratchpad that's already included in a way that it allows you to send any window to the scratchpad, eg the scratchpad is not limited to terminal apps only :)

pango patch bug

Sorry to bug you again, but I've found a potential bug with the pango patch. First off there is no 'pango.c/h' file in the 'patch' directory if that could be it? But when enabled in patches.def.h and compiling I get this error:

ld: error: undefined symbol: pango_font_metrics_get_height

referenced by drw.c
drw.o:(drw_font_create)

xrdb not compatible with python-pywal color schemes

seems that the xrdb patch here is not compatible with python-pywal color schemes, which I find weird, as when I applied the xrdb patch and generate a pywal color scheme on standard dwm + xrdb it works ... am I overlooking something here? if im not ... can you make the XRDB patch compatible with pywal color schemes? :)

`holdbar` only when bar is hidden using `togglebar`

Hello,

Can you help me to modify holdbar patch to get into effect only when I have used togglebar to hide status bar and always show status bar when bar is visible using togglebar? Holdbar patch is very useful but sometimes I need to see details on status bar constantly and that time togglebar doesn't show status bar and it is too tedious to hold down a key constantly.

By looking at this repo, I though you could be the right person. Please suggest something. Thanks in advance! :)

Extra information
I use a custom bar using xsetroot.

unknown issue (can't figgure out whats causing it)

so, this morning I woke up, and my Browser was on all 9 tags on its own, while none of the tags were toggled ... the browser was supposed to sit on its own on tag 2, but it was present on tag 1 2 3 4 5 6 7 8 9 while tag 2 wasn't tagged (I hope I'm explaining this correctly)

this bug is present since I discovered flexipatch, although I'm not sure which patch is causing it, I suspect it is the switchtag patch as I have been using it since day 1, but not entirely sure ...

many times before I had similar situations, where a window on 1 tag was present on 2+ more tags while I didn't toggle it to be present, and if I close that window on any of the tags, it gets closed on all tags, first i taught it is a error on my side, but just today i realized it was a bug since I just left my browser last night on tag 2, and it was on all 9 today

basically it is as if i have toggled a window to be sticky, while it's not sticky, I'm not even using the sticky patch

i think this is stacker related

I am using your default bindings for stacker, while on mod+shift+w I have bound to launch my browser, and on mod+shift+e I have bound to launch neomutt, and modshift+s I have bound to launch scratchpad, and mod+shift+a to launch alsamixer, in the last 24h when I wanted to launch one of them my dwm completely restarts on its own and gets me back to the login screen, but this doesn't happen every time, it's totally random
I assume that it's because
MOD + STACKKEY is a focus function
MOD + SHIFT + STACKKEY is push function

and even thou the mod + w e s a z are not using the push function they seem to be automatically bound to the stack keys completely rendering the MOD+SHIFT+W/E/S/A/Z useless...

could a workaround for this be created? eg to be able to use mod+shift+w/e/s/a/z for other bindings while using mod+w+e+s+a+z for the stackkeys?

althou I would use e r s a z as default keybindings in the stacker patch, or e r a z x, as 99% of ppl will use mod+w for the browser :)

We could verify if this is what is causing the dwm restart issue, but I dunno how to start dwm with a crash log :D

patch / feature requests? :)

do you accept patch proposals on which to include in the flexipatch buid? and feature requests to add some minor functionality to those patches about a idea I have?

I'm not a C programmer, or a programmer at all, I'm just a good tinkerer, I managed to make some of the manual patches work, but some I just cant seem to get to, so ... I switched to flexipatch and love it ... just that ... would like to see some additional patches on the list, but neither of them are on the suckless website ...

for example the
dwm-switchview (ill have to upload that ... in addition it needs keyboard bindings, for example on voidrice dwm where this patch is included, it is bound to mod+g and mod+semicolon I think, and to mod+page up and mod+page down, it basically cycles the view between tags in left and right direction similar like the default view function, but it isn't limited to between 2 tags, it cycles all the tags in 1 or the other direction...

a different implementation of a scratchpad, that allows you to send any window to the scratch pad and to remove it from scratchpad with keybindings, and ofc show / hide the scratchpad

what I would like to see in a dwm scratchpad (regardless of if on one you already included or on this one
suggested) is that, you can spawn programs directly in to an scratchpad, so for example, when I press mod+A that it opens a bc calculator in the scratchpad, and that when I press mod+alt+t that it opens tmux in a scratchpad, and when I press mod+v that it opens vim in scratchpad, and to be able to define more of these ... maybe with awindow rule to always start a program in the scratchpad, something like "isscratchpad" or a custom command variable, or i dunno, I can do this on i3 ... what do you think?

I requested the feature on the author's github page, but he threw me off telling me to to do it my self and I don't know C :D multiple scratchpads question

or to include such functionality, in the original suckless scratchpad

I got a few other good patches that arent for some reason listed on suckless.org, but I wont burn time suggesting them, until I see that your open to including requested patches and extending the patch library :)

flextile delux patch - Misalignment

Hi, Thank you for all the work you put on to build these amazing automation as well as some pretty good patches.

I've noticed however, that the Flextile delux patch, sometimes gets the layouts misaligned, for example:

ev

I tryed understanding the patch but it is quite hard and as it doesn't have any comment, it becomes really complicated, do you envision refurbishing it in a near future?

Thank you once more.

Design: config.h (1200+) split up into sensible set or files

Hay there, I suggest splitting config.h to categorical-based files or modules such as keybinds, appearance, navigation ..... and perhaps, misc.

This will make it so much easier to access and edit . And if possible let the value of whether to include exclude a plugin be in the same file at the top. For example appearance.h has two sections one for related patches and the other for the logic.

Feature Request: Center float windows patch

This patch centers newly spawned float windows by default:

diff --git a/dwm.c b/dwm.c
index 664c527..b3a2621 100644
--- a/dwm.c
+++ b/dwm.c
@@ -1040,6 +1040,9 @@ manage(Window w, XWindowAttributes *wa)
 		applyrules(c);
 	}
 
+	if (c->x == selmon->wx) c->x += (c->mon->ww - WIDTH(c)) / 2 - c->bw;
+	if (c->y == selmon->wy) c->y += (c->mon->wh - HEIGHT(c)) / 2 - c->bw;
+	
 	if (c->x + WIDTH(c) > c->mon->mx + c->mon->mw)
 		c->x = c->mon->mx + c->mon->mw - WIDTH(c);
 	if (c->y + HEIGHT(c) > c->mon->my + c->mon->mh)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.