Fügen Sie Ihrem .bash_profileoder Folgendes hinzu .bashrcund starten Sie eine neue Sitzung:
function _complete_open {
cur=$2
COMPREPLY=( );
[[ "$COMP_WORDS" = "open" ]] || return
[[ "${COMP_WORDS[ $(( $COMP_CWORD - 1 )) ]}" = "-a" ]] || return
OLDIFS="$IFS"
IFS=$'\n'
local _part="${COMP_WORDS[$COMP_CWORD]}"
if [[ "${_part:0:1}" = '"' || "${_part:0:1}" = "'" ]] ; then
COMPREPLY=( $( compgen -W "$( mdfind kMDItemKind==Application | sed -e 's|.*/||g' -e 's|.app$||' | sort -u )" -- $cur ) )
else
COMPREPLY=( $( compgen -W "$( mdfind kMDItemKind==Application | sed -e 's|.*/||g' -e 's|.app$||' -e 's| |\\\\ |g' | sort -u )" -- $cur ) )
fi
IFS="$OLDIFS"
}
complete -o default -F _complete_open open
Es muss nichts installiert werden. Dies funktioniert bashsofort.
Programmnamen werden nur dann automatisch -avervollständigt, wenn die vorherige Option aktiviert ist und ansonsten das Standardverhalten anzeigt, z. B. eine Liste aller Dateien im aktuellen Verzeichnis zurückgeben oder das aktuelle Pfadpräfix vervollständigen.
Die Ergebnisse werden aus generiert. Dies system_profiler SPApplicationsDataTypeist der einfachste Weg, um alle Anwendungen zu erhalten, die so auf Ihrem System gestartet werden können. Die Liste wird verarbeitet, um nur die Programmnamen zurückzugeben, die Leerzeichen enthalten und sich von den Paketnamen unterscheiden können (auch wenn das .appSuffix ignoriert wird ).
Verwendung: Geben Sie ein open -a, gefolgt von einem Leerzeichen, gefolgt von Taboder Esc(zweimal auf meinem System, nicht sicher, ob es überall ist).
Beispiel mit allen Hilfsanwendungen für meinen Scanner:
$ open -a Scan
Scan to E-mail Scan to Excel Scan to Folder Scan to Print Scan to Searchable PDF Scan to Word ScanSnap Manager
Nachteile und Probleme dieser Lösung:
Es gibt Unmengen von Programmen auf Ihrem System, die Sie möglicherweise nicht kennen, wie alles in /System/Library/CoreServices. Möglicherweise möchten Sie nicht alle auflisten. OTOH, es ist wirklich einfach zu sehen und zB CharacterPaletteoder KeyboardViewerso zu starten . * Konfigurieren Sie die mdfindAufrufe entsprechend dem -onlyinArgument.
Es ist ein bisschen langsam, wegen system_profiler SPApplicationsDataType. Möglicherweise müssen Sie ein oder zwei Sekunden warten, bis der Abschluss angezeigt wird. Jetzt nutzt man mdfindum schnell die Programme zu bekommen. Vielen Dank @Lri
Es kann mit Leerzeichen in Anwendungsnamen und in Anführungszeichen eingeschlossenen Programmnamen umgehen, ist aber ziemlich verrückt. Das Anführungszeichen muss das erste Zeichen sein: Solange Scan" to "Pes in gültig ist bash, wird es von diesem Programm nicht erkannt. Die Vervollständigung funktioniert auch nach einem Leerzeichen nicht (z. B. Scan\ to). Verwenden Sie in solchen Fällen Anführungszeichen ( "Scan to). Unterstützung für entkam Räumen ist nur gut abgeschlossen DVDzu DVD\ Player.