Applied, thank you.
On Thu, Apr 13, 2023 at 1:56 PM Ron Yorston 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
> Signed-off-by: Avi Halachmi
> ---
> 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
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
___
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox