Vervollständigung von Komponisten und Befehlszeilen

Da ich meine Skripte immer mehr zu composer.json Dateien hinzufüge, wäre es nützlich, die automatische Vervollständigung für den composer Befehl in bash . Meine Frage auf Twitter ergab keine sofortige Lösung, und da ich bereits etwas Ähnliches für Phing tat, krempelte ich die Ärmel hoch und schrieb meine Lösung.


Wir beginnen mit der Erstellung einer neuen Bash-Abschlussdatei mit dem Namen composer im Verzeichnis bash_completion.d (die Datei benötigt Ausführungsrechte). Dieses Verzeichnis befindet sich normalerweise in /etc/bash_completion.d/ , aber unter OS X mit Homebrew befindet es sich in /usr/local/etc/bash_completion.d/ (vorausgesetzt, Sie haben /usr/local/etc/bash_completion.d/ brew install bash-complete /usr/local/etc/bash_completion.d/ bereits installiert).


Hier ist die Datei:


 # Store this file in /etc/bash_completion.d/composer _composer_scripts() { local cur prev _get_comp_words_by_ref -n : cur COMPREPLY=() prev="${COMP_WORDS[COMP_CWORD-1]}" # # Complete the arguments to some of the commands. # if [ "$prev" != "composer" ] ; then local opts=$(composer $prev -h --no-ansi | tr -cs '[=-=][:alpha:]_' '[\n*]' | grep '^-') COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) 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 local scripts=$(composer --no-ansi 2> /dev/null | awk '/^ +[az]+/ { print $1 }') COMPREPLY=( $(compgen -W "${scripts}" -- ${cur}) ) fi __ltrim_colon_completions "$cur" return 0 } complete -F _composer_scripts composer 

(Beachten Sie, dass __ltrim_colon_completions nur in neueren Versionen von bash-complete unterstützt wird. __ltrim_colon_completions müssen Sie diese Zeile möglicherweise entfernen.)


Um eine Liste der Befehle für Composer zu erhalten, erstellen wir eine Wortliste für die Option -W für compgen indem wir composer --no-ansi , und löschen dann mit AWK alles, was kein Befehl ist. Wir erstellen auch eine separate Flag-Argumentliste, wenn der Benutzer die Tabulatortaste drückt, nachdem der Bindestrich eingegeben wurde.


Durch Ausführen von composer {cmd} -h --no-ansi füllen wir automatisch die Flags für jeden Unterbefehl aus und beschränken die Liste mit tr und grep auf nur Wörter, die mit einem Bindestrich beginnen.


Wenn Sie jetzt nach dem Komponisten die Tabulatortaste drücken, vervollständigt bash automatisch sowohl die integrierten Komponistenbefehle als auch die Benutzerskripte!



Wie Sie in diesem Beispiel sehen können, werden neben integrierten Befehlen wie dump-autoload und show auch meine eigenen Skripte angezeigt, einschließlich apiary-fetch und anderer.


Dies ist sehr nützlich, wenn das Gedächtnis versagt!

Source: https://habr.com/ru/post/de444284/


All Articles