Acesse o menu “Abrir com” do Finder na linha de comando (para concluir a tabulação)

5

No Mac OS X, sei que é possível abrir um arquivo a partir da linha de comando com seu aplicativo padrão com open e com outros aplicativos com open -a <application name> . Assim,

open movie.avi
open -a VLC movie.avi
open movie.avi -a VLC

todo o trabalho. Minha única reclamação é que quando eu digito

open movie.avi -a <TAB>

completa sobre todas as aplicações existentes no computador - por exemplo, em zsh, obtenho

zsh: do you wish to see all 793 possibilities (200 lines)? 

- enquanto o que eu gostaria é que ele conclua apenas o pequeno número de aplicativos que o menu "Abrir com" do Finder teria mostrado.

Então existe uma maneira de acessar essa lista que o Finder sabe, e fazer com que meu shell (zsh, mas eu posso mudar para o bash se ajudar) ciente da lista, de tal forma que a conclusão da tabulação mostre apenas aqueles aplicativos ?

    
por ShreevatsaR 29.07.2011 / 07:01

2 respostas

5

AllApplications

$ AllApplications -h

Created 03 March 2011 by Hank McShane
version 0.1
requires Mac OS X 10.4 or higher

Use this command line tool to get the path to all applications that can open a file from Launch Services.

Usage: AllApplications -path path/to/file

$ ext=png; f=/tmp/allapps.$ext; touch $f; AllApplications -path $f; rm $f
/Applications/Preview.app
/2/copies/Safari.app
/Applications/TeX/LaTeXiT.app
/Applications/WebKit.app
/Applications/Sequential.app
/Applications/ImageOptim.app
/Applications/Acorn.app
/Developer/Applications/Graphics Tools/Core Image Fun House.app
/2/copies/Preview.app
/Developer/Applications/Dashcode.app
/Applications/GraphicConverter.app
/Applications/Google Chrome.app
/Applications/Adobe Photoshop CS5/Adobe Photoshop CS5.app
/Applications/Utilities/QuickTime Player 7.app
/Applications/Utilities/ColorSync Utility.app
/Applications/Safari.app
/Applications/Adobe Device Central CS5/Adobe Device Central CS5.app
/Applications/Firefox.app

duti

$ duti -d public.png
com.apple.Preview
$ duti -l public.png
com.SequentialX.Sequential
com.flyingmeat.Acorn
net.pornel.ImageOptim
com.apple.system-library
com.apple.ColorSyncUtility
com.apple.Preview

(No entanto, faltam alguns aplicativos que são exibidos no menu abrir com.)

    
por 29.07.2011 / 20:33
0

Para mim, parece que

it completes over all applications that exist on the computer — for instance in zsh I get

não é verdade. Não parece haver nenhum reconhecimento para o comando open no bash ou zsh. Então pressionar simplesmente usa o fallback e completa todos os arquivos em seu diretório de trabalho atual.

Se você quiser que o bash esteja ciente dos argumentos esperados que virão após a opção -a do comando open , você precisará escrever um padrão de conclusão bash para isso.

Para fazer isso, você precisa se familiarizar com o complete shell builtin

$ help complete
complete: complete [-abcdefgjksuv] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [name ...]
    For each NAME, specify how arguments are to be completed.
    If the -p option is supplied, or if no options are supplied, existing
    completion specifications are printed in a way that allows them to be
    reused as input.  The -r option removes a completion specification for
    each NAME, or, if no NAMEs are supplied, all completion specifications.

O OS X Lion simplesmente aponta o usuário para uma caixa de diálogo mostrando a pasta /Applications . Para obter a lista de aplicativos, você pode simplesmente usar

basename -a -s.app /Applications/*.app

Portanto, uma conclusão muito rudimentar para open que não verifica a opção -a nem manipula espaços corretamente seria semelhante a esta

_openComp() 
{
        local WLIST cur
        COMPREPLY=()
        cur="${COMP_WORDS[COMP_CWORD]}"
        WLIST='basename -a -s.app /Applications/*.app'
        COMPREPLY=( $(compgen -W "${WLIST}" -- ${cur}) )
        return 0
}
complete -F _openComp open

Isso se aplica ao bash, não estou familiarizado com o comportamento de conclusão do zsh.

    
por 29.07.2011 / 19:57