La autocompletacion normal para el git checkout
es tal vez mostrar una list de twigs para que pueda autocomplete. ¿Qué puedo hacer para agregar el mismo comportamiento de autocompletado para mi function que completa el process de git checkout
?
Hipotéticamente:
function git_checkout () { git checkout $1 do_some_custom_other_stuff }
¿Cómo lo hago para que la function git_checkout
autocompleta lo mismo que el git checkout
?
Si ejecuta complete -p git
, puede ver cuál es la finalización pnetworkingeterminada para git
.
$ complete -p git complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git
La parte importante aquí es el -F __git_wrap__git_main
bit.
Si inspecciona la function __git_wrap__git_main
:
$ type __git_wrap__git_main __git_wrap__git_main is a function __git_wrap__git_main () { __git_func_wrap __git_main }
Puede ver que simplemente llama a la function __git_main
través de la function __git_func_wrap
. (Puede inspeccionar eso por sí mismo si lo desea).
Al __git_main
function __git_main
verá que trata de search las funciones _git_XXX
según el command que se está ejecutando y, por supuesto, hay una function _git_checkout
( type -t _git_checkout
== function
).
Esa function proporciona el soporte de finalización para el git checkout
. Eso es lo que quieres para tu function personalizada. Entonces esa es la function que necesita para completar el uso.
Sin embargo, no puede llamar directamente, recuerde que espera un poco de configuration de la llamada __git_func_wrap
que comenzó todo esto, por lo que debe envolverlo usted mismo.
Que es exactamente lo que la function __git_wrap__git_main
que comenzamos hizo (para __git_main
) sí mismo.
Entonces, escribimos una function como esa:
__git_wrap_git_checkout() { __git_func_wrap _git_checkout }
y luego conectarlo como la function de finalización para su function:
complete -o bashdefault -o default -o nospace -F __git_wrap_git_checkout git_checkout
y deberíamos estar listos para irnos.
Implementar esta function como un git alias en lugar de una function de shell independiente significaría que podríamos aprovechar el soporte de finalización de git incorporado y solo proporcionar la function _git_git_checkout
(igual que nuestra function __git_wrap_git_checkout
anterior y nombrada de esta manera para _git_
+ alias_name
que es lo que __git_main
espera) y git haría la llamada automáticamente.