Aggiungi quanto segue a .bash_profile
o .bashrc
e 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 bash
out of the box.
Completerà automaticamente i nomi dei programmi solo se l'opzione precedente è -a
e 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 .app
suffisso)
Utilizzo: digita open -a
, seguito da uno spazio, seguito da premendo Tab
o 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 CharacterPalette
o in KeyboardViewer
questo modo. * Configurare le mdfind
chiamate in modo appropriato con l' -onlyin
argomento.
È 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 mdfind
per 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 DVD
a DVD\ Player
.