[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    Re: [PATCH 1/1] ash,hush: tab completion of functions and aliases
From:       Denys Vlasenko <vda.linux () googlemail ! com>
Date:       2023-04-16 15:52:18
Message-ID: CAK1hOcPsjmq9F1axtXuaivwDkJ+eBnx=-JBcxpPD+xseXzRXcA () mail ! gmail ! com
[Download RAW message or body]

Applied, thank you.

On Thu, Apr 13, 2023 at 1:56 PM Ron Yorston <rmy@pobox.com> 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 <rmy@pobox.com>
> Signed-off-by: Avi Halachmi <avihpit@yahoo.com>
> ---
>  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

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic