Thanks for this. Sorry for the delay. Some nits before it's mergeable:

On Sun, Oct 7, 2018 at 10:34 PM Lars Flitter
<password-st...@larsflitter.de> wrote:
>  install-common:
>         @install -v -d "$(DESTDIR)$(MANDIR)/man1" && install -m 0644 -v 
> man/pass.1 "$(DESTDIR)$(MANDIR)/man1/pass.1"
> -       @[ "$(WITH_BASHCOMP)" = "yes" ] || exit 0; install -v -d 
> "$(DESTDIR)$(BASHCOMPDIR)" && install -m 0644 -v 
> src/completion/pass.bash-completion "$(DESTDIR)$(BASHCOMPDIR)/pass"
> +       @[ "$(WITH_BASHCOMP)" = "yes" ] || exit 0;  \
> +               install -v -d "$(DESTDIR)$(BASHCOMPDIR)" && \
> +               trap 'rm -f src/completion/.bash' EXIT; \
> +               sed 
> 's:^SYSTEM_EXTENSION_DIR=.*:SYSTEM_EXTENSION_DIR="$(LIBDIR)/password-store/extensions":'
>  src/completion/pass.bash-completion > src/completion/.bash && \
> +               install -m 0644 -v src/completion/.bash 
> "$(DESTDIR)$(BASHCOMPDIR)/pass"

Either clean up the other usage of this pattern to be multi-line in
preceding commit, or make this single line like the other.

> +_pass_extension_commands() {
> +       if [[ -n $SYSTEM_EXTENSION_DIR ]]; then
> +               find $SYSTEM_EXTENSION_DIR -name \*.bash  -printf "%f " | sed 
> 's/.bash//g'
> +       fi
> +
> +       if [[ $PASSWORD_STORE_ENABLE_EXTENSIONS == true ]]; then
> +               find $EXTENSIONS -name \*.bash  -printf "%f " | sed 
> 's/.bash//g'
> +       fi
> +}

These should use pure bash instead of find+sed. If you're concerned
about nested directories, you can enable extglob for the duration of
the function and the ** operator. Suffixes can be removed using the
normal bash % operator on the results. Also -d should be used instead
of -n, above.

> +
> +_pass_extension_completion_file() {
> +       local extension_command=$1
> +       if [[ $PASSWORD_STORE_ENABLE_EXTENSIONS == true ]] && [ -f 
> $EXTENSIONS/$extension_command.bash.completion ]; then

Please always use [[ and not [. You can combine these two clauses into
a single one.

Also - elsewhere we use bash-completion, not bash.completion.

> +               echo $EXTENSIONS/$extension_command.bash.completion

Missing quotation marks.

> +               return 0
> +       fi
> +
> +       if [[ -n $SYSTEM_EXTENSION_DIR ]] && [ -f 
> $SYSTEM_EXTENSION_DIR/$extension_command.bash.completion ]; then
> +               echo $SYSTEM_EXTENSION_DIR/$extension_command.bash.completion

Same feedback as above. However, you probably should just be copying
the logic in pass' cmd_extension instead, where you just build the
full path, test which one exists, and source things opportunistically.
Copy and paste it, even.

> -       local commands="init ls find grep show insert generate edit rm mv cp 
> git help version ${PASSWORD_STORE_EXTENSION_COMMANDS[*]}"
> +       local commands="init ls find grep show insert generate edit rm mv cp 
> git help version $(_pass_extension_commands)"

Not sure this is such a good idea. I get that sometimes you want to
list the commands, it seems there are actually three cases:

- User hits tab in the state when listing all commands --> call
_pass_extension_commands to see what should be appended
- User hits tab in the state of a built-in command --> nothing.
- User hits tab in the state of an unknown command --> see if there
exists a bash completion for the extension that should be sourced for
that command.

Right now you're doing the first all the time, which I'm not sure is
so smart performance-wise.

> +               # To add completion for an extension command create 
> <COMMAND>.bash.completion in the extension folder that contains the 
> completion code like this:

Same nit about filename template.

> +               #
> +               # COMPREPLY+=($(compgen -W "-o --option" -- ${cur}))
> +               # _pass_complete_entries 1
>                 #
> -               # and add the command to the 
> $PASSWORD_STORE_EXTENSION_COMMANDS array
> -               if [[ " ${PASSWORD_STORE_EXTENSION_COMMANDS[*]} " == *" 
> ${COMP_WORDS[1]} "* ]] && type 
> "__password_store_extension_complete_${COMP_WORDS[1]}" &> /dev/null; then
> -                       "__password_store_extension_complete_${COMP_WORDS[1]}"
> +               if [[ " $(_pass_extension_commands)" == *" ${COMP_WORDS[1]} 
> "* ]] && [ -n "$(_pass_extension_completion_file ${COMP_WORDS[1]})" ] ; then

Same nit as above.

> +                       source $(_pass_extension_completion_file 
> ${COMP_WORDS[1]})
>                 fi
>         else
>                 COMPREPLY+=($(compgen -W "${commands}" -- ${cur}))
> --
> 2.19.1
>
> _______________________________________________
> Password-Store mailing list
> Password-Store@lists.zx2c4.com
> https://lists.zx2c4.com/mailman/listinfo/password-store
_______________________________________________
Password-Store mailing list
Password-Store@lists.zx2c4.com
https://lists.zx2c4.com/mailman/listinfo/password-store

Reply via email to