Adicione o seguinte ao seu .bash_profileou .bashrce inicie uma nova sessão:
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
Não há necessidade de instalar nada. Isso funciona com bashpronto uso.
Ele só completará automaticamente os nomes de programas se a opção anterior for -ae mostrar o comportamento padrão; por exemplo, retorne uma lista de todos os arquivos no diretório atual ou complete o prefixo do caminho atual.
Os resultados são gerados system_profiler SPApplicationsDataType, o que é a maneira mais fácil de obter todos os aplicativos que podem ser iniciados dessa maneira em seu sistema dessa maneira. A lista é processada para retornar apenas os nomes dos programas, que podem conter espaços e podem ser diferentes dos nomes dos pacotes configuráveis (mesmo ao ignorar o .appsufixo)
Uso: Digite open -a, seguido por um espaço, seguido de pressionar Tabou Esc(duas vezes no meu sistema, não tenho certeza se está em todo lugar).
Exemplo mostrando todos os aplicativos auxiliares do meu 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
Desvantagens e problemas desta solução:
Existem muitos programas em seu sistema que você talvez não saiba, como tudo /System/Library/CoreServices. Você pode não querer listar todos eles. OTOH, é realmente fácil ver e iniciar, por exemplo, CharacterPaletteou KeyboardViewerdesta maneira. * Configure as mdfindchamadas adequadamente com o -onlyinargumento.
É meio lento, devido a system_profiler SPApplicationsDataType. Você pode precisar esperar um ou dois segundos antes da conclusão aparecer. Agora usa mdfindpara obter rapidamente os programas. Obrigado @Lri
Ele pode lidar com espaços em nomes de aplicativos e nomes de programas entre aspas, mas é bastante invasivo. Exige que a citação seja o primeiro caractere: Embora Scan" to "Pválido bash, este programa não o detectará. A conclusão também não funciona após um espaço de escape (por exemplo Scan\ to); use aspas nesses casos ( "Scan to). Suporte para espaços escaparam só é bom para completar DVDa DVD\ Player.