Skip to content

Instantly share code, notes, and snippets.

@t-kashima
Created January 31, 2016 08:43
Show Gist options
  • Save t-kashima/b0a43f4f1856fbaf659c to your computer and use it in GitHub Desktop.
Save t-kashima/b0a43f4f1856fbaf659c to your computer and use it in GitHub Desktop.
# Gradle
# refs: https://gist.github.com/nolanlawson/8694399 : bash-version
function gradle_command() {
local gradle_cmd='gradle'
if [[ -x ./gradlew ]]; then
gradle_cmd='./gradlew'
fi
if [[ -x ../gradlew ]]; then
gradle_cmd='../gradlew'
fi
echo $gradle_cmd
}
function gradle_tasks() {
local gradle_cmd=$(gradle_command)
local completions=''
local cache_dir="$HOME/.gradle_tabcompletion"
mkdir -p $cache_dir
# cacheするファイル名
local gradle_files_checksum='hoge';
if [[ -f build.gradle ]]; then
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
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
completions=$($gradle_cmd --console=plain --quiet tasks --all | grep --color=none ' - ' | awk '{print $1}' | tr '\n' '<>')
if [[ ! -z $completions ]]; then
echo $completions > $cache_dir/$gradle_files_checksum
fi
fi
echo $completions
}
# pecoでtask選択
function peco-select-gradle-tasks() {
local gradle_cmd=$(gradle_command)
local completions=$(gradle_tasks)
local selected_task=$(echo ${completions} | tr '<>' '\n' | peco)
if [ -n "$selected_task" ]; then
BUFFER="$gradle_cmd $selected_task"
zle accept-line
fi
zle clear-screen
}
zle -N peco-select-gradle-tasks
bindkey "^g" peco-select-gradle-tasks
# gradleのtab補完
function _gradle() {
local cur="$1"
local completions=$(gradle_tasks)
local -a tasks
tasks=("${(z)completions}")
compadd $tasks
return 0;
}
compdef _gradle gradle
compdef _gradle gradlew
compdef _gradle ./gradlew
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment