sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit 4a4cbe9cdfb662a03aab201317ce2b9132a281ab
parent 65ac19b172851290b0cd6f4bd6ab36db57208d22
Author: Josuah Demangeon <mail@josuah.net>
Date:   Sat,  5 Jan 2019 17:44:48 +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/

Diffstat:
Mdwm.suckless.org/customisation/customfuncs/index.md | 12++++++------
Mdwm.suckless.org/customisation/font/index.md | 8++++----
Mdwm.suckless.org/customisation/index.md | 42+++++++++++++++++-------------------------
Mdwm.suckless.org/customisation/noapps/index.md | 25++++++++++---------------
Mdwm.suckless.org/customisation/tagmask/index.md | 58++++++++++++++++++++--------------------------------------
Mdwm.suckless.org/customisation/windows_key/index.md | 26++++++++++++--------------
Mdwm.suckless.org/patches/autostart/index.md | 2+-
Mdwm.suckless.org/patches/centeredwindowname/index.md | 2+-
Mdwm.suckless.org/patches/clientspertag/index.md | 10+++++-----
Mdwm.suckless.org/patches/cmdcustomize/index.md | 22++++++++++++----------
Mdwm.suckless.org/patches/ewmhtags/index.md | 6+++---
Adwm.suckless.org/patches/historical/ansistatuscolors/ansistatuscolors.png | 0
Adwm.suckless.org/patches/historical/bottom_stack/bstack.c | 29+++++++++++++++++++++++++++++
Adwm.suckless.org/patches/historical/bottom_stack/bstackhoriz.c | 30++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/historical/color_status_bar/dwm-5.2-colorstatus.diff | 183+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/historical/color_status_bar/dwm-5.2-colorstatus.xinitrc | 24++++++++++++++++++++++++
Mdwm.suckless.org/patches/historical/fibonacci/index.md | 17++++++-----------
Mdwm.suckless.org/patches/historical/gridmode/index.md | 30+++++++++++++-----------------
Mdwm.suckless.org/patches/historical/mouseontitle/index.md | 7++-----
Mdwm.suckless.org/patches/historical/movestack/index.md | 6++----
Adwm.suckless.org/patches/historical/multimon/multimon-1-added-monitor-marker-to-bar.diff | 163+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/historical/multimon/multimon-2-added-n-view-wrappers-for-unified-multi-monitor.diff | 181+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/historical/multimon/multimon-3-added-reset_view-function.diff | 168+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/historical/multimon/multimon-4-added-statusall-toggle-replacing-need-for-patch.diff | 195+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/historical/nmaster/nmaster+bstack-5.6.1.diff | 195+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdwm.suckless.org/patches/historical/taglayouts/index.md | 6+++---
Mdwm.suckless.org/patches/keypressrelease/index.md | 12+++++++-----
Mdwm.suckless.org/patches/moveontagmon/index.md | 2+-
Mdwm.suckless.org/patches/mpdcontrol/index.md | 2+-
Mdwm.suckless.org/patches/nextprev/index.md | 5++---
Mdwm.suckless.org/patches/pango/index.md | 16++++++++--------
Mdwm.suckless.org/patches/pertag/index.md | 30++++++++++--------------------
Mdwm.suckless.org/patches/scheme_switch/index.md | 2+-
Mdwm.suckless.org/patches/stackmfact/index.md | 4++--
Mst.suckless.org/patches/disable_bold_italic_fonts/index.md | 2+-
Mst.suckless.org/patches/open_copied_url/index.md | 4++--
Msurf.suckless.org/files/autorefresh/index.md | 2+-
Msurf.suckless.org/files/quick_search/index.md | 2+-
Msurf.suckless.org/patches/instapaper/index.md | 2+-
Msurf.suckless.org/patches/smartdownloads/index.md | 2+-
Mtools.suckless.org/dmenu/patches/password/index.md | 3++-
Mtools.suckless.org/dmenu/patches/scroll/index.md | 2+-
Mtools.suckless.org/dmenu/scripts/index.md | 2+-
Mtools.suckless.org/ii/patches/solarisbuild/index.md | 2+-
44 files changed, 1329 insertions(+), 214 deletions(-)

