Автозаполнение Hook Bash на основе аргумента - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть следующий псевдоним для git

[alias]
    review = !git stash && git fetch origin $1 && (git branch -m $1 tmp-review-$1-$(date +%Y-%m-%d-%H-%M-%S) || :) && git checkout -b $1 origin/$1 && :

Вы можете использовать его как git review <branch-name>

Как подключить уже существующее автозаполнение для веток к git review

Я ищу что-то вроде:

__git_complete gr _git_branch

но должно быть сделано на основе аргумента -> git review <tab>

В общем, есть ли способ перехватить автозаполнение bash на основе регулярного выражения или только совпадения строк?


Решение

Для git см. Ответ @ Тимира ниже.

# add completion handler for 'review' command
_git_review ()
{
    __git_complete_refs
}

Как правило, вы можете подключить свой собственный автозаполнение и вызвать по умолчанию, например:

_tralala ()
{
    cur=${COMP_WORDS[COMP_CWORD]}
    prev=${COMP_WORDS[COMP_CWORD-1]}

    if [ "$prev" = "test" ]; then
        COMPREPLY=( $( compgen -W 'ninja pizza' -- "$cur" ) )
    else
        _git
    fi
}

complete -F _tralala git

1 Ответ

0 голосов
/ 27 апреля 2018

Просто определите следующую функцию в git-completion.bash или .bash_profile.

# add completion handler for 'review' command
_git_review ()
{
    __git_complete_refs
}

И это даст вам git review <tab> автозаполнение. Если вы также хотите, чтобы git <tab> автозаполнение включало ваш псевдоним (ы), вам также потребуется следующее в git-completion.bash:

# add hook for further expansions
_git_known_expansions () 
{
    # list aliases
    echo $(git config --name-only --get-regexp alias | sed 's/alias\.//g')
}

# modify command list to include expansions
__git_commands () {
    if test -n "${GIT_TESTING_COMMAND_COMPLETION:-}"
    then
        printf "%s" "${GIT_TESTING_COMMAND_COMPLETION}"
    else
        echo "$(git help -a|egrep '^  [a-zA-Z0-9]') $(_git_known_expansions)"
    fi
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...