1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
|
Here are the patches and modifications applied to this dwm build
* Patch Strategy
- Review latest changes
Note: I'm taking all of the changes up to the latest, i.e.: 2020-07-02 19:18 Do not allow focus to drift from fullscreen client via focusstack()
One worry was not being able to set the selected border color properly due to a change that goes back to May 22nd 2016 (7af4d439bdb5a2e40aca69446a3367bd71431c45)
It appears they have just named it on this line: static const char col_cyan[] = "#005577";
- Change makefile to remove config.h on 'make clean'
Avoid the confusion early.
- Patch first, then apply customizations last
Customizations are easy to make, and they may trigger patch failures
- When there's a choice, choose the latest diff for each patch.
6.2 was on Feb 2, 2019, and there are only a handful of updates since then (see below), so this strategy should work the best.
- Prioritize the largest most complex patches first.
The more patches are applied, the more likely a big patch will fail.
The bigger the patch, the more difficult it will be to do a manual merge successfully.
- Prioritize the patches you want the most second.
More changes in the code mean the patches may fail.
If they all begin to fail and manual merging gets too difficult, I want the most desirable patches already applied.
- Test each previous patch when applying a new patch to ensure you haven't removed previously patched-in functionality
Testing notes should be in
- Once you have successfully applied all desired patches, create a diff and check that into github.
** Commits since 6.2
from: http://git.suckless.org/dwm/log.html
2020-07-02 19:18 Do not allow focus to drift from fullscreen client via focusstack() Chris Down 1 +1 -1
2020-03-03 22:23 Fix x coordinate calculation in buttonpress. Ian Remmler 1 +1 -1
2020-07-08 16:05 dwm.1: fix wrong text in man page Hiltjo Posthuma 1 +1 -1
2020-06-11 13:28 Fix memory leaks in drw Alex Flierl 1 +1 -0
2020-04-23 07:50 dwm crashes when opening 50+ clients (tile layout) bakkeby 1 +4 -2
2020-04-22 14:48 drawbar: Don't shadow sw global Chris Down 1 +4 -4
2020-04-22 14:48 getatomprop: Add forward declaration Chris Down 1 +1 -0
2020-04-20 15:41 setmfact: Unify bounds for compile-time and runtime mfact Chris Down 1 +1 -1
2020-04-03 13:36 config.mk: fix POSIX_C_SOURCE macro for feature test for snprintf() Hiltjo Posthuma 1 +1 -1
2019-02-02 12:50 Prepare 6.2 release. Anselm R Garbe 3 +17 -3
* Patches Applied (in order of application)
** DONE (01) fakefullscreen
*** Description
Only allow clients to "fullscreen" into space currently given to them. As an example, this will allow you to view a fullscreen video in your browser on one half of the screen, while having the other half available for other tasks.
home: http://dwm.suckless.org/patches/fakefullscreen/
direct link: http://dwm.suckless.org/patches/fakefullscreen/dwm-fakefullscreen-20170508-ceac8c9.diff
*** Comments
Doing this first. It's an older patch and may have immediate patch issues. It should go before ru_gaps so I can test functionality.
*** Testing
- Launch a browser, navigate to twitch or youtube and hit fullscreen.
Should maximize within old boundaries
*** Patch Notes
- successful on first patch
- changed modkey to mod4map
- changed Makefile so 'make clean' also removes config.h
- noticed that testing the fakefullscreen, I'll sometimes have to switch client windows for the window to get the correct sizing. it seems to want to size itself as if it were going full monitor rather than the client window size.
** DONE (02) ru_gaps (with deck and bottomstack layouts)
CLOSED: [2021-05-08 Sat 20:13]
- State "DONE" from "IN-PROGRESS" [2021-05-08 Sat 20:13]
- State "IN-PROGRESS" from [2021-05-08 Sat 19:43]
*** Description
Runtime useless gaps
This patch adds gaps like tilegap that are resizeable at runtime like fullgaps, but like uselessgap it removes gaps and borders when in monocle mode.
This patch also incorporates the noborder patch, but without the check for 'is not fullscreen', to make it work properly with fakefullscreen.
Notes:
You might want to set resizehints in config.h to zero to get smooth animations when increasing or decreasing gaps.
home: http://dwm.suckless.org/patches/ru_gaps/
direct link: http://dwm.suckless.org/patches/ru_gaps/dwm-ru_gaps-6.2.diff 25-04-2020
Additional Layouts
Apply the following patches on top of the previous patch to add additional layouts with resizeable gap support.
direct link: http://dwm.suckless.org/patches/ru_gaps/dwm-ru_bottomstack-6.2.diff 25-04-2020
direct link: http://dwm.suckless.org/patches/ru_gaps/dwm-ru_deck-6.2.diff 25-04-2020
*** Comments
I definitely want gaps for the aesthetic appeal, but I also want to be able to turn them off when I'm on a smaller laptop to save screen real estate. That rules out many of the gaps packages right there. Also, I definitely want the fakefullscreen patch, and this one plays nice with it. The fact that the other two ru_gaps patches brings in the patches for the additional layouts I want makes this an easy choice.
*** Patch Application Notes
- Apply the resizehints in config.def.h to zero per the description
- Note the keyboard shortcuts to increase/decrease gaps, etc.
**** 2021-05-08 @ 19:09:23 dwm-ru_gaps-6.2.diff failed
patch < dwm-ru_gaps-6.2.diff
patching file config.def.h
patching file dwm.c
Hunk #2 succeeded at 201 (offset 1 line).
Hunk #3 succeeded at 637 (offset -3 lines).
Hunk #4 succeeded at 1280 (offset -5 lines).
Hunk #5 succeeded at 1487 (offset -21 lines).
Hunk #6 FAILED at 1693.
1 out of 6 hunks FAILED -- saving rejects to file dwm.c.rej
Manually merged and tested. Seems okay. Going to commit and
**** 2021-05-08 @ 19:51:18 dwm-ru_bottomstack-6.2 succeeded
patch < dwm-ru_bottomstack-6.2.diff
patching file config.def.h
patching file dwm.c
Hunk #1 succeeded at 212 (offset 1 line).
Hunk #2 succeeded at 2153 (offset -25 lines).
Got bstack and bstackhoriz as well, though only wanted bstackhoriz
All tested okay. Changed all layout keyboard shortcuts to Mod + Shift
Since I only wanted bstackhoriz (mod + shift + u), I changed the bstack shortcut to mod + u
**** 2021-05-08 @ 20:03:51 dwm-ru_deck-6.2 failed
patch < dwm-ru_deck-6.2.diff
patching file config.def.h
Hunk #1 FAILED at 42.
Hunk #2 FAILED at 77.
2 out of 2 hunks FAILED -- saving rejects to file config.def.h.rej
patching file dwm.c
Hunk #2 succeeded at 658 (offset -1 lines).
Looks like it failed in config.def.h which should be simple to clean up manually.
It was just about adding the deck layout keys and index. Fixed pretty simply.
Now building and testing.
Testing shows main workflow just fine.
However, the fakefullscreen issues mentioned above are irritating.
Calling this task done.
*** Testing
After main gaps merge:
- increase gaps (mod - and +)
- reset gaps to zero (mod + shift =)
For each of the layouts in turn:
- toggle to layout and back to tiling
** DONE (03) scratchpads
CLOSED: [2021-05-08 Sat 21:25]
- State "DONE" from "IN-PROGRESS" [2021-05-08 Sat 21:25]
- State "IN-PROGRESS" from [2021-05-08 Sat 20:20]
*** Description
The scratchpad patch allows you to spawn or restore a floating terminal window. It is usually useful to have one to do some short typing.
A tool like detach (http://detach.sourceforge.net) turns it into a launchpad for X applications.
By default your terminal (st) is used, and the default key binding is MODKEY+XK_grave. A config.def.h change is included in the patch.
home: http://dwm.suckless.org/patches/scratchpad/
direct link: http://dwm.suckless.org/patches/scratchpad/dwm-scratchpad-6.2.diff
*** Comment
This is my choice over the namedscratchpads patch. First, I've used this in my previous dwm build, so I know it can be applied with no issue. Second, it appears namedscratchpads works with floatrules and I can't tell any benefit from using those two patches over just this one.
*** Patch Application Notes
This one's a bit dangerous since it's an older patch. However, I got this to work already, so I know it can be manually merged.
- We're setting up three scratchpads: (1) nmtui (2) pulsemixer (3) gnome-calculator
- First try using terminator here ensuring that "window geometry hints" preference checked.
- If this doesn't work, you'll have to use st (see below)
Here's what the last patch looked like:
/* leaving the below as documentation on how to run a specific program as a scratchpad
const char *spcmd0[] = {"keepassxc", NULL }; */
const char *spcmd1[] = {"st", "-n", "spnet", "-g", "65x25", "-e", "nmtui" , NULL };
const char *spcmd2[] = {"st", "-n", "sppulse", "-g", "100x20", "-e", "pulsemixer", NULL };
static Sp scratchpads[] = {
/* name cmd */
{"spnet", spcmd1},
{"sppulse", spcmd2},
};
**** 2021-05-08 @ 20:18:17 patch applied without errors
patch < dwm-scratchpad-6.2.diff
patching file config.def.h
Hunk #1 succeeded at 62 (offset 4 lines).
patching file dwm.c
Hunk #1 succeeded at 217 with fuzz 1 (offset 4 lines).
Hunk #2 succeeded at 278 (offset 4 lines).
Hunk #3 succeeded at 1088 (offset 33 lines).
Hunk #4 succeeded at 1687 (offset 15 lines).
Hunk #5 succeeded at 1772 (offset 12 lines).
To my surprise, this succeeded without any issues.
**** 2021-05-08 @ 20:32:06 This doesn't appear to be the patch I used previously
The patch simply didn't apply with the same code I expected. This is for a simple terminal scratchpad.
Looked at all the patches listed, and none of them applied the same code I expected.
I thought perhaps I went with namedscratchpads instead, but found that was't the case either.
Pulling in the actual patch applied from debianconfig project and it's date is far more recent than either of these
dwm-scrachpads-20200414-728d397b.diff
**** 2021-05-08 @ 20:47:59 Applying dwm-scrachpads-20200414-728d397b.diff
patch < dwm-scratchpads-20200414-728d397b.diff
patching file config.def.h
Hunk #1 succeeded at 19 (offset 1 line).
Hunk #2 succeeded at 79 (offset 4 lines).
Hunk #3 FAILED at 101.
Hunk #4 succeeded at 133 (offset 10 lines).
1 out of 4 hunks FAILED -- saving rejects to file config.def.h.rej
patching file dwm.c
Hunk #2 succeeded at 220 with fuzz 1 (offset 6 lines).
Hunk #3 succeeded at 309 (offset 6 lines).
Hunk #4 succeeded at 323 (offset 6 lines).
Hunk #5 succeeded at 1660 with fuzz 1 (offset 35 lines).
Hunk #6 succeeded at 1772 (offset 40 lines).
Had to do a bit of manual merging, but was pretty straightforward.
Scratchpad for pulseaudio mapped to mod + n (network)
Scratchpad for pulseaudio mapped to mod + a (audio)
*** Testing
- Toggle each scratchpad on and off a few times
- Toggle them all on
- Resize one of the windows, then toggle off and on again (should return to original size and centered placement)
** DONE (04) swallow
CLOSED: [2021-05-09 Sun 01:44]
- State "DONE" from [2021-05-09 Sun 01:44]
*** Description
This patch adds "window swallowing" to dwm as known from Plan 9's windowing system rio.
Clients marked with isterminal in config.h swallow a window opened by any child process, e.g. running xclock in a terminal. Closing the xclock window restores the terminal window in the current position.
This patch helps users spawning a lot of graphical programs from their command line by avoiding cluttering the screen with many unusable terminals. Being deep down in a directory hierarchy just does not make the use of dmenu feasible.
Dependencies
- libxcb
- Xlib-libxcb
- xcb-res
These dependencies are needed due to the use of the latest revision of the X Resource Extension which is unsupported in vanilla Xlib.
Notes
The window swallowing functionality requires dwm to walk the process tree, which is an inherently OS-specific task. Please contact one of the authors if you would like to help expand the list of supported operating systems.
Only terminals created by local processes can swallow windows, and only windows created by local processes can be swallowed.
home: http://dwm.suckless.org/patches/swallow/
direct link: http://dwm.suckless.org/patches/swallow/dwm-swallow-20201211-61bb8b2.diff
direct link: http://dwm.suckless.org/patches/swallow/dwm-swallow-20200807-b2de9b0.diff
direct link: http://dwm.suckless.org/patches/swallow/dwm-swallow-20200707-8d1e703.diff
direct link: http://dwm.suckless.org/patches/swallow/dwm-swallow-20200522-7accbcf.diff
direct link: http://dwm.suckless.org/patches/swallow/dwm-swallow-20170909-ceac8c9.diff
direct link: http://dwm.suckless.org/patches/swallow/dwm-swallow-6.1.diff
direct link: http://dwm.suckless.org/patches/swallow/dwm-swallow-20160717-56a31dc.diff
*** Testing
- Launch VLC in both terminator and st make sure they are both swallowed
- Launch subl
*** Patching Notes
patch < dwm-swallow-20201211-61bb8b2.diff
patching file config.def.h
Hunk #1 succeeded at 4 with fuzz 2 (offset 1 line).
Hunk #2 FAILED at 27.
1 out of 2 hunks FAILED -- saving rejects to file config.def.h.rej
patching file config.mk
patching file dwm.c
Hunk #2 succeeded at 101 (offset 3 lines).
Hunk #3 succeeded at 150 (offset 4 lines).
Hunk #4 succeeded at 254 (offset 9 lines).
Hunk #5 succeeded at 294 (offset 9 lines).
Hunk #6 succeeded at 325 with fuzz 1 (offset 9 lines).
Hunk #7 succeeded at 448 (offset 14 lines).
Hunk #8 succeeded at 731 (offset 11 lines).
Hunk #9 succeeded at 1132 (offset 44 lines).
Hunk #10 succeeded at 1153 (offset 44 lines).
Hunk #11 succeeded at 1190 (offset 44 lines).
Hunk #12 succeeded at 1918 (offset 76 lines).
Hunk #13 succeeded at 1946 (offset 76 lines).
Hunk #14 succeeded at 2214 (offset 76 lines).
Hunk #15 succeeded at 2435 (offset 76 lines).
Manually patched. The array identifying isterminal and noswallow was modified by scratchpads.
Testing shows that St works, but terminator doesn't.
Terminator needs to be capitalized. Tested to work now.
** DONE (05) push up/down
CLOSED: [2021-05-09 Sun 02:15]
- State "DONE" from [2021-05-09 Sun 02:15]
*** Description
pushup and pushdown provide a way to move clients inside the clients list.
#include "push.c"
static Key keys[] = {
...
{ MODKEY|ControlMask, XK_j, pushdown, {0} },
{ MODKEY|ControlMask, XK_k, pushup, {0} },
Note: This is equivalent to the movestack patch.
home: http://dwm.suckless.org/patches/push/
direct link: http://dwm.suckless.org/patches/push/dwm-push-20201112-61bb8b2.diff (6.2)
direct link: http://dwm.suckless.org/patches/push/dwm-push-6.1.diff (1402b) - 2014/2/9
direct link: http://dwm.suckless.org/patches/push/dwm-push-6.0.diff (1332b) - 2012/4/6
direct link: http://dwm.suckless.org/patches/push/dwm-push-20160731-56a31dc.diff
*** Comments
Choosing this one over movestack as it's a more recent patch, and therefore is less likely to have issues.
*** Testing
- Open a number of windows
- for tile layout, bottom stack, and deck layouts
- mod+shift j and k to move through the stack
** CANCELLED (06) systray
CLOSED: [2021-05-09 Sun 09:28]
- State "CANCELLED" from "IN-PROGRESS" [2021-05-09 Sun 09:28]
- State "IN-PROGRESS" from [2021-05-09 Sun 08:58]
*** Description
A simple system tray implementation. Multi-monitor is also supported. The tray follows the selected monitor.
In case icons disappear when toggling the bar, try a different font size in dwm. This has helped at least in one case with pidgin.
direct link: http://dwm.suckless.org/patches/systray/dwm-systray-20210418-67d76bd.diff (24K) (20210418)
direct link: http://dwm.suckless.org/patches/systray/dwm-systray-20200914-61bb8b2.diff (23k) (20200914)
direct link: http://dwm.suckless.org/patches/systray/dwm-systray-6.2.diff (23923b) (20200216)
direct link: http://dwm.suckless.org/patches/systray/dwm-systray-20190208-cb3f58a.diff (24K)
direct link: http://dwm.suckless.org/patches/systray/dwm-6.1-systray.diff (24K) (20190208)
*** Comments
This is the last of the large patches and the least desireable.
*** Patch Notes
patch < dwm-systray-20210418-67d76bd.diff
patching file config.def.h
Hunk #1 FAILED at 3.
Hunk #2 succeeded at 146 (offset 34 lines).
1 out of 2 hunks FAILED -- saving rejects to file config.def.h.rej
patching file dwm.c
Hunk #1 succeeded at 66 with fuzz 1 (offset 9 lines).
Hunk #2 succeeded at 173 (offset 14 lines).
Hunk #3 succeeded at 211 (offset 15 lines).
Hunk #4 succeeded at 232 with fuzz 1 (offset 18 lines).
Hunk #5 succeeded at 254 (offset 19 lines).
Hunk #6 FAILED at 253.
Hunk #7 succeeded at 315 (offset 28 lines).
Hunk #8 succeeded at 554 (offset 84 lines).
Hunk #9 succeeded at 597 (offset 84 lines).
Hunk #10 succeeded at 632 (offset 84 lines).
Hunk #11 FAILED at 651.
Hunk #12 FAILED at 736.
Hunk #13 succeeded at 896 (offset 117 lines).
Hunk #14 succeeded at 933 (offset 117 lines).
Hunk #15 succeeded at 944 (offset 117 lines).
Hunk #16 succeeded at 981 (offset 117 lines).
Hunk #17 succeeded at 1070 (offset 117 lines).
Hunk #18 succeeded at 1114 (offset 117 lines).
Hunk #19 succeeded at 1228 (offset 117 lines).
Hunk #20 succeeded at 1320 (offset 121 lines).
Hunk #21 succeeded at 1458 (offset 129 lines).
Hunk #22 succeeded at 1561 (offset 172 lines).
Hunk #23 succeeded at 1582 (offset 172 lines).
Hunk #24 succeeded at 1667 (offset 177 lines).
Hunk #25 succeeded at 1769 (offset 177 lines).
Hunk #26 succeeded at 1812 (offset 177 lines).
Hunk #27 succeeded at 1897 (offset 173 lines).
Hunk #28 succeeded at 1908 (offset 173 lines).
Hunk #29 succeeded at 1919 (offset 173 lines).
Hunk #30 succeeded at 2063 (offset 182 lines).
Hunk #31 succeeded at 2210 (offset 223 lines).
Hunk #32 succeeded at 2232 (offset 223 lines).
Hunk #33 succeeded at 2416 (offset 223 lines).
Hunk #34 succeeded at 2731 (offset 353 lines).
Hunk #35 succeeded at 2794 (offset 353 lines).
3 out of 35 hunks FAILED -- saving rejects to file dwm.c.rej
zsh: exit 1 patch < dwm-systray-20210418-67d76bd.diff
Patching manually.
There were two places that I couldn't patch within dwm.c. Couldn't match the code it was replacing. Aborting, and canceling this patch.
*** Testing
- Launch insync and see if it shows up, select the menu and see if you can interact with it
- Install pidgin and launch. See if you can interact with the menu.
** DONE (07) pertag
CLOSED: [2021-05-09 Sun 09:34]
- State "DONE" from [2021-05-09 Sun 09:34]
*** Description
More general approach to taglayouts patch. This patch keeps layout, mwfact, barpos and nmaster per tag.
home: http://dwm.suckless.org/patches/pertag/
direct link: http://dwm.suckless.org/patches/pertag/dwm-pertag-20200914-61bb8b2.diff
direct link: http://dwm.suckless.org/patches/pertag/dwm-pertag-6.2.diff
direct link: http://dwm.suckless.org/patches/pertag/dwm-pertag-6.1.diff
direct link: http://dwm.suckless.org/patches/pertag/dwm-git-20120406-pertag.diff
direct link: http://dwm.suckless.org/patches/pertag/dwm-pertag-6.0.diff
*** Patch Notes
patch < dwm-pertag-20200914-61bb8b2.diff
patching file dwm.c
Hunk #1 succeeded at 122 (offset 11 lines).
Hunk #2 succeeded at 143 (offset 12 lines).
Hunk #3 succeeded at 304 (offset 30 lines).
Hunk #4 succeeded at 723 (offset 80 lines).
Hunk #5 succeeded at 735 (offset 81 lines).
Hunk #6 succeeded at 1110 (offset 117 lines).
Hunk #7 succeeded at 1701 (offset 173 lines).
Hunk #8 succeeded at 1722 (offset 173 lines).
Hunk #9 succeeded at 1910 (offset 182 lines).
Hunk #10 succeeded at 1973 (offset 206 lines).
Hunk #11 succeeded at 2311 (offset 223 lines).
No errors.
*** Testing
- Open windows in tile mode on tags 1, 2, and 3
- Switch to tile layout on tag 1
- Switch to bottomstack layout on tag 2
- Verify tile tags only on 1 and 3
- Switch to deck stack on tag 3
- Verify all 3 are different layouts
** DONE (08) focusonclick
CLOSED: [2021-05-09 Sun 11:00]
- State "DONE" from [2021-05-09 Sun 11:00]
*** Description
Switch focus only by mouse click and not sloppy.
home: http://dwm.suckless.org/patches/focusonclick/
direct link: http://dwm.suckless.org/patches/focusonclick/dwm-focusonclick-20200110-61bb8b2.diff
direct link: http://dwm.suckless.org/patches/focusonclick/dwm-focusonclick-20171030-6aa8e37.diff
direct link: http://dwm.suckless.org/patches/focusonclick/dwm-focusonclick-20170104-bb3bd6f.diff
direct link: http://dwm.suckless.org/patches/focusonclick/dwm-focusonclick-6.0.diff
direct link: http://dwm.suckless.org/patches/focusonclick/dwm-focusonclick-5.8.diff
*** Comments
I'm choosing this because the cursor usually moves downwards in bottom stack. At that point the focus can change when I'm typing and my entries go into another window.
*** Testing
- Open a number of windows
- Put a text editor in the
- For each tile, deck, and bottom stack layouts
- move the cursor to other windows and ensure the focus remains on client
*** Patch Notes
patch < dwm-focusonclick-20200110-61bb8b2.diff
patching file config.def.h
Hunk #1 succeeded at 7 with fuzz 1 (offset 2 lines).
patching file dwm.c
Hunk #1 succeeded at 180 (offset 17 lines).
Hunk #2 succeeded at 198 (offset 17 lines).
Hunk #3 succeeded at 278 (offset 30 lines).
Hunk #4 succeeded at 516 (offset 95 lines).
Hunk #5 succeeded at 537 (offset 95 lines).
Hunk #6 succeeded at 892 (offset 143 lines).
Hunk #7 succeeded at 1241 (offset 147 lines).
** DONE (09) hide-vacant-tags
CLOSED: [2021-05-09 Sun 11:18]
- State "DONE" from "IN-PROGRESS" [2021-05-09 Sun 11:18]
- State "IN-PROGRESS" from [2021-05-09 Sun 11:03]
*** Description
This patch prevents dwm from drawing tags with no clients (i.e. vacant) on the bar.
It also makes sure that pressing a tag on the bar behaves accordingly by not reserving reactive regions on the bar for vacant tags.
It also stops drawing empty rectangles on the bar for non-vacant tags as there is no need anymore to distinguish vacant tags and it offers a more visible contrast than if there were filled/empty rectangles.
home: http://dwm.suckless.org/patches/hide_vacant_tags/
direct link: http://dwm.suckless.org/patches/hide_vacant_tags/dwm-hide_vacant_tags-6.1.diff
direct link: http://dwm.suckless.org/patches/hide_vacant_tags/dwm-hide_vacant_tags-git-20160626-7af4d43.diff
direct link: http://dwm.suckless.org/patches/hide_vacant_tags/dwm-hide_vacant_tags-6.2.diff
*** Patch Notes
patch < dwm-hide_vacant_tags-6.1.diff
patching file dwm.c
Hunk #1 succeeded at 524 (offset 94 lines).
Hunk #2 FAILED at 723.
1 out of 2 hunks FAILED -- saving rejects to file dwm.c.rej
Patched manually. However, this is the chunk that I don't feel completely happy with:
@@ -723,11 +729,14 @@ drawbar(Monitor *m)
}
x = 0;
for (i = 0; i < LENGTH(tags); i++) {
+ /* do not draw vacant tags */
+ if(!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
+ continue;
w = TEXTW(tags[i]);
drw_setscheme(drw, m->tagset[m->seltags] & 1 << i ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
drw_text(drw, x, 0, w, bh, tags[i], urg & 1 << i);
drw_rect(drw, x + 1, 1, dx, dx, m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
- occ & 1 << i, urg & 1 << i);
+ 0, urg & 1 << i);
x += w;
}
w = blw = TEXTW(m->ltsymbol);
While adding the section for not drawing vacant tags was trivial, the bottom change wasn't as the code was modified.i
There was no "occ & 1 << i" to replace with a zero. However, compilation and testing went fine, so keeping this as-is and calling it done.
** DONE (09.5)color bar
CLOSED: [2021-05-09 Sun 11:51]
- State "DONE" from [2021-05-09 Sun 11:51]
I decided to apply the color bar to see whether I could draw a border around the selected window.
*** Description
allows change foreground and background color of every statusbar element.
home: http://dwm.suckless.org/patches/colorbar/
direct link: http://dwm.suckless.org/patches/colorbar/dwm-colorbar-6.2.diff
*** Patch Notes
patch < dwm-colorbar-6.2.diff
patching file config.def.h
Hunk #1 succeeded at 19 with fuzz 1 (offset 3 lines).
patching file dwm.c
Hunk #1 succeeded at 68 (offset 9 lines).
Hunk #2 FAILED at 703.
Hunk #3 succeeded at 866 with fuzz 2 (offset 150 lines).
Hunk #4 FAILED at 725.
2 out of 4 hunks FAILED -- saving rejects to file dwm.c.rej
Manual patching was trivial.
Changed colors and ensured only the selected tag had col_cyan in the background. Seems to work fine. The only problem I see is that the pixel borders are too small, and it's difficult to identify the border.
** DONE (09.6) setborderpx
CLOSED: [2021-05-09 Sun 12:09]
- State "DONE" from [2021-05-09 Sun 12:09]
*** Description
This patch allows you to change border pixels at runtime.
Default key bindings
Key Argument Description
----------------------------------------------------
Mod-Shift-plus +1 Increase borderpx
Mod-Shift-minus -1 Decrease borderpx
Mod-Shift-numbersign 0 Reset borderpx
Notes
You might want to set resizehints in config.h to zero to get smooth animations when increasing or decreasing border pixels.
home: http://dwm.suckless.org/patches/setborderpx/
direct link: http://dwm.suckless.org/patches/setborderpx/dwm-setborderpx-6.2.diff
*** Patch Notes
patch < dwm-setborderpx-6.2.diff
patching file config.def.h
Hunk #1 FAILED at 84.
1 out of 1 hunk FAILED -- saving rejects to file config.def.h.rej
patching file dwm.c
Hunk #1 FAILED at 119.
Hunk #2 succeeded at 215 (offset 19 lines).
Hunk #3 FAILED at 639.
Hunk #4 succeeded at 1181 (offset 133 lines).
Hunk #5 succeeded at 1599 (offset 174 lines).
2 out of 5 hunks FAILED -- saving rejects to file dwm.c.rej
Patching was trivial.
Changing the following did the trick.
static const unsigned int borderpx = 3; /* border pixel of windows */
** CANCELLED (10) layout menu
Decided against this as it requires installation of xmenu, forces maintenance of layoutmenu.sh. Not worth the minor benefit.
CLOSED: [2021-05-09 Sun 12:10]
- State "CANCELLED" from [2021-05-09 Sun 12:10]
*** Description
This patch adds a context menu for layout switching.
Right clicking on the layout icon brings an xmenu prompt for to pick a new layout, and switches to the selected one.
Xmenu (https://github.com/phillbush/xmenu) needs to be installed.
Edit layoutmenu.sh with the installed layouts and with correct indexes.
Place layoutmenu.sh in PATH.
The text of the menu items is for display only. Name them however you want.
home: http://dwm.suckless.org/patches/layoutmenu/
direct link: http://dwm.suckless.org/patches/layoutmenu/dwm-layoutmenu-6.2.diff
*** Testing
** CANCELLED (11) centretitle
Decided not to apply this patch. I don't mind the current aethetic on a large monitor, and it likely won't matter on a smaller laptop monitor
CLOSED: [2021-05-09 Sun 12:11]
- State "CANCELLED" from [2021-05-09 Sun 12:11]
*** Description
home: http://dwm.suckless.org/patches/centretitle/
direct link: http://dwm.suckless.org/patches/centretitle/dwm-centretitle-20200907-61bb8b2.diff
centers the title in the middle of the bar
** (12) autostart
*** Description
This patch will make dwm run "~/.dwm/autostart_blocking.sh" and "~/.dwm/autostart.sh &" before entering the handler loop. One or both of these files can be ommited.
Be aware that dwm will not startup as long as autostart_blocking.sh is running and will stay completely unresponsive. For obvious reasons it is generally a bad idea to start X-applications here :)
home: http://dwm.suckless.org/patches/autostart/
direct link: http://dwm.suckless.org/patches/autostart/dwm-autostart-20210120-cb3f58a.diff
This patch modifies the dwm autostart feature to conform to the XDG Base Directory specification.
The files listed above are looked up in the directories "$XDG_DATA_HOME/dwm", "$HOME/.local/share/dwm", and "$HOME/.dwm" respectively. The first existing directory is used, no matter if it actually contains any file.
*** Comments
Originally, I said this was optional since entried in autostart.sh could be placed in .xinitrc
However, that's not the case when launching dwm via
* Customizations (applied after patches)
** DONE Change mod key to super
CLOSED: [2021-05-08 Sat 18:48]
- State "DONE" from [2021-05-08 Sat 18:48]
/* key definitions */
#define MODKEY Mod4Mask
** CANCELLED window colors in config.def.h
CLOSED: [2021-05-08 Sat 18:54]
- State "CANCELLED" from [2021-05-08 Sat 18:54]
static const char normbordercolor[] = "#444444";
static const char normbgcolor[] = "#222222";
static const char normfgcolor[] = "#bbbbbb";
static const char selbordercolor[] = "#daa520";
static const char selbgcolor[] = "#222222";
static const char selfgcolor[] = "#eeeeee";
Note: changed the colors for active window per window colors customization below to goldenrod (#daa520) to check. The title area became goldenrod, which is undesireable. Discarded these changes.
** TODO modify order of layout
you should note the order of the layouts in the keys section of config.def.h as those refer to this array by index.
static const Layout layouts[] = {
/* symbol arrange function */
{ "TTT", bstack }, /* first entry is default */
{ "[M]", monocle },
{ "[D]", deck },
{ "[]=", tile },
{ "><>", NULL }, /* no layout function means floating behavior */
{ "===", bstackhoriz },
};
** TODO change col_cyan to dim but noticeable color
this now changes the title area, sadly.
** TODO change fonts used for title area
* Patches Considered And Not Applied
** bottomstack
not needed if applying ru_gaps with layouts
*** Description
home: http://dwm.suckless.org/patches/fakefullscreen/dwm-fakefullscreen-20170508-ceac8c9.diff
direct link 1: http://dwm.suckless.org/patches/bottomstack/dwm-bottomstack-6.1.diff
direct link 2: http://dwm.suckless.org/patches/bottomstack/dwm-bottomstack-20160719-56a31dc.diff
** cool autostart
I don't feel the need to recompile to adjust startup applications.
*** Description
Allow dwm to execute commands from autostart array in your config.h file. And when you exit dwm all processes from autostart array will be killed.
home: http://dwm.suckless.org/patches/cool_autostart/
direct link: http://dwm.suckless.org/patches/cool_autostart/dwm-cool-autostart-6.2.diff
** deck
not needed if applying ru_gaps with layouts
*** Description
deck is a dwm-layout which is inspired by the TTWM window manager. It applies the monocle-layout to the clients in the stack. The master-client is still visible. The stacked clients are like a deck of cards, hence the name.
deck-rmaster
The vanilla patch doesn't respect the master-area which is defined by the rmaster-patch. To make it work with the rmaster-patch apply the dwm-deck-rmaster patch on top of the dwm-deck patch.
deck-tilegap
The vanilla patch doesn't work properly with patches which add gaps. This means that when the deck-layout is activated gaps are omitted. To make it work with the tilegap-patch apply the dwm-deck-tilegap patch on top of the dwm-deck patch.
deck-double
This patch variant adds a layout function named doubledeck which is similar to the deck layout. However, rather then just creating a deck area in the stack; it also creates a deck area in the master area. This pairs nicely with the bartabgroups patch.
home: http://dwm.suckless.org/patches/deck/
** floatrules
not needed as it mainly pairs with namedscratchpads
*** Description
This patch adds 5 extra variables to the 'rules' array in config.def.h. These are:
floatx, floaty, floatw, floath (if the window has the rule isfloating, the window will spawn with the geometry specified by these vairables)
floatborderpx (border width when window is floating)
Setting floatborderpx to -1 (or any value less than zero) will mean that the regular border width is used.
Please note that this patch needs rm config.h to be added to the Makefile.
** focusmaster
limited utility. only works with tiled layout
*** Description
Switch focus to the (tiled) master client from anywhere in the stack.
home: http://dwm.suckless.org/patches/focusonclick/dwm-focusonclick-5.8.diff
direct link: http://dwm.suckless.org/patches/focusmaster/dwm-focusmaster-20200717-bb2e722.diff
** fullgaps
not as full featured as ru_gaps patch
*** Description
This patch adds gaps between client windows. It is similar to gaps, but contains additional functionality:
it also adds outer gaps (between the clients and the screen frame), as well as a gap between the master and stack area,
it adds keybindings to change the gap size at runtime: [Alt]+[-]/[Alt]+[=] to decrease/increase the gap size and [Alt]+[Shift]+[=] to set it to zero.
The configuration variable gappx contains the default gap size.
home: http://dwm.suckless.org/patches/fullgaps/
The following patch allows for gaps to be toggled, and also uses a Gap struct to contain the gap information, in anticipation of this being used with pertag. (To use this, apply the patch instead of the default fullgaps patch.)
[Alt]+[Shift]+[=] to toggle. [Alt]+[Shift]+[-] to reset to config.h defaults.
direct link: http://dwm.suckless.org/patches/fullgaps/dwm-fullgaps-toggle-20200830.diff
** functionalgaps
not as full featured as ru_gaps patch
*** Description
Functionalgaps combines the beautifully simplistic gaps of fullgaps with the non-gaps of singularborders and noborder. It is named functionalgaps because, since gaps are purely aesthetic, and therefore not useful whatsoever, this patch adds to their functionality by allowing them to easily be turned off.
This patch is also unique because of its out of the box integration with pertag, allowing gaps to be enabled/disabled and sized on a per-tag basis.
home: http://dwm.suckless.org/patches/functionalgaps/
direct link: http://dwm.suckless.org/patches/functionalgaps/dwm-functionalgaps+pertag-6.2.diff
(this version comes with support for pertag, + the patch itself for simplicity's sake)
** movestack
chose push up/down as it has a more recent patch
*** Description
This plugin allows you to move clients around in the stack and swap them with the master. It emulates the behavior off mod+shift+j and mod+shift+k in Xmonad. movestack(+1) will swap the client with the current focus with the next client. movestack(-1) will swap the client with the current focus with the previous client.
Usage
Download the patch and apply according to the general instructions.
Include the movestack.c source file and add keys that call movestack. Example from config.default.h:
#include "movestack.c"
static Key keys[] = {
/* modifier key function argument */
...
{ MODKEY|ShiftMask, XK_j, movestack, {.i = +1 } },
{ MODKEY|ShiftMask, XK_k, movestack, {.i = -1 } },
...
home: http://dwm.suckless.org/patches/movestack/
direct link: http://dwm.suckless.org/patches/movestack/dwm-movestack-6.1.diff
direct link: http://dwm.suckless.org/patches/movestack/dwm-movestack-5.8.2.diff
** namedscratchpads
chose scratchpads instead due to simplicity and my familiarity.
*** Description
Allows for the creation of multiple scratchpad windows, each assigned to different keybinds.
On pressing the keybind the window will either:
- Spawn based on the given command, if it's not already running
- Toggle visibility of the window
A new field in the rules array is added to associate the command with the corresponding rule.
Works well with floatrules for window positioning.
home: http://dwm.suckless.org/patches/namedscratchpads/
direct link: http://dwm.suckless.org/patches/namedscratchpads/dwm-namedscratchpads-6.2.diff
** restartsig
Older patch. I don't see the advantage of this over .xinitrc
*** Description
dwm can now be restarted via MOD+CTRL+SHIFT+Q or by kill -HUP dwmpid
In addition, a signal handler was added so that dwm cleanly quits by kill -TERM dwmpid.
Also see selfrestart.
An alternative might be to put something like this in ~/.xinitrc:
while :; do
ssh-agent dwm
done
And then just quit/kill dwm.
home: http://dwm.suckless.org/patches/restartsig/
direct link: http://dwm.suckless.org/patches/restartsig/dwm-restartsig-20180523-6.2.diff
** rotatestack
Older patch. I don't see a reason to add rotation functionality over swapping windows in the normal fashio.
*** Description
Stack rotation moves a client from the bottom to the top of the stack (or the other way round). This effectively rotates the clients by one position clockwise (or CCW, respectively).
It should play well with arbitrary stack layouts and nmaster values.
One may think of it as moving the zoom through the list of clients, very much in the same way as scrolling moves the view port around a pane.
home: http://dwm.suckless.org/patches/rotatestack/
direct link: http://dwm.suckless.org/patches/rotatestack/dwm-rotatestack-20161021-ab9571b.diff
** selectivefakefullscreen
I can't see a scenario where I'd prefer this behavior over simply switching layouts to monocle and then going fullscreen.
*** Description
Allows a specific application to fake a full screen while the rest behave as usual, it's based on Jan Hendrik Farr's patch, fakefullscreen.
Includes a modification to config.def.h in order to add a new member to Rules struct, called "isfakefullscreen", set it to one for all the applications you want to fake a full screen.
home: http://dwm.suckless.org/patches/selectivefakefullscreen/
direct link: http://dwm.suckless.org/patches/selectivefakefullscreen/dwm-selectivefakefullscreen-20201130-97099e7.diff
direct link: http://dwm.suckless.org/patches/selectivefakefullscreen/dwm-selectivefakefullscreen-20200513-f09418b.diff
** smartborders
not seeing the need for this patch. borders aren't disruptive as-is, so I don't feel the need to hide them.
*** Description
Inspired by the xmonad feature of the same name.
Borders are only drawn when:
- client window is floating
- >1 tiled clients are visible
- floating layout
home: http://dwm.suckless.org/patches/smartborders/
direct link: http://dwm.suckless.org/patches/smartborders/dwm-smartborders-6.2.diff (20200216)
** spawnprograms
chose to go with autostart patch instead due to not needing a recompile for startup applications
*** Description
This patch spawns each command in the startup_programs array on startup. It's similar to the autostart patch, however unlike autostart, it doesn't read anything from external files.
Example usage (put this into your config.h):
static const char **startup_programs[] = { termcmd, someothercmd, };
home: http://dwm.suckless.org/patches/spawnprograms/
direct link: http://dwm.suckless.org/patches/spawnprograms/dwm-spawnprograms-6.2.diff
** steam
I'm not having any of the problems resolved by this patch. seems dangerous/hacky.
*** Description
The Steam client, and steam windows (games), tends to trigger a ConfigureNotify request every time the window gets focus. More so, the configure events passed along from Steam may have the wrong x and y coordinates which can make the window, if floating, jump around the screen. Another observed symptom is the steam window continuously sliding towards the bottom right corner of the screen.
This patch works around this age-old issue by ignoring the x and y co-ordinates for ConfigureNotify requests relating to Steam windows.
It should be noted that this is a simple and crude patch, and while it can be made more generic I have intentionally left it hardcoded against steam in particular as few other windows behaves this badly.
home: http://dwm.suckless.org/patches/steam/
direct link: http://dwm.suckless.org/patches/steam/dwm-steam-6.2.diff
** tilegap
not as full-features as ru_gaps patch
*** Description
Window gaps for the tile layout done right (in my humble opinion). The same size gap between master and stack, window and window, and window and screen edge. Size configurable in config.h.
home: http://dwm.suckless.org/patches/tilegap/
direct link: http://dwm.suckless.org/patches/tilegap/dwm-tilegap-6.0.diff (948b) (20150707)
direct link: http://dwm.suckless.org/patches/tilegap/dwm-tilegap-6.2.diff (20190227)
|