[wiki] [sites] make pages compatible with the smu converter and some deadlinks || Josuah Demangeon

From: <git_AT_suckless.org>
Date: Sat, 05 Jan 2019 17:47:37 +0100

commit 4a4cbe9cdfb662a03aab201317ce2b9132a281ab
Author: Josuah Demangeon <mail_AT_josuah.net>
Date: Sat Jan 5 17:44:48 2019 +0100

    make pages compatible with the smu converter and some deadlinks
    
    - titles must be underlined entirely and "---" does not suffice
    - smu does not support [text][1] style links
    - fix some dead links in historical/

diff --git a/dwm.suckless.org/customisation/customfuncs/index.md b/dwm.suckless.org/customisation/customfuncs/index.md
index 37b3115b..603fde8e 100644
--- a/dwm.suckless.org/customisation/customfuncs/index.md
+++ b/dwm.suckless.org/customisation/customfuncs/index.md
_AT_@ -1,5 +1,5 @@
 Custom functions in config.h
-==============================================
+============================
 
 *by [Jesus Galan (yiyus)](mailto:yiyu dot jgl at gmail>) (vie ago 22 19:53:32 CEST 2008)*
 
_AT_@ -224,11 +224,11 @@ This example is for people who prefer to control dwm with the mouse (for dwm 5.1
         }
 
 Usage of the above configuration
-*-------------------------
+--------------------------------
 
 In case you want to try this configuration there are some differences with the default dwm config to be taken into account. Mouse actions will be explained later, keys have similar behaviour. There are other small changes, but the config.h file should be pretty straightforward.
 
-###Tagging
+### Tagging
 
 In the tag buttons:
 
_AT_@ -237,7 +237,7 @@ In the tag buttons:
 * B2+B1: assign tag to the sel client.
 * B2+B3: toggle tag for the sel client, trying to toggle the last tag will result in assigning all tags.
 
-###Layouts
+### Layouts
 
 In the layout symbol:
 
_AT_@ -245,7 +245,7 @@ In the layout symbol:
 * B3: toggle between monocle and floating layout.
 * Wheel: set master factor (B2 to go back to the default value).
 
-###Focusing/Moving/Resizing
+### Focusing/Moving/Resizing
 
 in the status bar, the root window, or the selected window (with Mod pressed)
 
_AT_@ -254,6 +254,6 @@ in the status bar, the root window, or the selected window (with Mod pressed)
 * B3 to resize (the pointer will be wrapped to the bottom-right corner).
 * B2 to zoom or toggle floating status if zooming is not possible.
 
-###Closing windows
+### Closing windows
 
 * B3+B1 in the status message.
diff --git a/dwm.suckless.org/customisation/font/index.md b/dwm.suckless.org/customisation/font/index.md
index e803091d..67b4ec27 100644
--- a/dwm.suckless.org/customisation/font/index.md
+++ b/dwm.suckless.org/customisation/font/index.md
_AT_@ -1,13 +1,13 @@
 Change font in config.h
 =======================
 
-Towards the beginning of **config.h**, you will find a line defining the
-variable
+*blame [Filippo Erik Negroni](mailto:f dot e dot negroni at googlemail dot com>) about this document*
+
+Towards the beginning of **config.h**, you will find a line defining the variable
 
         static const char font[] = "..."
 
-By using **xfontsel**, you can produce a font line for the font you would like
-to be used by **dwm** when displaying text in the menubar.
+By using **xfontsel**, you can produce a font line for the font you would like to be used by **dwm** when displaying text in the menubar.
 
 For example, to change the font to 'fixed', you can change the value of font to:
 
diff --git a/dwm.suckless.org/customisation/index.md b/dwm.suckless.org/customisation/index.md
index 072fc557..bb70ff72 100644
--- a/dwm.suckless.org/customisation/index.md
+++ b/dwm.suckless.org/customisation/index.md
_AT_@ -1,48 +1,40 @@
 Customisation
 =============
 
-**dwm** is customised by editing **config.h**, a C language header file, and
-**config.mk**, a Make include file.
+*blame [Filippo Erik Negroni](mailto:f dot e dot negroni at googlemail dot com>) about this document*
+
+**dwm** is customised by editing **config.h**, a C language header file, and **config.mk**, a Make include file.
 
 What is **config.h**?
 ---------------------
 
-config.h is a source code file which is included by dwm.c, the main dwm source
-code module. It serves as the configuration file for all of dwm's features,
-e.g., application placement, tags, and colours. A vanilla download of dwm will
-contain a file called config.def.h, a template you can use to create your own
-config.h file. To start customising dwm, simply copy config.def.h into config.h
-before you run make.
+config.h is a source code file which is included by dwm.c, the main dwm source code module.
+It serves as the configuration file for all of dwm's features, e.g., application placement, tags, and colours.
+A vanilla download of dwm will contain a file called config.def.h, a template you can use to create your own config.h file.
+To start customising dwm, simply copy config.def.h into config.h before you run make.
 
 What is **config.mk**?
 ----------------------
 
-config.mk is a file included by Makefile. It allows you to configure how make
-is going to compile and install dwm.
+config.mk is a file included by Makefile. It allows you to configure how make is going to compile and install dwm.
 
 How do I modify **config.h**?
 -----------------------------
 
-config.h can be edited just like any other C source code file. It contains
-definitions of variables that are going to be used by dwm.c and therefore it is
-vital that the file is always up to date. The default Makefile distributed with
-dwm will not overwrite your customised config.h with the contents of
-config.def.h, even if it was updated in the latest git pull. Therefore, you
-should always compare your customised config.h with config.def.h and make sure
-you include any changes to the latter in your config.h.
+config.h can be edited just like any other C source code file.
+It contains definitions of variables that are going to be used by dwm.c and therefore it is vital that the file is always up to date.
+The default Makefile distributed with dwm will not overwrite your customised config.h with the contents of config.def.h, even if it was updated in the latest git pull.
+Therefore, you should always compare your customised config.h with config.def.h and make sure you include any changes to the latter in your config.h.
 
 How do I modify **config.mk**?
 ------------------------------
 
-config.mk can be edited just like any other text file. It contains definitions
-of variables that are going to be used inside Makefile. Unlike config.h,
-config.mk does not have a config.def.mk (a default Makefile). Therefore, during
-an update of your repository you may run into conflicts if the original
-config.mk is edited.
+config.mk can be edited just like any other text file.
+It contains definitions of variables that are going to be used inside Makefile.
+Unlike config.h, config.mk does not have a config.def.mk (a default Makefile).
+Therefore, during an update of your repository you may run into conflicts if the original config.mk is edited.
 
 Are there any example customisations to get me started?
 -------------------------------------------------------
 
-Various customisation options are illustrated in the sub-directories of this
-wiki page. Under each of the categories (customfuncs, fonts, etc.,) you will
-find example modifications that will get you started.
+Various customisation options are illustrated in the sub-directories of this wiki page. Under each of the categories (customfuncs, fonts, etc.,) you will find example modifications that will get you started.
diff --git a/dwm.suckless.org/customisation/noapps/index.md b/dwm.suckless.org/customisation/noapps/index.md
index 0732fa1a..6bca1254 100644
--- a/dwm.suckless.org/customisation/noapps/index.md
+++ b/dwm.suckless.org/customisation/noapps/index.md
_AT_@ -1,10 +1,10 @@
 Remove application defaults from config.h
 =========================================
 
-The rules array is initialized, by default, to treat windows of class `Gimp`
-and `Firefox` in a special way. If, like me, you don't want any application to
-be treated in a special way, you must be careful when editing the rules array
-initialization code.
+*blame [Filippo Erik Negroni](mailto:f dot e dot negroni at googlemail dot com>) about this document*
+
+The rules array is initialized, by default, to treat windows of class `Gimp` and `Firefox` in a special way.
+If, like me, you don't want any application to be treated in a special way, you must be careful when editing the rules array initialization code.
 
 The original code describes what each value represents within the Rule structure.
 
_AT_@ -14,20 +14,17 @@ The original code describes what each value represents within the Rule structure
                 { "Firefox", NULL, NULL, 1 << 8, True, -1 },
         };
 
-For instance, Gimp and Firefox will be labeled as floating windows, even if the
-layout selected is Monocle or Tiled. In particular, the tag mask will attach
-Firefox to tag '9'.
+For instance, Gimp and Firefox will be labeled as floating windows, even if the layout selected is Monocle or Tiled.
+In particular, the tag mask will attach Firefox to tag '9'.
 
-If we don't want any window class to be treated in a special way, we need to
-initialize rules with at least one element:
+If we don't want any window class to be treated in a special way, we need to initialize rules with at least one element:
 
         static Rule rules[] = {
                 /* class instance title tags mask isfloating monitor */
                 { NULL, NULL, NULL, 0, False, -1 },
         };
 
-The code in dwm.c will check that the `class` element is not NULL before any
-matching is done.
+The code in dwm.c will check that the `class` element is not NULL before any matching is done.
 
         /* rule matching */
         XGetClassHint(dpy, c->win, &ch);
_AT_@ -41,7 +38,5 @@ matching is done.
                 }
         }
 
-This code assumes the rules array has at least one element, and that the first
-rule that does not match will apply to all window classes. Therefore, the rule
-we just made, is the default rule for all new windows and therefore it is
-important you set the `tags mask` and `isfloating` elements correctly.
+This code assumes the rules array has at least one element, and that the first rule that does not match will apply to all window classes.
+Therefore, the rule we just made, is the default rule for all new windows and therefore it is important you set the `tags mask` and `isfloating` elements correctly.
diff --git a/dwm.suckless.org/customisation/tagmask/index.md b/dwm.suckless.org/customisation/tagmask/index.md
index 5dd66829..c286d3a9 100644
--- a/dwm.suckless.org/customisation/tagmask/index.md
+++ b/dwm.suckless.org/customisation/tagmask/index.md
_AT_@ -1,6 +1,8 @@
 How does a tag-mask work?
 =========================
 
+*blame [Filippo Erik Negroni](mailto:f dot e dot negroni at googlemail dot com) about this document*
+
 There exists extensive documentation in this wiki about tags in dwm.
 
 This article will concentrate on how to manage bit masks in default rules.
_AT_@ -11,20 +13,13 @@ Looking at dwm's code, the tags array is defined in the familiar way:
 
         static const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
 
-We have 9 tags, labelled numerically (but the labels are just that, labels;
-they don't have any intrinsic values).
+We have 9 tags, labelled numerically (but the labels are just that, labels; they don't have any intrinsic values).
 
-Within dwm's code, each client's tag list is managed as a bit mask: given an
-integer binary representation, tags are associated from the least significant
-bit (rightmost) to the most significant bit (leftmost).
+Within dwm's code, each client's tag list is managed as a bit mask: given an integer binary representation, tags are associated from the least significant bit (rightmost) to the most significant bit (leftmost).
 
-For example, tag '1' is 000000001, while tag 9 is 100000000. Tag '3' is
-000000100 (third from the right)
+For example, tag '1' is 000000001, while tag 9 is 100000000. Tag '3' is 000000100 (third from the right)
 
-The code in dwm.c that uses the rules array matches the current client
-properties with each rule, and when matched, it bit-ands the tags member of the
-rules array element with TAGMASK, then bit-ors it with the client's current tag
-mask.
+The code in dwm.c that uses the rules array matches the current client properties with each rule, and when matched, it bit-ands the tags member of the rules array element with TAGMASK, then bit-ors it with the client's current tag mask.
 
         /* rule matching */
         XGetClassHint(dpy, c->win, &ch);
_AT_@ -38,9 +33,8 @@ mask.
                 }
         }
 
