Cambia l'associazione dei file nel terminale?

16

Esiste un metodo per associare i tipi di file con le applicazioni tramite terminale? Ho pensato che ~ / Library / Preferences / com.apple.launchservices.plist potrebbe farlo, e ho anche visto: Perché una riga di comando cambia in ~ / Library / Preferences / com.apple.LaunchServices.plist non è efficace immediatamente? ma Non riesco a farlo funzionare.

Penso che sto cercando un modo per imitare ciò che la GUI fa quando qualcuno lo usa per cambiare i tipi di associazione, sembra che funzioni istantaneamente lì ...

    
posta knishka 16.05.2013 - 16:19
fonte

4 risposte

7

Puoi modificare ~/Library/Preferences/com.apple.LaunchServices.plist in un editor di testo dopo averlo convertito in XML:

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

Quindi aggiungi voci come questa alla matrice LSHandlers :

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

Puoi usare mdls per vedere gli UTI dei tipi di file e qualcosa come osascript -e 'id of app "AppName"' per vedere gli identificatori di bundle delle applicazioni.

Puoi applicare le modifiche a com.apple.LaunchServices.plist riavviando. Disconnettersi e rientrare non è sufficiente.

Uso anche duti . Ho salvato un file come questo (con circa 100 righe) come ~/.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

Ho un agente launchd che esegue duti ~/.duti automaticamente quando ~/.duti è cambiato.

Normalmente puoi utilizzare le estensioni dei nomi di file (come .jpg ) invece di un UTI (come public.jpg ) per specificare i tipi di file. duti converte le estensioni in UTI che si applicano anche ad altre estensioni (come .jpeg ). Per alcune estensioni come .mkv e .tex , l'UTI dipende da quale applicazione ha registrato l'estensione per prima.

L'ultima versione di duti (1.5.1) include solo il codice sorgente, ma 1.5.0 include anche un programma di installazione.

    
risposta data 16.05.2013 - 23:00
fonte
5

Dai un'occhiata a duti :

duti is a command-line tool written by Andrew Mortensen, designed to set default applications for document types and URL schemes on Mac OS X.

Document types on Mac OS X are defined by what Apple calls Uniform Type Identifiers, or UTIs. HTML files, for example, have a UTI of public.html. Microsoft Word documents are described by the UTI com.microsoft.word.doc. Apple provides many UTIs with Mac OS X, but developers are free to define their own, as long as the UTI is unique to that document type.

duti's name means "default for UTI."

    
risposta data 16.05.2013 - 17:38
fonte
1

Ecco un launchd agent per duti che farà il trucco:

<?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>

Ovviamente sostituisci joshgummersall con il tuo nome utente. Ho inserito questo file in ~/Library/LaunchAgents/duti.plist , chmmod d in 644 e ho eseguito:

$ launchctl load -F -w ~/Library/LaunchAgents/duti.plist
    
risposta data 10.11.2016 - 04:51
fonte
0

Risposta breve: l'associazione di un'applicazione di un file è memorizzata nel fork di risorse del file e Apple fornisce due utilità ( Rez e DeRez ) che consentire la manipolazione dei fork delle risorse., ma questo non è per i deboli di cuore.

Per maggiori dettagli, questa domanda ha una risposta molto approfondita al Super User:

risposta data 16.05.2013 - 17:13
fonte

Leggi altre domande sui tag