Adicionando auto-completar do arquivo no rake com zsh

3

Eu tenho oh-my-zsh instalado com o plug-in rails , quando uso zsh conclusão com rake , ele é concluído com a lista de tarefas de rake -T .

Quando executo um teste específico, um dos parâmetros é o caminho para o arquivo de teste:

rake test test/models/dummy_model.rb

Costumo tentar autocompletar esse caminho e obviamente não funciona.

rake test test/models/...

Gostaria de poder concluir a partir de caminhos de arquivo, além de tarefas. Como eu pude fazer isso?

    
por ybart 31.07.2014 / 11:11

1 resposta

3

Se eu entendi bem, isso só ocorre quando você usa o formulário rake test ... . Então você pode usar este patch contra $fpath/_rake

diff --git a/Completion/Unix/Command/_rake b/Completion/Unix/Command/_rake
index 7fed949..96ee930 100644
--- a/Completion/Unix/Command/_rake
+++ b/Completion/Unix/Command/_rake
@@ -37,12 +37,16 @@ case "$state" in
   ;;
   target)
     local -a targets
-    targets=( ${${(f)"$(_call_program targets $words[1] -sT $opt_args[(I)(-N|--nosearch)] ${(kv)opt_args[(I)(-f|--rakefile)]} 2>/dev/null)"}/(#b)rake ([^ ]##) ##\# (*)/${${match[1]}//:/\:}:${match[2]:l}} )
-    if (( ! ${targets[(I)rake aborted!]} )) then
-      _describe -t targets 'rake target' targets && ret=0
-    else
-      _message -e targets 'rake target'
-    fi
+    if [[ $words[$((CURRENT-1))] == "test" ]]; then
+       _files && ret=0
+       else
+           targets=( ${${(f)"$(_call_program targets $words[1] -sT $opt_args[(I)(-N|--nosearch)] ${(kv)opt_args[(I)(-f|--rakefile)]} 2>/dev/null)"}/(#b)rake ([^ ]##) ##\# (*)/${${match[1]}//:/\:}:${match[2]:l}} )
+           if (( ! ${targets[(I)rake aborted!]} )) then
+             _describe -t targets 'rake target' targets && ret=0
+           else
+             _message -e targets 'rake target'
+           fi
+       fi
   ;;
 esac

Esse patch, em princípio, adiciona a condição if [[ $words[$((CURRENT-1))] == "test" ]]; , que verifica se o argumento anterior é igual a "teste". E se assim for, arquivos e diretórios são retornados através da função _files em vez de alvos de rake.

    
por 31.07.2014 / 19:42