Jak mogę zmienić domyślną aplikację dla wszystkich plików określonego typu poprzez Terminal w OS X?
macos
file-association
yashodhan
źródło
źródło
Odpowiedzi:
Mam prostszy sposób. Będziesz chciał Homebrew, jeśli jeszcze go nie masz:
Zainstaluj duti:
Teraz musisz znaleźć identyfikator aplikacji, której chcesz użyć, i przypisać ją do rozszerzenia, którego chcesz używać. W tym przykładzie używam już nawiasów
*.sh
i chcę go również używać do*.md
plików zamiast xcode.Uzyskaj domyślny identyfikator aplikacji dla
.sh
plików:Ostatnia linia to identyfikator.
Użyj tego identyfikatora aplikacji dla wszystkich
.md
plików:źródło
osascript -e 'id of app "$appName"'
aby uzyskać identyfikator dowolnej aplikacji zainstalowanej w systemieduti -s $(osascript -e 'id of app "Visual Studio Code"') .md all
Edit
~/Library/Preferences/com.apple.LaunchServices.plist
.Dodaj pozycję pod
LSHandlers
zawierającą identyfikator UTI (kluczLSHandlerContentType
, np.public.plain-text
) I identyfikator pakietu aplikacji (LSHandlerRoleAll
npcom.macromates.textmate
.).Wygląda to tak w Edytorze list właściwości :
Aby to zrobić z wiersza poleceń, użyj
defaults
lub/usr/libexec/PlistBuddy
. Oba mają obszerne strony.Na przykład, aby otworzyć wszystkie
.plist
pliki za pomocąXcode
:Oczywiście, musisz upewnić się, że nie ma już innego wpisu dla UTI
com.apple.property-list
już tam.Oto bardziej kompletny skrypt, który usunie istniejące wpisy dla UTI i doda nowy. Może obsłużyć
LSHandlerContentType
i zawsze będzie ustawionyLSHandlerRoleAll
, i ma zakodowane identyfikatory pakietów zamiast parametrów. Poza tym powinien działać całkiem dobrze.źródło
x=~/Library/Preferences/com.apple.LaunchServices.plist; plutil -convert xml1 $x; open -a TextEdit $x
skopiowanie i wklejenie tych wpisów LSHandler. Aby uzyskać identyfikator pakietu, możesz to zrobićosascript -e 'bundle identifier of (info for (path to app "TextEdit"))'
.defaults
wydaje się, że nie jest w stanie tego zrobić i wymaga kilkuPlistBuddy
połączeń. Ale można to zrobić w skrypcie powłoki wielokrotnego użytku.