dwm-layoutmenu-6.2.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dwm-layoutmenu-6.2.diff (2872B)
---
1 From e45e286b3d639b90ef202996d87054cced1fd80e Mon Sep 17 00:00:00 2001
2 From: tdu <tdukv@protonmail.com>
3 Date: Mon, 31 Aug 2020 00:07:32 +0300
4 Subject: [PATCH] Right clicking the layout symbol opens an xmenu prompt to
5 select layout.
6
7 Xmenu need to be installed for this to work.
8 Edit layoutmenu.sh with the correct layout table, and place in PATH.
9 ---
10 config.def.h | 3 ++-
11 dwm.c | 19 +++++++++++++++++++
12 layoutmenu.sh | 7 +++++++
13 3 files changed, 28 insertions(+), 1 deletion(-)
14 create mode 100755 layoutmenu.sh
15
16 diff --git a/config.def.h b/config.def.h
17 index 1c0b587..c9e0833 100644
18 --- a/config.def.h
19 +++ b/config.def.h
20 @@ -58,6 +58,7 @@ static const Layout layouts[] = {
21 static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
22 static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
23 static const char *termcmd[] = { "st", NULL };
24 +static const char *layoutmenu_cmd = "layoutmenu.sh";
25
26 static Key keys[] = {
27 /* modifier key function argument */
28 @@ -101,7 +102,7 @@ static Key keys[] = {
29 static Button buttons[] = {
30 /* click event mask button function argument */
31 { ClkLtSymbol, 0, Button1, setlayout, {0} },
32 - { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
33 + { ClkLtSymbol, 0, Button3, layoutmenu, {0} },
34 { ClkWinTitle, 0, Button2, zoom, {0} },
35 { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
36 { ClkClientWin, MODKEY, Button1, movemouse, {0} },
37 diff --git a/dwm.c b/dwm.c
38 index 4465af1..2508a0a 100644
39 --- a/dwm.c
40 +++ b/dwm.c
41 @@ -177,6 +177,7 @@ static void grabkeys(void);
42 static void incnmaster(const Arg *arg);
43 static void keypress(XEvent *e);
44 static void killclient(const Arg *arg);
45 +static void layoutmenu(const Arg *arg);
46 static void manage(Window w, XWindowAttributes *wa);
47 static void mappingnotify(XEvent *e);
48 static void maprequest(XEvent *e);
49 @@ -1014,6 +1015,24 @@ killclient(const Arg *arg)
50 }
51 }
52
53 +void
54 +layoutmenu(const Arg *arg) {
55 + FILE *p;
56 + char c[3], *s;
57 + int i;
58 +
59 + if (!(p = popen(layoutmenu_cmd, "r")))
60 + return;
61 + s = fgets(c, sizeof(c), p);
62 + pclose(p);
63 +
64 + if (!s || *s == '\0' || c[0] == '\0')
65 + return;
66 +
67 + i = atoi(c);
68 + setlayout(&((Arg) { .v = &layouts[i] }));
69 +}
70 +
71 void
72 manage(Window w, XWindowAttributes *wa)
73 {
74 diff --git a/layoutmenu.sh b/layoutmenu.sh
75 new file mode 100755
76 index 0000000..1bf95f2
77 --- /dev/null
78 +++ b/layoutmenu.sh
79 @@ -0,0 +1,7 @@
80 +#!/bin/sh
81 +
82 +cat <<EOF | xmenu
83 +[]= Tiled Layout 0
84 +><> Floating Layout 1
85 +[M] Monocle Layout 2
86 +EOF
87 --
88 2.28.0
89