[wiki] [sites] [dwm][patch] layoutmenu || tdu

From: <git_AT_suckless.org>
Date: Mon, 31 Aug 2020 21:22:03 +0200

commit f21e5011d96c79fa17b4ce446d6f0ac17fc0dce5
Author: tdu <tdukv_AT_protonmail.com>
Date: Mon Aug 31 22:17:16 2020 +0300

    [dwm][patch] layoutmenu
    
    A right click menu for layout switching using xmenu.

diff --git a/dwm.suckless.org/patches/layoutmenu/dwm-layoutmenu-6.2.diff b/dwm.suckless.org/patches/layoutmenu/dwm-layoutmenu-6.2.diff
new file mode 100644
index 00000000..c2097d66
--- /dev/null
+++ b/dwm.suckless.org/patches/layoutmenu/dwm-layoutmenu-6.2.diff
_AT_@ -0,0 +1,89 @@
+From e45e286b3d639b90ef202996d87054cced1fd80e Mon Sep 17 00:00:00 2001
+From: tdu <tdukv_AT_protonmail.com>
+Date: Mon, 31 Aug 2020 00:07:32 +0300
+Subject: [PATCH] Right clicking the layout symbol opens an xmenu prompt to
+ select layout.
+
+Xmenu need to be installed for this to work.
+Edit layoutmenu.sh with the correct layout table, and place in PATH.
+---
+ config.def.h | 3 ++-
+ dwm.c | 19 +++++++++++++++++++
+ layoutmenu.sh | 7 +++++++
+ 3 files changed, 28 insertions(+), 1 deletion(-)
+ create mode 100755 layoutmenu.sh
+
+diff --git a/config.def.h b/config.def.h
+index 1c0b587..c9e0833 100644
+--- a/config.def.h
++++ b/config.def.h
+_AT_@ -58,6 +58,7 @@ static const Layout layouts[] = {
+ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
+ static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
+ static const char *termcmd[] = { "st", NULL };
++static const char *layoutmenu_cmd = "layoutmenu.sh";
+
+ static Key keys[] = {
+ /* modifier key function argument */
+_AT_@ -101,7 +102,7 @@ static Key keys[] = {
+ static Button buttons[] = {
+ /* click event mask button function argument */
+ { ClkLtSymbol, 0, Button1, setlayout, {0} },
+- { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
++ { ClkLtSymbol, 0, Button3, layoutmenu, {0} },
+ { ClkWinTitle, 0, Button2, zoom, {0} },
+ { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
+ { ClkClientWin, MODKEY, Button1, movemouse, {0} },
+diff --git a/dwm.c b/dwm.c
+index 4465af1..2508a0a 100644
+--- a/dwm.c
++++ b/dwm.c
+_AT_@ -177,6 +177,7 @@ static void grabkeys(void);
+ static void incnmaster(const Arg *arg);
+ static void keypress(XEvent *e);
+ static void killclient(const Arg *arg);
++static void layoutmenu(const Arg *arg);
+ static void manage(Window w, XWindowAttributes *wa);
+ static void mappingnotify(XEvent *e);
+ static void maprequest(XEvent *e);
+_AT_@ -1014,6 +1015,24 @@ killclient(const Arg *arg)
+ }
+ }
+
++void
++layoutmenu(const Arg *arg) {
++ FILE *p;
++ char c[3], *s;
++ int i;
++
++ if (!(p = popen(layoutmenu_cmd, "r")))
++ return;
++ s = fgets(c, sizeof(c), p);
++ pclose(p);
++
++ if (!s || *s == '++ return;
++
++ i = atoi(c);
++ setlayout(&((Arg) { .v = &layouts[i] }));
++}
++
+ void
+ manage(Window w, XWindowAttributes *wa)
+ {
+diff --git a/layoutmenu.sh b/layoutmenu.sh
+new file mode 100755
+index 0000000..1bf95f2
+--- /dev/null
++++ b/layoutmenu.sh
+_AT_@ -0,0 +1,7 @@
++#!/bin/sh
++
++cat <<EOF | xmenu
++[]= Tiled Layout 0
++><> Floating Layout 1
++[M] Monocle Layout 2
++EOF
+--
+2.28.0
+
diff --git a/dwm.suckless.org/patches/layoutmenu/dwm-layoutmenua.png b/dwm.suckless.org/patches/layoutmenu/dwm-layoutmenua.png
new file mode 100644
index 00000000..9344f831
Binary files /dev/null and b/dwm.suckless.org/patches/layoutmenu/dwm-layoutmenua.png differ
diff --git a/dwm.suckless.org/patches/layoutmenu/dwm-layoutmenub.png b/dwm.suckless.org/patches/layoutmenu/dwm-layoutmenub.png
new file mode 100644
index 00000000..35091b90
Binary files /dev/null and b/dwm.suckless.org/patches/layoutmenu/dwm-layoutmenub.png differ
diff --git a/dwm.suckless.org/patches/layoutmenu/index.md b/dwm.suckless.org/patches/layoutmenu/index.md
new file mode 100644
index 00000000..5b547339
--- /dev/null
+++ b/dwm.suckless.org/patches/layoutmenu/index.md
_AT_@ -0,0 +1,28 @@
+# layoutmenu
+
+This patch adds a context menu for layout switching.
+
+Right clicking on the layout icon brings an [xmenu](https://github.com/phillbush/xmenu) prompt for to pick a new layout, and switches to the selected one.
+
+## Screenshots
+
+Vanilla layouts
+
+![screenshot](dwm-layoutmenua.png)
+
+Extra layouts
+
+![screenshot](dwm-layoutmenub.png)
+
+## Usage
+
+* [Xmenu](https://github.com/phillbush/xmenu) need to be installed.
+* Edit `layoutmenu.sh` with the installed layouts and with correct indexes.
+* Place `layoutmenu.sh` in PATH.
+* The text of the menu items is for display only. Name them however you want.
+
+## Download
+* [dwm-layoutmenu-6.2.diff](dwm-layoutmenu-6.2.diff)
+
+## Author
+* [tdu](https://github.com/tdukv) - < tdukv at protonmail com>
Received on Mon Aug 31 2020 - 21:22:03 CEST

This archive was generated by hypermail 2.3.0 : Mon Aug 31 2020 - 21:24:47 CEST