Bash completion для Composer

от автора

Всем доброго времени суток.

Посвящается тем, кто использует Composer, но столкнулся с тем, что при выборе пакета для установки (require) нужно вписать версию этого пакета. Не очень удобно постоянно ее где-то искать, даже используя * не всегда удается все правильно установить.

Таким образом, я решил опубликовать скрипт автоподстановки.
На данный момент о него требуется подстановка имен пакетов, а в случае если пакет уже подставлен, то версию этого пакета, лишь для команды require.

Суть идеи была проста — подставить имя пакета, затем подставить его версию, а если предыдущее не имя пакета, значит это версия, тогда опять попытаться подобрать имя пакета.

Сам скрипт лежит обычно по пути (можно туда сделать симлинк, ну или кому как)
/usr/share/bash-completion/completions

Содержимое скрипта:

# Composer completion  _composer() {     local cur prev words cword     _init_completion || return      local special i     for (( i=0; i < ${#words[@]}-1; i++ )); do         if [[ ${words[i]} == @(require) ]]; then             special=${words[i]}         fi     done      if [[ -n $special ]]; then         if [[ $prev != $special ]]; then             # полагаем, что предыдущее это пакет и он существует,             # тогда посмотрим его версии             COMPREPLY=( $( composer show $prev 2>/dev/null | \                 sed -r -e 's/\x1b\[[0-9]+m//g' | grep ^versions | \                 sed -r -e 's/^versions : //' -e 's/, /\n/g' | grep "^$cur" | sort -u ) )         fi         if [[ -z $COMPREPLY ]]; then             # если то был не пакет, то подставляем пакет на основе текущего слова             COMPREPLY=( $( composer show -a 2>/dev/null | \                 grep -v '^No composer' | grep "^$cur" | sort -u ) )         fi         return 0     fi      # дополняемся ключами и командами     if [[ "$cur" == -* ]]; then         COMPREPLY=( $( compgen -W '-h -q -v -V -n -d \             --help --quiet --verbose --version --ansi --no-ansi \             --no-interaction --profile --working-dir' -- "$cur" ) )     else         COMPREPLY=( $( compgen -W 'about archive config create-project \             depends diagnose dump-autoload dumpautoload \             help init install list require search \             self-update selfupdate show status update validate' -- "$cur" ) )     fi      return 0 } && complete -F _composer composer # регистрируем обработчик для команды composer 

Из минусов хочу отметить долгий отклик из-за того, что сам composer медленно читает свое хранилище.

Конечно, же необходимо чтобы Composer был установлен в системе как composer.
Лично, я сунул его в /usr/local/bin и периодически обновляю через sudo composer self-update.

Если у кого есть желание что-то добавить улучшить, то прошу на Github

На этом все.
Всем спасибо!

ссылка на оригинал статьи http://habrahabr.ru/post/176715/