[git commit] lineedit: search applets as well as PATH for tab completion
Denys Vlasenko
vda.linux at googlemail.com
Fri Oct 30 18:49:33 UTC 2015
commit: http://git.busybox.net/busybox/commit/?id=f23264b35f5bb138c6c3676079251e71bee42c8a
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master
In standalone shell mode search the applet table as well as PATH
when tab completing a command.
Use a stupid linear search: we're also about to read all the
directories on PATH so efficiency isn't a big concern.
function old new delta
add_match - 53 +53
complete_cmd_dir_file 687 724 +37
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/0 up/down: 90/0) Total: 90 bytes
Signed-off-by: Ron Yorston <rmy at frippery.org>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
libbb/lineedit.c | 17 ++++++++++++++++-
1 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/libbb/lineedit.c b/libbb/lineedit.c
index a83e07c..2ddb2b6 100644
--- a/libbb/lineedit.c
+++ b/libbb/lineedit.c
@@ -47,7 +47,8 @@
* It stems from simplistic "cmdedit_y = cmdedit_prmt_len / cmdedit_termw"
* calculation of how many lines the prompt takes.
*/
-#include "libbb.h"
+#include "busybox.h"
+#include "NUM_APPLETS.h"
#include "unicode.h"
#ifndef _POSIX_VDISABLE
# define _POSIX_VDISABLE '\0'
@@ -774,6 +775,20 @@ static NOINLINE unsigned complete_cmd_dir_file(const char *command, int type)
}
pf_len = strlen(pfind);
+#if ENABLE_FEATURE_SH_STANDALONE && NUM_APPLETS != 1
+ if (type == FIND_EXE_ONLY) {
+ const char *p = applet_names;
+
+ i = 0;
+ while (i < NUM_APPLETS) {
+ if (strncmp(pfind, p, pf_len) == 0)
+ add_match(xstrdup(p));
+ p += strlen(p) + 1;
+ i++;
+ }
+ }
+#endif
+
for (i = 0; i < npaths; i++) {
DIR *dir;
struct dirent *next;
More information about the busybox-cvs
mailing list