GradleをZshで補完する
2014-12-18
QiitaAndroidZshgradle快適な Android(Studio)ライフを送りたい
内容
Zsh でも Gradle コマンドを補完出来るようにした
参考
動機
Android 開発を爆速にする 10 のコマンドラインスクリプト - クックパッド開発者ブログ この記事で Gradle にも補完があるのを知ったが、 紹介されていたGradle tab completion for Bash. Works on both Mac and Linux. を見ると Bash 用の補完関数だった...。
普段 Zsh を使っているので、Gradle を使う時だけ Bash を使うなんて嫌だし Zsh 用に移植したい
コード
ほとんどは上の Bash 版と同じ
/path/to/_gradle
# refs: https://gist.github.com/nolanlawson/8694399 : bash-version
_gradle() {
local cur="$1"
local gradle_cmd='gradle'
if [[ -x ./gradlew ]]; then
gradle_cmd='./gradlew'
fi
if [[ -x ../gradlew ]]; then
gradle_cmd='../gradlew'
fi
local completions=''
local cache_dir="$HOME/.gradle_tabcompletion"
mkdir -p $cache_dir
local gradle_files_checksum='hoge';
if [[ -f build.gradle ]]; then # top-level gradle file
if [[ -x `which md5 2> /dev/null` ]]; then # mac
local all_gradle_files="$(find . -name build.gradle 2>/dev/null)"
gradle_files_checksum="$(md5 -q -s "${all_gradle_files}")"
else # linux
gradle_files_checksum="$(find . -name build.gradle | xargs md5sum | md5sum)"
fi
else # no top-level gradle file
gradle_files_checksum='no_gradle_files'
fi
if [[ -f $cache_dir/$gradle_files_checksum ]]; then # cached! yay!
completions=$(\cat $cache_dir/$gradle_files_checksum)
else # not cached! boo-urns!
completions=$($gradle_cmd --no-color --quiet tasks | grep --color=none ' - ' | awk '{print $1}' | tr '\n' ' ')
if [[ ! -z $completions ]]; then
echo $completions > $cache_dir/$gradle_files_checksum
fi
fi
local -a commands
commands=( "${(z)completions}" )
compadd $commands
return 1;
}
compdef _gradle gradle
compdef _gradle gradlew
compdef _gradle ./gradlew
gistにも置いた
配列にしてcompadd
すればいいっぽいことを学んだ
#compdef gradle
とファイルの頭に書いてもいいが、gradle
とgradlew
と./gradlew
に対応させられるかどうか検証するもの面倒だったのでこうした
Bash の場合
上のリンクにある Bash 用のやつ、コメントにもあるように
- if [[ -x `which md5 2 > /dev/null` ]]; then # mac
+ if [[ -x `which md5 2> /dev/null` ]]; then # mac
と修正しないと Bash でも動かないはず
使い方
このファイルは
~/.zshrc
source /path/to/\_gradle
このように~/.zshrc
にでも書いておけば読み込んでくれる
簡単にするならこれで試せるはず
curl -o </path/to/_gradle> https://gist.githubusercontent.com/petitviolet/910c0b54b067405d0aa3/raw/6cc95427f82f0673b6248de7e58ee6eb901099ff/_gradle
echo 'source </path/to/_gradle>` >> ~/.zshrc
なお、初回のみタスクの読み込みに時間がかかるが、2 回目以降はファイルキャッシュを読み込むため比較的速くなる
from: https://qiita.com/petitviolet/items/11ae1c7791e6343a6c1e