]> git.sur5r.net Git - i3/i3/commitdiff
Implement autostart using "exec" in config
authorMichael Rudolf <ch3ka@ch3ka.de>
Sun, 29 Mar 2009 12:53:48 +0000 (14:53 +0200)
committerMichael Stapelberg <michael+git@stapelberg.de>
Tue, 5 May 2009 18:14:02 +0000 (20:14 +0200)
Syntax is "exec <application>", like when creating a binding.
Multiple entries are possible, applications are started in
the specified order.

include/data.h
include/i3.h
src/config.c
src/mainx.c

index a54798ba2ab9c8a98423d8c2a205e417eedbf89a..e511a7fb66fa59e98131df2ce25e6fe1ed0faaf5 100644 (file)
@@ -48,6 +48,7 @@ typedef struct Font i3Font;
 typedef struct Container Container;
 typedef struct Client Client;
 typedef struct Binding Binding;
+typedef struct Autostart Autostart;
 typedef struct Workspace Workspace;
 typedef struct Rect Rect;
 typedef struct Screen i3Screen;
@@ -191,6 +192,16 @@ struct Binding {
         TAILQ_ENTRY(Binding) bindings;
 };
 
+/*
+ * Holds a command specified by an exec-line in the config (see src/config.c)
+ *
+ */
+struct Autostart {
+        /* Command, like in command mode */
+        char *command;
+        TAILQ_ENTRY(Autostart) autostarts;
+};
+
 /*
  * Data structure for cached font information:
  * - font id in X11 (load it once)
index 02df999610fbd1efbc4b1e3d4291616aca3e59f2..1c9e1b35877681a033d556e8150ed219496e8721 100644 (file)
@@ -25,6 +25,7 @@
 extern char **start_argv;
 extern Display *xkbdpy;
 extern TAILQ_HEAD(bindings_head, Binding) bindings;
+extern TAILQ_HEAD(autostarts_head, Autostart) autostarts;
 extern SLIST_HEAD(stack_wins_head, Stack_Window) stack_wins;
 extern xcb_event_handlers_t evenths;
 extern int num_screens;
index 73d390215fef5c3d88546e4a523e0d4cdb17fdc0..ca84282a41292535a8ce7454dce594ed443e2133 100644 (file)
@@ -85,6 +85,15 @@ void load_configuration(const char *override_configpath) {
                 OPTION_STRING(terminal);
                 OPTION_STRING(font);
 
+                /* exec-lines (autostart) */
+                if (strcasecmp(key, "exec") == 0) {
+                        Autostart *new = smalloc(sizeof(Autostart));
+                        new->command = sstrdup(value);
+                        TAILQ_INSERT_TAIL(&autostarts, new, autostarts);
+                        continue;
+                }
+
+                /* key bindings */
                 if (strcasecmp(key, "bind") == 0) {
                         #define CHECK_MODIFIER(name) \
                                 if (strncasecmp(walk, #name, strlen(#name)) == 0) { \
index e89eaab02e70ff017db28b939df1888ad5649bdc..da79ee3ab5b1dfabff5ef56d644cfe0743d3b501 100644 (file)
@@ -52,6 +52,9 @@ Display *xkbdpy;
 /* The list of key bindings */
 struct bindings_head bindings = TAILQ_HEAD_INITIALIZER(bindings);
 
+/* The list of exec-lines */
+struct autostarts_head autostarts = TAILQ_HEAD_INITIALIZER(autostarts);
+
 /* This is a list of Stack_Windows, global, for easier/faster access on expose events */
 struct stack_wins_head stack_wins = SLIST_HEAD_INITIALIZER(stack_wins);
 
@@ -527,6 +530,13 @@ int main(int argc, char *argv[], char *env[]) {
                 }
         }
 
+        /* Autostarting exec-lines */
+        Autostart *exec;
+        TAILQ_FOREACH(exec, &autostarts, autostarts) {
+                LOG("auto-starting %s\n", exec->command);
+                start_application(exec->command);
+        }
+
         /* check for Xinerama */
         LOG("Checking for Xinerama...\n");
         initialize_xinerama(conn);