]> git.sur5r.net Git - i3/i3/commitdiff
Implement exit command, document it in manpage, add it to defaultconfig (Mod1+Shift+e)
authorMichael Stapelberg <michael+x200@stapelberg.de>
Sat, 14 Mar 2009 20:31:22 +0000 (21:31 +0100)
committerMichael Stapelberg <michael+x200@stapelberg.de>
Sat, 14 Mar 2009 20:31:22 +0000 (21:31 +0100)
CMDMODE
i3.config
include/util.h
man/i3.man
src/commands.c

diff --git a/CMDMODE b/CMDMODE
index c7881e1ffb9ebe99ac3364e5f20bbc53db411ce5..5e8ebbfa709735e22bcbaa6f867961bffb8c6074 100644 (file)
--- a/CMDMODE
+++ b/CMDMODE
@@ -17,7 +17,7 @@ with := <w> { [ <times> ] <where> }+ <space> <cmd>
 
 oder
 
-exec := exec <path>
+special := [ exec <path> | exit | restart ]
 
 an jeder Stelle kann mit escape abgebrochen werden
 
index 70e3c318c4885e8ba4d9ecb9346e30681de5d408..a40f13ad15d396e739ab7ecaa9a2e952614ee64a 100644 (file)
--- a/i3.config
+++ b/i3.config
@@ -76,5 +76,8 @@ bind Mod1+36 exec /usr/bin/urxvt
 # for now, we don’t have an own launcher
 bind Mod1+55 exec /usr/bin/dmenu_run
 
+# Mod1+Shift+e exits i3
+bind Mod1+Shift+26 exit
+
 # Mod1+Shift+r restarts i3 inplace
 bind Mod1+Shift+27 restart
index 12cd852c64bf59a01db8676b5aa776bb4c79e6bf..827ae6d18a694f13259b7b1f50114dca3210ba2d 100644 (file)
@@ -16,6 +16,7 @@
 #define _UTIL_H
 
 #define exit_if_null(pointer, ...) { if (pointer == NULL) die(__VA_ARGS__); }
+#define STARTS_WITH(string, needle) (strncasecmp(string, needle, strlen(needle)) == 0)
 #define CIRCLEQ_NEXT_OR_NULL(head, elm, field) (CIRCLEQ_NEXT(elm, field) != CIRCLEQ_END(head) ? \
                                                 CIRCLEQ_NEXT(elm, field) : NULL)
 #define CIRCLEQ_PREV_OR_NULL(head, elm, field) (CIRCLEQ_PREV(elm, field) != CIRCLEQ_END(head) ? \
index bdabf41e61be023582464f9c42774418a1bf35a5..c5386c5c47540542fa26b89420153c0f6c3fe2f6 100644 (file)
@@ -108,6 +108,12 @@ Enable stacking layout for the current container.
 Mod1+d::
 Enable default layout for the current container.
 
+Mod1+Shift+r::
+Restarts i3 in place (without losing any windows, but the layout).
+
+Mod1+Shift+e::
+Exits i3.
+
 == FILES
 
 === ~/.i3/config
@@ -136,9 +142,12 @@ bind Mod1+73 exec /home/michael/toggle_beamer.sh
 # Screen locking
 bind Mod1+68 exec /usr/bin/i3lock
 
-# Restart i3 inplace
+# Restart i3 inplace (Mod1+Shift+r)
 bind Mod1+Shift+27 restart
 
+# Exit i3 (Mod1+Shift+e)
+bind Mod1+Shift+26 exit
+
 # Brightness
 bind Mod1+97 exec sudo sh -c "echo up > /proc/acpi/ibm/brightness"
 bind Mod1+103 exec sudo sh -c "echo down > /proc/acpi/ibm/brightness"
index 4e9f304aedaf9a0c430e8444faeff84c6bcf2b60..3afd6c5e8ace7e89b234d7d46e5e9b93aac1851a 100644 (file)
@@ -552,15 +552,19 @@ void parse_command(xcb_connection_t *conn, const char *command) {
         if (command[0] == '\0')
                 return;
 
-        /* Is it an <exec>? */
-        if (strncmp(command, "exec ", strlen("exec ")) == 0) {
+        /* Is it an <exec>? Then execute the given command. */
+        if (STARTS_WITH(command, "exec ")) {
                 LOG("starting \"%s\"\n", command + strlen("exec "));
                 start_application(command+strlen("exec "));
                 return;
         }
 
-        /* Is it <restart>? */
-        if (strncmp(command, "restart", strlen("restart")) == 0) {
+        /* Is it an <exit>? */
+        if (STARTS_WITH(command, "exit"))
+                exit(0);
+
+        /* Is it <restart>? Then restart in place. */
+        if (STARTS_WITH(command, "restart")) {
                 LOG("restarting \"%s\"...\n", application_path);
                 execl(application_path, application_path, NULL);
                 /* not reached */