Existe uma maneira mais rápida de alterar os aplicativos padrão associados aos tipos de arquivo no OS X?


13

Existe algo mais conveniente do que usar o RCDefaultApp ou o Magic Launch , ou apenas pressionar repetidamente os botões Alterar tudo nos painéis de informações do Finder?

Pensei em escrever um script de shell que modificasse as matrizes CFBundleDocumentTypes nos arquivos Info.plist. Mas cada aplicativo possui várias chaves (às vezes um ícone) que precisam ser alteradas.

lsregister não pode ser usado para fazer modificações específicas no banco de dados dos Serviços de Ativação.

$ `locate lsregister` -h
lsregister: [OPTIONS] [ <path>... ]
                      [ -apps <domain>[,domain]... ]
                      [ -libs <domain>[,domain]... ]
                      [ -all  <domain>[,domain]... ]

Paths are searched for applications to register with the Launch Service database.
Valid domains are "system", "local", "network" and "user". Domains can also
be specified using only the first letter.

  -kill     Reset the Launch Services database before doing anything else
  -seed     If database isn't seeded, scan default locations for applications and libraries to register
  -lint     Print information about plist errors while registering bundles
  -convert  Register apps found in older LS database files
  -lazy n   Sleep for n seconds before registering/scanning
  -r        Recursive directory scan, do not recurse into packages or invisible directories
  -R        Recursive directory scan, descending into packages and invisible directories
  -f        force-update registration even if mod date is unchanged
  -u        unregister instead of register
  -v        Display progress information
  -dump     Display full database contents after registration
  -h        Display this help

Excelente trabalho Lauri, a rede está repleta de pessoas sugerindo Cmd-i, Alterar tudo. Darei dutium giro na próxima vez que experimentar outro aplicativo que registre novamente dezenas de tipos de arquivos.
Ocodo 03/07

Respostas:


12

holandês

  1. Faça o download do instalador do pkg ou compile da fonte
  2. Salve um arquivo como este em algum lugar:

    com.macromates.textmate public.shell-script all
    com.macromates.textmate public.unix-executable all
    com.macromates.textmate com.apple.property-list all
    org.videolan.vlc .avi all
    org.videolan.vlc .mkv all
    # ...
    
  3. duti $file.duti

Localizando identificadores de pacote ou UTIs:

bundleid() {
  osascript -e "id of app \"$*\""
}

getuti() {
  local f="/tmp/me.lri.getuti.${1##*.}"
  touch "$f"
  mdimport "$f"
  mdls -name kMDItemContentTypeTree "$f"
  rm "$f"
}

lsapps

Eu escrevi um roteiro de Ruby muito parecido com holandês antes de descobrir. No entanto, é necessário reiniciar o sistema operacional para aplicar as alterações. Ele também substitui quaisquer alterações externas em com.apple.LaunchServices.plist.

#!/usr/bin/env ruby

datafile = "#{ENV['HOME']}/Notes/lsapps.txt"
cachedir = "#{ENV['HOME']}/Library/Caches/me.lri.scripts"
cachefile = cachedir + "/lsapps"
`mkdir -p #{cachedir}; touch #{cachefile}`
cachetext = IO.read(cachefile)

a = []
IO.readlines(datafile).each do |line|
  line.strip!
  next unless line =~ /^([^#].*): (.+)/
  z = $1, $2

  bid = cachetext.scan(/#{z[0]}  (.*)/)[0]
  unless bid
    bid = `osascript -e 'id of app "#{z[0]}"'`.chomp
    next unless bid
    File.open(cachefile, "a") { |f| f.puts(z[0] + "  " + bid) }
  end

  z[1].strip.split(" ").each do |e|
    if e =~ /(.+):\/\/$/
      a << "{LSHandlerURLScheme='#{$1}';LSHandlerRoleAll='#{bid}';}"
    elsif e.include?(".")
      a << "{LSHandlerContentType='#{e}';LSHandlerRoleAll='#{bid}';}"
    else
      a << "{LSHandlerContentTag='#{e}';LSHandlerContentTagClass=\
'public.filename-extension';LSHandlerRoleAll='#{bid}';}"
    end
  end
end

system("defaults", "write", "com.apple.LaunchServices", "LSHandlers",
"(" + a.join(",") + ")")

`defaults write com.apple.LaunchServices LSQuarantine -bool false`

lsapps.txt

NetNewsWire Lite: feed:// public.rss
iCal: icaltodo icalevent
Google Chrome: chrome://
Safari: public.html
TextEdit: txt text md markdown csv
TextMate: public.shell-script public.unix-executable public.script ssh:// xml plist dict css rst tex sh pl py rb gemspec php js java c h m conf bash opml as cfm cfml class coffee ctp erb rhtml haml less msass scss yaml rd
VLC: avi mpg flv mkv mp4 flac 3gp
The Unarchiver: rar
Skim: pdf
iChm: chm
AppleScript Editor: scpt
Sequential: png jpg


Comentado por @kopischke… em alguns casos, não é necessário reiniciar o sistema operacional após o uso do duti.
Graham Perrin

2
@GrahamPerrin eu quis dizer que meu próprio script Ruby (não holandês) requer reiniciar. Na verdade, mudei para duti principalmente porque não requer a reinicialização ou substituição do plist.
Lri

1

Você pode alterar qual aplicativo abre todos os AVIs com bastante facilidade, sem a necessidade de scripts. Encontre um arquivo AVI e obtenha informações sobre ele. Isso mostrará as informações do arquivo. Selecione o programa que você deseja abrir os arquivos e clique no botão "Alterar tudo ...". Isso solicitará que você altere a associação padrão. insira a descrição da imagem aqui

Como um pequeno ponto, os garfos de recursos não estão sendo eliminados, mas os códigos dos criadores. Como tal, os sistemas Mac OS mais novos têm um sistema mais flexível para descobrir como abrir arquivos. Os aplicativos devem funcionar em arquivos que não possuem bifurcações de recursos, mas alguns aplicativos ainda os usam.


1
Alterar o aplicativo padrão de um diálogo de informações requer cerca de 10 ações de mouse ou teclado. Isso fica bastante irritante depois das primeiras centenas de vezes.
Lri 29/09

Nesse caso, veja esta resposta em outra parte do site, ela mostrará como fazer uma alteração no lote da linha de comando.
Mauvedeity

(A resposta vinculada é sobre como alterar o aplicativo padrão de um único arquivo a partir da bifurcação de recursos). futuro.
Lri
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.