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

Reply via email to