Applied, thank you.
On Thu, Apr 13, 2023 at 1:56 PM Ron Yorston <[email protected]> wrote: > > Since commit 9e2a5668f (ash,hush: allow builtins to be tab-completed, > closes 7532) ash and hush have supported tab completion of builtins. > > Other shells, bash and ksh for example, also support tab completion > of functions and aliases. > > Add such support to ash and hush. > > function old new delta > ash_command_name - 98 +98 > hush_command_name - 71 +71 > ash_builtin_name 17 - -17 > hush_builtin_name 38 - -38 > ------------------------------------------------------------------------------ > (add/remove: 2/2 grow/shrink: 0/0 up/down: 169/-55) Total: 114 bytes > > Signed-off-by: Ron Yorston <[email protected]> > Signed-off-by: Avi Halachmi <[email protected]> > --- > shell/ash.c | 30 ++++++++++++++++++++++++++---- > shell/hush.c | 11 +++++++++-- > 2 files changed, 35 insertions(+), 6 deletions(-) > > diff --git a/shell/ash.c b/shell/ash.c > index d4ee4c93e..055f5ff73 100644 > --- a/shell/ash.c > +++ b/shell/ash.c > @@ -9732,7 +9732,7 @@ evalpipe(union node *n, int flags) > > /* setinteractive needs this forward reference */ > #if ENABLE_FEATURE_TAB_COMPLETION > -static const char *get_builtin_name(int i) FAST_FUNC; > +static const char *ash_command_name(int i) FAST_FUNC; > #endif > > /* > @@ -9769,7 +9769,7 @@ setinteractive(int on) > if (!line_input_state) { > line_input_state = new_line_input_t(FOR_SHELL | > WITH_PATH_LOOKUP); > # if ENABLE_FEATURE_TAB_COMPLETION > - line_input_state->get_exe_name = get_builtin_name; > + line_input_state->get_exe_name = ash_command_name; > # endif > # if EDITING_HAS_sh_get_var > line_input_state->sh_get_var = lookupvar; > @@ -10284,9 +10284,31 @@ find_builtin(const char *name) > > #if ENABLE_FEATURE_TAB_COMPLETION > static const char * FAST_FUNC > -get_builtin_name(int i) > +ash_command_name(int i) > { > - return /*i >= 0 &&*/ i < ARRAY_SIZE(builtintab) ? builtintab[i].name > + 1 : NULL; > + int n; > + > + if (/*i >= 0 &&*/ i < ARRAY_SIZE(builtintab)) > + return builtintab[i].name + 1; > + i -= ARRAY_SIZE(builtintab); > + > + for (n = 0; n < CMDTABLESIZE; n++) { > + for (struct tblentry *cmdp = cmdtable[n]; cmdp; cmdp = > cmdp->next) { > + if (cmdp->cmdtype == CMDFUNCTION && i-- <= 0) > + return cmdp->cmdname; > + } > + } > + > +# if ENABLE_ASH_ALIAS > + for (n = 0; n < ATABSIZE; n++) { > + for(struct alias *ap = atab[n]; ap; ap = ap->next) { > + if (i-- <= 0) > + return ap->name; > + } > + } > +#endif > + > + return NULL; > } > #endif > > diff --git a/shell/hush.c b/shell/hush.c > index 202c0993a..9439c2cca 100644 > --- a/shell/hush.c > +++ b/shell/hush.c > @@ -8220,7 +8220,7 @@ static const struct built_in_command > *find_builtin(const char *name) > } > > #if ENABLE_HUSH_JOB && ENABLE_FEATURE_TAB_COMPLETION > -static const char * FAST_FUNC get_builtin_name(int i) > +static const char * FAST_FUNC hush_command_name(int i) > { > if (/*i >= 0 && */ i < ARRAY_SIZE(bltins1)) { > return bltins1[i].b_cmd; > @@ -8229,6 +8229,13 @@ static const char * FAST_FUNC get_builtin_name(int i) > if (i < ARRAY_SIZE(bltins2)) { > return bltins2[i].b_cmd; > } > +# if ENABLE_HUSH_FUNCTIONS > + i -= ARRAY_SIZE(bltins2); > + for (struct function *funcp = G.top_func; funcp; funcp = funcp->next) > { > + if (i-- <= 0) > + return funcp->name; > + } > +# endif > return NULL; > } > #endif > @@ -10716,7 +10723,7 @@ int hush_main(int argc, char **argv) > # if ENABLE_FEATURE_EDITING > G.line_input_state = new_line_input_t(FOR_SHELL); > # if ENABLE_FEATURE_TAB_COMPLETION > - G.line_input_state->get_exe_name = get_builtin_name; > + G.line_input_state->get_exe_name = hush_command_name; > # endif > # if EDITING_HAS_sh_get_var > G.line_input_state->sh_get_var = get_local_var_value; > -- > 2.39.2 > > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
