From: Daniel Eklöf Date: Mon, 30 Aug 2021 14:21:04 +0000 (+0200) Subject: [draft] signal CWD change to terminal via OSC-7 (#1148) X-Git-Tag: v4.3~25 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=0556ac14ecd6ae028dafe9645ac3bcefa8c0faf4;p=nnn.git [draft] signal CWD change to terminal via OSC-7 (#1148) * Signal CWD change to terminal via OSC-7 Closes #1147 * Make OSC-7 emission gated by NOX11 * Use newpath variable in gethostname() Use dynamic memory for hostname --- diff --git a/src/nnn.c b/src/nnn.c index 146acbbb..fc533310 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -446,6 +446,7 @@ static char *listroot; static char *plgpath; static char *pnamebuf, *pselbuf, *findselpos; static char *mark; +static char *hostname; #ifndef NOFIFO static char *fifopath; #endif @@ -6503,6 +6504,9 @@ begin: #ifndef NOX11 if (cfg.x11 && !g_state.picker) { + /* Signal CWD change to terminal */ + printf("\033]7;file://%s%s\033\\", hostname, path); + /* Set terminal window title */ r = set_tilde_in_path(path); @@ -8113,6 +8117,8 @@ static void cleanup(void) if (cfg.x11 && !g_state.picker) { printf("\033[23;0t"); /* reset terminal window title */ fflush(stdout); + + free(hostname); } #endif free(selpath); @@ -8548,6 +8554,14 @@ int main(int argc, char *argv[]) /* Save terminal window title */ printf("\033[22;0t"); fflush(stdout); + + hostname = malloc(_POSIX_HOST_NAME_MAX + 1); + if (!hostname) { + xerror(); + return EXIT_FAILURE; + } + gethostname(hostname, _POSIX_HOST_NAME_MAX); + hostname[_POSIX_HOST_NAME_MAX] = '\0'; } #endif