Cambia l'associazione dei file nel terminale?


18

Esiste un metodo per associare i tipi di file alle applicazioni tramite terminale? Ho pensato che ~ / Library / Preferences / com.apple.launchservices.plist potrebbe farlo, e ho anche visto: Perché una modifica della riga di comando in ~ / Library / Preferences / com.apple.LaunchServices.plist non ha effetto immediato? ma non riesco a farlo funzionare.

Immagino che sto cercando un modo per imitare ciò che fa la GUI quando qualcuno la usa per cambiare i tipi di associazione, sembra funzionare immediatamente lì ...

Risposte:


8

È possibile modificare ~/Library/Preferences/com.apple.LaunchServices.plistin un editor di testo dopo averlo convertito in XML:

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

Quindi aggiungere voci come questa LSHandlersall'array:

<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 mdlsper vedere le UTI dei tipi di file e qualcosa di simile osascript -e 'id of app "AppName"'per vedere gli identificatori di bundle delle applicazioni.

È possibile applicare le modifiche com.apple.LaunchServices.plistriavviando. Disconnettersi e riconnettersi non è sufficiente.


NOTA : dutinon è più in fase di sviluppo attivo ed è stato etichettato dai suoi manutentori come "non supportato". Il progetto non ha registrato grandi progressi dal 2012 a parte gli aggiornamenti di configurazione. Si è spostato da Sourceforge a Github. Questa risposta è stata aggiornata per includere i nuovi collegamenti.

Uso anche duti però. 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 di avvio che viene eseguito duti ~/.dutiautomaticamente quando ~/.dutiviene modificato.

In genere è possibile utilizzare estensioni di file (come .jpg) anziché UTI (come public.jpg) per specificare i tipi di file. duticonverte le estensioni in UTI che si applicano anche ad altre estensioni (come .jpeg). Per alcune estensioni come .mkve .tex, l'UTI dipende da quale applicazione ha prima registrato l'estensione.

L' ultima versione di dutisolo include il codice sorgente, ma 1.5.0 include anche un programma di installazione.


5

Dai un'occhiata a duti :

duti è uno strumento da riga di comando scritto da Andrew Mortensen, progettato per impostare applicazioni predefinite per tipi di documenti e schemi URL su Mac OS X.

I tipi di documento su Mac OS X sono definiti da ciò che Apple chiama Identificatori di tipo uniforme o UTI. I file HTML, ad esempio, hanno una UTI di public.html. I documenti di Microsoft Word sono descritti da UTI com.microsoft.word.doc. Apple fornisce molte UTI con Mac OS X, ma gli sviluppatori sono liberi di definirne una propria, purché l'UTI sia univoco per quel tipo di documento.

il nome di duti significa "predefinito per UTI".


2
Suggerimento obbligatorio: utilizzare brew install dutiper l'installazioneduti
Pier Paolo Ramon

1

Ecco un agente di lancio 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 sostituiscilo joshgummersallcon il tuo nome utente. Ho inserito questo file in ~/Library/LaunchAgents/duti.plist, da chmmodd a 644 e ho eseguito:

$ launchctl load -F -w ~/Library/LaunchAgents/duti.plist

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.