mirror of
https://github.com/jarun/nnn.git
synced 2024-11-28 05:41:31 +00:00
Show prompt for bookmark selection (#409)
* Cleanup unused MSG_ * Print only plugin keys * Speed up preparing keys prompt * Show prompt for bookmarks * Don't error when user interactively pressed non-existent bookmark key
This commit is contained in:
parent
75061367be
commit
99128ab5c9
106
src/nnn.c
106
src/nnn.c
|
@ -422,49 +422,48 @@ static char * const utils[] = {
|
||||||
/* Common strings */
|
/* Common strings */
|
||||||
#define MSG_NO_TRAVERSAL 0
|
#define MSG_NO_TRAVERSAL 0
|
||||||
#define MSG_INVBM_KEY 1
|
#define MSG_INVBM_KEY 1
|
||||||
#define STR_DATE_ID 2
|
#define STR_TMPFILE 2
|
||||||
#define STR_TMPFILE 3
|
#define MSG_0_SELECTED 3
|
||||||
#define MSG_0_SELECTED 4
|
#define MSG_UTIL_MISSING 4
|
||||||
#define MSG_UTIL_MISSING 5
|
#define MSG_FAILED 5
|
||||||
#define MSG_FAILED 6
|
#define MSG_SSN_NAME 6
|
||||||
#define MSG_SSN_NAME 7
|
#define MSG_CP_MV_AS 7
|
||||||
#define MSG_CP_MV_AS 8
|
#define MSG_CUR_SEL_OPTS 8
|
||||||
#define MSG_CUR_SEL_OPTS 9
|
#define MSG_FORCE_RM 9
|
||||||
#define MSG_FORCE_RM 10
|
#define MSG_CREATE_CTX 10
|
||||||
#define MSG_CREATE_CTX 11
|
#define MSG_NEW_OPTS 11
|
||||||
#define MSG_NEW_OPTS 12
|
#define MSG_CLI_MODE 12
|
||||||
#define MSG_CLI_MODE 13
|
#define MSG_OVERWRITE 13
|
||||||
#define MSG_OVERWRITE 14
|
#define MSG_SSN_OPTS 14
|
||||||
#define MSG_SSN_OPTS 15
|
#define MSG_QUIT_ALL 15
|
||||||
#define MSG_QUIT_ALL 16
|
#define MSG_HOSTNAME 16
|
||||||
#define MSG_HOSTNAME 17
|
#define MSG_ARCHIVE_NAME 17
|
||||||
#define MSG_ARCHIVE_NAME 18
|
#define MSG_OPEN_WITH 18
|
||||||
#define MSG_OPEN_WITH 19
|
#define MSG_REL_PATH 19
|
||||||
#define MSG_REL_PATH 20
|
#define MSG_LINK_SUFFIX 20
|
||||||
#define MSG_LINK_SUFFIX 21
|
#define MSG_COPY_NAME 21
|
||||||
#define MSG_COPY_NAME 22
|
#define MSG_CONTINUE 22
|
||||||
#define MSG_CONTINUE 23
|
#define MSG_SEL_MISSING 23
|
||||||
#define MSG_SEL_MISSING 24
|
#define MSG_ACCESS 24
|
||||||
#define MSG_ACCESS 25
|
#define MSG_0_CREATED 25
|
||||||
#define MSG_0_CREATED 26
|
#define MSG_NOT_REG_FILE 26
|
||||||
#define MSG_NOT_REG_FILE 27
|
#define MSG_PERM_DENIED 27
|
||||||
#define MSG_PERM_DENIED 28
|
#define MSG_EMPTY_FILE 28
|
||||||
#define MSG_EMPTY_FILE 29
|
#define MSG_UNSUPPORTED 29
|
||||||
#define MSG_UNSUPPORTED 30
|
#define MSG_NOT_SET 30
|
||||||
#define MSG_NOT_SET 31
|
#define MSG_DIR_CHANGED 31
|
||||||
#define MSG_DIR_CHANGED 32
|
#define MSG_EXISTS 32
|
||||||
#define MSG_0_FILES 33
|
#define MSG_FEW_COLUMNS 33
|
||||||
#define MSG_EXISTS 34
|
#define MSG_REMOTE_OPTS 34
|
||||||
#define MSG_FEW_COLOUMNS 35
|
#define MSG_RCLONE_DELAY 35
|
||||||
#define MSG_REMOTE_OPTS 36
|
#define MSG_APP_NAME 36
|
||||||
#define MSG_RCLONE_DELAY 37
|
#define MSG_ARCHIVE_OPTS 37
|
||||||
#define MSG_APP_NAME 38
|
#define MSG_PLUGIN_KEYS 38
|
||||||
#define MSG_ARCHIVE_OPTS 39
|
#define MSG_BOOKMARK_KEYS 39
|
||||||
|
|
||||||
static const char * const messages[] = {
|
static const char * const messages[] = {
|
||||||
"no traversal",
|
"no traversal",
|
||||||
"invalid key",
|
"invalid key",
|
||||||
"%F %T %z",
|
|
||||||
"/.nnnXXXXXX",
|
"/.nnnXXXXXX",
|
||||||
"0 selected",
|
"0 selected",
|
||||||
"missing util",
|
"missing util",
|
||||||
|
@ -495,13 +494,14 @@ static const char * const messages[] = {
|
||||||
"unsupported file",
|
"unsupported file",
|
||||||
"not set",
|
"not set",
|
||||||
"dir changed, range sel off",
|
"dir changed, range sel off",
|
||||||
"0 files",
|
|
||||||
"entry exists",
|
"entry exists",
|
||||||
"too few columns!",
|
"too few columns!",
|
||||||
"'s'shfs / 'r'clone?",
|
"'s'shfs / 'r'clone?",
|
||||||
"may take a while, try refresh",
|
"may take a while, try refresh",
|
||||||
"app name: ",
|
"app name: ",
|
||||||
"e'x'tract / 'l'ist / 'm'ount?",
|
"e'x'tract / 'l'ist / 'm'ount?",
|
||||||
|
"plugin keys:",
|
||||||
|
"bookmark keys:",
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Supported configuration environment variables */
|
/* Supported configuration environment variables */
|
||||||
|
@ -3434,12 +3434,17 @@ static void printkv(kv *kvarr, FILE *fp, uchar max)
|
||||||
fprintf(fp, " %c: %s\n", (char)kvarr[i].key, kvarr[i].val);
|
fprintf(fp, " %c: %s\n", (char)kvarr[i].key, kvarr[i].val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sprintkv(kv *kvarr, char *buf, uchar max)
|
static void sprintkeys(kv *kvarr, char *buf, uchar max)
|
||||||
{
|
{
|
||||||
uchar i = 0;
|
uchar i = 0;
|
||||||
|
uchar j = 0;
|
||||||
|
|
||||||
for (; i < max && kvarr[i].key; ++i)
|
for (; i < max && kvarr[i].key; ++i, j+=2) {
|
||||||
buf += snprintf(buf, CMD_LEN_MAX, " %c=%s", (char)kvarr[i].key, kvarr[i].val);
|
buf[j] = ' ';
|
||||||
|
buf[j+1] = kvarr[i].key;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf[j] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -4034,7 +4039,7 @@ static void redraw(char *path)
|
||||||
|
|
||||||
/* Fail redraw if < than 10 columns, context info prints 10 chars */
|
/* Fail redraw if < than 10 columns, context info prints 10 chars */
|
||||||
if (ncols < MIN_DISPLAY_COLS) {
|
if (ncols < MIN_DISPLAY_COLS) {
|
||||||
printmsg(messages[MSG_FEW_COLOUMNS]);
|
printmsg(messages[MSG_FEW_COLUMNS]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4568,6 +4573,9 @@ nochange:
|
||||||
fd = sel - SEL_CTX1 + '1';
|
fd = sel - SEL_CTX1 + '1';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
xstrlcpy(g_buf, messages[MSG_BOOKMARK_KEYS], CMD_LEN_MAX);
|
||||||
|
sprintkeys(bookmark, g_buf + strlen(g_buf), BM_MAX);
|
||||||
|
printprompt(g_buf);
|
||||||
fd = get_input(NULL);
|
fd = get_input(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4628,12 +4636,14 @@ nochange:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!get_kv_val(bookmark, newpath, fd, BM_MAX, TRUE)) {
|
if (!get_kv_val(bookmark, newpath, fd, BM_MAX, TRUE)) {
|
||||||
printwait(messages[MSG_INVBM_KEY], &presel);
|
clearprompt();
|
||||||
goto nochange;
|
goto nochange;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!xdiraccess(newpath))
|
if (!xdiraccess(newpath)) {
|
||||||
|
printwait(messages[MSG_ACCESS], &presel);
|
||||||
goto nochange;
|
goto nochange;
|
||||||
|
}
|
||||||
|
|
||||||
if (strcmp(path, newpath) == 0)
|
if (strcmp(path, newpath) == 0)
|
||||||
break;
|
break;
|
||||||
|
@ -5194,8 +5204,8 @@ nochange:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sel == SEL_PLUGKEY) {
|
if (sel == SEL_PLUGKEY) {
|
||||||
xstrlcpy(g_buf, "pick plugin:", CMD_LEN_MAX);
|
xstrlcpy(g_buf, messages[MSG_PLUGIN_KEYS], CMD_LEN_MAX);
|
||||||
sprintkv(plug, g_buf + strlen(g_buf), PLUGIN_MAX);
|
sprintkeys(plug, g_buf + strlen(g_buf), PLUGIN_MAX);
|
||||||
printprompt(g_buf);
|
printprompt(g_buf);
|
||||||
r = get_input(NULL);
|
r = get_input(NULL);
|
||||||
tmp = get_kv_val(plug, NULL, r, PLUGIN_MAX, FALSE);
|
tmp = get_kv_val(plug, NULL, r, PLUGIN_MAX, FALSE);
|
||||||
|
|
Loading…
Reference in a new issue