Merge pull request #89 from gx2b/master

Layoutmenu patch
This commit is contained in:
Stein Gunnar Bakkeby 2021-01-22 11:12:04 +01:00 committed by GitHub
commit 1b3a348d5d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 55 additions and 3 deletions

View File

@ -15,6 +15,8 @@ Refer to [https://dwm.suckless.org/](https://dwm.suckless.org/) for details on t
### Changelog: ### Changelog:
2021-01-02 - Added the Layoutmenu patch
2020-10-26 - Added the \_NET\_CLIENT\_LIST\_STACKING patch 2020-10-26 - Added the \_NET\_CLIENT\_LIST\_STACKING patch
2020-09-29 - Added the on\_empty\_keys patch (ported from InstantOS) 2020-09-29 - Added the on\_empty\_keys patch (ported from InstantOS)

View File

@ -297,6 +297,10 @@ static char *statuscolors[][ColCount] = {
}; };
#endif // BAR_POWERLINE_STATUS_PATCH #endif // BAR_POWERLINE_STATUS_PATCH
#if BAR_LAYOUTMENU_PATCH
static const char *layoutmenu_cmd = "layoutmenu.sh";
#endif
#if COOL_AUTOSTART_PATCH #if COOL_AUTOSTART_PATCH
static const char *const autostart[] = { static const char *const autostart[] = {
"st", NULL, "st", NULL,
@ -1134,7 +1138,11 @@ static Button buttons[] = {
{ ClkButton, 0, Button1, spawn, {.v = dmenucmd } }, { ClkButton, 0, Button1, spawn, {.v = dmenucmd } },
#endif // BAR_STATUSBUTTON_PATCH #endif // BAR_STATUSBUTTON_PATCH
{ ClkLtSymbol, 0, Button1, setlayout, {0} }, { ClkLtSymbol, 0, Button1, setlayout, {0} },
#if BAR_LAYOUTMENU_PATCH
{ ClkLtSymbol, 0, Button3, layoutmenu, {0} },
#else
{ ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} }, { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
#endif // BAR_LAYOUTMENU_PATCH
#if BAR_WINTITLEACTIONS_PATCH #if BAR_WINTITLEACTIONS_PATCH
{ ClkWinTitle, 0, Button1, togglewin, {0} }, { ClkWinTitle, 0, Button1, togglewin, {0} },
{ ClkWinTitle, 0, Button3, showhideclient, {0} }, { ClkWinTitle, 0, Button3, showhideclient, {0} },

18
patch/bar_layoutmenu.c Normal file
View File

@ -0,0 +1,18 @@
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 == '\0' || c == '\0')
return;
i = atoi(c);
setlayout(&((Arg) { .v = &layouts[i] }));
}

1
patch/bar_layoutmenu.h Normal file
View File

@ -0,0 +1 @@
static void layoutmenu(const Arg *arg);

View File

@ -83,6 +83,9 @@
#if BAR_WINTITLEACTIONS_PATCH #if BAR_WINTITLEACTIONS_PATCH
#include "bar_wintitleactions.c" #include "bar_wintitleactions.c"
#endif #endif
#if BAR_LAYOUTMENU_PATCH
#include "bar_layoutmenu.c"
#endif
/* Other patches */ /* Other patches */
#if ASPECTRESIZE_PATCH #if ASPECTRESIZE_PATCH

View File

@ -80,6 +80,9 @@
#if BAR_WINTITLEACTIONS_PATCH #if BAR_WINTITLEACTIONS_PATCH
#include "bar_wintitleactions.h" #include "bar_wintitleactions.h"
#endif #endif
#if BAR_LAYOUTMENU_PATCH
#include "bar_layoutmenu.h"
#endif
/* Other patches */ /* Other patches */
#if ASPECTRESIZE_PATCH #if ASPECTRESIZE_PATCH

8
patch/layoutmenu.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/sh
cat <<EOF | xmenu
[]= Tiled Layout 0
><> Floating Layout 1
[M] Monocle Layout 2
EOF

View File

@ -42,6 +42,15 @@
*/ */
#define BAR_FLEXWINTITLE_PATCH 0 #define BAR_FLEXWINTITLE_PATCH 0
/* This patch adds a context menu for layout switching.
* - xmenu needs to be installed.
* - Edit layoutmenu.sh with the installed layouts and with correct indexes.
* - Place layoutmenu.sh in PATH.
* - The text of the menu items is for display only. Name them however you want.
* https://dwm.suckless.org/patches/layoutmenu/
*/
#define BAR_LAYOUTMENU_PATCH 0
/* Show layout symbol in bar */ /* Show layout symbol in bar */
#define BAR_LTSYMBOL_PATCH 1 #define BAR_LTSYMBOL_PATCH 1