Adicione o seguinte ao seu .bash_profile
ou .bashrc
e 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 bash
pronto uso.
Ele só completará automaticamente os nomes de programas se a opção anterior for -a
e 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 .app
sufixo)
Uso: Digite open -a
, seguido por um espaço, seguido de pressionar Tab
ou 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, CharacterPalette
ou KeyboardViewer
desta maneira. * Configure as mdfind
chamadas adequadamente com o -onlyin
argumento.
É meio lento, devido a system_profiler SPApplicationsDataType
. Você pode precisar esperar um ou dois segundos antes da conclusão aparecer. Agora usa mdfind
para 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 "P
vá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 DVD
a DVD\ Player
.