Domanda

C'è un modo per cambiare ciò che applicazione si apre un tipo di file di programmazione / con uno script?

In sostanza, a volte sto lavorando su un sito web, e voglio impostare tutti i file di Internet per aprire con un editor di testo (* .php, * .html, .htm *, ecc ...).

Tuttavia, altre volte, voglio vedere solo i file, quindi voglio loro di aprire con un browser.

In questo momento, sto trascinando gli elementi sul icone del dock, che funziona, ma è lento, soprattutto quando sto attraversando un gran numero di file con solo la tastiera.

In sostanza, quello che voglio è un piccolo AppleScript / qualcosa che cambia tutto il.
aperta con le impostazioni In questo modo, posso avere uno script per ogni schiena aperta con il programma, e il cambiamento e indietro.

Grazie.

È stato utile?

Soluzione

Questa è fattibile, ma probabilmente non è così semplice come si potrebbe pensare. Avrete bisogno di ottenere molto familiare con uniformi di tipo identificatori. Guardate Uniform pagina di Wikipedia Identificazione .

OS X memorizza le informazioni sulle associazioni di file preferiti in un file di preferenza con il nome com.apple.LaunchServices.plist. Prima di andare tenta di trovare e modificare il file, vi suggerisco di familiarizzare con la gerarchia del dominio di OS X per valori predefiniti ( "Impostazioni" note anche come). Un articolo decente su questo si possono trovare qui . (Disclaimer: sembrano essere vendere qualcosa su quel sito non so di cosa si tratta e non hanno alcuna associazione con loro, la spiegazione è solo una buona.).

Ora che sapete tutto di default e infezioni del tratto urinario (ehm, non il tipo di medicina), ora si può parlare di impostare le associazioni di file da un / a riga di comando script.

In primo luogo, avrete bisogno di conoscere il modo corretto per identificare i file di cui si desidera effettuare un'associazione.

Ricordate come ho detto IVU fosse importante? Ci sono diversi modi per identificare un file. Dipende se il tipo è stato formalmente dichiarato sul sistema oppure no. Ad esempio, decenti editor di testo come TextMate o TextWrangler aggiungerà un bel paio di dichiarazioni di tipo alla gerarchia dei tipi quando li si utilizza sul proprio sistema. Se, tuttavia, non si dispone di tali applicazioni, non si può avere quei tipi dichiarati.

OK, basta parlare. Esempi:

Ottenere l'UTI per un file:

$ mdls myFile.xml
...
kMDItemContentType             = "public.xml"
kMDItemContentTypeTree         = (
    "public.xml",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
...

Ok, raffreddare. Un tipo di contenuto esplicito che possiamo usare. Scrivere che da qualche parte lungo.

$ mdls myFile.myExtn
...
kMDItemContentType             = "dyn.ah62d4rv4ge8048pftb4g6"
kMDItemContentTypeTree         = (
    "public.data",
    "public.item"
)
...

Spiacenti. OS X non sa di file ".myExtn". Così, ha creato un'UTI dinamica che non possiamo usare per qualsiasi cosa. E i tipi di genitori sono troppo generico per essere utile.

Ora che sappiamo quali sono i nostri file sono, consente di guardare il file LaunchServices.plist e vedere cosa possiamo fare:

$defaults read com.apple.LaunchServices
{
    ...
    LSHandlers =     (
                {
            LSHandlerContentType = "public.html";
            LSHandlerRoleAll = "com.apple.safari";
            LSHandlerRoleViewer = "com.google.chrome";
        },
    ...
                {
            LSHandlerContentTag = myExtn;
            LSHandlerContentTagClass = "public.filename-extension";
            LSHandlerRoleAll = "com.macromates.textmate";
        },
    ...
    );
    ...
}

Quindi, quando si ha una "buona" tipo di contenuto per l'uso, il primo costrutto è meglio. Altrimenti l'altro costrutto. Nota, ci sono altri costrutti in quel file, ma non sono rilevanti per quello che hai chiesto. Basta sapere che ci sono quando si guarda attraverso l'uscita.

Come si può vedere, è necessario trovare l'UTI per l'applicazione che si desidera utilizzare. L'IVU per Safar e TextMate sono nel mio esempio di cui sopra, ma genericamente trovare l'UTI per un'applicazione:

$ cd /Applications/MyApp.app/Contents
$ less Info.plist
...
        <key>CFBundleIdentifier</key>
        <string>com.apple.Safari</string>
...

Nota: ho non idea di ciò che costituisce la differenza tra LSHandlerRoleAll e LSHandlerRoleViewer. Non riesco a trovare la documentazione su quel ovunque. Quello che do vedere è che il 99% del tempo LSHandlerRoleAll è l'unico set (vale a dire non v'è alcun LSHandlerRoleViewer a tutti) e che sia impostato sul UTI per l'applicazione che si desidera associare il digitare con.

