plugins/preview-tabbed | 4 ++++ plugins/preview-tui | 1 + src/nnn.c | 29 ++++++++++++++++++++++------- diff --git a/plugins/preview-tabbed b/plugins/preview-tabbed index a4921786b91299ccc992818142ae4993920193ff..74f6ec5e3bb0ddc7f25432a84ace2ab4b514d870 100755 --- a/plugins/preview-tabbed +++ b/plugins/preview-tabbed @@ -133,6 +133,10 @@ if [ ! -e "$FILE" ] ; then continue fi + if [ "$FILE" = "close" ] ; then + break + fi + kill_viewer MIME="$(file -bL --mime-type "$FILE")" diff --git a/plugins/preview-tui b/plugins/preview-tui index b6788fc40e702214d275c6dc231e32b6b38a66bd..f9b8236bbc4dc5ec4101d4fb91f45ae95e5b37a3 100755 --- a/plugins/preview-tui +++ b/plugins/preview-tui @@ -389,6 +389,7 @@ while read -r selection; do if [ -n "$selection" ]; then kill "$(cat "$PREVIEWPID")" [ -p "$FIFO_UEBERZUG" ] && ueberzug_remove + [ "$selection" = "close" ] && break preview_file "$selection" printf "%s" "$selection" > "$CURSEL" fi diff --git a/src/nnn.c b/src/nnn.c index 44f297f475b0fa9fa69351453ae465e3410ffdbe..42768d9adbdb4ee30ab2dbe882d1480b48c13ebd 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -846,7 +846,7 @@ static char *load_input(int fd, const char *path); static int set_sort_flags(int r); static void statusbar(char *path); #ifndef NOFIFO -static void notify_fifo(bool force); +static void notify_fifo(bool force, bool closepreview); #endif /* Functions */ @@ -3045,7 +3045,7 @@ c = CONTROL('Q'); } else { #ifndef NOFIFO if (!g_state.fifomode) - notify_fifo(TRUE); /* Send hovered path to NNN_FIFO */ + notify_fifo(TRUE, FALSE); /* Send hovered path to NNN_FIFO */ #endif escaped = TRUE; settimeout(); @@ -5787,7 +5787,7 @@ last_curscroll = -1; } #ifndef NOFIFO -static void notify_fifo(bool force) +static void notify_fifo(bool force, bool closepreview) { if (!fifopath) return; @@ -5803,6 +5803,12 @@ return; } } + if (closepreview) { + if (write(fifofd, "close\n", 6) != 6) + xerror(); + return; + } + static struct entry lastentry; if (!force && !memcmp(&lastentry, &pdents[cur], sizeof(struct entry))) @@ -5852,7 +5858,7 @@ curscroll = MAX(curscroll, MAX(cur - (onscreen - 1), 0)); #ifndef NOFIFO if (!g_state.fifomode) - notify_fifo(FALSE); /* Send hovered path to NNN_FIFO */ + notify_fifo(FALSE, FALSE); /* Send hovered path to NNN_FIFO */ #endif } @@ -6735,7 +6741,7 @@ if (r != cur) move_cursor(r, 1); #ifndef NOFIFO else if ((event.bstate == BUTTON1_PRESSED) && !g_state.fifomode) - notify_fifo(TRUE); /* Send clicked path to NNN_FIFO */ + notify_fifo(TRUE, FALSE); /* Send clicked path to NNN_FIFO */ #endif /* Handle right click selection */ if (event.bstate == BUTTON3_PRESSED) { @@ -6808,7 +6814,7 @@ goto nochange; } #ifndef NOFIFO if (g_state.fifomode && (sel == SEL_OPEN)) { - notify_fifo(TRUE); /* Send opened path to NNN_FIFO */ + notify_fifo(TRUE, FALSE); /* Send opened path to NNN_FIFO */ goto nochange; } #endif @@ -6890,6 +6896,9 @@ && get_output("file", "-bL", newpath, -1, FALSE, FALSE) && strstr(g_buf, "text") #endif ) { +#ifndef NOFIFO + notify_fifo(FALSE, TRUE); +#endif spawn(editor, newpath, NULL, NULL, F_CLI); if (cfg.filtermode) { presel = FILTER; @@ -6942,6 +6951,9 @@ } } /* Invoke desktop opener as last resort */ +#ifndef NOFIFO + notify_fifo(FALSE, TRUE); +#endif spawn(opener, newpath, NULL, NULL, opener_flags); /* Move cursor to the next entry if not the last entry */ @@ -7198,6 +7210,9 @@ presel = FILTER; copycurname(); goto nochange; case SEL_EDIT: +#ifndef NOFIFO + notify_fifo(FALSE, TRUE); +#endif spawn(editor, newpath, NULL, NULL, F_CLI); continue; default: /* SEL_LOCK */ @@ -8681,7 +8696,7 @@ #endif #ifndef NOFIFO if (!g_state.fifomode) - notify_fifo(FALSE); + notify_fifo(FALSE, FALSE); if (fifofd != -1) close(fifofd); #endif