Fügen Sie Ihrem .bash_profile
oder Folgendes hinzu .bashrc
und 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 bash
sofort.
Programmnamen werden nur dann automatisch -a
vervollstä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 SPApplicationsDataType
ist 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 .app
Suffix ignoriert wird ).
Verwendung: Geben Sie ein open -a
, gefolgt von einem Leerzeichen, gefolgt von Tab
oder 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 CharacterPalette
oder KeyboardViewer
so zu starten . * Konfigurieren Sie die mdfind
Aufrufe entsprechend dem -onlyin
Argument.
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 mdfind
um 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 "P
es 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 DVD
zu DVD\ Player
.