-The client's tags value is therefore built sequentially through the rules. If
-the tagmask in rules is 0, the currently selected tag becomes the client's tags
-value.
+The client's tags value is therefore built sequentially through the rules.
+If the tagmask in rules is 0, the currently selected tag becomes the client's tags value.
 
         if(!c->tags)
                 c->tags = tagset[seltags];
_AT_@ -50,50 +44,38 @@ TAGMASK is defined in dwm.c as:
 
         #define TAGMASK ((int)((1LL << LENGTH(tags)) - 1))
 
-and would produce, for the standard tags array, the bit configuration 111111111
-(nine 1's).
+and would produce, for the standard tags array, the bit configuration 111111111 (nine 1's).
 
-The reason for using TAGMASK is that it disallows the rules array to select a
-tag for which we do not have a representation in the tags array.
+The reason for using TAGMASK is that it disallows the rules array to select a tag for which we do not have a representation in the tags array.
 
-Now, this method of representing tags allows us to express our preferences
-regarding tags using bit-wise operators.
+Now, this method of representing tags allows us to express our preferences regarding tags using bit-wise operators.
 
 When are tagmasks used?
 -----------------------
-Please note that dwm always uses tagmasks: even when one tag is selected as the
-visible tag, it is actually internally managed as a tagmask.
 
-To prove this, use the command combination that allows you to bring more than
-one tag into view (usually Mod1-Ctrl-tagnumber). If you select tags 1, 2 and 3,
-and then open a new xterm using Mod1-Shift-Return, the new xterm will be tagged
-with tags 1, 2 and 3.
+Please note that dwm always uses tagmasks: even when one tag is selected as the visible tag, it is actually internally managed as a tagmask.
+
+To prove this, use the command combination that allows you to bring more than one tag into view (usually Mod1-Ctrl-tagnumber). If you select tags 1, 2 and 3, and then open a new xterm using Mod1-Shift-Return, the new xterm will be tagged with tags 1, 2 and 3.
 
 A very powerful feature.
 
 What does tagmask 0 mean?
 -------------------------
 
-It means that the current tagmask should be selected for this window: if more
-than one tag are currently visible, all the currently visible tags are going to
-be associated to that window.
+It means that the current tagmask should be selected for this window: if more than one tag are currently visible, all the currently visible tags are going to be associated to that window.
 
 What does tagmask 1 << 8 mean?
 ------------------------------
 
-1 shifted to the left by eight positions generates mask 100000000, selecting
-tag '9' (ninth from the right) in the the tags array.
+1 shifted to the left by eight positions generates mask 100000000, selecting tag '9' (ninth from the right) in the the tags array.
 
 What does ~0 mean?
 ------------------
 
-Complement of 0 is all 1's. This indicates all tags should be selected. The
-tag mask in rules is then filtered using the TAGMASK macro to adapt the mask to
-just the available tags.
+Complement of 0 is all 1's. This indicates all tags should be selected.
+The tag mask in rules is then filtered using the TAGMASK macro to adapt the mask to just the available tags.
 
 What does (1 << 8) - 1 mean?
---------------------------
+----------------------------
 
-1 << 8 selects tag '9' only (100000000). Subtracting 1 to that bitmask
-transforms all the 0's to the right of that tagmask into 1's (011111111),
-effectively selecting all tags except '9'.
+1 << 8 selects tag '9' only (100000000). Subtracting 1 to that bitmask transforms all the 0's to the right of that tagmask into 1's (011111111), effectively selecting all tags except '9'.
diff --git a/dwm.suckless.org/customisation/windows_key/index.md b/dwm.suckless.org/customisation/windows_key/index.md
index 289c6ddd..d34bde73 100644
--- a/dwm.suckless.org/customisation/windows_key/index.md
+++ b/dwm.suckless.org/customisation/windows_key/index.md
_AT_@ -1,18 +1,18 @@
 Change Mod1 key to the Windows key in config.h
 ==============================================
 
-dwm's documentation refers to Mod1 as the modifier key that you must press to
-issue commands to it. On most keyboards, Mod1 is mapped to the left Alt key.
-Most new keyboards now come equipped with the *Windows* key. Since no known
-UNIX/X applications are known to use the Windows key, it is an excellent
-alternative mapping to issue commands to dwm.
+*blame [Filippo Erik Negroni](mailto:f dot e dot negroni at googlemail dot com>) about this document*
+
+dwm's documentation refers to Mod1 as the modifier key that you must press to issue commands to it.
+On most keyboards, Mod1 is mapped to the left Alt key.
+Most new keyboards now come equipped with the *Windows* key.
+Since no known UNIX/X applications are known to use the Windows key, it is an excellent alternative mapping to issue commands to dwm.
 
 In config.h, under the comment `/* key definitions */`, you can find the line
 
         #define MODKEY Mod1Mask
 
-In order to change dwm's modifier key to the Windows key, you can simply change
-its value definition to Mod4Mask.
+In order to change dwm's modifier key to the Windows key, you can simply change its value definition to Mod4Mask.
 
         #define MODKEY Mod4Mask
 
_AT_@ -34,10 +34,10 @@ Can I use any other modifier key?
 ---------------------------------
 
 Yes.
-There are 5 modifiers, Mod1Mask to Mod5Mask. They are associated to up-to
-three keysyms (keycodes) from the X window server. To show the current
-association on your keyboard, run `xmodmap` with no arguments. It will show
-something like:
+There are 5 modifiers, Mod1Mask to Mod5Mask.
+They are associated to up-to three keysyms (keycodes) from the X window server.
+To show the current association on your keyboard, run `xmodmap` with no arguments.
+It will show something like:
 
         $ xmodmap
         xmodmap: up to 3 keys per modifier, (keycodes in parentheses):
_AT_@ -51,6 +51,4 @@ something like:
         mod4 Super_L (0x7f), Hyper_L (0x80)
         mod5 Mode_switch (0x5d), ISO_Level3_Shift (0x7c)
 
-Using `xev`, a utility to show X events, such as key presses, we can quickly
-identify which keysym (keycode) combination a particular key has, and associate
-that to a modifier using `xmodmap`.
+Using `xev`, a utility to show X events, such as key presses, we can quickly identify which keysym (keycode) combination a particular key has, and associate that to a modifier using `xmodmap`.
diff --git a/dwm.suckless.org/patches/autostart/index.md b/dwm.suckless.org/patches/autostart/index.md
index 54f28023..77105e15 100644
--- a/dwm.suckless.org/patches/autostart/index.md
+++ b/dwm.suckless.org/patches/autostart/index.md
_AT_@ -1,5 +1,5 @@
 autostart
-======
+=========
 
 Description
 -----------
diff --git a/dwm.suckless.org/patches/centeredwindowname/index.md b/dwm.suckless.org/patches/centeredwindowname/index.md
index 6facaaae..0c209957 100644
--- a/dwm.suckless.org/patches/centeredwindowname/index.md
+++ b/dwm.suckless.org/patches/centeredwindowname/index.md
_AT_@ -1,5 +1,5 @@
 centeredwindowname
-=====
+==================
 
 [![Screenshot](dwm-centeredwindowname.png)](dwm-centeredwindowname.png)
 
diff --git a/dwm.suckless.org/patches/clientspertag/index.md b/dwm.suckless.org/patches/clientspertag/index.md
index 9fdb6aa4..48e25ceb 100644
--- a/dwm.suckless.org/patches/clientspertag/index.md
+++ b/dwm.suckless.org/patches/clientspertag/index.md
_AT_@ -22,15 +22,15 @@ in the slave area.
 
 ## Usage
 
- 1. Download the patch and apply according to the [general instructions](.).
- 2. The patch adds two new keybindings (META-q/a) which set cpt to ^2 and ^3:
+1. Download the patch and apply according to the [general instructions](.).
+2. The patch adds two new keybindings (META-q/a) which set cpt to ^2 and ^3:
 
 If the argument to 'clientspertag' starts with '^' pressing twice the key
 will result on swapping between the defined value and -1.
 
- * To show all windows put "-1" as argument value.
- * To only display floating windows put "0" as argument.
- * For a toggling pair put "^2".
+* To show all windows put "-1" as argument value.
+* To only display floating windows put "0" as argument.
+* For a toggling pair put "^2".
 
         static Key keys[] = {
                 /* modifier key function argument */
diff --git a/dwm.suckless.org/patches/cmdcustomize/index.md b/dwm.suckless.org/patches/cmdcustomize/index.md
index 5118e186..29245d02 100644
--- a/dwm.suckless.org/patches/cmdcustomize/index.md
+++ b/dwm.suckless.org/patches/cmdcustomize/index.md
_AT_@ -5,17 +5,19 @@ Description
 -----------
 
 Rebuilding dwm to change font or color can become annoying. This patch solves this problem allowing to set these parameters through command line
+
 New command line options look like the same in dmenu:
--fn dwm font
--df dmenu font
--nb normal background color
--nf normal foreground color
--sb selected background color
--sf selected foreground color
--dnb normal background color in dmenu
--dnf normal foreground color in dmenu
--dsb selected background color in dmenu
--dsf selected foreground color in dmenu
+
+* -fn dwm font
+* -df dmenu font
+* -nb normal background color
+* -nf normal foreground color
+* -sb selected background color
+* -sf selected foreground color
+* -dnb normal background color in dmenu
+* -dnf normal foreground color in dmenu
+* -dsb selected background color in dmenu
+* -dsf selected foreground color in dmenu
 
 Download
 --------
diff --git a/dwm.suckless.org/patches/ewmhtags/index.md b/dwm.suckless.org/patches/ewmhtags/index.md
index b29f7aee..1f0d0ef4 100644
--- a/dwm.suckless.org/patches/ewmhtags/index.md
+++ b/dwm.suckless.org/patches/ewmhtags/index.md
_AT_@ -1,5 +1,5 @@
 ewmhtags
-======
+========
 
 Description
 -----------
_AT_@ -10,8 +10,8 @@ for example, [polybar's][2] xworkspaces module
 
 Download
 --------
- * [dwm-ewmhtags-6.1.diff](dwm-ewmhtags-6.1.diff)
- * [dwm-ewmhtags-20180101-db22360.diff](dwm-ewmhtags-20180101-db22360.diff)
+* [dwm-ewmhtags-6.1.diff](dwm-ewmhtags-6.1.diff)
+* [dwm-ewmhtags-20180101-db22360.diff](dwm-ewmhtags-20180101-db22360.diff)
 
 Authors
 -------
diff --git a/dwm.suckless.org/patches/historical/ansistatuscolors/ansistatuscolors.png b/dwm.suckless.org/patches/historical/ansistatuscolors/ansistatuscolors.png
new file mode 100644
index 00000000..a4eeba43
Binary files /dev/null and b/dwm.suckless.org/patches/historical/ansistatuscolors/ansistatuscolors.png differ
diff --git a/dwm.suckless.org/patches/historical/bottom_stack/bstack.c b/dwm.suckless.org/patches/historical/bottom_stack/bstack.c
new file mode 100644
index 00000000..ebae6fd0
--- /dev/null
+++ b/dwm.suckless.org/patches/historical/bottom_stack/bstack.c
_AT_@ -0,0 +1,29 @@
+static void
+bstack(Monitor *m) {
+ int x, y, h, w, mh;
+ unsigned int i, n;
+ Client *c;
+
+ for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
+ if(n == 0)
+ return;
+ /* master */
+ c = nexttiled(m->clients);
+ mh = m->mfact * m->wh;
+ resize(c, m->wx, m->wy, m->ww - 2 * c->bw, (n == 1 ? m->wh : mh) - 2 * c->bw, False);
+ if(--n == 0)
+ return;
+ /* tile stack */
+ x = m->wx;
+ y = (m->wy + mh > c->y + c->h) ? c->y + c->h + 2 * c->bw : m->wy + mh;
+ w = m->ww / n;
+ h = (m->wy + mh > c->y + c->h) ? m->wy + m->wh - y : m->wh - mh;
+ if(w < bh)
+ w = m->ww;
+ for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
+ resize(c, x, y, /* remainder */ ((i + 1 == n)
+ ? m->wx + m->ww - x - 2 * c->bw : w - 2 * c->bw), h - 2 * c->bw, False);
+ if(w != m->ww)
+ x = c->x + WIDTH(c);
+ }
+}
diff --git a/dwm.suckless.org/patches/historical/bottom_stack/bstackhoriz.c b/dwm.suckless.org/patches/historical/bottom_stack/bstackhoriz.c
new file mode 100644
index 00000000..d8322d29
--- /dev/null
+++ b/dwm.suckless.org/patches/historical/bottom_stack/bstackhoriz.c
_AT_@ -0,0 +1,30 @@
+static void
+bstackhoriz(Monitor *m) {
+ int x, y, h, w, mh;
+ unsigned int i, n;
+ Client *c;
+
+ for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
+ if(n == 0)
+ return;
+ /* master */
+ c = nexttiled(m->clients);
+ mh = m->mfact * m->wh;
+ resize(c, m->wx, m->wy, m->ww - 2 * c->bw, (n == 1 ? m->wh : mh) - 2 * c->bw, False);
+ if(--n == 0)
+ return;
+ /* tile stack */
+ x = m->wx;
+ y = (m->wy + mh > c->y + c->h) ? c->y + c->h + 2 * c->bw : m->wy + mh;
+ w = m->ww;
+ h = (m->wy + mh > c->y + c->h) ? m->wy + m->wh - y : m->wh - mh;
+ h /= n;
+ if(h < bh)
+ h = m->wh;
+ for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
+ resize(c, x, y, w - 2 * c->bw, /* remainder */ ((i + 1 == n)
+ ? m->wy + m->wh - y - 2 * c->bw : h - 2 * c->bw), False);
+ if(h != m->wh)
+ y = c->y + HEIGHT(c);
+ }
+}
diff --git a/dwm.suckless.org/patches/historical/color_status_bar/dwm-5.2-colorstatus.diff b/dwm.suckless.org/patches/historical/color_status_bar/dwm-5.2-colorstatus.diff
new file mode 100644
index 00000000..8cd779c4
--- /dev/null
+++ b/dwm.suckless.org/patches/historical/color_status_bar/dwm-5.2-colorstatus.diff
_AT_@ -0,0 +1,183 @@
+diff -up dwm-5.2-original/colorstatus.c dwm-5.2-modified/colorstatus.c
+--- /dev/null 2008-11-17 18:12:14.000000000 +0100
++++ dwm-5.2-modified/colorstatus.c 2008-11-17 18:09:29.000000000 +0100
+_AT_@ -0,0 +1,144 @@
++int
++drawstatustext(int x) {
++ char cd[] = "[c]", id[] = "[i]";
++ char buf1[256] = {0};
++ Bool parse = True;
++ Bool cs = False, is = False;
++ int stextw = 0;
++
++ strcpy(buf1, stext);
++ while(parse) {
++ char *cp = 0, *ip = 0;
++
++ cp = strstr(buf1, cd);
++ ip = strstr(buf1, id);
++ if(cp != NULL || ip != NULL) {
++ char buf2[256] = {0}, buf3[256] = {0};
++ size_t clen2 = -1, ilen2 = -1, len2 = 0, dlen = 0, offset3 = 0, len3 = 0;
++
++ if(cp != NULL)
++ clen2 = cp - buf1;
++ if(ip != NULL)
++ ilen2 = ip - buf1;
++ if(clen2 < 0) {
++ len2 = ilen2;
++ dlen = strlen(id);
++ }
++ else if(ilen2 < 0) {
++ len2 = clen2;
++ dlen = strlen(cd);
++ }
++ else if(clen2 < ilen2) {
++ len2 = clen2;
++ dlen = strlen(cd);
++ }
++ else {
++ len2 = ilen2;
++ dlen = strlen(id);
++ }
++ strncpy(buf2, buf1, len2);
++ offset3 = len2 + dlen;
++ len3 = strlen(buf1) - offset3;
++ strncpy(buf3, buf1 + offset3, len3);
++ if(buf2 != NULL && strlen(buf2) > 0)
++ stextw = stextw + TEXTW(buf2);
++
++ memset(buf1, '++ strcpy(buf1, buf3);
++ }
++ else {
++ stextw = stextw + TEXTW(buf1);
++ parse = False;
++ }
++ }
++ dc.x = ww - stextw;
++
++ memset(buf1, '++ strcpy(buf1, stext);
++ parse = True;
++ while(parse) {
++ char *cp = 0, *ip = 0;
++
++ cp = strstr(buf1, cd);
++ ip = strstr(buf1, id);
++ if(cp != NULL || ip != NULL) {
++ char buf2[256] = {0}, buf3[256] = {0};
++ size_t clen2 = -1, ilen2 = -1, len2 = 0, dlen = 0, offset3 = 0, len3 = 0;
++ Bool cs3 = cs, is3 = is;
++
++ if(cp != NULL)
++ clen2 = cp - buf1;
++ if(ip != NULL)
++ ilen2 = ip - buf1;
++ if(clen2 < 0) {
++ len2 = ilen2;
++ dlen = strlen(id);
++ is3 = !is;
++ }
++ else if(ilen2 < 0) {
++ len2 = clen2;
++ dlen = strlen(cd);
++ cs3 = !cs;
++ }
++ else if(clen2 < ilen2) {
++ len2 = clen2;
++ dlen = strlen(cd);
++ cs3 = !cs;
++ }
++ else {
++ len2 = ilen2;
++ dlen = strlen(id);
++ is3 = !is;
++ }
++
++ strncpy(buf2, buf1, len2);
++ offset3 = len2 + dlen;
++ len3 = strlen(buf1) - offset3;
++ strncpy(buf3, buf1 + offset3, len3);
++ if(buf2 != NULL && strlen(buf2) > 0) {
++ dc.w = TEXTW(buf2);
++ if(cs) {
++ if(is)
++ drawtext(buf2, dc.sel, True);
++ else
++ drawtext(buf2, dc.sel, False);
++ }
++ else {
++ if(is)
++ drawtext(buf2, dc.norm, True);
++ else
++ drawtext(buf2, dc.norm, False);
++ }
++ dc.x = dc.x + dc.w;
++ }
++
++ cs = cs3;
++ is = is3;
++ memset(buf1, '++ strcpy(buf1, buf3);
++ }
++ else {
++ dc.w = TEXTW(buf1);
++ dc.x = ww - dc.w;
++ if(dc.x < x) {
++ dc.x = x;
++ dc.w = ww - x;
++ }
++ if(cs) {
++ if(is)
++ drawtext(buf1, dc.sel, True);
++ else
++ drawtext(buf1, dc.sel, False);
++ }
++ else {
++ if(is)
++ drawtext(buf1, dc.norm, True);
++ else
++ drawtext(buf1, dc.norm, False);
++ }
++ parse = False;
++ }
++ }
++
++ return(stextw);
++}
+diff -up dwm-5.2-original/dwm.c dwm-5.2-modified/dwm.c
+--- dwm-5.2-original/dwm.c 2008-09-09 21:46:17.000000000 +0200
++++ dwm-5.2-modified/dwm.c 2008-11-17 18:09:29.000000000 +0100
+_AT_@ -239,6 +239,7 @@ static Layout *lt[] = { NULL, NULL };
+ static Window root, barwin;
+ /* configuration, allows nested code to access above variables */
+ #include "config.h"
++#include "colorstatus.c"
+
+ /* compile-time check if all tags fit into an unsigned int bit array. */
+ struct NumTags { char limitexceeded[sizeof(unsigned int) * 8 < LENGTH(tags) ? -1 : 1]; };
+_AT_@ -495,6 +496,7 @@ drawbar(void) {
+ unsigned int i, occ = 0, urg = 0;
+ unsigned long *col;
+ Client *c;
++ int stextw = 0;
+
+ for(c = clients; c; c = c->next) {
+ occ |= c->tags;
+_AT_@ -517,13 +519,8 @@ drawbar(void) {
+ }
+ else
+ x = dc.x;
+- dc.w = TEXTW(stext);
+- dc.x = ww - dc.w;
+- if(dc.x < x) {
+- dc.x = x;
+- dc.w = ww - x;
+- }
+- drawtext(stext, dc.norm, False);
++ stextw = drawstatustext(x);
++ dc.x = ww - stextw;
+ if((dc.w = dc.x - x) > bh) {
+ dc.x = x;
+ if(sel) {
diff --git a/dwm.suckless.org/patches/historical/color_status_bar/dwm-5.2-colorstatus.xinitrc b/dwm.suckless.org/patches/historical/color_status_bar/dwm-5.2-colorstatus.xinitrc
new file mode 100644
index 00000000..f67f8950
--- /dev/null
+++ b/dwm.suckless.org/patches/historical/color_status_bar/dwm-5.2-colorstatus.xinitrc
_AT_@ -0,0 +1,24 @@
+while true
+do
+ datestr=`date '+%a, %x'`
+ timestr=`date '+%H:%M'`
+
+ cpuavgload=`uptime | sed -n 's/.*: //; s/, .*// p'`
+
+ batcurrent=`sed -n 's/ mAh//; s/remaining[ a-z:]*// p' /proc/acpi/battery/BAT1/state`
+ batfull=`sed -n 's/ mAh//; s/last full[ a-z:]*// p' /proc/acpi/battery/BAT1/info`
+ batpercent=`echo "($batcurrent*100)/$batfull" | bc`
+ if [ $batpercent -lt 10 ]
+ then batpercent=`echo [c]$batpercent%[c]`
+ else batpercent=`echo $batpercent%`
+ fi
+
+ audiofront=`amixer sget Front | sed -n 's/\] \[[^%]*\]//; s/[ ]*Front Left: Playback [0-9]* \[// p'`
+
+ mailnew=`claws-mail --status inbox | sed -n 's/ [ 0-9ClawsMinotrug\.]*// p'`
+
+ echo -e NEW mail: $mailnew \| VOL front: $audiofront \| BAT:[i]$batpercent[i]\| CPU: $cpuavgload \| $datestr[c]$timestr
+
+ sleep 2
+done | dwm
+
diff --git a/dwm.suckless.org/patches/historical/fibonacci/index.md b/dwm.suckless.org/patches/historical/fibonacci/index.md
index 2917722c..98d08b02 100644
--- a/dwm.suckless.org/patches/historical/fibonacci/index.md
+++ b/dwm.suckless.org/patches/historical/fibonacci/index.md
_AT_@ -18,7 +18,7 @@ arrangement can be seen below.
     +-----------+-----+-----+ +-----------+-----+-----+
              spiral dwindle
 
-[![dwm in spiral layout.][1]][2]
+[![dwm in spiral layout.](http://schot.a-eskwadraat.nl/images/dwm-spiral_small.png1)](http://schot.a-eskwadraat.nl/images/dwm-spiral.png)
 
 *Links2, sic, xterm & xclock in spiral layout.*
 
_AT_@ -40,19 +40,14 @@ arrangement can be seen below.
 
 ## Download
 
-* [dwm-5.2-fibonacci.diff][5] (1.9k) (20081003)
-* [dwm-5.1-fibonacci.diff][3] (1.9k) (20080731)
+* [dwm-5.2-fibonacci.diff](http://www.aplusbi.com/dwm/dwm-5.2-fibonacci.diff) (1.9k) (20081003)
+* [dwm-5.1-fibonacci.diff](http://schot.a-eskwadraat.nl/files/dwm-5.1-fibonacci.diff) (1.9k) (20080731)
 
 ## Author
 
 * Jeroen Schot - <schot_AT_a-eskwadraat.nl>
 
-Joe Thornber's spiral tiling for [Xmonad][4] formed the inspiration for this
-patch. Thanks to Jan Christoph Ebersbach for updating this patch for versions
+Joe Thornber's spiral tiling for [Xmonad](http://www.xmonad.org)
+formed the inspiration for this patch. Thanks to Jan Christoph
+Ebersbach for updating this patch for versions
 4.5 to 4.9.
-
-[1]: http://schot.a-eskwadraat.nl/images/dwm-spiral_small.png
-[2]: http://schot.a-eskwadraat.nl/images/dwm-spiral.png
-[3]: http://schot.a-eskwadraat.nl/files/dwm-5.1-fibonacci.diff
-[4]: http://www.xmonad.org
-[5]: http://www.aplusbi.com/dwm/dwm-5.2-fibonacci.diff
diff --git a/dwm.suckless.org/patches/historical/gridmode/index.md b/dwm.suckless.org/patches/historical/gridmode/index.md
index 9b773366..ed2e8a87 100644
--- a/dwm.suckless.org/patches/historical/gridmode/index.md
+++ b/dwm.suckless.org/patches/historical/gridmode/index.md
_AT_@ -1,8 +1,11 @@
-# GRIDMODE PATCH
+# gridmode
 
 ## Description
 
-This patch adds an extra layout mode to dwm called `grid` in which the windows are arranged in a grid of windows of equal sizes. It comes very in handy especially with tools that operate on multiple windows at once such Cluster SSH.
+This patch adds an extra layout mode to dwm called `grid` in which
+the windows are arranged in a grid of windows of equal sizes. It
+comes very in handy especially with tools that operate on multiple
+windows at once such Cluster SSH.
 
 ## Usage
 
_AT_@ -10,31 +13,24 @@ Add a grid-symbol to your `config.h` file.
 
 ## Screenshots
 
-[Grid mode][5] (it also includes a minor patch to make dwm more colourful :D)
+[Grid mode](http://dwm.slax.no-ip.biz/dwm4.3.png) (it also includes a minor patch to make dwm more colourful :D)
 
 ## Download
-* [dwm-5.2-gridmode.diff][7]
-* [dwm-4.4.1-gridmode.diff][6]
-* [dwm-4.3-gridmode.diff][4]
-* [dwm-4.0-gridmode.diff][3]
-* [dwm-3.9-gridmode.diff][2]
-* [dwm-3.8-gridmode.diff][1]
+* [dwm-5.2-gridmode.diff](http://www.v4hn.de/patches/dwm-5.2-gridmode.diff)
+* [dwm-4.4.1-gridmode.diff](http://schot.a-eskwadraat.nl/files/dwm-4.4.1-gridmode.diff)
+* [dwm-4.3-gridmode.diff](http://dwm.slax.no-ip.biz/dwm-4.3-gridmode.diff)
+* [dwm-4.0-gridmode.diff](http://dwm.slax.no-ip.biz/dwm-4.0-gridmode.diff)
+* [dwm-3.9-gridmode.diff](http://dwm.slax.no-ip.biz/dwm-3.9-gridmode.diff)
+* [dwm-3.8-gridmode.diff](http://dwm.slax.no-ip.biz/dwm-3.8-gridmode.diff)
 
 ## Author
 
 * Alexandru E. Ungur <grid_AT_rb.no-ip.biz>
 * Updated by Jan Christoph Ebersbach - <jceb_AT_e-jc.de>
 * Updated to 5.2 & small fix by V4hn - v4hn.de
+
 Feedback is more than welcome :-)
 
 ## Acknowledgments
 
 The patch would look a lot uglier without Jukka Salmi's constant help. Thanks Jukka :-)
-
-[1]: http://dwm.slax.no-ip.biz/dwm-3.8-gridmode.diff
-[2]: http://dwm.slax.no-ip.biz/dwm-3.9-gridmode.diff
-[3]: http://dwm.slax.no-ip.biz/dwm-4.0-gridmode.diff
-[4]: http://dwm.slax.no-ip.biz/dwm-4.3-gridmode.diff
-[5]: http://dwm.slax.no-ip.biz/dwm4.3.png
-[6]: http://schot.a-eskwadraat.nl/files/dwm-4.4.1-gridmode.diff
-[7]: http://www.v4hn.de/patches/dwm-5.2-gridmode.diff
diff --git a/dwm.suckless.org/patches/historical/mouseontitle/index.md b/dwm.suckless.org/patches/historical/mouseontitle/index.md
index fcb98fdf..532b0b63 100644
--- a/dwm.suckless.org/patches/historical/mouseontitle/index.md
+++ b/dwm.suckless.org/patches/historical/mouseontitle/index.md
_AT_@ -1,4 +1,4 @@
-MOUSE EVENTS ON TITLE
+Mouse events on titlE
 =====================
 
 Last update: 2009-12-11
_AT_@ -24,7 +24,7 @@ so this patch can be replaced by a proper config.h tweak.
 Patch
 -----
 
-Patch for [dwm 4.6][1] is here.
+Patch for [dwm 4.6](http://www.lolcathost.org/b/dwm/mouseontitle-4.6.diff) is here.
 
 See in event.c at function 'buttonpress()' to patch older dwm releases.
 
_AT_@ -32,6 +32,3 @@ Author
 ------
 
 * pancake &lt;youterm.com&gt;
-
-[1]:http://www.lolcathost.org/b/dwm/mouseontitle-4.6.diff
-
diff --git a/dwm.suckless.org/patches/historical/movestack/index.md b/dwm.suckless.org/patches/historical/movestack/index.md
index 07f042e8..0a40b343 100644
--- a/dwm.suckless.org/patches/historical/movestack/index.md
+++ b/dwm.suckless.org/patches/historical/movestack/index.md
_AT_@ -1,4 +1,4 @@
-# MOVESTACK
+# movestack
 
 ## Description
 
_AT_@ -23,10 +23,8 @@ movestack(-1) will swap the client with the current focus with the previous clie
 
 ## Download
 
-* [dwm-5.2-movestack.diff][1] (1.9k) (20081003)
+* [dwm-5.2-movestack.diff](http://www.aplusbi.com/dwm/dwm-5.2-movestack.diff) (1.9k) (20081003)
 
 ## Author
 
 * Niki Yoshiuchi - <aplusbi_AT_gmail.com>
-
-[1]: http://www.aplusbi.com/dwm/dwm-5.2-movestack.diff
diff --git a/dwm.suckless.org/patches/historical/multimon/multimon-1-added-monitor-marker-to-bar.diff b/dwm.suckless.org/patches/historical/multimon/multimon-1-added-monitor-marker-to-bar.diff
new file mode 100644
index 00000000..a2dd1bc3
--- /dev/null
+++ b/dwm.suckless.org/patches/historical/multimon/multimon-1-added-monitor-marker-to-bar.diff
_AT_@ -0,0 +1,163 @@
+From 143e7f2f3caa047469c7219cd6b0cb704466683f Mon Sep 17 00:00:00 2001
+From: "Gary B. Genett" <me_AT_garybgenett.net>
+Date: Mon, 24 Mar 2014 13:47:59 -0700
+Subject: added monitor marker to bar
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="------------1.8.3.2"
+
+This is a multi-part message in MIME format.
+--------------1.8.3.2
+Content-Type: text/plain; charset=UTF-8; format=fixed
+Content-Transfer-Encoding: 8bit
+
+---
+ config.def.h | 2 ++
+ dwm.c | 13 +++++++++++--
+ 2 files changed, 13 insertions(+), 2 deletions(-)
+
+
+--------------1.8.3.2
+Content-Type: text/x-patch; name="0001-added-monitor-marker-to-bar.patch"
+Content-Transfer-Encoding: 8bit
+Content-Disposition: attachment; filename="0001-added-monitor-marker-to-bar.patch"
+
+diff --git a/config.def.h b/config.def.h
+index 875885b864986b6b2c190f9e05d979887e563f93..af6bcfae52a8d1783158ae4f38f35b88025c04e1 100644
+--- a/config.def.h
++++ b/config.def.h
+_AT_@ -90,20 +90,22 @@ static Key keys[] = {
+ TAGKEYS( XK_9, 8)
+ { MODKEY|ShiftMask, XK_q, quit, {0} },
+ };
+
+ /* button definitions */
+ /* click can be ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
+ static Button buttons[] = {
+ /* click event mask button function argument */
+ { ClkLtSymbol, 0, Button1, setlayout, {0} },
+ { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
++ { ClkMonNum, 0, Button1, focusmon, {.i = +1} },
++ { ClkMonNum, 0, Button3, focusmon, {.i = -1} },
+ { ClkWinTitle, 0, Button2, zoom, {0} },
+ { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
+ { ClkClientWin, MODKEY, Button1, movemouse, {0} },
+ { ClkClientWin, MODKEY, Button2, togglefloating, {0} },
+ { ClkClientWin, MODKEY, Button3, resizemouse, {0} },
+ { ClkTagBar, 0, Button1, view, {0} },
+ { ClkTagBar, 0, Button3, toggleview, {0} },
+ { ClkTagBar, MODKEY, Button1, tag, {0} },
+ { ClkTagBar, MODKEY, Button3, toggletag, {0} },
+ };
+diff --git a/dwm.c b/dwm.c
+index 1bbb4b35be25b0a10b8ffd093c55906b8aea96df..209dedc1417a29fb44c3ba5b6fa62f1b75b6a09f 100644
+--- a/dwm.c
++++ b/dwm.c
+_AT_@ -56,21 +56,21 @@
+ #define TAGMASK ((1 << LENGTH(tags)) - 1)
+ #define TEXTW(X) (drw_font_getexts_width(drw->font, X, strlen(X)) + drw->font->h)
+
+ /* enums */
+ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
+ enum { SchemeNorm, SchemeSel, SchemeLast }; /* color schemes */
+ enum { NetSupported, NetWMName, NetWMState,
+ NetWMFullscreen, NetActiveWindow, NetWMWindowType,
+ NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
+ enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
+-enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
++enum { ClkTagBar, ClkLtSymbol, ClkMonNum, ClkStatusText, ClkWinTitle,
+ ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
+
+ typedef union {
+ int i;
+ unsigned int ui;
+ float f;
+ const void *v;
+ } Arg;
+
+ typedef struct {
+_AT_@ -231,21 +231,21 @@ 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 zoom(const Arg *arg);
+
+ /* variables */
+ static const char broken[] = "broken";
+ static char stext[256];
+ static int screen;
+ static int sw, sh; /* X display screen geometry width, height */
+-static int bh, blw = 0; /* bar geometry */
++static int bh, blw, bmw = 0; /* bar geometry */
+ static int (*xerrorxlib)(Display *, XErrorEvent *);
+ static unsigned int numlockmask = 0;
+ static void (*handler[LASTEvent]) (XEvent *) = {
+ [ButtonPress] = buttonpress,
+ [ClientMessage] = clientmessage,
+ [ConfigureRequest] = configurerequest,
+ [ConfigureNotify] = configurenotify,
+ [DestroyNotify] = destroynotify,
+ [EnterNotify] = enternotify,
+ [Expose] = expose,
+_AT_@ -425,20 +425,22 @@ buttonpress(XEvent *e) {
+ i = x = 0;
+ do
+ x += TEXTW(tags[i]);
+ while(ev->x >= x && ++i < LENGTH(tags));
+ if(i < LENGTH(tags)) {
+ click = ClkTagBar;
+ arg.ui = 1 << i;
+ }
+ else if(ev->x < x + blw)
+ click = ClkLtSymbol;
++ else if(ev->x < x + blw + bmw)
++ click = ClkMonNum;
+ else if(ev->x > selmon->ww - TEXTW(stext))
+ click = ClkStatusText;
+ else
+ click = ClkWinTitle;
+ }
+ else if((c = wintoclient(ev->window))) {
+ focus(c);
+ click = ClkClientWin;
+ }
+ for(i = 0; i < LENGTH(buttons); i++)
+_AT_@ -707,28 +709,35 @@ drawbar(Monitor *m) {
+ 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, 0, w, bh, m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
+ occ & 1 << i, urg & 1 << i);
+ x += w;
+ }
+ w = blw = TEXTW(m->ltsymbol);
+ drw_setscheme(drw, &scheme[SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, m->ltsymbol, 0);
+ x += w;
++ char custom[4] = {0}; // needs to be +1 of actual size, for some reason
++ snprintf(custom, sizeof(custom), "<%d>", m->num);
++ w = bmw = TEXTW(custom);
++ drw_setscheme(drw, m == selmon ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
++ drw_text(drw, x, 0, w, bh, custom, 0);
++ x += w;
+ xx = x;
+ if(m == selmon) { /* status is only drawn on selected monitor */
+ w = TEXTW(stext);
+ x = m->ww - w;
+ if(x < xx) {
+ x = xx;
+ w = m->ww - xx;
+ }
++ drw_setscheme(drw, &scheme[SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, stext, 0);
+ }
+ else
+ x = m->ww;
+ if((w = x - xx) > bh) {
+ x = xx;
+ if(m->sel) {
+ drw_setscheme(drw, m == selmon ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, m->sel->name, 0);
+ drw_rect(drw, x, 0, w, bh, m->sel->isfixed, m->sel->isfloating, 0);
+
+--------------1.8.3.2--
+
+
diff --git a/dwm.suckless.org/patches/historical/multimon/multimon-2-added-n-view-wrappers-for-unified-multi-monitor.diff b/dwm.suckless.org/patches/historical/multimon/multimon-2-added-n-view-wrappers-for-unified-multi-monitor.diff
new file mode 100644
index 00000000..cdc5fc55
--- /dev/null
+++ b/dwm.suckless.org/patches/historical/multimon/multimon-2-added-n-view-wrappers-for-unified-multi-monitor.diff
_AT_@ -0,0 +1,181 @@
+From 2521a74714bb7c4b8787f30584f1565cc582928b Mon Sep 17 00:00:00 2001
+From: "Gary B. Genett" <me_AT_garybgenett.net>
+Date: Mon, 24 Mar 2014 13:57:47 -0700
+Subject: added n*view wrappers, for unified multi-monitor
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="------------1.8.3.2"
+
+This is a multi-part message in MIME format.
+--------------1.8.3.2
+Content-Type: text/plain; charset=UTF-8; format=fixed
+Content-Transfer-Encoding: 8bit
+
+---
+ config.def.h | 5 +++++
+ dwm.c | 24 ++++++++++++++++++++++++
+ 2 files changed, 29 insertions(+)
+
+
+--------------1.8.3.2
+Content-Type: text/x-patch; name="0002-added-n-view-wrappers-for-unified-multi-monitor.patch"
+Content-Transfer-Encoding: 8bit
+Content-Disposition: attachment; filename="0002-added-n-view-wrappers-for-unified-multi-monitor.patch"
+
+diff --git a/config.def.h b/config.def.h
+index af6bcfae52a8d1783158ae4f38f35b88025c04e1..d3b6a4b7bbf244a9d824d99340e5fc6d9ecb8a56 100644
+--- a/config.def.h
++++ b/config.def.h
+_AT_@ -32,24 +32,27 @@ static const int nmaster = 1; /* number of clients in master area */
+ static const Bool resizehints = True; /* True 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 },
+ };
+
+ /* key definitions */
++#define WINKEY Mod4Mask
+ #define MODKEY Mod1Mask
+ #define TAGKEYS(KEY,TAG) \
+ { MODKEY, KEY, view, {.ui = 1 << TAG} }, \
+ { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
++ { MODKEY|WINKEY, KEY, nview, {.ui = 1 << TAG} }, \
++ { MODKEY|WINKEY|ControlMask, KEY, ntoggleview, {.ui = 1 << TAG} }, \
+ { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
+ { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
+
+ /* 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", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
+ static const char *termcmd[] = { "st", NULL };
+_AT_@ -99,14 +102,16 @@ static Button buttons[] = {
+ { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
+ { ClkMonNum, 0, Button1, focusmon, {.i = +1} },
+ { ClkMonNum, 0, Button3, focusmon, {.i = -1} },
+ { ClkWinTitle, 0, Button2, zoom, {0} },
+ { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
+ { ClkClientWin, MODKEY, Button1, movemouse, {0} },
+ { ClkClientWin, MODKEY, Button2, togglefloating, {0} },
+ { ClkClientWin, MODKEY, Button3, resizemouse, {0} },
+ { ClkTagBar, 0, Button1, view, {0} },
+ { ClkTagBar, 0, Button3, toggleview, {0} },
++ { ClkTagBar, MODKEY|WINKEY, Button1, nview, {0} },
++ { ClkTagBar, MODKEY|WINKEY, Button3, ntoggleview, {0} },
+ { ClkTagBar, MODKEY, Button1, tag, {0} },
+ { ClkTagBar, MODKEY, Button3, toggletag, {0} },
+ };
+
+diff --git a/dwm.c b/dwm.c
+index 209dedc1417a29fb44c3ba5b6fa62f1b75b6a09f..f6e9588d78a01e3263de54e94bd1559434a802c2 100644
+--- a/dwm.c
++++ b/dwm.c
+_AT_@ -204,34 +204,36 @@ static void setmfact(const Arg *arg);
+ static void setup(void);
+ static void showhide(Client *c);
+ static void sigchld(int unused);
+ static void spawn(const Arg *arg);
+ static void tag(const Arg *arg);
+ static void tagmon(const Arg *arg);
+ static void tile(Monitor *);
+ static void togglebar(const Arg *arg);
+ static void togglefloating(const Arg *arg);
+ static void toggletag(const Arg *arg);
++static void ntoggleview(const Arg *arg);
+ static void toggleview(const Arg *arg);
+ static void unfocus(Client *c, Bool setfocus);
+ static void unmanage(Client *c, Bool destroyed);
+ static void unmapnotify(XEvent *e);
+ static Bool updategeom(void);
+ static void updatebarpos(Monitor *m);
+ static void updatebars(void);
+ static void updateclientlist(void);
+ static void updatenumlockmask(void);
+ static void updatesizehints(Client *c);
+ static void updatestatus(void);
+ static void updatewindowtype(Client *c);
+ static void updatetitle(Client *c);
+ static void updatewmhints(Client *c);
++static void nview(const Arg *arg);
+ static void view(const Arg *arg);
+ static Client *wintoclient(Window w);
+ 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 zoom(const Arg *arg);
+
+ /* variables */
+ static const char broken[] = "broken";
+_AT_@ -1663,20 +1665,31 @@ toggletag(const Arg *arg) {
+ return;
+ newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
+ if(newtags) {
+ selmon->sel->tags = newtags;
+ focus(NULL);
+ arrange(selmon);
+ }
+ }
+
+ void
++ntoggleview(const Arg *arg) {
++ const Arg n = {.i = +1};
++ const int mon = selmon->num;
++ do {
++ focusmon(&n);
++ toggleview(arg);
++ }
++ while (selmon->num != mon);
++}
++
++void
+ toggleview(const Arg *arg) {
+ unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
+
+ if(newtagset) {
+ selmon->tagset[selmon->seltags] = newtagset;
+ focus(NULL);
+ arrange(selmon);
+ }
+ }
+
+_AT_@ -1961,20 +1974,31 @@ updatewmhints(Client *c) {
+ c->isurgent = (wmh->flags & XUrgencyHint) ? True : False;
+ if(wmh->flags & InputHint)
+ c->neverfocus = !wmh->input;
+ else
+ c->neverfocus = False;
+ XFree(wmh);
+ }
+ }
+
+ void
++nview(const Arg *arg) {
++ const Arg n = {.i = +1};
++ const int mon = selmon->num;
++ do {
++ focusmon(&n);
++ view(arg);
++ }
++ while (selmon->num != mon);
++}
++
++void
+ view(const Arg *arg) {
+ if((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
+ return;
+ selmon->seltags ^= 1; /* toggle sel tagset */
+ if(arg->ui & TAGMASK)
+ selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
+ focus(NULL);
+ arrange(selmon);
+ }
+
+
+--------------1.8.3.2--
+
+
diff --git a/dwm.suckless.org/patches/historical/multimon/multimon-3-added-reset_view-function.diff b/dwm.suckless.org/patches/historical/multimon/multimon-3-added-reset_view-function.diff
new file mode 100644
index 00000000..375cac66
--- /dev/null
+++ b/dwm.suckless.org/patches/historical/multimon/multimon-3-added-reset_view-function.diff
_AT_@ -0,0 +1,168 @@
+From b9f79c3dd07b285e974b2dfdf2371a72467539bb Mon Sep 17 00:00:00 2001
+From: "Gary B. Genett" <me_AT_garybgenett.net>
+Date: Mon, 24 Mar 2014 14:27:40 -0700
+Subject: added reset_view function
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="------------1.8.3.2"
+
+This is a multi-part message in MIME format.
+--------------1.8.3.2
+Content-Type: text/plain; charset=UTF-8; format=fixed
+Content-Transfer-Encoding: 8bit
+
+---
+ config.def.h | 8 ++++++++
+ dwm.c | 21 +++++++++++++++++++++
+ 2 files changed, 29 insertions(+)
+
+
+--------------1.8.3.2
+Content-Type: text/x-patch; name="0003-added-reset_view-function.patch"
+Content-Transfer-Encoding: 8bit
+Content-Disposition: attachment; filename="0003-added-reset_view-function.patch"
+
+diff --git a/config.def.h b/config.def.h
+index d3b6a4b7bbf244a9d824d99340e5fc6d9ecb8a56..92b1a461604c81c061f60780dc189a83dd697562 100644
+--- a/config.def.h
++++ b/config.def.h
+_AT_@ -22,22 +22,28 @@ static const Rule rules[] = {
+ * WM_NAME(STRING) = title
+ */
+ /* class instance title tags mask isfloating monitor */
+ { "Gimp", NULL, NULL, 0, True, -1 },
+ { "Firefox", NULL, NULL, 1 << 8, False, -1 },
+ };
+
+ /* layout(s) */
+ static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
+ static const int nmaster = 1; /* number of clients in master area */
++static const int nviews = 1; /* number of tags highlighted by default */
+ static const Bool resizehints = True; /* True means respect size hints in tiled resizals */
+
++static const int master[1]; /* nmaster override per monitor */
++//static const int master[] = {1,-1}; /* monitor 0 = nmaster 1, monitor 1 = no nmaster (all vertical) */
++static const int views[1]; /* nviews override per monitor */
++//static const int views[] = {4,~0}; /* monitor 0 = nviews 4, monitor 1 = all (all highlighted) */
++
+ static const Layout layouts[] = {
+ /* symbol arrange function */
+ { "[]=", tile }, /* first entry is default */
+ { "><>", NULL }, /* no layout function means floating behavior */
+ { "[M]", monocle },
+ };
+
+ /* key definitions */
+ #define WINKEY Mod4Mask
+ #define MODKEY Mod1Mask
+_AT_@ -84,30 +90,32 @@ static Key keys[] = {
+ { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
+ TAGKEYS( XK_1, 0)
+ TAGKEYS( XK_2, 1)
+ TAGKEYS( XK_3, 2)
+ TAGKEYS( XK_4, 3)
+ TAGKEYS( XK_5, 4)
+ TAGKEYS( XK_6, 5)
+ TAGKEYS( XK_7, 6)
+ TAGKEYS( XK_8, 7)
+ TAGKEYS( XK_9, 8)
++ { MODKEY, XK_grave, reset_view, {0} },
+ { MODKEY|ShiftMask, XK_q, quit, {0} },
+ };
+
+ /* button definitions */
+ /* click can be ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
+ static Button buttons[] = {
+ /* click event mask button function argument */
+ { ClkLtSymbol, 0, Button1, setlayout, {0} },
+ { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
+ { ClkMonNum, 0, Button1, focusmon, {.i = +1} },
++ { ClkMonNum, 0, Button2, reset_view, {0} },
+ { ClkMonNum, 0, Button3, focusmon, {.i = -1} },
+ { ClkWinTitle, 0, Button2, zoom, {0} },
+ { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
+ { ClkClientWin, MODKEY, Button1, movemouse, {0} },
+ { ClkClientWin, MODKEY, Button2, togglefloating, {0} },
+ { ClkClientWin, MODKEY, Button3, resizemouse, {0} },
+ { ClkTagBar, 0, Button1, view, {0} },
+ { ClkTagBar, 0, Button3, toggleview, {0} },
+ { ClkTagBar, MODKEY|WINKEY, Button1, nview, {0} },
+ { ClkTagBar, MODKEY|WINKEY, Button3, ntoggleview, {0} },
+diff --git a/dwm.c b/dwm.c
+index f6e9588d78a01e3263de54e94bd1559434a802c2..2b3bf5f99c95180cfb5a3bb04b4181481fbe7bbd 100644
+--- a/dwm.c
++++ b/dwm.c
+_AT_@ -227,20 +227,21 @@ static void updatewindowtype(Client *c);
+ static void updatetitle(Client *c);
+ static void updatewmhints(Client *c);
+ static void nview(const Arg *arg);
+ static void view(const Arg *arg);
+ static Client *wintoclient(Window w);
+ 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 zoom(const Arg *arg);
++static void reset_view(const Arg *arg);
+
+ /* variables */
+ static const char broken[] = "broken";
+ static char stext[256];
+ static int screen;
+ static int sw, sh; /* X display screen geometry width, height */
+ static int bh, blw, bmw = 0; /* bar geometry */
+ static int (*xerrorxlib)(Display *, XErrorEvent *);
+ static unsigned int numlockmask = 0;
+ static void (*handler[LASTEvent]) (XEvent *) = {
+_AT_@ -2069,28 +2070,48 @@ zoom(const Arg *arg) {
+
+ if(!selmon->lt[selmon->sellt]->arrange
+ || (selmon->sel && selmon->sel->isfloating))
+ return;
+ if(c == nexttiled(selmon->clients))
+ if(!c || !(c = nexttiled(c->next)))
+ return;
+ pop(c);
+ }
+
++void
++reset_view(const Arg *arg) {
++ const Arg n = {.i = +1};
++ const Arg m = {.f = 1 + mfact};
++ const int mon = selmon->num;
++ Arg i = {.i = 0};
++ Arg v = {.ui = 0};
++ do {
++ focusmon(&n);
++ i.i = (master[selmon->num] ? master[selmon->num] : nmaster) - selmon->nmaster;
++ incnmaster(&i);
++ setmfact(&m);
++ v.ui = (views[selmon->num] == ~0 ? ~0 : ((1 << (views[selmon->num] ? views[selmon->num] : nviews)) -1));
++ view(&v);
++ }
++ while (selmon->num != mon);
++}
++
+ int
+ main(int argc, char *argv[]) {
+ if(argc == 2 && !strcmp("-v", argv[1]))
+ die("dwm-"VERSION", © 2006-2012 dwm engineers, see LICENSE for details
");
+ else if(argc != 1)
+ die("usage: dwm [-v]
");
+ if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())
+ fputs("warning: no locale support
", stderr);
+ if(!(dpy = XOpenDisplay(NULL)))
+ die("dwm: cannot open display
");
+ checkotherwm();
+ setup();
+ scan();
++ const Arg r = {0};
++ reset_view(&r);
+ run();
+ cleanup();
+ XCloseDisplay(dpy);
+ return EXIT_SUCCESS;
+ }
+
+--------------1.8.3.2--
+
+
diff --git a/dwm.suckless.org/patches/historical/multimon/multimon-4-added-statusall-toggle-replacing-need-for-patch.diff b/dwm.suckless.org/patches/historical/multimon/multimon-4-added-statusall-toggle-replacing-need-for-patch.diff
new file mode 100644
index 00000000..8e7107c5
--- /dev/null
+++ b/dwm.suckless.org/patches/historical/multimon/multimon-4-added-statusall-toggle-replacing-need-for-patch.diff
_AT_@ -0,0 +1,195 @@
+From d318ffdc7ab7a365e548776a1d8ed5ccbd67cd42 Mon Sep 17 00:00:00 2001
+From: "Gary B. Genett" <me_AT_garybgenett.net>
+Date: Mon, 24 Mar 2014 14:44:04 -0700
+Subject: added statusall toggle, replacing need for patch
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="------------1.8.3.2"
+
+This is a multi-part message in MIME format.
+--------------1.8.3.2
+Content-Type: text/plain; charset=UTF-8; format=fixed
+Content-Transfer-Encoding: 8bit
+
+---
+ config.def.h | 1 +
+ dwm.c | 12 ++++++------
+ 2 files changed, 7 insertions(+), 6 deletions(-)
+
+
+--------------1.8.3.2
+Content-Type: text/x-patch; name="0004-added-statusall-toggle-replacing-need-for-patch.patch"
+Content-Transfer-Encoding: 8bit
+Content-Disposition: attachment; filename="0004-added-statusall-toggle-replacing-need-for-patch.patch"
+
+diff --git a/config.def.h b/config.def.h
+index 92b1a461604c81c061f60780dc189a83dd697562..b4759a569dc23754dd240da51dd12607ae93e0f3 100644
+--- a/config.def.h
++++ b/config.def.h
+_AT_@ -24,20 +24,21 @@ static const Rule rules[] = {
+ /* class instance title tags mask isfloating monitor */
+ { "Gimp", NULL, NULL, 0, True, -1 },
+ { "Firefox", NULL, NULL, 1 << 8, False, -1 },
+ };
+
+ /* layout(s) */
+ static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
+ static const int nmaster = 1; /* number of clients in master area */
+ static const int nviews = 1; /* number of tags highlighted by default */
+ static const Bool resizehints = True; /* True means respect size hints in tiled resizals */
++static const Bool statusall = False;/* True means status is shown in all bars, not just active monitor */
+
+ static const int master[1]; /* nmaster override per monitor */
+ //static const int master[] = {1,-1}; /* monitor 0 = nmaster 1, monitor 1 = no nmaster (all vertical) */
+ static const int views[1]; /* nviews override per monitor */
+ //static const int views[] = {4,~0}; /* monitor 0 = nviews 4, monitor 1 = all (all highlighted) */
+
+ static const Layout layouts[] = {
+ /* symbol arrange function */
+ { "[]=", tile }, /* first entry is default */
+ { "><>", NULL }, /* no layout function means floating behavior */
+diff --git a/dwm.c b/dwm.c
+index 2b3bf5f99c95180cfb5a3bb04b4181481fbe7bbd..92aa91a75a39cf1ed298a2279db9974a4f456129 100644
+--- a/dwm.c
++++ b/dwm.c
+_AT_@ -719,21 +719,21 @@ drawbar(Monitor *m) {
+ drw_setscheme(drw, &scheme[SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, m->ltsymbol, 0);
+ x += w;
+ char custom[4] = {0}; // needs to be +1 of actual size, for some reason
+ snprintf(custom, sizeof(custom), "<%d>", m->num);
+ w = bmw = TEXTW(custom);
+ drw_setscheme(drw, m == selmon ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, custom, 0);
+ x += w;
+ xx = x;
+- if(m == selmon) { /* status is only drawn on selected monitor */
++ if(m == selmon || statusall) { /* status is only drawn on selected monitor, unless statusall is true */
+ w = TEXTW(stext);
+ x = m->ww - w;
+ if(x < xx) {
+ x = xx;
+ w = m->ww - xx;
+ }
+ drw_setscheme(drw, &scheme[SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, stext, 0);
+ }
+ else
+_AT_@ -779,21 +779,21 @@ enternotify(XEvent *e) {
+ return;
+ focus(c);
+ }
+
+ void
+ expose(XEvent *e) {
+ Monitor *m;
+ XExposeEvent *ev = &e->xexpose;
+
+ if(ev->count == 0 && (m = wintomon(ev->window)))
+- drawbar(m);
++ statusall ? drawbars() : drawbar(m);
+ }
+
+ void
+ focus(Client *c) {
+ if(!c || !ISVISIBLE(c))
+ for(c = selmon->stack; c && !ISVISIBLE(c); c = c->snext);
+ /* was if(selmon->sel) */
+ if(selmon->sel && selmon->sel != c)
+ unfocus(selmon->sel, False);
+ if(c) {
+_AT_@ -1222,21 +1222,21 @@ propertynotify(XEvent *e) {
+ updatesizehints(c);
+ break;
+ case XA_WM_HINTS:
+ updatewmhints(c);
+ drawbars();
+ break;
+ }
+ if(ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
+ updatetitle(c);
+ if(c == c->mon->sel)
+- drawbar(c->mon);
++ statusall ? drawbars() : drawbar(c->mon);
+ }
+ if(ev->atom == netatom[NetWMWindowType])
+ updatewindowtype(c);
+ }
+ }
+
+ void
+ quit(const Arg *arg) {
+ running = False;
+ }
+_AT_@ -1325,21 +1325,21 @@ resizemouse(const Arg *arg) {
+ focus(NULL);
+ }
+ }
+
+ void
+ restack(Monitor *m) {
+ Client *c;
+ XEvent ev;
+ XWindowChanges wc;
+
+- drawbar(m);
++ statusall ? drawbars() : drawbar(m);
+ if(!m->sel)
+ return;
+ if(m->sel->isfloating || !m->lt[m->sellt]->arrange)
+ XRaiseWindow(dpy, m->sel->win);
+ if(m->lt[m->sellt]->arrange) {
+ wc.stack_mode = Below;
+ wc.sibling = m->barwin;
+ for(c = m->stack; c; c = c->snext)
+ if(!c->isfloating && ISVISIBLE(c)) {
+ XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc);
+_AT_@ -1475,21 +1475,21 @@ setfullscreen(Client *c, Bool fullscreen) {
+ void
+ setlayout(const Arg *arg) {
+ if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
+ selmon->sellt ^= 1;
+ if(arg && arg->v)
+ selmon->lt[selmon->sellt] = (Layout *)arg->v;
+ strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
+ if(selmon->sel)
+ arrange(selmon);
+ else
+- drawbar(selmon);
++ statusall ? drawbars() : drawbar(selmon);
+ }
+
+ /* arg > 1.0 will set mfact absolutly */
+ void
+ setmfact(const Arg *arg) {
+ float f;
+
+ if(!arg || !selmon->lt[selmon->sellt]->arrange)
+ return;
+ f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
+_AT_@ -1941,21 +1941,21 @@ updatetitle(Client *c) {
+ if(!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name))
+ gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name);
+ if(c->name[0] == '+ strcpy(c->name, broken);
+ }
+
+ void
+ updatestatus(void) {
+ if(!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
+ strcpy(stext, "dwm-"VERSION);
+- drawbar(selmon);
++ statusall ? drawbars() : drawbar(selmon);
+ }
+
+ void
+ updatewindowtype(Client *c) {
+ Atom state = getatomprop(c, netatom[NetWMState]);
+ Atom wtype = getatomprop(c, netatom[NetWMWindowType]);
+
+ if(state == netatom[NetWMFullscreen])
+ setfullscreen(c, True);
+ if(wtype == netatom[NetWMWindowTypeDialog])
+
+--------------1.8.3.2--
+
+
diff --git a/dwm.suckless.org/patches/historical/nmaster/nmaster+bstack-5.6.1.diff b/dwm.suckless.org/patches/historical/nmaster/nmaster+bstack-5.6.1.diff
new file mode 100644
index 00000000..219e075c
--- /dev/null
+++ b/dwm.suckless.org/patches/historical/nmaster/nmaster+bstack-5.6.1.diff
_AT_@ -0,0 +1,195 @@
+diff -r e47a47bd3ed4 config.def.h
+--- a/config.def.h Tue Jul 21 10:57:54 2009 +0100
++++ b/config.def.h Mon Aug 24 17:14:00 2009 +0200
+_AT_@ -24,11 +24,13 @@
+
+ /* layout(s) */
+ static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
++static const int nmaster = 1; /* default number of master windows */
+ static const Bool resizehints = True; /* False means respect size hints in tiled resizals */
+
+ static const Layout layouts[] = {
+ /* symbol arrange function */
+ { "[]=", tile }, /* first entry is default */
++ { "TTT", bstack },
+ { "><>", NULL }, /* no layout function means floating behavior */
+ { "[M]", monocle },
+ };
+_AT_@ -57,12 +59,15 @@
+ { MODKEY, XK_k, focusstack, {.i = -1 } },
+ { MODKEY, XK_h, setmfact, {.f = -0.05} },
+ { MODKEY, XK_l, setmfact, {.f = +0.05} },
++ { MODKEY|ShiftMask, XK_h, incnmaster, {.i = +1 } },
++ { MODKEY|ShiftMask, XK_l, incnmaster, {.i = -1 } },
+ { 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_o, setlayout, {.v = &layouts[1]} },
++ { MODKEY, XK_f, setlayout, {.v = &layouts[2]} },
++ { MODKEY, XK_m, setlayout, {.v = &layouts[3]} },
+ { MODKEY, XK_space, setlayout, {0} },
+ { MODKEY|ShiftMask, XK_space, togglefloating, {0} },
+ { MODKEY, XK_0, view, {.ui = ~0 } },
+diff -r e47a47bd3ed4 dwm.c
+--- a/dwm.c Tue Jul 21 10:57:54 2009 +0100
++++ b/dwm.c Mon Aug 24 17:14:00 2009 +0200
+_AT_@ -122,6 +122,7 @@
+
+ struct Monitor {
+ float mfact;
++ int nmaster;
+ int num;
+ int by; /* bar geometry */
+ int mx, my, mw, mh; /* screen size */
+_AT_@ -205,6 +206,8 @@
+ static void setclientstate(Client *c, long state);
+ static void setlayout(const Arg *arg);
+ static void setmfact(const Arg *arg);
++static void incnmaster(const Arg *arg);
++static void setnmaster(const Arg *arg);
+ static void setup(void);
+ static void showhide(Client *c);
+ static void sigchld(int signal);
+_AT_@ -213,6 +216,7 @@
+ static void tagmon(const Arg *arg);
+ static int textnw(const char *text, unsigned int len);
+ static void tile(Monitor *);
++static void bstack(Monitor *);
+ static void togglebar(const Arg *arg);
+ static void togglefloating(const Arg *arg);
+ static void toggletag(const Arg *arg);
+_AT_@ -1423,6 +1427,24 @@
+ }
+
+ void
++incnmaster(const Arg *arg) {
++ if(!arg || !selmon->lt[selmon->sellt]->arrange)
++ return;
++ selmon->nmaster += arg->i;
++ if(selmon->nmaster < 0) selmon->nmaster = 0;
++ arrange();
++}
++
++void
++setnmaster(const Arg *arg) {
++ if(!arg || !selmon->lt[selmon->sellt]->arrange)
++ return;
++ selmon->nmaster = arg->i;
++ if(selmon->nmaster < 0) selmon->nmaster = 0;
++ arrange();
++}
++
++void
+ setup(void) {
+ unsigned int i;
+ int w;
+_AT_@ -1542,7 +1564,7 @@
+
+ void
+ tile(Monitor *m) {
+- int x, y, h, w, mw;
++ int x, y, h, w, mw, nm;
+ unsigned int i, n;
+ Client *c;
+
+_AT_@ -1550,23 +1572,81 @@
+ if(n == 0)
+ return;
+ /* master */
+- c = nexttiled(m->clients);
+- mw = m->mfact * m->ww;
+- resize(c, m->wx, m->wy, (n == 1 ? m->ww : mw) - 2 * c->bw, m->wh - 2 * c->bw, False);
+- if(--n == 0)
+- return;
++ if(m->nmaster > 0) {
++ nm = n < m->nmaster ? n : m->nmaster;
++ c = nexttiled(m->clients);
++ mw = m->mfact * m->ww;
++ h = m->wh / nm;
++ y = m->wy;
++ for(i=0; i<nm; i++, c = nexttiled(c->next)) {
++ resize(c, m->wx, y, (n == nm ? m->ww : mw) - 2 * c->bw,
++ ((i + 1 == nm) ? m->wy + m->wh - y : h) - 2 * c->bw, False);
++ if(h != m->wh)
++ y = c->y + HEIGHT(c);
++ }
++ n -= nm;
++ if(n == 0) return;
++ } else {
++ mw = 0;
++ c = nexttiled(m->clients);
++ }
+ /* tile stack */
+- x = (m->wx + mw > c->x + c->w) ? c->x + c->w + 2 * c->bw : m->wx + mw;
++ x = m->wx + mw;
+ y = m->wy;
+- w = (m->wx + mw > c->x + c->w) ? m->wx + m->ww - x : m->ww - mw;
++ w = m->ww - mw;
+ h = m->wh / n;
+ if(h < bh)
+ h = m->wh;
+- for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
++ for(i = 0; c; c = nexttiled(c->next), i++) {
+ resize(c, x, y, w - 2 * c->bw, /* remainder */ ((i + 1 == n)
+ ? m->wy + m->wh - y - 2 * c->bw : h - 2 * c->bw), False);
+ if(h != m->wh)
+ y = c->y + HEIGHT(c);
++ }
++}
++
++void
++bstack(Monitor *m) {
++ int x, y, h, w, mh, nm;
++ unsigned int i, n;
++ Client *c;
++
++ for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
++ if(n == 0)
++ return;
++
++ if(m->nmaster > 0) {
++ nm = n < m->nmaster ? n : m->nmaster;
++ c = nexttiled(m->clients);
++ mh = m->mfact * m->wh;
++ x = m->wx;
++ h = m->wh;
++ w = m->ww / nm;
++ for(i=0; i<nm; i++, c = nexttiled(c->next)) {
++ resize(c, x, m->wy, ((i + 1 == nm) ? m->wx + m->ww - x : w) - 2 * c->bw,
++ (n == nm ? m->wh : mh) - 2 * c->bw, False);
++ if(w != m->ww)
++ x = c->x + WIDTH(c);
++ }
++ n -= nm;
++ if(n == 0) return;
++ } else {
++ mh = 0;
++ c = nexttiled(m->clients);
++ }
++
++ x = m->wx;
++ y = m->wy + mh;
++ w = m->ww / n;
++ h = m->wh - mh;
++ if(h < bh)
++ h = m->wh;
++
++ for(i = 0; c; c = nexttiled(c->next), i++) {
++ resize(c, x, y, ((i + 1 == n) ? m->wx + m->ww - x : w) - 2 * c->bw,
++ h - 2 * c->bw, False);
++ if(w != m->ww)
++ x = c->x + WIDTH(c);
+ }
+ }
+
+_AT_@ -1734,6 +1814,7 @@
+ m->sellt = 0;
+ m->tagset[0] = m->tagset[1] = 1;
+ m->mfact = mfact;
++ m->nmaster = nmaster;
+ m->showbar = showbar;
+ m->topbar = topbar;
+ m->lt[0] = &layouts[0];
diff --git a/dwm.suckless.org/patches/historical/taglayouts/index.md b/dwm.suckless.org/patches/historical/taglayouts/index.md
index 934f3b19..cf1ba68b 100644
--- a/dwm.suckless.org/patches/historical/taglayouts/index.md
+++ b/dwm.suckless.org/patches/historical/taglayouts/index.md
_AT_@ -1,8 +1,8 @@
-# TAGLAYOUTS
+# taglayouts
 
 ## Description
 
-This patch enables one layout per tag in contrast of one layout for all tags. - A more general approach is the [pertag patch][1].
+This patch enables one layout per tag in contrast of one layout for all tags. - A more general approach is the [pertag patch](/patches/pertag).
 
 ## Download
 * None anymore
_AT_@ -18,4 +18,4 @@ This patch enables one layout per tag in contrast of one layout for all tags. -
 * http://na.srck.net/dwm
 * Updated by Jan Christoph Ebersbach - <jceb_AT_e-jc.de>
 
-[1]: /patches/pertag
+
diff --git a/dwm.suckless.org/patches/keypressrelease/index.md b/dwm.suckless.org/patches/keypressrelease/index.md
index 87f7549a..aa5ccd71 100644
--- a/dwm.suckless.org/patches/keypressrelease/index.md
+++ b/dwm.suckless.org/patches/keypressrelease/index.md
_AT_@ -1,16 +1,17 @@
 keypressrelease
-===
+===============
 
 Description
----
+-----------
 
 This patch lets you specify whether a key binding should be executed at the _KeyPress_ or _KeyRelease_ event.  
-Executing on _KeyRelease_ fixes bugs such as `scrot -s` failing to execute from a key binding due to keys not being released in time[1][2].
+Executing on _KeyRelease_ fixes bugs such as `scrot -s` failing to execute from a key binding due to keys not being released in time [1][2].
 
 Note that the new parameter must be added to all non-standard key bindings manually after patching.
 
 Usage
----
+-----
+
 A working `scrot -s` key binding:
 
 	static const char *scrot[] = { "scrot", "-s", NULL };
_AT_@ -22,12 +23,13 @@ Or to only display the bar while the toggle key is held down (requires that it i
 	{ KeyRelease, MODKEY,           XK_b,      togglebar,      {0} },
 
 Download
----
+--------
 
 * [dwm-keypressrelease-6.0.diff](dwm-keypressrelease-6.0.diff)
 
 Author
 ------
+
 * Niklas Høj - `<niklas at hoej dot me>`
 
 ---
diff --git a/dwm.suckless.org/patches/moveontagmon/index.md b/dwm.suckless.org/patches/moveontagmon/index.md
index 88e42fb0..f6de2dc4 100644
--- a/dwm.suckless.org/patches/moveontagmon/index.md
+++ b/dwm.suckless.org/patches/moveontagmon/index.md
_AT_@ -5,7 +5,7 @@
 This patch moves floating windows if their monitor gets changed.
 
 ## Download
-* [dwm-r1437-moveontagmon.diff][dwm-r1437-moveontagmon.diff]
+* [dwm-r1437-moveontagmon.diff](dwm-r1437-moveontagmon.diff)
 
 ## Author
 * Apo - a-p_AT_0au.de
diff --git a/dwm.suckless.org/patches/mpdcontrol/index.md b/dwm.suckless.org/patches/mpdcontrol/index.md
index a78ae07a..908735f8 100644
--- a/dwm.suckless.org/patches/mpdcontrol/index.md
+++ b/dwm.suckless.org/patches/mpdcontrol/index.md
_AT_@ -1,5 +1,5 @@
 mpdcontrol
-=======
+==========
 
 Description
 -----------
diff --git a/dwm.suckless.org/patches/nextprev/index.md b/dwm.suckless.org/patches/nextprev/index.md
index b505b46f..816079fd 100644
--- a/dwm.suckless.org/patches/nextprev/index.md
+++ b/dwm.suckless.org/patches/nextprev/index.md
_AT_@ -3,7 +3,8 @@
 ## Description
 
 * Increment or decrement the selected tag
-* [shiftview][].c is a better implementation of this, allowing you to rotate the selected tags
+* [shiftview](//lists.suckless.org/dev/1104/7590.html).c is a better
+  implementation of this, allowing you to rotate the selected tags
 
 ## Download
 
_AT_@ -29,5 +30,3 @@
 ## Author
 
 * Rob Pilling - robpilling gmail com
-
-[shiftview]: //lists.suckless.org/dev/1104/7590.html
diff --git a/dwm.suckless.org/patches/pango/index.md b/dwm.suckless.org/patches/pango/index.md
index 35ab6cf4..c6bf9430 100644
--- a/dwm.suckless.org/patches/pango/index.md
+++ b/dwm.suckless.org/patches/pango/index.md
_AT_@ -16,18 +16,18 @@ not possible under barebone xft:
   over which you have direct control.
 
 * **Fallback fonts**, so you can use -for example- some set of iconic fonts as your second
-  family: "DejaVu Sans, Icons 8" [1]. There are tons of monochromatic nice looking TTF
-  icons around the web these days as webfonts are becoming more and more popular. Notice
-  that you can also use the more powerful font switching enabled by pango markup to
+  family: "DejaVu Sans, Icons 8" (see below). There are tons of monochromatic nice looking
+  TTF icons around the web these days as webfonts are becoming more and more popular.
+  Notice that you can also use the more powerful font switching enabled by pango markup to
   achieve the same goal.  Also don't be mislead by the fact that fontconfig understands
   descriptors like "DejaVu Sans, Icons-8" or even font sequences defined as alias in your
   fonts.conf. xft will pick one font once and for all, not on a char-by-char basis.
 
-[1] The [Icons family](https://aur.archlinux.org/packages/ttf-font-icons/) is a
-  non-overlapping merge of Awesome and Ionicons fonts I've made for my statusbar. In case
-  you want to take a look at it, there is a
-  [cheatsheet](https://www.dropbox.com/s/9iysh2i0gadi4ic/icons.pdf) listing the icons and
-  their unicode points.
+The [Icons family](https://aur.archlinux.org/packages/ttf-font-icons/) is a
+non-overlapping merge of Awesome and Ionicons fonts I've made for my statusbar. In case
+you want to take a look at it, there is a
+[cheatsheet](https://www.dropbox.com/s/9iysh2i0gadi4ic/icons.pdf) listing the icons and
+their unicode points.
 
 Download
 --------
diff --git a/dwm.suckless.org/patches/pertag/index.md b/dwm.suckless.org/patches/pertag/index.md
index c15b1b3e..107c7241 100644
--- a/dwm.suckless.org/patches/pertag/index.md
+++ b/dwm.suckless.org/patches/pertag/index.md
_AT_@ -3,8 +3,8 @@ pertag
 
 Description
 -----------
-More general approach to [taglayouts patch][1]. This patch keeps layout,
-mwfact, barpos and nmaster per tag.
+More general approach to [taglayouts patch](../historical/taglayouts).
+This patch keeps layout, mwfact, barpos and nmaster per tag.
 
 Download
 --------
_AT_@ -12,18 +12,18 @@ Download
 * [dwm-pertag-6.1.diff](dwm-pertag-6.1.diff) (6.4K) (20151109)
 * [dwm-git-20120406-pertag.diff](dwm-git-20120406-pertag.diff) (5955b)
 * [dwm-pertag-6.0.diff](dwm-pertag-6.0.diff) (5955b) (20120406)
-* [dwm-r1578-pertag.diff][9] (nmaster included in mainline)
-* [dwm-pertag-5.8.2.diff][7]
-* [dwm-pertag-5.7.2.diff][6]
-* [dwm-pertag-5.6.1.diff][5]
-* [dwm-pertag-5.4.diff][4]
-* [dwm-pertag-5.2.diff][3]
-* [dwm-pertag-5.1.diff][2]
+* [dwm-r1578-pertag.diff](dwm-r1578-pertag.diff) (nmaster included in mainline)
+* [dwm-pertag-5.8.2.diff](dwm-pertag-5.8.2.diff)
+* [dwm-pertag-5.7.2.diff](dwm-pertag-5.7.2.diff)
+* [dwm-pertag-5.6.1.diff](dwm-pertag-5.6.1.diff)
+* [dwm-pertag-5.4.diff](dwm-pertag-5.4.diff)
+* [dwm-pertag-5.2.diff](dwm-pertag-5.2.diff)
+* [dwm-pertag-5.1.diff](dwm-pertag-5.1.diff)
 
 * Using pertag but with the same barpos
   * [dwm-6.1-pertag_without_bar.diff](dwm-6.1-pertag_without_bar.diff) (5.2K) (20151109)
   * [dwm-6.0-pertag_without_bar.diff](dwm-6.0-pertag_without_bar.diff) (5578b) (20140530)
-  * [dwm-5.8.2-pertag\_without\_bar.diff][8]
+  * [dwm-5.8.2-pertag\_without\_bar.diff](dwm-5.8.2-pertag_without_bar.diff)
 
 Authors
 -------
_AT_@ -36,13 +36,3 @@ Authors
 * Updated by Ivan Tham - `pickfire at riseup dot net`
 * [Jochen Sprickerhof](mailto:project_AT_firstname.lastname.de) (Updated to current git)
 * Lucas Gabriel Vuotto - <lvuotto92_AT_gmail.com> (git ports)
-
-[1]: ../historical/taglayouts
-[2]: dwm-pertag-5.1.diff
-[3]: dwm-pertag-5.2.diff
-[4]: dwm-pertag-5.4.diff
-[5]: dwm-pertag-5.6.1.diff
-[6]: dwm-pertag-5.7.2.diff
-[7]: dwm-pertag-5.8.2.diff
-[8]: dwm-5.8.2-pertag_without_bar.diff
-[9]: dwm-r1578-pertag.diff
diff --git a/dwm.suckless.org/patches/scheme_switch/index.md b/dwm.suckless.org/patches/scheme_switch/index.md
index 147915fe..01bbd3f9 100644
--- a/dwm.suckless.org/patches/scheme_switch/index.md
+++ b/dwm.suckless.org/patches/scheme_switch/index.md
_AT_@ -1,5 +1,5 @@
 schemeSwitch
-=====
+============
 
 Description
 -----------
diff --git a/dwm.suckless.org/patches/stackmfact/index.md b/dwm.suckless.org/patches/stackmfact/index.md
index 0ec5a380..7ff281c2 100644
--- a/dwm.suckless.org/patches/stackmfact/index.md
+++ b/dwm.suckless.org/patches/stackmfact/index.md
_AT_@ -1,5 +1,5 @@
-\stackmfact
-===========
+stackmfact
+==========
 
 Description
 -----------
diff --git a/st.suckless.org/patches/disable_bold_italic_fonts/index.md b/st.suckless.org/patches/disable_bold_italic_fonts/index.md
index e19aa8a9..7a613cd1 100644
--- a/st.suckless.org/patches/disable_bold_italic_fonts/index.md
+++ b/st.suckless.org/patches/disable_bold_italic_fonts/index.md
_AT_@ -1,5 +1,5 @@
 Add an option to disable bold/italic fonts globally
-==================================================
+===================================================
 
 Description
 -----------
diff --git a/st.suckless.org/patches/open_copied_url/index.md b/st.suckless.org/patches/open_copied_url/index.md
index 19e28201..3681387e 100644
--- a/st.suckless.org/patches/open_copied_url/index.md
+++ b/st.suckless.org/patches/open_copied_url/index.md
_AT_@ -1,5 +1,5 @@
 open_copied_url
-=======
+===============
 
 Description
 -----------
_AT_@ -10,7 +10,7 @@ The clipboard in this case refers to the CLIPBOARD selection which gets
 populated when pressing e.g. C-c.
 
 Instructions
------------
+------------
 
 Add a keybinding like the following example to "shortcuts" in config.h:
 
diff --git a/surf.suckless.org/files/autorefresh/index.md b/surf.suckless.org/files/autorefresh/index.md
index 973d4e41..d4af178a 100644
--- a/surf.suckless.org/files/autorefresh/index.md
+++ b/surf.suckless.org/files/autorefresh/index.md
_AT_@ -1,5 +1,5 @@
 autorefresh
-=========
+===========
 
 Simple script to auto refresh surf pages.
 Launch the script again to stop auto reloading (easy to use with dmenu)
diff --git a/surf.suckless.org/files/quick_search/index.md b/surf.suckless.org/files/quick_search/index.md
index fc2ad3bf..690bee1c 100644
--- a/surf.suckless.org/files/quick_search/index.md
+++ b/surf.suckless.org/files/quick_search/index.md
_AT_@ -1,5 +1,5 @@
 Quick searching with dmenu
-==================
+==========================
 
 Description
 -----------
diff --git a/surf.suckless.org/patches/instapaper/index.md b/surf.suckless.org/patches/instapaper/index.md
index ebaa300a..a7102340 100644
--- a/surf.suckless.org/patches/instapaper/index.md
+++ b/surf.suckless.org/patches/instapaper/index.md
_AT_@ -2,7 +2,7 @@ instapaper
 ==========
 
 Description
--------
+-----------
 
 1. Add this to static Key keys[]:
 
diff --git a/surf.suckless.org/patches/smartdownloads/index.md b/surf.suckless.org/patches/smartdownloads/index.md
index 5da2067d..a1b14194 100644
--- a/surf.suckless.org/patches/smartdownloads/index.md
+++ b/surf.suckless.org/patches/smartdownloads/index.md
_AT_@ -1,5 +1,5 @@
 smartdownloads
-=======
+==============
 
 Description
 -----------
diff --git a/tools.suckless.org/dmenu/patches/password/index.md b/tools.suckless.org/dmenu/patches/password/index.md
index 96b4f856..10e03929 100644
--- a/tools.suckless.org/dmenu/patches/password/index.md
+++ b/tools.suckless.org/dmenu/patches/password/index.md
_AT_@ -1,5 +1,6 @@
-Password 
+Password
 ========
+
 By applying this patch, dmenu will not directly display 
 the keyboard input, but instead replace it with dots. 
 All data from stdin will be ignored.
diff --git a/tools.suckless.org/dmenu/patches/scroll/index.md b/tools.suckless.org/dmenu/patches/scroll/index.md
index 852509c0..1a9ad7ef 100644
--- a/tools.suckless.org/dmenu/patches/scroll/index.md
+++ b/tools.suckless.org/dmenu/patches/scroll/index.md
_AT_@ -1,5 +1,5 @@
 Text Scrolling
-=============
+==============
 
 This patch adds support for text scrolling, it doesn't append '...' for long
 input anymore as it can handle long text now. It's especially useful when using
diff --git a/tools.suckless.org/dmenu/scripts/index.md b/tools.suckless.org/dmenu/scripts/index.md
index 693e141a..9d43864f 100644
--- a/tools.suckless.org/dmenu/scripts/index.md
+++ b/tools.suckless.org/dmenu/scripts/index.md
_AT_@ -1,5 +1,5 @@
 Scripts using dmenu
-=====
+===================
 
 dmenu's user, feel free to add your own scripts, or comment existents.
 
diff --git a/tools.suckless.org/ii/patches/solarisbuild/index.md b/tools.suckless.org/ii/patches/solarisbuild/index.md
index 29182dcf..c7f7e9ea 100644
--- a/tools.suckless.org/ii/patches/solarisbuild/index.md
+++ b/tools.suckless.org/ii/patches/solarisbuild/index.md
_AT_@ -1,5 +1,5 @@
 Solaris Build
-======
+=============
 
 Description
 -----------
Received on Sat Jan 05 2019 - 17:47:37 CET

This archive was generated by hypermail 2.3.0 : Sat Jan 05 2019 - 17:48:29 CET