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 RCDefaultApp ou Magic Launch , ou apenas pressionando repetidamente os botões Change All nos painéis de informações do Finder?

Eu pensei em escrever um script de shell que modificaria as matrizes CFBundleDocumentTypes nos arquivos Info.plist. Mas cada aplicativo tem várias chaves (às vezes, um ícone) que precisariam ser alteradas.

lsregister não pode ser usado para fazer modificações específicas no banco de dados do Launch Services.

$ '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
    
por user495470 02.07.2011 / 21:51

2 respostas

10

duti

  1. Faça o download do instalador do pkg ou compile a partir 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

Como encontrar 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 script Ruby muito parecido com o duti antes de descobrir. Requer o reinício do sistema operacional para aplicar as mudanças. Ele também sobrescreve 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
    
por 30.09.2011 / 00:45
1

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

Assim como um pequeno ponto, os garfos de recursos não estão sendo eliminados, mas os códigos criadores são. Assim, os sistemas mais recentes do Mac OS têm um sistema mais flexível para descobrir como abrir arquivos. Os aplicativos devem funcionar em arquivos que não possuem forks de recursos, mas alguns aplicativos ainda os utilizam.

    
por 29.09.2011 / 16:33

Tags