Всем доброго времени суток.
Посвящается тем, кто использует 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
На этом все.
Всем спасибо!
Автор: arren