1
1

Add $NCDU_LEVEL environment variable when spawning a shell

Similar to $SHLVL and $RANGER_LEVEL.
Этот коммит содержится в:
Yorhel 2021-05-12 16:30:31 +02:00
родитель e278660464
Коммит a6b4aead43
2 изменённых файлов: 23 добавлений и 0 удалений

Просмотреть файл

@ -287,6 +287,12 @@ run ncdu as follows:
export NCDU_SHELL=vifm
ncdu
Ncdu will set the C<NCDU_LEVEL> environment variable or increment it before
spawning the shell. This variable allows you to detect when your shell is
running from within ncdu, which can be useful to avoid nesting multiple
instances of ncdu. Ncdu itself does not (currently) warn when attempting to run
nested instances.
=item q
Quit

Просмотреть файл

@ -34,6 +34,22 @@
#include <unistd.h>
#include <sys/wait.h>
static void set_level(void) {
static int done = 0;
char nlvl[2];
if(done)
return;
const char *lvl = getenv("NCDU_LEVEL");
// too lazy to count beyond 9
if(lvl && *lvl >= '1' && *lvl < '9' && lvl[1] == 0) {
nlvl[0] = 1 + *lvl;
nlvl[1] = 0;
setenv("NCDU_LEVEL", nlvl, 1);
} else
setenv("NCDU_LEVEL", "1", 1);
done++;
}
void shell_draw() {
const char *full_path;
int res;
@ -59,6 +75,7 @@ void shell_draw() {
shell = DEFAULT_SHELL;
}
set_level();
res = system(shell);
/* resume ncurses mode */