Dopo aver portato questo fino ad ora, ho intenzione di lasciare come impostare i valori desiderati come esercizio per il lettore. Messing con queste cose possono essere un po 'pericoloso. E 'del tutto possibile per voi per rovinare un file e non hanno alcuna del vostro lavoro associazioni di file. Poi si deve buttare via il file e ricominciare da capo.

Alcuni indizi:

  • Leggi su defaults write e la sua sintassi
  • Date un'occhiata a PlistBuddy. man PlistBuddy e /usr/libexec/PlistBuddy -h
  • Salta tutte queste sciocchezze del tutto e l'uso RCDefaultApp

Altri suggerimenti

E 'in realtà non rispondere alla tua domanda, ma potrebbe essere una soluzione.

Il Ispettore nel Finder presenta le informazioni per la selezionato di file o file:

? + ? + I

Il Sommario Informazioni della finestra di Finder è utile quando più file sono selezionati:

^ + ? + I

Se si selezionano più file dello stesso tipo, allora o metodo di cui sopra vi permetterà di passare facilmente il Apri con:. di proprietà per i file

Una possibilità è quella di modificare ~/Library/Preferences/.GlobalPreferences.plist:

defaults write com.apple.LaunchServices LSHandlers -array-add '{LSHandlerContentType=com.adobe.pdf;LSHandlerRoleAll=net.sourceforge.skim-app.skim;}'

Puoi uso PlistBuddy per verificare se le voci esistono già , ma non ho trovato un modo per applicare le modifiche senza dover riavviare o la ricostruzione del database Launch Services.

Duti , è possibile eseguire duti ~/.duti dopo aver salvato questo come ~/.duti:

net.sourceforge.skim-app.skim .pdf all

Non è una risposta alla tua domanda esatta, ma un'altra possibile soluzione. È possibile aprire un documento con una specifica applicazione dalla riga di comando con l'argomento -a per aprire.

Ad esempio, aprire tutti i file HTML nella directory corrente.

> open -a 'Google Chrome' *.html

Apri index.html ei file del controller javascript nel editor di testo Atom:

> open -a 'atom' index.html js/controllers/*.js

A seconda delle esigenze, si potrebbe modificare questo per essere un servizio di Automator che potrebbe essere assegnato un tasto di scelta rapida, tenendo in percorsi di file selezionati come argomento.

Ecco un esempio di Automator AppleScript che riceve i file in ingresso e apre i file selezionati in Chrome:

on run {input, parameters}
set openFiles to "open -a 'Google Chrome' " --note the trailing space
set filePaths to {}

--covert the filePaths to posix style
repeat with i from 1 to count of input
    set aFile to input's item i as alias
    set aFile to quoted form of POSIX path of aFile
    set filePaths's end to aFile
end repeat

--convert filePaths list to a string delimited by spaces
set tid to text item delimiters
set text item delimiters to " "
set filePaths to filePaths as text
set text item delimiters to tid

--Open files via commandline
do shell script openFiles & filePaths
return input

fine corsa

Ovviamente, si potrebbe cambiare il nome dell'applicazione editor di testo "Sublime", salvarlo come un altro servizio, e assegnare loro entrambi i tasti di scelta rapida.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a apple.stackexchange
scroll top