Cambiare l'applicazione predefinita (per un'estensione di file) tramite script / riga di comando?


11

C'è un modo per definire l'applicazione predefinita per un'estensione di file tramite uno script Apple, un comando da riga di comando (come defaults write [...]).

So che è possibile modificarlo manualmente tramite il pannello delle informazioni o utilizzando RCDefaultApp, ma poiché devo configurare molte macchine e account utente, vorrei trovare un modo per automatizzare il processo.

Risposte:


6

duti è un'utilità di shell che consente di utilizzare un file di testo per configurare le applicazioni predefinite per tipi di file e schemi URL.

Ad esempio, salva un file come questo come ~/.duti:

com.gnu.Emacs public.plain-text all 
com.gnu.Emacs public.unix-executable all
org.videolan.vlc .mkv all

Quindi corri duti ~/.duti.

È possibile installare duti con brew install dutio eseguendo 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.


Questo sembra promettente, anche se non riesco a compilarlo su OS X 10.7.x o 10.8.x: checking which SDK to use... configure: error: darwin12.0.0 is not a supported system.
Mathias Bynens,

Il file binario nell'installer di pkg funziona ancora per me il 10.8.
Lri,

Vedo. Per riferimento futuro, ecco il link per quel download: downloads.sourceforge.net/project/duti/duti/duti-1.5.0/…
Mathias Bynens

Funziona su 10.8? Ho impostato l'applicazione predefinita per aprire i .avifile su Quicktime Player (usando il Finder → Ottieni informazioniApri con ... → _Cambia tutto ), quindi ho eseguito duti -s org.videolan.vlc public.avi allinvece VLC, quindi ho riavviato LaunchServices - ma sembrava non avere alcun effetto. (Vedi l' elenco delle UTI dichiarate dal sistema .)
Mathias Bynens,

1
Funziona almeno per me. Non dovrebbe richiedere la ricostruzione del database di Launch Services o il riavvio o altro. Se dai un'occhiata ~/Library/Preferences/com.apple.LaunchServices.plist, duti converte automaticamente la maggior parte delle estensioni di file in UTI, quindi di solito puoi specificare i tipi come .aviinvece di public.avi. Le UTI di alcune estensioni di file dipendono dalle applicazioni installate.
Lri,

12

Launch Services è responsabile delle associazioni di file predefinite.

Diciamo che volevo cambiare tutti i file di testo da aprire in Sublime Text 2.

Per prima cosa ho bisogno di kMDItemCFBundleIdentifier per Sublime Text 2. Posso usare mdls per ottenere queste informazioni:

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

Posso scoprire il valore del tipo di contenuto per i file di testo controllandone uno con 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

In questo caso, cambierò l'applicazione predefinita per tutti i public.plain-texttipi.

Per fare ciò scrivo:

defaults write com.apple.LaunchServices LSHandlers -array-add '{ LSHandlerContentType = \"public.plain-text\"; LSHandlerRoleAll = \"com.sublimetext.2\"; }'

Se voglio che le modifiche abbiano effetto, dovrò riavviare Launch Services in questo modo:

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user

E per dare credito quando è dovuto il credito, ho imparato questo approccio da questa domanda e risposta di stackoverflow.com : /programming/9172226/how-to-set-default-application-for-specific-file -Tipi-in-mac-os-x


0

Questo post su SuperUser contiene anche alcune informazioni utili. Per ulteriori informazioni su LaunchServices, ecco un link alla documentazione per gli sviluppatori di Apple su di esso. Vai alla sezione intitolata LSSetDefaultRoleHandlerForContentType (pagina 48).

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.