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__
#define MSG_EMPTY_FILE 29
#define MSG_UNSUPPORTED 30
#define MSG_NOT_SET 31
-#define MSG_RANGE_SEL_ON 32
-#define MSG_DIR_CHANGED 33
-#define MSG_0_FILES 34
-#define MSG_EXISTS 35
-#define MSG_FEW_COLOUMNS 36
-#define MSG_REMOTE_OPTS 37
-#define MSG_RCLONE_DELAY 38
-#define MSG_APP_NAME 39
-#define MSG_ARCHIVE_OPTS 40
+#define MSG_DIR_CHANGED 32
+#define MSG_0_FILES 33
+#define MSG_EXISTS 34
+#define MSG_FEW_COLOUMNS 35
+#define MSG_REMOTE_OPTS 36
+#define MSG_RCLONE_DELAY 37
+#define MSG_APP_NAME 38
+#define MSG_ARCHIVE_OPTS 39
static const char * const messages[] = {
"no traversal",
"empty: edit or open with",
"unsupported file",
"not set",
- "range sel on",
"dir changed, range sel off",
"0 files",
"entry exists",
fprintf(fp, " %c: %s\n", (char)kvarr[i].key, kvarr[i].val);
}
+static void sprintkv(kv *kvarr, char *buf, uchar max)
+{
+ uchar i = 0;
+
+ for (; i < max && kvarr[i].key; ++i)
+ buf += snprintf(buf, CMD_LEN_MAX, " %c=%s", (char)kvarr[i].key, kvarr[i].val);
+}
+
/*
* The help string tokens (each line) start with a HEX value
* which indicates the number of spaces to print before the
c = cfg.apparentsz ? 'a' : 'd';
mvprintw(lastln, 0, "%d/%d [%d:%s] %cu:%s free:%s files:%lu %lldB %s",
- cur + 1, ndents, cfg.selmode, (nselected ? xitoa(nselected) : ""),
+ cur + 1, ndents, cfg.selmode,
+ (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 */
buf[sizeof(buf)-1] = '\0';
mvprintw(lastln, 0, "%d/%d [%d:%s] %s%s %s %s %s [%s]",
- cur + 1, ndents, cfg.selmode, (nselected ? xitoa(nselected) : ""),
+ cur + 1, ndents, cfg.selmode,
+ (rangesel ? "*" : (nselected ? xitoa(nselected) : "")),
sort, buf, get_lsperms(pent->mode), coolsize(pent->size), ptr, base);
}
} else
int r = -1, fd, presel, selstartid = 0, selendid = 0;
ino_t inode = 0;
enum action sel;
- bool dir_changed = FALSE, rangesel = FALSE;
+ bool dir_changed = FALSE;
struct stat sb;
char *path, *lastdir, *lastname, *dir, *tmp;
MEVENT event;
if (rangesel) { /* Range selection started */
inode = sb.st_ino;
selstartid = cur;
- printmsg(messages[MSG_RANGE_SEL_ON]);
- xdelay(XDELAY_INTERVAL_MS);
continue;
}
}
if (sel == SEL_PLUGKEY) {
+ xstrlcpy(g_buf, "pick plugin:", CMD_LEN_MAX);
+ sprintkv(plug, g_buf + strlen(g_buf), PLUGIN_MAX);
+ printprompt(g_buf);
r = get_input(NULL);
tmp = get_kv_val(plug, NULL, r, PLUGIN_MAX, FALSE);
- if (!tmp)
+ if (!tmp) {
+ clearprompt();
goto nochange;
+ }
if (tmp[0] == '_' && tmp[1]) {
xstrlcpy(newpath, ++tmp, PATH_MAX);