Use a fixed key , for pinning dir

This commit is contained in:
Arun Prakash Jana 2019-12-25 15:56:50 +05:30
parent 278fcfdfc9
commit 4d17b82950
No known key found for this signature in database
GPG key ID: A75979F35C080412

View file

@ -327,7 +327,7 @@ static struct entry *dents;
static blkcnt_t ent_blocks; static blkcnt_t ent_blocks;
static blkcnt_t dir_blocks; static blkcnt_t dir_blocks;
static ulong num_files; static ulong num_files;
static kv bookmark[BM_MAX]; static kv bookmark[BM_MAX + 1];
static kv plug[PLUGIN_MAX]; static kv plug[PLUGIN_MAX];
static uchar g_tmpfplen; static uchar g_tmpfplen;
static uchar blk_shift = BLK_SHIFT_512; static uchar blk_shift = BLK_SHIFT_512;
@ -4215,7 +4215,6 @@ static void redraw(char *path)
static void browse(char *ipath, const char *session) static void browse(char *ipath, const char *session)
{ {
char newpath[PATH_MAX] __attribute__ ((aligned)); char newpath[PATH_MAX] __attribute__ ((aligned));
char mark[PATH_MAX] __attribute__ ((aligned));
char rundir[PATH_MAX] __attribute__ ((aligned)); char rundir[PATH_MAX] __attribute__ ((aligned));
char runfile[NAME_MAX + 1] __attribute__ ((aligned)); char runfile[NAME_MAX + 1] __attribute__ ((aligned));
char *path, *lastdir, *lastname, *dir, *tmp; char *path, *lastdir, *lastname, *dir, *tmp;
@ -4244,7 +4243,7 @@ static void browse(char *ipath, const char *session)
g_ctx[0].c_cfg = cfg; /* current configuration */ g_ctx[0].c_cfg = cfg; /* current configuration */
} }
newpath[0] = rundir[0] = runfile[0] = mark[0] = '\0'; newpath[0] = rundir[0] = runfile[0] = '\0';
presel = cfg.filtermode ? FILTER : 0; presel = cfg.filtermode ? FILTER : 0;
@ -4637,16 +4636,14 @@ nochange:
r = get_input(NULL); r = get_input(NULL);
if (!get_kv_val(bookmark, newpath, r, BM_MAX, TRUE)) { if (!get_kv_val(bookmark, newpath, r, BM_MAX, TRUE)) {
if (r == ',' && mark[0]) if (r == ',' && bookmark[BM_MAX].val)
xstrlcpy(newpath, mark, PATH_MAX); xstrlcpy(newpath, bookmark[BM_MAX].val, PATH_MAX);
else { else {
printwait(messages[MSG_INVALID_KEY], &presel);; printwait(messages[MSG_INVALID_KEY], &presel);;
goto nochange; goto nochange;
} }
} }
if (!xdiraccess(newpath)) { if (!xdiraccess(newpath)) {
printwait(messages[MSG_ACCESS], &presel); printwait(messages[MSG_ACCESS], &presel);
goto nochange; goto nochange;
@ -4667,8 +4664,9 @@ nochange:
setdirwatch(); setdirwatch();
goto begin; goto begin;
case SEL_PIN: case SEL_PIN:
xstrlcpy(mark, path, PATH_MAX); bookmark[BM_MAX].val = xrealloc(bookmark[BM_MAX].val, strlen(path));
printwait(mark, &presel); xstrlcpy(bookmark[BM_MAX].val, path, PATH_MAX);
printwait(bookmark[BM_MAX].val, &presel);
goto nochange; goto nochange;
case SEL_FLTR: case SEL_FLTR:
/* Unwatch dir if we are still in a filtered view */ /* Unwatch dir if we are still in a filtered view */
@ -5603,6 +5601,7 @@ static void cleanup(void)
free(cfgdir); free(cfgdir);
free(initpath); free(initpath);
free(bmstr); free(bmstr);
free(bookmark[BM_MAX].val);
free(pluginstr); free(pluginstr);
unlink(g_pipepath); unlink(g_pipepath);
@ -5742,6 +5741,7 @@ int main(int argc, char *argv[])
fprintf(stderr, "%s\n", env_cfg[NNN_BMS]); fprintf(stderr, "%s\n", env_cfg[NNN_BMS]);
return _FAILURE; return _FAILURE;
} }
bookmark[BM_MAX].key = ','; /* Set key for pinned dir */
/* Parse plugins string */ /* Parse plugins string */
if (!parsekvpair(plug, &pluginstr, "NNN_PLUG", PLUGIN_MAX)) { if (!parsekvpair(plug, &pluginstr, "NNN_PLUG", PLUGIN_MAX)) {