Всем доброго времени суток.
Посвящается тем, кто использует Composer, но столкнулся с тем, что при выборе пакета для установки (require) нужно вписать версию этого пакета. Не очень удобно постоянно ее где-то искать, даже используя * не всегда удается все правильно установить.
Таким образом, я решил опубликовать скрипт автоподстановки.
На данный момент о него требуется подстановка имен пакетов, а в случае если пакет уже подставлен, то версию этого пакета, лишь для команды require.
Суть идеи была проста — подставить имя пакета, затем подставить его версию, а если предыдущее не имя пакета, значит это версия, тогда опять попытаться подобрать имя пакета.
Сам скрипт лежит обычно по пути (можно туда сделать симлинк, ну или кому как)
Из минусов хочу отметить долгий отклик из-за того, что сам composer медленно читает свое хранилище.
Последнее частично исправлено за счет кеширования списка пакетов и их версий, но до следующего обновления самого композера.
Получается, что есть вероятность не автодополнить в строку пакет который уже есть в списке, но не было во время кеширования. В этом случае надо либо удалить кеш, либо обновить сам композер. Вот как то так… ну я считаю это компромиссом.
Конечно, же необходимо чтобы Composer был установлен в системе как
Лично, я сунул его в /usr/local/bin и периодически обновляю через
Если у кого есть желание что-то добавить улучшить, то прошу на Github
На этом все.
Всем спасибо!
Посвящается тем, кто использует 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
.Лично, я сунул его в /usr/local/bin и периодически обновляю через
sudo composer self-update
.Если у кого есть желание что-то добавить улучшить, то прошу на Github
На этом все.
Всем спасибо!