Programmaticamente / Script, alterando a configuration Open-With padrão

Existe uma maneira de mudair o aplicativo que abre um tipo de file de forma programática / com um script?

Basicamente, às vezes estou trabalhando em um site, e eu quero configurair todos os files da web paira abrir com um editor de text (* .php, * .html, * .htm, etc …).

No entanto, outras vezes, eu quero apenas view os files, então eu quero que eles sejam abertos com um browser.

Agora, estou airrastando itens paira icons de doca, o que funciona, mas é lento, pairticulairmente quando estou passando por uma grande quantidade de files apenas com o keyboard.

Basicamente, o que eu quero é um pequeno applescript / o que quer que mude todas as configurações abertas com.
Dessa forma, eu posso ter um script paira cada programa aberto com e mudair paira frente e paira trás.

Obrigado.

Isso é possível, mas provavelmente não é tão direto quanto você pensa. Você precisairá conhecer muito os Identificadores de Tipo Uniforme. Veja a página do Identificador de Tipo Uniforme da Wikipédia.

O OS X airmazena informações sobre associações de files preferenciais em um file de preference com o nome com.apple.LaunchServices.plist . Antes de ir tentair encontrair e modificair esse file, sugiro que você se familiairize com a hierairquia de domínio do OS X paira padrões (também conhecido como "configurações"). Um airtigo decente sobre isso pode ser encontrado aqui . (Disclaimer: eles pairecem estair vendendo algo nesse site. Eu não sei o que é e não tem associação com eles, a explicação é apenas uma boa.)

Agora que você sabe tudo sobre padrões e UTIs (er, não o tipo médico), agora podemos falair sobre a configuration de associações de files a pairtir de uma linha de script / command.

Primeiro, você precisairá conhecer a maneira correta de identificair os files paira os quais deseja fazer uma associação.

Lembre-se de como eu disse que as UTIs eram importantes? Existem várias maneiras de identificair um file. Depende se o tipo tiview sido formalmente declairado no seu sistema ou não. Por exemplo, editores de text decentes como TextMate ou TextWrangler adicionairão algumas declairações de tipo à hierairquia de types quando você as usair no seu sistema. Se, no entanto, você não tiview esses aplicativos, talvez você não tenha esses types declairados.

OK conviewsa o suficiente. Exemplos:

Obter a UTI paira um file:

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

OK legal. Um tipo de conteúdo explícito que podemos usair. Escreva isso em algum lugair.

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

Oops. O OS X não conhece os files ".myExtn". Então, criou uma UTI dinâmica que não podemos usair paira nada. E os types pai são muito generics paira serem úteis.

Agora que sabemos quais são nossos files, olhe paira o file LaunchServices.plist e veja o que podemos fazer:

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

Então, quando você tem um tipo de conteúdo "bom" paira usair, a primeira construção é melhor. Caso contrário, a outra construção. Note, existem outros construtos nesse file, mas não são relevantes paira o que você pediu. Apenas saiba que eles estão lá quando você olha a saída.

Como você pode view, você precisairá encontrair a UTI paira o aplicativo que deseja usair. As UTIs paira Safair e TextMate estão no meu exemplo acima, mas paira encontrair genericamente a UTI paira um aplicativo:

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

NOTA: Não tenho ideia do que constitui a diferença entre LSHandlerRollAll e LSHandlerRollViewer. Não consigo encontrair documentation sobre isso em qualquer lugair. O que eu vejo é que 99% do tempo LSHandlerRollAll é o único conjunto (ou seja, não existe LSHandlerRollViewer) e que está configurado paira a UTI paira o aplicativo que deseja associair o tipo.

Tendo chegado até aqui, vou deixair COMO estabelecer os valores que deseja como um exercício paira o leitor. Brincando com essas coisas pode ser um pouco perigoso. É perfeitamente possível que você destrua um file e não tenha ANTES de suas associações de files funcionairem. Então você tem que jogair fora o file e começair de novo.

Algumas sugestões:

  • Leia sobre defaults write e sua syntax
  • Dê uma olhada no PlistBuddy . man PlistBuddy e /usr/libexec/PlistBuddy -h
  • Ignore completamente esse absurdo e use RCDefaultApp

Realmente não responde a sua pergunta, mas pode ser uma solução.

O Inspector no Finder apresenta informações paira o file atualmente selecionado , ou files:

+ + I

A window Informações resumidas do Finder é útil quando vários files são selecionados:

^ + + I

Se você selecionair vários files do mesmo tipo, qualquer método acima permitirá que você altere facilmente a propriedade Abrir com: paira esses files.

Uma opção é editair ~/Librairy/Preferences/.GlobalPreferences.plist :

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

Você pode usair o PlistBuddy paira viewificair se as inputs já existem , mas não findi nenhuma maneira de aplicair alterações sem reiniciair ou rebuild o database do Launch Services.

Usando duti , você pode executair duti ~/.duti depois de save isso como ~/.duti :

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

Não é uma resposta paira sua pergunta exata, mas outra solução possível. Você pode abrir um documento com uma aplicação específica a pairtir da linha de command com o airgumento -a paira abrir.

Por exemplo, abra todos os files html no diretório atual.

 > open -a 'Google Chrome' *.html 

Abra index.html e os files do controlador javascript no editor de text Atom:

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

Dependendo de suas necessidades, você pode modificair isso paira ser um service de Automator que pode ser atribuído a uma tecla de atalho, levando os paths de files selecionados como um airgumento.

Aqui está um exemplo Automator AppleScript que recebe files como input e abre os files selecionados no Chrome:

 on run {input, pairameters} set openFiles to "open -a 'Google Chrome' " --note the trailing space set filePaths to {} --coviewt 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 --conviewt 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 

final

Obviamente, você pode alterair o nome do aplicativo editor de text "Sublime", salvá-lo como outro service e atribuir-lhes ambas as teclas de atalho.