diff --git a/src/nnn.c b/src/nnn.c index 57432d99..124b0cd4 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -331,8 +331,6 @@ static kv bookmark[BM_MAX]; static kv plug[PLUGIN_MAX]; static uchar g_tmpfplen; static uchar blk_shift = BLK_SHIFT_512; -static bool interrupted = FALSE; -static bool rangesel = FALSE; /* Retain old signal handlers */ #ifdef __linux__ @@ -353,8 +351,14 @@ static char g_tmpfpath[TMP_LEN_MAX] __attribute__ ((aligned)); /* Buffer to store plugins control pipe location */ static char g_pipepath[TMP_LEN_MAX] __attribute__ ((aligned)); +/* MISC NON-PERSISTENT INTERNAL BINARY STATES */ + /* Plugin control initialization status */ -static bool g_plinit = FALSE; +#define STATE_PLUGIN_INIT 0x1 +#define STATE_INTERRUPTED 0x2 +#define STATE_RANGESEL 0x4 + +static uchar g_states; /* Options to identify file mime */ #if defined(__APPLE__) @@ -604,7 +608,7 @@ static void sigint_handler(int sig) { (void) sig; - interrupted = TRUE; + g_states |= STATE_INTERRUPTED; } static uint xatoi(const char *str) @@ -3607,9 +3611,9 @@ static bool run_selected_plugin(char **path, const char *file, char *newpath, ch if (*file == '_') return run_cmd_as_plugin(*path, file, newpath, runfile); - if (!g_plinit) { + if (!(g_states & STATE_PLUGIN_INIT)) { plctrl_init(); - g_plinit = TRUE; + g_states |= STATE_PLUGIN_INIT; } fd = open(g_pipepath, O_RDONLY | O_NONBLOCK); @@ -3796,7 +3800,7 @@ static int dentfill(char *path, struct entry **dents) dir_blocks += dirwalk(buf, &sb); - if (interrupted) { + if (g_states & STATE_INTERRUPTED) { closedir(dirp); return n; } @@ -3893,7 +3897,7 @@ static int dentfill(char *path, struct entry **dents) else num_files = num_saved; - if (interrupted) { + if (g_states & STATE_INTERRUPTED) { closedir(dirp); return n; } @@ -4189,7 +4193,7 @@ static void redraw(char *path) mvprintw(lastln, 0, "%d/%d [%d:%s] %cu:%s free:%s files:%lu %lldB %s", cur + 1, ndents, cfg.selmode, - (rangesel ? "*" : (nselected ? xitoa(nselected) : "")), + ((g_states & STATE_RANGESEL) ? "*" : (nselected ? xitoa(nselected) : "")), c, buf, coolsize(get_fs_info(path, FREE)), num_files, (ll)pent->blocks << blk_shift, ptr); } else { /* light or detail mode */ @@ -4203,7 +4207,7 @@ static void redraw(char *path) mvprintw(lastln, 0, "%d/%d [%d:%s] %s%s %s %s %s [%s]", cur + 1, ndents, cfg.selmode, - (rangesel ? "*" : (nselected ? xitoa(nselected) : "")), + ((g_states & STATE_RANGESEL) ? "*" : (nselected ? xitoa(nselected) : "")), sort, buf, get_lsperms(pent->mode), coolsize(pent->size), ptr, base); } } else @@ -4280,8 +4284,8 @@ begin: printwarn(&presel); populate(path, lastname); - if (interrupted) { - interrupted = FALSE; + if (g_states & STATE_INTERRUPTED) { + g_states &= ~STATE_INTERRUPTED; cfg.apparentsz = 0; cfg.blkorder = 0; blk_shift = BLK_SHIFT_512; @@ -4870,8 +4874,8 @@ nochange: goto nochange; startselection(); - if (rangesel) - rangesel = FALSE; + if (g_states & STATE_RANGESEL) + g_states &= ~STATE_RANGESEL; /* Toggle selection status */ dents[cur].flags ^= FILE_SELECTED; @@ -4904,14 +4908,14 @@ nochange: goto nochange; startselection(); - rangesel ^= TRUE; + g_states ^= STATE_RANGESEL; if (stat(path, &sb) == -1) { printwarn(&presel); goto nochange; } - if (rangesel) { /* Range selection started */ + if (g_states & STATE_RANGESEL) { /* Range selection started */ inode = sb.st_ino; selstartid = cur; continue; @@ -4941,8 +4945,8 @@ nochange: goto nochange; startselection(); - if (rangesel) - rangesel = FALSE; + if (g_states & STATE_RANGESEL) + g_states &= ~STATE_RANGESEL; selstartid = 0; selendid = ndents - 1;