Aggiungi quanto segue a .bash_profileo .bashrce avvia una nuova sessione:
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
Non è necessario installare nulla. Funziona con bashout of the box.
Completerà automaticamente i nomi dei programmi solo se l'opzione precedente è -ae mostra in altro modo il comportamento predefinito, ad esempio restituisce un elenco di tutti i file nella directory corrente o completa il prefisso del percorso corrente.
I risultati sono generati da system_profiler SPApplicationsDataType, che è il modo più semplice per ottenere tutte le applicazioni che possono essere avviate in questo modo sul proprio sistema in quel modo. L'elenco viene elaborato per restituire solo i nomi dei programmi, che possono contenere spazi e possono essere diversi dai nomi dei pacchetti (anche quando si ignora il .appsuffisso)
Utilizzo: digita open -a, seguito da uno spazio, seguito da premendo Tabo Esc(due volte sul mio sistema, non sono sicuro che sia ovunque).
Esempio che mostra tutte le applicazioni di supporto per il mio 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
Svantaggi e problemi di questa soluzione:
Ci sono tonnellate di programmi sul tuo sistema di cui potresti non essere a conoscenza, come ogni cosa /System/Library/CoreServices. Potresti non voler elencarli tutti. OTOH, è davvero facile vedere e lanciare ad esempio CharacterPaletteo in KeyboardViewerquesto modo. * Configurare le mdfindchiamate in modo appropriato con l' -onlyinargomento.
È un po 'lento, a causa di system_profiler SPApplicationsDataType. Potrebbe essere necessario attendere un secondo o due prima che venga visualizzato il completamento. Ora utilizza mdfindper ottenere rapidamente i programmi. Grazie @Lri
Può gestire spazi nei nomi delle applicazioni e tra i nomi dei programmi racchiusi tra virgolette, ma è piuttosto confuso. Richiede che la citazione sia il primo carattere: mentre Scan" to "Pè valido in bash, questo programma non lo rileverà. Il completamento non funziona neanche dopo uno spazio di escape (ad es. Scan\ to), Utilizzare le virgolette in questi casi ( "Scan to). Il supporto per gli spazi sfuggiti è buono solo per completare DVDa DVD\ Player.