Syntax is "exec <application>", like when creating a binding.
Multiple entries are possible, applications are started in
the specified order.
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;
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)
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;
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) { \
/* 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);
}
}
+ /* 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);