exit menu patch
This commit is contained in:
parent
4d01072ae6
commit
52b2bb3bef
@ -104,7 +104,7 @@ static const Layout layouts[] = {
|
|||||||
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
|
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 *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 *termcmd[] = { "st", NULL };
|
||||||
|
#include "exitdwm.c"
|
||||||
static const Key keys[] = {
|
static const Key keys[] = {
|
||||||
/* modifier key function argument */
|
/* modifier key function argument */
|
||||||
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
|
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
|
||||||
@ -147,8 +147,8 @@ static const Key keys[] = {
|
|||||||
TAGKEYS( XK_7, 6)
|
TAGKEYS( XK_7, 6)
|
||||||
TAGKEYS( XK_8, 7)
|
TAGKEYS( XK_8, 7)
|
||||||
TAGKEYS( XK_9, 8)
|
TAGKEYS( XK_9, 8)
|
||||||
{ MODKEY|ShiftMask, XK_q, quit, {0} },
|
{ MODKEY|ShiftMask, XK_e, exitdwm, {0} }
|
||||||
{ MODKEY|ControlMask|ShiftMask, XK_q, quit, {1} },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* button definitions */
|
/* button definitions */
|
||||||
|
87
exitdwm.c
Normal file
87
exitdwm.c
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
# include <stdio.h>
|
||||||
|
# include <string.h>
|
||||||
|
|
||||||
|
void exitdwm ()
|
||||||
|
{
|
||||||
|
# if \
|
||||||
|
defined S_LOCK || \
|
||||||
|
defined S_RESTART_DWM || \
|
||||||
|
defined S_OFFSCREEN || \
|
||||||
|
defined S_EXIT || \
|
||||||
|
defined S_REBOOT || \
|
||||||
|
defined S_SHUTDOWN || \
|
||||||
|
defined S_LOCK_ICON || \
|
||||||
|
defined S_RESTART_DWM_ICON || \
|
||||||
|
defined S_OFFSCREEN_ICON || \
|
||||||
|
defined S_EXIT_ICON || \
|
||||||
|
defined S_REBOOT_ICON || \
|
||||||
|
defined S_SHUTDOWN_ICON || \
|
||||||
|
defined S_FORMAT || \
|
||||||
|
defined S_FORMAT_CLEAR
|
||||||
|
# error (conflicting macro names)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# define S_LOCK "Lock"
|
||||||
|
# define S_RESTART_DWM "restart Dwm"
|
||||||
|
# define S_OFFSCREEN "Off-screen"
|
||||||
|
# define S_EXIT "Exit"
|
||||||
|
# define S_REBOOT "Reboot"
|
||||||
|
# define S_SHUTDOWN "Shutdown"
|
||||||
|
# define S_LOCK_ICON "\uf023" // <= FontAwesome icons
|
||||||
|
# define S_RESTART_DWM_ICON "\uf01e"
|
||||||
|
# define S_OFFSCREEN_ICON "\uf108"
|
||||||
|
# define S_EXIT_ICON "\uf2f5"
|
||||||
|
# define S_REBOOT_ICON "\uf021"
|
||||||
|
# define S_SHUTDOWN_ICON "\uf011"
|
||||||
|
|
||||||
|
# define S_FORMAT(ACTION) S_##ACTION##_ICON " " S_##ACTION
|
||||||
|
# define S_FORMAT_CLEAR "sed 's/^..//'"
|
||||||
|
|
||||||
|
FILE * exit_menu = popen (
|
||||||
|
"echo \""
|
||||||
|
S_FORMAT (LOCK) "\n"
|
||||||
|
S_FORMAT (RESTART_DWM) "\n"
|
||||||
|
S_FORMAT (OFFSCREEN) "\n"
|
||||||
|
S_FORMAT (EXIT) "\n"
|
||||||
|
S_FORMAT (REBOOT) "\n"
|
||||||
|
S_FORMAT (SHUTDOWN)
|
||||||
|
"\" | dmenu -p exit: | " S_FORMAT_CLEAR
|
||||||
|
,
|
||||||
|
"r"
|
||||||
|
);
|
||||||
|
|
||||||
|
char exit_action [16];
|
||||||
|
|
||||||
|
if (
|
||||||
|
exit_menu == NULL ||
|
||||||
|
fscanf (exit_menu, "%15[a-zA-Z -]", exit_action) == EOF
|
||||||
|
) {
|
||||||
|
fputs ("Error. Failure in exit_dwm.", stderr);
|
||||||
|
goto close_streams;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp (exit_action, S_LOCK) == 0) system ("slock & sleep .5; xset dpms force off");
|
||||||
|
else if (strcmp (exit_action, S_RESTART_DWM) == 0) quit (& (const Arg) {1});
|
||||||
|
else if (strcmp (exit_action, S_OFFSCREEN) == 0) system ("sleep .5; xset dpms force off");
|
||||||
|
else if (strcmp (exit_action, S_EXIT) == 0) quit (& (const Arg) {0});
|
||||||
|
else if (strcmp (exit_action, S_REBOOT) == 0) system ("systemctl reboot");
|
||||||
|
else if (strcmp (exit_action, S_SHUTDOWN) == 0) system ("systemctl poweroff -i");
|
||||||
|
|
||||||
|
close_streams:
|
||||||
|
pclose (exit_menu);
|
||||||
|
|
||||||
|
# undef S_LOCK
|
||||||
|
# undef S_RESTART_DWM
|
||||||
|
# undef S_OFFSCREEN
|
||||||
|
# undef S_EXIT
|
||||||
|
# undef S_REBOOT
|
||||||
|
# undef S_SHUTDOWN
|
||||||
|
# undef S_LOCK_ICON
|
||||||
|
# undef S_RESTART_DWM_ICON
|
||||||
|
# undef S_OFFSCREEN_ICON
|
||||||
|
# undef S_EXIT_ICON
|
||||||
|
# undef S_REBOOT_ICON
|
||||||
|
# undef S_SHUTDOWN_ICON
|
||||||
|
# undef S_FORMAT
|
||||||
|
# undef S_FORMAT_CLEAR
|
||||||
|
}
|
114
patches/functions/dwm-exitmenu-6.3.diff
Normal file
114
patches/functions/dwm-exitmenu-6.3.diff
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
diff --git a/config.def.h b/config.def.h
|
||||||
|
index a2ac963..92a6a81 100644
|
||||||
|
--- a/config.def.h
|
||||||
|
+++ b/config.def.h
|
||||||
|
@@ -60,6 +60,7 @@ 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 };
|
||||||
|
|
||||||
|
+#include "exitdwm.c"
|
||||||
|
static Key keys[] = {
|
||||||
|
/* modifier key function argument */
|
||||||
|
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
|
||||||
|
@@ -94,7 +95,7 @@ static Key keys[] = {
|
||||||
|
TAGKEYS( XK_7, 6)
|
||||||
|
TAGKEYS( XK_8, 7)
|
||||||
|
TAGKEYS( XK_9, 8)
|
||||||
|
- { MODKEY|ShiftMask, XK_q, quit, {0} },
|
||||||
|
+ { MODKEY|ShiftMask, XK_e, exitdwm, {0} },
|
||||||
|
};
|
||||||
|
|
||||||
|
/* button definitions */
|
||||||
|
diff --git a/exitdwm.c b/exitdwm.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..74c514f
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/exitdwm.c
|
||||||
|
@@ -0,0 +1,87 @@
|
||||||
|
+# include <stdio.h>
|
||||||
|
+# include <string.h>
|
||||||
|
+
|
||||||
|
+void exitdwm ()
|
||||||
|
+{
|
||||||
|
+# if \
|
||||||
|
+ defined S_LOCK || \
|
||||||
|
+ defined S_RESTART_DWM || \
|
||||||
|
+ defined S_OFFSCREEN || \
|
||||||
|
+ defined S_EXIT || \
|
||||||
|
+ defined S_REBOOT || \
|
||||||
|
+ defined S_SHUTDOWN || \
|
||||||
|
+ defined S_LOCK_ICON || \
|
||||||
|
+ defined S_RESTART_DWM_ICON || \
|
||||||
|
+ defined S_OFFSCREEN_ICON || \
|
||||||
|
+ defined S_EXIT_ICON || \
|
||||||
|
+ defined S_REBOOT_ICON || \
|
||||||
|
+ defined S_SHUTDOWN_ICON || \
|
||||||
|
+ defined S_FORMAT || \
|
||||||
|
+ defined S_FORMAT_CLEAR
|
||||||
|
+# error (conflicting macro names)
|
||||||
|
+# endif
|
||||||
|
+
|
||||||
|
+# define S_LOCK "Lock"
|
||||||
|
+# define S_RESTART_DWM "restart Dwm"
|
||||||
|
+# define S_OFFSCREEN "Off-screen"
|
||||||
|
+# define S_EXIT "Exit"
|
||||||
|
+# define S_REBOOT "Reboot"
|
||||||
|
+# define S_SHUTDOWN "Shutdown"
|
||||||
|
+# define S_LOCK_ICON "\uf023" // <= FontAwesome icons
|
||||||
|
+# define S_RESTART_DWM_ICON "\uf01e"
|
||||||
|
+# define S_OFFSCREEN_ICON "\uf108"
|
||||||
|
+# define S_EXIT_ICON "\uf2f5"
|
||||||
|
+# define S_REBOOT_ICON "\uf021"
|
||||||
|
+# define S_SHUTDOWN_ICON "\uf011"
|
||||||
|
+
|
||||||
|
+# define S_FORMAT(ACTION) S_##ACTION##_ICON " " S_##ACTION
|
||||||
|
+# define S_FORMAT_CLEAR "sed 's/^..//'"
|
||||||
|
+
|
||||||
|
+ FILE * exit_menu = popen (
|
||||||
|
+ "echo \""
|
||||||
|
+ S_FORMAT (LOCK) "\n"
|
||||||
|
+ S_FORMAT (RESTART_DWM) "\n"
|
||||||
|
+ S_FORMAT (OFFSCREEN) "\n"
|
||||||
|
+ S_FORMAT (EXIT) "\n"
|
||||||
|
+ S_FORMAT (REBOOT) "\n"
|
||||||
|
+ S_FORMAT (SHUTDOWN)
|
||||||
|
+ "\" | dmenu -p exit: | " S_FORMAT_CLEAR
|
||||||
|
+ ,
|
||||||
|
+ "r"
|
||||||
|
+ );
|
||||||
|
+
|
||||||
|
+ char exit_action [16];
|
||||||
|
+
|
||||||
|
+ if (
|
||||||
|
+ exit_menu == NULL ||
|
||||||
|
+ fscanf (exit_menu, "%15[a-zA-Z -]", exit_action) == EOF
|
||||||
|
+ ) {
|
||||||
|
+ fputs ("Error. Failure in exit_dwm.", stderr);
|
||||||
|
+ goto close_streams;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (strcmp (exit_action, S_LOCK) == 0) system ("slock & sleep .5; xset dpms force off");
|
||||||
|
+ else if (strcmp (exit_action, S_RESTART_DWM) == 0) quit (& (const Arg) {1});
|
||||||
|
+ else if (strcmp (exit_action, S_OFFSCREEN) == 0) system ("sleep .5; xset dpms force off");
|
||||||
|
+ else if (strcmp (exit_action, S_EXIT) == 0) quit (& (const Arg) {0});
|
||||||
|
+ else if (strcmp (exit_action, S_REBOOT) == 0) system ("systemctl reboot");
|
||||||
|
+ else if (strcmp (exit_action, S_SHUTDOWN) == 0) system ("systemctl poweroff -i");
|
||||||
|
+
|
||||||
|
+close_streams:
|
||||||
|
+ pclose (exit_menu);
|
||||||
|
+
|
||||||
|
+# undef S_LOCK
|
||||||
|
+# undef S_RESTART_DWM
|
||||||
|
+# undef S_OFFSCREEN
|
||||||
|
+# undef S_EXIT
|
||||||
|
+# undef S_REBOOT
|
||||||
|
+# undef S_SHUTDOWN
|
||||||
|
+# undef S_LOCK_ICON
|
||||||
|
+# undef S_RESTART_DWM_ICON
|
||||||
|
+# undef S_OFFSCREEN_ICON
|
||||||
|
+# undef S_EXIT_ICON
|
||||||
|
+# undef S_REBOOT_ICON
|
||||||
|
+# undef S_SHUTDOWN_ICON
|
||||||
|
+# undef S_FORMAT
|
||||||
|
+# undef S_FORMAT_CLEAR
|
||||||
|
+}
|
Loading…
Reference in New Issue
Block a user