diff --git a/terminal.c b/terminal.c index bd79bd08..f7f98407 100644 --- a/terminal.c +++ b/terminal.c @@ -601,8 +601,18 @@ term_init(const struct config *conf, struct fdm *fdm, struct wayland *wayl, .shutdown_cb = shutdown_cb, .shutdown_data = shutdown_data, .foot_exe = strdup(foot_exe), + .cwd = NULL, }; + { + size_t buf_len = 1024; + do { + term->cwd = realloc(term->cwd, buf_len); + getcwd(term->cwd, buf_len); + buf_len *= 2; + } while (errno == ERANGE); + } + initialize_color_cube(term); if (!initialize_render_workers(term)) goto err; @@ -831,7 +841,9 @@ term_destroy(struct terminal *term) free(it->item.data); tll_free(term->ptmx_buffer); tll_free(term->tab_stops); + free(term->foot_exe); + free(term->cwd); int ret = EXIT_SUCCESS; @@ -1672,6 +1684,7 @@ term_spawn_new(const struct terminal *term) if (pid2 == 0) { /* Child */ close(pipe_fds[0]); + chdir(term->cwd); execlp(term->foot_exe, term->foot_exe, NULL); write(pipe_fds[1], &errno, sizeof(errno)); _exit(errno); diff --git a/terminal.h b/terminal.h index b7a92be4..0fe4c4dc 100644 --- a/terminal.h +++ b/terminal.h @@ -316,6 +316,7 @@ struct terminal { void *shutdown_data; char *foot_exe; + char *cwd; }; struct config;