开发者

Bash completion for Maven escapes colon

开发者 https://www.devze.com 2022-12-29 16:00 出处:网络
I added bash completion for Maven following the docs: http://maven.apache.org/guides/mini/guide-bash-m2-completion.html

I added bash completion for Maven following the docs:

http://maven.apache.org/guides/mini/guide-bash-m2-completion.html

Everything works well except for goals that use a colon. For instance, instead of

mvn eclipse:eclipse

completion escapes the colon

mvn eclipse\:eclipse

Any suggestions how this can be fixed? I'm using Ubuntu 8.10 (2.6.27-17-generic) and

开发者_Python百科

$ bash -version

GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu)


From Bash FAQ E13.

Just after the complete command in the script you linked to, issue this command to remove the colon from the list of completion word break characters:

COMP_WORDBREAKS=${COMP_WORDBREAKS//:}


Here is a related question and another suggested solution:

How to reset COMP_WORDBREAKS without effecting other completion script?

As stated before, the simplest solution is to alter COMP_WORDBREAKS. However, modifying COMP_WORDBREAKS in your completion script is not safe (as it is a global variable and it has the side effect of affecting the behavior of other completion scripts - for example scp).

Therefore, bash completion offers some helper methods which you can use to achieve your goal in a better and more safer way.

Two helper methods were added in Bash completion 1.2 for this:

  • _get_comp_words_by_ref with the -n EXCLUDE option
    • gets the word-to-complete without considering the characters in EXCLUDE as word breaks
  • __ltrim_colon_completions
    • removes colon containing prefix from COMPREPLY items
      (a workaround for http://tiswww.case.edu/php/chet/bash/FAQ - E13)

So, here is a basic example of how to a handle a colon (:) in completion words:

_mytool()
{
    local cur
    _get_comp_words_by_ref -n : cur

    # my implementation here

    __ltrim_colon_completions "$cur"
}
complete -F _mytool mytool

Using the helper methods also simplifies the completion script and ensures that you get the same behavior on any environment (bash-3 or bash-4).

You can also take a look at man or perl completion scripts in /etc/bash_completion.d to see how they use the above helper methods to solve this problem.


Any suggestions how this can be fixed? I'm using Ubuntu 8.10 (2.6.27-17-generic) and

Dennis answer is definitely correct.

But for the record, there is a logged issue (MNG-3928) to improve the documentation about the Maven integration with bash. The issue has a script attached which is an improved version of the one currently online and just works. You might want to give it a try.

Personally, I use the Bash Completion script from Ludovic Claude's PPA (the one that is bundled into the maven package from Ubuntu) that I download directly from bazaar (her e is a direct download link to the HEAD revision). It is just awesome.


I'd go with the Maven2 Bash Completion File at willcodeforbeer.com.

  • works great
  • handles colons
  • doesn't muck up global variable COMP_WORDBREAKS (thereby breaking scp, etc)
  • easy to edit and understand

Hope that helps!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号