Ich weiß, dass man unter Mac OS X eine Datei von der Kommandozeile aus mit der Standardanwendung mit öffnen kann open
, und mit anderen Anwendungen mit open -a <application name>
. Somit,
open movie.avi
open -a VLC movie.avi
open movie.avi -a VLC
alles funktioniert. Meine einzige Beschwerde ist, dass wenn ich tippe
open movie.avi -a <TAB>
es vervollständigt überalleAnwendungen, die auf dem Computer vorhanden sind – zum Beispiel erhalte ich in zsh
zsh: do you wish to see all 793 possibilities (200 lines)?
– während ich mir wünschen würde, dass nur die wenigen Anwendungen geprüft werden, die im Finder-Menü „Öffnen mit“ angezeigt würden.
Gibt es also eine dem Finder bekannte Möglichkeit, auf diese Liste zuzugreifen und meine Shell (zsh, aber ich kann auch zu bash wechseln, wenn das hilft) auf die Liste aufmerksam zu machen, sodass bei der Tab-Vervollständigung nur diese Anwendungen angezeigt werden?
Antwort1
Alle Anwendungen (archive.org)
$ 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
Pflicht
$ 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
(Es fehlen jedoch einige Apps, die im Menü „Öffnen mit“ angezeigt werden.)
Antwort2
Mir scheint, dass
es führt alle auf dem Computer vorhandenen Anwendungen aus – in zsh bekomme ich beispielsweise
ist nicht wahr. Es scheint, als ob der open
Befehl in Bash oder Zsh nicht bekannt ist. Wenn Sie also drücken, ⇥wird einfach der Fallback verwendet und der Befehl wird über alle Dateien in Ihrem aktuellen Arbeitsverzeichnis ausgeführt.
Wenn Sie möchten, dass Bash die erwarteten Argumente erkennt, die nach dem -a
Befehlswechsel kommen open
, müssen Sie dafür ein Bash-Vervollständigungsmuster schreiben.
Dazu müssen Sie sich mit dem complete
Shell-Builtin vertraut machen
$ 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.
OS X Lion verweist den Benutzer einfach auf einen Dialog, der den /Applications
Ordner anzeigt. Um die Liste der Apps dort zu erhalten, können Sie einfach verwenden
basename -a -s.app /Applications/*.app
Eine sehr rudimentäre Vervollständigung, open
die weder den Schalter überprüft -a
noch Leerzeichen korrekt verarbeitet, würde so aussehen
_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
Dies gilt für Bash, ich bin mit dem Vervollständigungsverhalten von Zsh nicht vertraut.