diff --git a/include/i3.h b/include/i3.h index 9acf2c65..41ccbf6b 100644 --- a/include/i3.h +++ b/include/i3.h @@ -20,6 +20,7 @@ #define NUM_ATOMS 9 +extern char *application_path; extern Display *xkbdpy; extern TAILQ_HEAD(bindings_head, Binding) bindings; extern SLIST_HEAD(stack_wins_head, Stack_Window) stack_wins; diff --git a/src/commands.c b/src/commands.c index 38ce6ef1..0871baf8 100644 --- a/src/commands.c +++ b/src/commands.c @@ -347,6 +347,13 @@ void parse_command(xcb_connection_t *conn, const char *command) { return; } + /* Is it ? */ + if (strncmp(command, "restart", strlen("restart")) == 0) { + printf("restarting \"%s\"...\n", application_path); + execl(application_path, application_path, NULL); + /* not reached */ + } + /* Is it 'f' for fullscreen? */ if (command[0] == 'f') { if (CUR_CELL->currently_focused == NULL) diff --git a/src/mainx.c b/src/mainx.c index ef431220..84150e78 100644 --- a/src/mainx.c +++ b/src/mainx.c @@ -44,6 +44,9 @@ #include "xinerama.h" #include "i3.h" +/* This is the path to i3, copied from argv[0] when starting up */ +char *application_path; + /* This is our connection to X11 for use with XKB */ Display *xkbdpy; @@ -279,6 +282,8 @@ int main(int argc, char *argv[], char *env[]) { xcb_window_t root; xcb_intern_atom_cookie_t atom_cookies[NUM_ATOMS]; + application_path = sstrdup(argv[0]); + /* Initialize the table data structures for each workspace */ init_table();