Zmienić domyślną aplikację (dla rozszerzenia pliku) za pomocą skryptu / wiersza poleceń?

11

Czy istnieje sposób zdefiniowania domyślnej aplikacji dla rozszerzenia pliku za pomocą skryptu Apple, polecenia wiersza polecenia (jak defaults write [...]).

Wiem, że możesz to zmienić ręcznie za pomocą panelu informacyjnego lub za pomocą RCDefaultApp, ale ponieważ muszę skonfigurować wiele komputerów i kont użytkowników, chciałbym znaleźć sposób na zautomatyzowanie tego procesu.

oschrenk
źródło

Odpowiedzi:

6

duti to narzędzie powłoki, które umożliwia użycie pliku tekstowego do skonfigurowania domyślnych aplikacji dla typów plików i schematów URL.

Na przykład zapisz plik taki jak ten ~/.duti:

com.gnu.Emacs public.plain-text all 
com.gnu.Emacs public.unix-executable all
org.videolan.vlc .mkv all

Potem biegnij duti ~/.duti.

Możesz zainstalować duti przy pomocy brew install dutilub uruchamiając wget https://github.com/fitterhappier/duti/archive/duti-1.5.2.tar.gz;tar -xf duti-1.5.2.tar.gz;cd duti-duti-1.5.2;./configure;make;sudo make install.

Lri
źródło
To wydaje się obiecujące, choć nie wydaje się skompilować go na OS X 10.7.x lub 10.8.x: checking which SDK to use... configure: error: darwin12.0.0 is not a supported system.
Mathias Bynens,
Plik binarny w instalatorze pkg nadal działa dla mnie na 10.8.
Lri
Widzę. Do wykorzystania w przyszłości, oto link do tego pliku do pobrania: downloads.sourceforge.net/project/duti/duti/duti-1.5.0/...
Mathias Bynens
Czy to działa na 10.8? Ustawiłem domyślną aplikację do otwierania .aviplików w Quicktime Player (za pomocą Findera → Uzyskaj informacjeOtwórz za pomocą… → _Zmień wszystko ), następnie uruchomiłem duti -s org.videolan.vlc public.avi allVLC, a następnie ponownie uruchomiłem LaunchServices - ale wydawało się, że nie ma to żadnego efektu. (Zobacz listę deklarowanych przez system UTI .)
Mathias Bynens,
1
Przynajmniej dla mnie działa. Nie powinno to wymagać przebudowania bazy danych Launch Services ani ponownego uruchomienia ani niczego. Jeśli spojrzysz na to ~/Library/Preferences/com.apple.LaunchServices.plist, duti automatycznie konwertuje większość rozszerzeń nazw plików na UTI, więc zwykle możesz określić typy takie jak .avizamiast public.avi. Interfejsy użytkownika niektórych rozszerzeń plików zależą od zainstalowanych aplikacji.
Lri
12

Usługi uruchamiania są odpowiedzialne za domyślne skojarzenia plików.

Powiedzmy, że chciałem zmienić wszystkie pliki tekstowe, aby otwierały się w Sublime Text 2.

Najpierw potrzebuję kMDItemCFBundleIdentifier dla Sublime Text 2. Mogę użyć mdls, aby uzyskać te informacje:

> mdls /Applications/Sublime\ Text\ 2.app 
_kTimeMachineIsCreationMarker  = 1
_kTimeMachineNewestSnapshot    = 4001-01-01 00:00:00 +0000
_kTimeMachineOldestSnapshot    = 2012-02-22 03:49:19 +0000
kMDItemCFBundleIdentifier      = "com.sublimetext.2"
....snip....

Mogę znaleźć wartość typu zawartości plików tekstowych, sprawdzając jeden z nich za pomocą mdls :

> mdls test.txt 
kMDItemContentCreationDate     = 2012-03-25 04:18:50 +0000
kMDItemContentModificationDate = 2012-03-25 04:18:50 +0000
kMDItemContentType             = "public.plain-text"
kMDItemContentTypeTree         = (
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemDateAdded               = 2012-03-25 04:18:50 +0000
kMDItemDisplayName             = "test.txt"
kMDItemFSContentChangeDate     = 2012-03-25 04:18:50 +0000
kMDItemFSCreationDate          = 2012-03-25 04:18:50 +0000
kMDItemFSCreatorCode           = ""
kMDItemFSFinderFlags           = 0
kMDItemFSHasCustomIcon         = 0
kMDItemFSInvisible             = 0
kMDItemFSIsExtensionHidden     = 0
kMDItemFSIsStationery          = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "test.txt"
kMDItemFSNodeCount             = 975
kMDItemFSOwnerGroupID          = 20
kMDItemFSOwnerUserID           = 501
kMDItemFSSize                  = 975
kMDItemFSTypeCode              = ""
kMDItemKind                    = "Plain Text"
kMDItemLogicalSize             = 975
kMDItemPhysicalSize            = 4096

W takim przypadku zmienię domyślną aplikację dla wszystkich public.plain-texttypów.

Aby to zrobić, piszę:

defaults write com.apple.LaunchServices LSHandlers -array-add '{ LSHandlerContentType = \"public.plain-text\"; LSHandlerRoleAll = \"com.sublimetext.2\"; }'

Jeśli chcę, aby zmiany zaczęły obowiązywać, muszę ponownie uruchomić usługi uruchamiania w następujący sposób:

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user

Aby wyrazić uznanie tam, gdzie należy się kredyt, dowiedziałem się o tym podejściu z tego pytania i odpowiedzi stackoverflow.com: /programming/9172226/how-to-set-default-application-for-specific-file -types-in-mac-os-x

Ian C.
źródło
0

Ten post na SuperUser zawiera również przydatne informacje. Aby dowiedzieć się więcej o LaunchServices, oto link do dokumentacji dla programistów Apple na jej temat. Przejdź do sekcji zatytułowanej LSSetDefaultRoleHandlerForContentType (strona 48).

Jan Rygielski
źródło