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.

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.


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 informacje → Otwó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


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).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.