From 0556ac14ecd6ae028dafe9645ac3bcefa8c0faf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Mon, 30 Aug 2021 16:21:04 +0200 Subject: [PATCH] [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 --- src/nnn.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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