Implement autostart using "exec" in config
Syntax is "exec <application>", like when creating a binding. Multiple entries are possible, applications are started in the specified order.
This commit is contained in:
parent
4a3354da3b
commit
3400f0e6bd
|
@ -48,6 +48,7 @@ typedef struct Font i3Font;
|
||||||
typedef struct Container Container;
|
typedef struct Container Container;
|
||||||
typedef struct Client Client;
|
typedef struct Client Client;
|
||||||
typedef struct Binding Binding;
|
typedef struct Binding Binding;
|
||||||
|
typedef struct Autostart Autostart;
|
||||||
typedef struct Workspace Workspace;
|
typedef struct Workspace Workspace;
|
||||||
typedef struct Rect Rect;
|
typedef struct Rect Rect;
|
||||||
typedef struct Screen i3Screen;
|
typedef struct Screen i3Screen;
|
||||||
|
@ -191,6 +192,16 @@ struct Binding {
|
||||||
TAILQ_ENTRY(Binding) bindings;
|
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:
|
* Data structure for cached font information:
|
||||||
* - font id in X11 (load it once)
|
* - font id in X11 (load it once)
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
extern char **start_argv;
|
extern char **start_argv;
|
||||||
extern Display *xkbdpy;
|
extern Display *xkbdpy;
|
||||||
extern TAILQ_HEAD(bindings_head, Binding) bindings;
|
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 SLIST_HEAD(stack_wins_head, Stack_Window) stack_wins;
|
||||||
extern xcb_event_handlers_t evenths;
|
extern xcb_event_handlers_t evenths;
|
||||||
extern int num_screens;
|
extern int num_screens;
|
||||||
|
|
|
@ -85,6 +85,15 @@ void load_configuration(const char *override_configpath) {
|
||||||
OPTION_STRING(terminal);
|
OPTION_STRING(terminal);
|
||||||
OPTION_STRING(font);
|
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) {
|
if (strcasecmp(key, "bind") == 0) {
|
||||||
#define CHECK_MODIFIER(name) \
|
#define CHECK_MODIFIER(name) \
|
||||||
if (strncasecmp(walk, #name, strlen(#name)) == 0) { \
|
if (strncasecmp(walk, #name, strlen(#name)) == 0) { \
|
||||||
|
|
10
src/mainx.c
10
src/mainx.c
|
@ -52,6 +52,9 @@ Display *xkbdpy;
|
||||||
/* The list of key bindings */
|
/* The list of key bindings */
|
||||||
struct bindings_head bindings = TAILQ_HEAD_INITIALIZER(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 */
|
/* 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);
|
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 */
|
/* check for Xinerama */
|
||||||
LOG("Checking for Xinerama...\n");
|
LOG("Checking for Xinerama...\n");
|
||||||
initialize_xinerama(conn);
|
initialize_xinerama(conn);
|
||||||
|
|
Loading…
Reference in New Issue