@@ -35,8 +35,9 @@ You can navigate the list using the following keybinds (hardcoded): | |||||
| l | RIGHT | ^M | open file / directory (see section "File opening") | | l | RIGHT | ^M | open file / directory (see section "File opening") | ||||
| h | LEFT | ^? | navigate up one directory | | h | LEFT | ^? | navigate up one directory | ||||
| / | & | | filter output | | / | & | | filter output | ||||
| q | | | exit program | |||||
| ! | | | spawn shell in current directory | | ! | | | spawn shell in current directory | ||||
| c | | | type and change into destination directory | |||||
| q | | | exit program | |||||
+------+-------+-------+--------------------------------------------------- | +------+-------+-------+--------------------------------------------------- | ||||
File opening | File opening | ||||
@@ -204,6 +204,7 @@ enum { | |||||
SEL_GOIN, | SEL_GOIN, | ||||
SEL_FLTR, | SEL_FLTR, | ||||
SEL_SH, | SEL_SH, | ||||
SEL_CD, | |||||
}; | }; | ||||
int | int | ||||
@@ -258,6 +259,8 @@ nextsel(int *cur, int max) | |||||
break; | break; | ||||
case '!': | case '!': | ||||
return SEL_SH; | return SEL_SH; | ||||
case 'c': | |||||
return SEL_CD; | |||||
} | } | ||||
return 0; | return 0; | ||||
@@ -604,6 +607,28 @@ nochange: | |||||
if (chdir(ipath) == -1) | if (chdir(ipath) == -1) | ||||
printwarn(); | printwarn(); | ||||
break; | 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; | |||||
} | |||||
} | } | ||||
} | } | ||||