]> git.sur5r.net Git - i3/i3/commitdiff
Don’t process autostart when restarting (new parameter -a)
authorMichael Stapelberg <michael@stapelberg.de>
Tue, 26 May 2009 15:09:34 +0000 (17:09 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 26 May 2009 15:09:34 +0000 (17:09 +0200)
man/asciidoc.conf
man/i3.man
src/commands.c
src/mainx.c

index 3854debdc673468763aace364e3a066a1e56237b..cd411ec718f5dad67fc8017b7e4410f175837eb0 100644 (file)
@@ -7,7 +7,7 @@ template::[header-declarations]
 <refentrytitle>{mantitle}</refentrytitle>
 <manvolnum>{manvolnum}</manvolnum>
 <refmiscinfo class="source">i3</refmiscinfo>
-<refmiscinfo class="version">alpha</refmiscinfo>
+<refmiscinfo class="version">beta</refmiscinfo>
 <refmiscinfo class="manual">i3 Manual</refmiscinfo>
 </refmeta>
 <refnamediv>
index 4f0c3fe417d327b4df3d1168197d08dc74cba9ea..fbe2ac83a2c91dd99100490de7325face44a02ef 100644 (file)
@@ -1,7 +1,7 @@
 i3(1)
 =====
 Michael Stapelberg <michael+i3@stapelberg.de>
-v3.alpha-bf1, May 2009
+v3.beta, May 2009
 
 == NAME
 
@@ -9,7 +9,15 @@ i3 - an improved dynamic, tiling window manager
 
 == SYNOPSIS
 
-i3 [-c configfile]
+i3 [-c configfile] [-a]
+
+== OPTIONS
+
+-c::
+Specifies an alternate configuration file path
+
+-a::
+Disables autostart.
 
 == DESCRIPTION
 
index 76953abff2da6a6ddb85c3c525e79b5981feae9b..20a8bd05764153c27e100e377b25e72a4b15ae98 100644 (file)
@@ -731,6 +731,29 @@ static void travel_focus_stack(xcb_connection_t *conn, const char *arguments) {
         }
 }
 
+/*
+ * Goes through the list of arguments (for exec()) and checks if the given argument
+ * is present. If not, it copies the arguments (because we cannot realloc it) and
+ * appends the given argument.
+ *
+ */
+static char **append_argument(char **original, char *argument) {
+        int num_args;
+        for (num_args = 0; original[num_args] != NULL; num_args++) {
+                LOG("original argument: \"%s\"\n", original[num_args]);
+                /* If the argument is already present we return the original pointer */
+                if (strcmp(original[num_args], argument) == 0)
+                        return original;
+        }
+        /* Copy the original array */
+        char **result = smalloc((num_args+2) * sizeof(char*));
+        memcpy(result, original, num_args * sizeof(char*));
+        result[num_args] = argument;
+        result[num_args+1] = NULL;
+
+        return result;
+}
+
 /*
  * Parses a command, see file CMDMODE for more information
  *
@@ -763,6 +786,9 @@ void parse_command(xcb_connection_t *conn, const char *command) {
         /* Is it <restart>? Then restart in place. */
         if (STARTS_WITH(command, "restart")) {
                 LOG("restarting \"%s\"...\n", start_argv[0]);
+                /* make sure -a is in the argument list or append it */
+                start_argv = append_argument(start_argv, "-a");
+
                 execvp(start_argv[0], start_argv);
                 /* not reached */
         }
index 60cd6a0f863149569e56246ab6dd9e469ac9ac21..50db96d9c2e8cd1866d79fc18e8c18fba4500c3f 100644 (file)
@@ -72,6 +72,7 @@ int num_screens = 0;
 int main(int argc, char *argv[], char *env[]) {
         int i, screens, opt;
         char *override_configpath = NULL;
+        bool autostart = true;
         xcb_connection_t *conn;
         xcb_property_handlers_t prophs;
         xcb_window_t root;
@@ -85,8 +86,12 @@ int main(int argc, char *argv[], char *env[]) {
 
         start_argv = argv;
 
-        while ((opt = getopt(argc, argv, "c:v")) != -1) {
+        while ((opt = getopt(argc, argv, "c:va")) != -1) {
                 switch (opt) {
+                        case 'a':
+                                LOG("Autostart disabled using -a\n");
+                                autostart = false;
+                                break;
                         case 'c':
                                 override_configpath = sstrdup(optarg);
                                 break;
@@ -270,9 +275,11 @@ int main(int argc, char *argv[], char *env[]) {
 
         /* Autostarting exec-lines */
         struct Autostart *exec;
-        TAILQ_FOREACH(exec, &autostarts, autostarts) {
-                LOG("auto-starting %s\n", exec->command);
-                start_application(exec->command);
+        if (autostart) {
+                TAILQ_FOREACH(exec, &autostarts, autostarts) {
+                        LOG("auto-starting %s\n", exec->command);
+                        start_application(exec->command);
+                }
         }
 
         /* check for Xinerama */