]> Sergey Matveev's repositories - nnn.git/commitdiff
[draft] signal CWD change to terminal via OSC-7 (#1148)
authorDaniel Eklöf <daniel@ekloef.se>
Mon, 30 Aug 2021 14:21:04 +0000 (16:21 +0200)
committerArun Prakash Jana <engineerarun@gmail.com>
Mon, 30 Aug 2021 14:44:05 +0000 (20:14 +0530)
* 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

index 146acbbbe492c0062200f7fbc3426fec6f6a7406..fc5333108f4735c73f3de7533526ce4facc7568d 100644 (file)
--- 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