From 61bc5cd817ca25f2a1b2c3d10f739772376d1dbe Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 21 Oct 2014 15:13:21 +0100 Subject: [PATCH] Add 'c' command to change into a destination directory by typing the path --- README | 3 ++- noice.c | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/README b/README index a023074a..c43bf087 100644 --- a/README +++ b/README @@ -35,8 +35,9 @@ You can navigate the list using the following keybinds (hardcoded): | l | RIGHT | ^M | open file / directory (see section "File opening") | h | LEFT | ^? | navigate up one directory | / | & | | filter output -| q | | | exit program | ! | | | spawn shell in current directory +| c | | | type and change into destination directory +| q | | | exit program +------+-------+-------+--------------------------------------------------- File opening diff --git a/noice.c b/noice.c index b15a5edf..ba2774ae 100644 --- a/noice.c +++ b/noice.c @@ -204,6 +204,7 @@ enum { SEL_GOIN, SEL_FLTR, SEL_SH, + SEL_CD, }; int @@ -258,6 +259,8 @@ nextsel(int *cur, int max) break; case '!': return SEL_SH; + case 'c': + return SEL_CD; } return 0; @@ -604,6 +607,28 @@ nochange: if (chdir(ipath) == -1) printwarn(); break; + case SEL_CD: + /* Read target dir */ + printmsg(""); + move(LINES - 1, 0); + printw("chdir: "); + tmp = readln(); + if (tmp == NULL) { + printmsg(""); + goto nochange; + } + if (testopendir(tmp) == 0) { + printwarn(); + goto nochange; + } else { + free(path); + path = strdup(tmp); + free(filter); + filter = strdup(ifilter); /* Reset filter */ + DPRINTF_S(path); + cur = 0; + goto out; + } } }