Zmienić powiązanie plików w terminalu?

17

Czy istnieje metoda kojarzenia typów plików z aplikacjami za pośrednictwem terminala? Pomyślałem, że ~ / Library / Preferences / com.apple.launchservices.plist może to zrobić, a także widziałem: Dlaczego zmiana wiersza poleceń na ~ / Library / Preferences / com.apple.LaunchServices.plist nie działa natychmiast? ale nie mogę tego uruchomić.

Chyba szukam sposobu naśladowania tego, co robi GUI, gdy ktoś używa go do zmiany typów powiązań, wydaje się, że działa tam natychmiast ...

knishka
źródło

Odpowiedzi:

8

Możesz edytować ~/Library/Preferences/com.apple.LaunchServices.plistw edytorze tekstu po przekonwertowaniu go na XML:

plutil -convert xml1 ~/Library/Preferences/com.apple.LaunchServices.plist

Następnie dodaj do LSHandlerstablicy następujące wpisy :

<dict>
  <key>LSHandlerContentType</key>
  <string>com.adobe.pdf</string>
  <key>LSHandlerRoleAll</key>
  <string>net.sourceforge.skim-app.skim</string>
</dict>
<dict>
  <key>LSHandlerContentTag</key>
  <string>mkv</string>
  <key>LSHandlerContentTagClass</key>
  <string>public.filename-extension</string>
  <key>LSHandlerRoleAll</key>
  <string>org.videolan.vlc</string>
</dict>

Możesz użyć, mdlsaby zobaczyć identyfikatory UTI typów plików i coś podobnego, osascript -e 'id of app "AppName"'aby zobaczyć identyfikatory pakietów aplikacji.

Możesz zastosować zmiany com.apple.LaunchServices.plist, uruchamiając ponownie. Wylogowanie i ponowne zalogowanie to za mało.


UWAGA : dutinie jest już w fazie rozwoju i został oznaczony przez swoich opiekunów jako „nieobsługiwany”. W projekcie nie odnotowano znaczących postępów od 2012 r. Oprócz aktualizacji konfiguracji. Przenosi się z Sourceforge do Github. Ta odpowiedź została zaktualizowana o nowe linki.

Używam również duti . Zapisałem taki plik (z około 100 liniami) jako ~/.duti:

org.gnu.Emacs public.plain-text all # .txt, .text, plain text files without an extension
org.gnu.Emacs public.unix-executable all # executable scripts
com.SequentialX.Sequential .jpg all
org.videolan.vlc .mkv all

Mam uruchomionego agenta, który działa duti ~/.dutiautomatycznie po ~/.dutizmianie.

Zwykle możesz używać rozszerzeń plików (jak .jpg) zamiast identyfikatorów UTI (jak public.jpg), aby określić typy plików. dutikonwertuje rozszerzenia na UTI, które dotyczą również innych rozszerzeń (takich jak .jpeg). W przypadku niektórych rozszerzeń, takich jak .mkvi .tex, interfejs użytkownika zależy od tego, która aplikacja najpierw zarejestrowała rozszerzenie.

Najnowsza wersja z dutitylko zawiera kod źródłowy, ale 1.5.0 zawiera również instalatora.

Lri
źródło
5

Sprawdź duti :

duti to narzędzie wiersza polecenia napisane przez Andrew Mortensena, zaprojektowane do ustawiania domyślnych aplikacji dla typów dokumentów i schematów URL w Mac OS X.

Typy dokumentów w systemie Mac OS X są definiowane przez to, co Apple nazywa identyfikatorami jednolitego typu lub identyfikatorami UTI. Na przykład pliki HTML mają identyfikator UTI public.html. Dokumenty Microsoft Word są opisane w UTI com.microsoft.word.doc. Apple udostępnia wiele interfejsów użytkownika z systemem Mac OS X, ale programiści mogą definiować własne, o ile interfejs użytkownika jest unikalny dla tego typu dokumentu.

Nazwa duti oznacza „domyślnie dla UTI”.

da4
źródło
2
Sugestia obowiązkowa: użyj brew install dutido instalacjiduti
Pier Paolo Ramon
1

Oto uruchomiony agent dla duti, który załatwi sprawę:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.duti.watcher</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/duti</string>
      <string>/Users/joshgummersall/.duti</string>
    </array>
    <key>UserName</key>
    <string>joshgummersall</string>
    <key>KeepAlive</key>
    <false/>
    <key>WatchPaths</key>
    <array>
      <string>/Users/joshgummersall/.duti</string>
    </array>
  </dict>
</plist>

Oczywiście zastąp joshgummersallswoją własną nazwą użytkownika. Umieściłem ten plik ~/Library/LaunchAgents/duti.plist, od chmmodd do 644 i uruchomiłem:

$ launchctl load -F -w ~/Library/LaunchAgents/duti.plist
Josh Gummersall
źródło