commit e3393d04370a30ead0448c298016e960c4ae5fa2
parent ca714eac9067a44e5e0a7136dc6077969dd961ca
Author: 0xACE <0xaced@gmail.com>
Date: Fri, 12 Jul 2019 00:45:55 +0200
Find a parent when CWD disappears
The previous behaviour would exit nnn when the CWD disappeared.
Diffstat:
| M | src/nnn.c | | | 31 | ++++++++++++++++++++++++++++--- |
1 file changed, 28 insertions(+), 3 deletions(-)
diff --git a/src/nnn.c b/src/nnn.c
@@ -3297,11 +3297,36 @@ nochange:
if (getppid() == 1)
_exit(0);
- /* Check if CWD is deleted to avoid hang, bad idea */
+ /* Check if CWD is deleted and find a existing parent */
if (access(path, F_OK)) {
DPRINTF_S("dir deleted or moved");
- cfg.badexit = 1;
- return;
+
+ /* Save last working directory */
+ xstrlcpy(lastdir, path, PATH_MAX);
+
+ /* Save history */
+ xstrlcpy(lastname, xbasename(path), NAME_MAX + 1);
+
+ xstrlcpy(newpath, path, PATH_MAX);
+ while (true) {
+ dir = visit_parent(path, newpath, &presel);
+ if (istopdir(path) || istopdir(newpath)) {
+ if (!dir)
+ dir = dirname(newpath);
+ break;
+ } else if (!dir) {
+ xstrlcpy(path, newpath, PATH_MAX);
+ continue;
+ }
+ break;
+ }
+
+ xstrlcpy(path, dir, PATH_MAX);
+
+ setdirwatch();
+ mvprintw(xlines - 1, 0, "folder disappeared\n");
+ xdelay();
+ goto begin;
}
sel = nextsel(presel);