]> Sergey Matveev's repositories - nnn.git/commitdiff
Use env var NNNLVL to track nested level
authorArun Prakash Jana <engineerarun@gmail.com>
Wed, 6 Feb 2019 17:29:33 +0000 (22:59 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Wed, 6 Feb 2019 17:29:33 +0000 (22:59 +0530)
src/nnn.c

index 16170f22e80bcb27e3c6c984438236bd2afbe9fe..edd1e2a98fdcd40ca22ba8e4bc8c263a5250ad84 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -428,11 +428,12 @@ static const char * const messages[] = {
 #define NNN_SCRIPT 5
 #define NNN_NOTE 6
 #define NNN_TMPFILE 7
-#define NNN_USE_EDITOR 8
-#define NNN_SHOW_HIDDEN 9
-#define NNN_NO_AUTOSELECT 10
-#define NNN_RESTRICT_NAV_OPEN 11
-#define NNN_RESTRICT_0B 12
+#define NNNLVL 8 /* strings end here */
+#define NNN_USE_EDITOR 9 /* flags begin here */
+#define NNN_SHOW_HIDDEN 10
+#define NNN_NO_AUTOSELECT 11
+#define NNN_RESTRICT_NAV_OPEN 12
+#define NNN_RESTRICT_0B 13
 
 static const char * const env_cfg[] = {
        "NNN_BMS",
@@ -443,6 +444,7 @@ static const char * const env_cfg[] = {
        "NNN_SCRIPT",
        "NNN_NOTE",
        "NNN_TMPFILE",
+       "NNNLVL",
        "NNN_USE_EDITOR",
        "NNN_SHOW_HIDDEN",
        "NNN_NO_AUTOSELECT",
@@ -452,14 +454,12 @@ static const char * const env_cfg[] = {
 
 /* Required env vars */
 #define SHELL 0
-#define SHLVL 1
-#define VISUAL 2
-#define EDITOR 3
-#define PAGER 4
+#define VISUAL 1
+#define EDITOR 2
+#define PAGER 3
 
 static const char * const envs[] = {
        "SHELL",
-       "SHLVL",
        "VISUAL",
        "EDITOR",
        "PAGER",
@@ -783,8 +783,7 @@ static uint xatoi(const char *str)
        if (!str)
                return 0;
 
-       while (xisdigit(*str))
-       {
+       while (xisdigit(*str)) {
                val = val * 10 + (*str - '0');
                ++str;
        }
@@ -792,6 +791,18 @@ static uint xatoi(const char *str)
        return val;
 }
 
+static char *xitoa(uint val)
+{
+       static const char hexbuf[] = "0123456789";
+       static char ascbuf[32] = {0};
+       static int i;
+
+       for (i = 30; val && i; --i, val /= 10)
+               ascbuf[i] = hexbuf[val % 10];
+
+       return &ascbuf[++i];
+}
+
 /* Writes buflen char(s) from buf to a file */
 static void writecp(const char *buf, const size_t buflen)
 {
@@ -953,15 +964,15 @@ static bool initcurses(void)
  */
 static void spawn(const char *file, const char *arg1, const char *arg2, const char *dir, uchar flag)
 {
-       static const char *shlvl;
-       static pid_t pid;
-       static int status;
+       pid_t pid;
+       int status;
+       const char *tmp;
 
        /* Swap args if the first arg is NULL and second isn't */
        if (!arg1 && arg2) {
-               shlvl = arg1;
+               tmp = arg1;
                arg1 = arg2;
-               arg2 = shlvl;
+               arg2 = tmp;
        }
 
        if (flag & F_NORMAL)
@@ -972,13 +983,12 @@ static void spawn(const char *file, const char *arg1, const char *arg2, const ch
                if (dir != NULL)
                        status = chdir(dir);
 
-               shlvl = getenv(envs[SHLVL]);
+               tmp = getenv(env_cfg[NNNLVL]);
 
                /* Show a marker (to indicate nnn spawned shell) */
-               if (flag & F_MARKER && shlvl != NULL) {
-                       fprintf(stdout, "\n +-++-++-+\n | n n n |\n +-++-++-+\n\n");
-                       fprintf(stdout, "Next shell level: %d\n", xatoi(shlvl) + 1);
-               }
+               if (flag & F_MARKER && tmp)
+                       fprintf(stdout, "\n +-++-++-+\n | n n n |\n +-++-++-+\n\n"
+                                       "Last nnn level: %d\n", xatoi(tmp));
 
                /* Suppress stdout and stderr */
                if (flag & F_NOTRACE) {
@@ -4162,6 +4172,10 @@ int main(int argc, char *argv[])
        /* Get custom opener, if set */
        opener = xgetenv(env_cfg[NNN_OPENER], utils[OPENER]);
 
+       /* Set nnn neting level (idletimeout used as tmp var) */
+       idletimeout = xatoi(getenv(env_cfg[NNNLVL]));
+       setenv(env_cfg[NNNLVL], xitoa(++idletimeout), 1);
+
        /* Get locker wait time, if set */
        idletimeout = xatoi(getenv(env_cfg[NNN_IDLE_TIMEOUT]));
        DPRINTF_U(idletimeout);