From fae4cbd9e88735bfb8a8c5bec533ec573ec2452b Mon Sep 17 00:00:00 2001 From: Ori Peleg Date: Sun, 9 Sep 2012 21:51:40 +0300 Subject: [PATCH] linkapp: create Finder aliases Symlinks to apps don't play well with Spotlight, but Finder alises do, so let's create them instead. Closes Homebrew/homebrew#14821. Signed-off-by: Adam Vandenberg --- Library/Contributions/cmds/brew-linkapps.rb | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/Library/Contributions/cmds/brew-linkapps.rb b/Library/Contributions/cmds/brew-linkapps.rb index 92e1f6890c..ec0f658d49 100755 --- a/Library/Contributions/cmds/brew-linkapps.rb +++ b/Library/Contributions/cmds/brew-linkapps.rb @@ -9,6 +9,19 @@ unless File.exist? HOME_APPS exit 1 end +FINDER_ALIAS_MAGIC_PREFIX = "book\x00\x00\x00\x00mark\x00\x00\x00\x00" + +def finder_alias?(filename) + return false if not File.file? filename + File.open(filename) do |f| + return f.read(FINDER_ALIAS_MAGIC_PREFIX.length) == FINDER_ALIAS_MAGIC_PREFIX + end +end + +def create_finder_alias(from, to) + system %Q{osascript -e 'tell application "Finder" to make alias file to POSIX file "#{from}" at POSIX file "#{to}"' > /dev/null} +end + HOMEBREW_CELLAR.subdirs.each do |keg| next unless keg.subdirs name = keg.basename.to_s @@ -16,16 +29,16 @@ HOMEBREW_CELLAR.subdirs.each do |keg| if ((f = Formula.factory(name)).installed? rescue false) Dir["#{f.installed_prefix}/*.app", "#{f.installed_prefix}/bin/*.app", "#{f.installed_prefix}/libexec/*.app"].each do |p| puts "Linking #{p}" - appname = File.basename(p) + appname = File.basename(p, ".app") target = HOME_APPS+"/"+appname if File.exist? target - if File.symlink? target + if File.symlink? target or finder_alias? target system "rm", target else onoe "#{target} already exists, skipping." end end - system "ln", "-s", p, HOME_APPS + create_finder_alias(p, HOME_APPS) end end end