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

8

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

So che puoi modificarlo manualmente tramite il pannello delle informazioni o utilizzando RCDefaultApp ma come devo configurare molte macchine e account utente mi piacerebbe trovare un modo per automatizzare il processo.

    
posta oschrenk 24.04.2012 - 14:48
fonte

3 risposte

4

duti è un'utilità 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 ~/.duti :

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

Esegui duti ~/.duti .

Puoi installare duti con brew install duti o 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 .

    
risposta data 24.04.2012 - 16:16
fonte
9

I servizi di avvio sono responsabili delle associazioni di file predefinite.

Diciamo che volevo cambiare tutti i file di testo per aprirli in Sublime Text 2.

Per prima cosa ho bisogno del 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 trovare il valore del tipo di contenuto per i file di testo controllando uno di essi 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 tipi public.plain-text .

Per fare ciò digito:

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 dove è dovuto il credito, ho imparato a conoscere questo approccio da questa domanda e risposta stackoverflow.com: link

    
risposta data 24.04.2012 - 15:58
fonte
0

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

    
risposta data 24.04.2012 - 16:15
fonte

Leggi altre domande sui tag