diff --git a/dwm.suckless.org/customisation/customfuncs/index.md b/dwm.suckless.org/customisation/customfuncs/index.md @@ -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)* @@ -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: @@ -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: @@ -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) @@ -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 @@ -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 @@ -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 @@ -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. @@ -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); @@ -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 @@ -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. @@ -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); @@ -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]; @@ -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 @@ -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 @@ -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): @@ -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 @@ -1,5 +1,5 @@ autostart -====== +========= Description ----------- diff --git a/dwm.suckless.org/patches/centeredwindowname/index.md b/dwm.suckless.org/patches/centeredwindowname/index.md @@ -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 @@ -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 @@ -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 @@ -1,5 +1,5 @@ ewmhtags -====== +======== Description ----------- @@ -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 Binary files differ. diff --git a/dwm.suckless.org/patches/historical/bottom_stack/bstack.c b/dwm.suckless.org/patches/historical/bottom_stack/bstack.c @@ -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 @@ -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 @@ -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 +@@ -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, '\0', sizeof(buf1)); ++ strcpy(buf1, buf3); ++ } ++ else { ++ stextw = stextw + TEXTW(buf1); ++ parse = False; ++ } ++ } ++ dc.x = ww - stextw; ++ ++ memset(buf1, '\0', sizeof(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, '\0', sizeof(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 +@@ -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]; }; +@@ -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; +@@ -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 @@ -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 @@ -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.* @@ -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@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 @@ -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 @@ -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@rb.no-ip.biz> * Updated by Jan Christoph Ebersbach - <jceb@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 @@ -1,4 +1,4 @@ -MOUSE EVENTS ON TITLE +Mouse events on titlE ===================== Last update: 2009-12-11 @@ -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. @@ -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 @@ -1,4 +1,4 @@ -# MOVESTACK +# movestack ## Description @@ -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@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 @@ -0,0 +1,163 @@ +From 143e7f2f3caa047469c7219cd6b0cb704466683f Mon Sep 17 00:00:00 2001 +From: "Gary B. Genett" <me@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 +@@ -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 +@@ -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 { +@@ -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, +@@ -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++) +@@ -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 @@ -0,0 +1,181 @@ +From 2521a74714bb7c4b8787f30584f1565cc582928b Mon Sep 17 00:00:00 2001 +From: "Gary B. Genett" <me@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 +@@ -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 }; +@@ -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 +@@ -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"; +@@ -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); + } + } + +@@ -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 @@ -0,0 +1,168 @@ +From b9f79c3dd07b285e974b2dfdf2371a72467539bb Mon Sep 17 00:00:00 2001 +From: "Gary B. Genett" <me@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 +@@ -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 +@@ -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 +@@ -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 *) = { +@@ -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\n"); + else if(argc != 1) + die("usage: dwm [-v]\n"); + if(!setlocale(LC_CTYPE, "") || !XSupportsLocale()) + fputs("warning: no locale support\n", stderr); + if(!(dpy = XOpenDisplay(NULL))) + die("dwm: cannot open display\n"); + 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 @@ -0,0 +1,195 @@ +From d318ffdc7ab7a365e548776a1d8ed5ccbd67cd42 Mon Sep 17 00:00:00 2001 +From: "Gary B. Genett" <me@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 +@@ -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 +@@ -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 +@@ -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) { +@@ -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; + } +@@ -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); +@@ -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; +@@ -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] == '\0') /* hack to mark broken clients */ + 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 @@ -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 +@@ -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 }, + }; +@@ -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 +@@ -122,6 +122,7 @@ + + struct Monitor { + float mfact; ++ int nmaster; + int num; + int by; /* bar geometry */ + int mx, my, mw, mh; /* screen size */ +@@ -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); +@@ -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); +@@ -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; +@@ -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; + +@@ -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); + } + } + +@@ -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 @@ -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 @@ -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@e-jc.de> -[1]: /patches/pertag + diff --git a/dwm.suckless.org/patches/keypressrelease/index.md b/dwm.suckless.org/patches/keypressrelease/index.md @@ -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 }; @@ -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 @@ -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@0au.de diff --git a/dwm.suckless.org/patches/mpdcontrol/index.md b/dwm.suckless.org/patches/mpdcontrol/index.md @@ -1,5 +1,5 @@ mpdcontrol -======= +========== Description ----------- diff --git a/dwm.suckless.org/patches/nextprev/index.md b/dwm.suckless.org/patches/nextprev/index.md @@ -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 @@ -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 @@ -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 @@ -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 -------- @@ -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 ------- @@ -36,13 +36,3 @@ Authors * Updated by Ivan Tham - `pickfire at riseup dot net` * [Jochen Sprickerhof](mailto:project@firstname.lastname.de) (Updated to current git) * Lucas Gabriel Vuotto - <lvuotto92@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 @@ -1,5 +1,5 @@ schemeSwitch -===== +============ Description ----------- diff --git a/dwm.suckless.org/patches/stackmfact/index.md b/dwm.suckless.org/patches/stackmfact/index.md @@ -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 @@ -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 @@ -1,5 +1,5 @@ open_copied_url -======= +=============== Description ----------- @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -1,5 +1,5 @@ Solaris Build -====== +============= Description -----------