When tab-completing a command we search PATH if the partial text doesn't include a slash. Also match subdirectories of the current directory, in case the user intends to run a binary from one of them.
function old new delta complete_cmd_dir_file 894 917 +23 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 23/0) Total: 23 bytes Signed-off-by: Ron Yorston <r...@pobox.com> --- libbb/lineedit.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libbb/lineedit.c b/libbb/lineedit.c index d64d7d0c2..5eb701f00 100644 --- a/libbb/lineedit.c +++ b/libbb/lineedit.c @@ -753,7 +753,7 @@ static int path_parse(char ***p) return 1; tmp = (char*)pth; - npth = 1; /* path component count */ + npth = 2; /* path component count */ while (1) { tmp = strchr(tmp, ':'); if (!tmp) @@ -776,6 +776,8 @@ static int path_parse(char ***p) break; /* :<empty> */ res[npth++] = tmp; } + /* special case: match subdirectories of the current directory */ + res[npth++] = NULL; return npth; } @@ -843,6 +845,11 @@ static NOINLINE unsigned complete_cmd_dir_file(const char *command, int type) struct stat st; char *found; + if (paths[i] == NULL) { + type = FIND_DIR_ONLY; + paths[i] = (char *)"."; + } + dir = opendir(paths[i]); if (!dir) continue; /* don't print an error */ -- 2.29.2 _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox