commit feea0a18b2833760037b56d868248d9b694b4181
parent 9ad468ee08ef9501bb62f866aaae887449bcd221
Author: Arun Prakash Jana <engineerarun@gmail.com>
Date: Sat, 18 Apr 2026 21:00:49 +0530
Revert "Support dir syncing with spawned shell"
This reverts commit 52a61a7a040f97173d222251741b9e9c37c9a801.
Diffstat:
| M | src/nnn.c | | | 97 | +------------------------------------------------------------------------------ |
1 file changed, 1 insertion(+), 96 deletions(-)
diff --git a/src/nnn.c b/src/nnn.c
@@ -6801,103 +6801,8 @@ static bool handle_cmd(enum action sel, char *path, char *newpath, char *lastdir
int r = tmp ? atoi(tmp) : 0;
setenv(env_cfg[NNNLVL], xitoa(r + 1), 1);
-
- /* Spawn shell and track CWD changes */
- alignas(max_align_t) char cwdfile[TMP_LEN_MAX];
- xstrsncpy(cwdfile, g_tmpfpath, tmpfplen);
- xstrsncpy(cwdfile + tmpfplen - 1, "/.nnnshellcwd", TMP_LEN_MAX - tmpfplen);
-
- unlink(cwdfile);
-
- const char *shellbase = xbasename(shell);
- int rcfd = create_tmp_file();
-
- if (rcfd >= 0) {
- alignas(max_align_t) char initscript[PATH_MAX + TMP_LEN_MAX + 128];
- int len;
-
- if (strcmp(shellbase, "bash") == 0)
- len = snprintf(initscript, sizeof(initscript),
- "[ -f ~/.bashrc ] && . ~/.bashrc\ntrap 'pwd > \"%s\"' EXIT\n", cwdfile);
- else if (strcmp(shellbase, "zsh") == 0)
- len = snprintf(initscript, sizeof(initscript),
- "[ -f \"${ZDOTDIR_ORIG:-$HOME}/.zshrc\" ] && "
- ". \"${ZDOTDIR_ORIG:-$HOME}/.zshrc\"\n"
- "trap 'pwd > \"%s\"' EXIT\n", cwdfile);
- else
- len = 0;
-
- if (len > 0) {
- ssize_t wret = write(rcfd, initscript, len);
- close(rcfd);
-
- if (wret <= 0) {
- spawn(shell, NULL, NULL, NULL, F_CLI);
- } else if (strcmp(shellbase, "bash") == 0) {
- spawn(shell, "--rcfile", g_tmpfpath, NULL, F_CLI);
- } else if (strcmp(shellbase, "zsh") == 0) {
- /* Create temp ZDOTDIR with .zshrc */
- alignas(max_align_t) char zdotdir[TMP_LEN_MAX];
- xstrsncpy(zdotdir, g_tmpfpath, tmpfplen);
- xstrsncpy(zdotdir + tmpfplen - 1, "/.nnnzsh", TMP_LEN_MAX - tmpfplen);
- mkdir(zdotdir, 0700);
-
- /* Move temp rcfile to ZDOTDIR/.zshrc */
- alignas(max_align_t) char zshrc[TMP_LEN_MAX + 16];
- snprintf(zshrc, sizeof(zshrc), "%s/.zshrc", zdotdir);
- rename(g_tmpfpath, zshrc);
-
- char *oldzdotdir = getenv("ZDOTDIR");
- char savedzdotdir[PATH_MAX];
- if (oldzdotdir)
- xstrsncpy(savedzdotdir, oldzdotdir, PATH_MAX);
-
- setenv("ZDOTDIR_ORIG", oldzdotdir ? oldzdotdir : home, 1);
- setenv("ZDOTDIR", zdotdir, 1);
- spawn(shell, NULL, NULL, NULL, F_CLI);
-
- /* Restore ZDOTDIR */
- if (oldzdotdir)
- setenv("ZDOTDIR", savedzdotdir, 1);
- else
- unsetenv("ZDOTDIR");
- unsetenv("ZDOTDIR_ORIG");
-
- unlink(zshrc);
- rmdir(zdotdir);
- }
- } else {
- close(rcfd);
- spawn(shell, NULL, NULL, NULL, F_CLI);
- }
-
- unlink(g_tmpfpath);
- } else
- spawn(shell, NULL, NULL, NULL, F_CLI);
-
+ spawn(shell, NULL, NULL, NULL, F_CLI);
setenv(env_cfg[NNNLVL], xitoa(r), 1);
-
- /* Sync nnn directory with shell CWD */
- int fd = open(cwdfile, O_RDONLY);
- if (fd >= 0) {
- ssize_t n = read(fd, newpath, PATH_MAX - 1);
- close(fd);
- unlink(cwdfile);
-
- if (n > 0) {
- /* Strip trailing newline */
- if (newpath[n - 1] == '\n')
- --n;
- newpath[n] = '\0';
-
- if (strcmp(path, newpath) != 0 && xdiraccess(newpath)) {
- xstrsncpy(lastdir, path, PATH_MAX);
- xstrsncpy(path, newpath, PATH_MAX);
- clearfilter();
- }
- }
- }
-
return TRUE;
}