diff --git a/Rakefile b/Rakefile index e37f33e..ffa9199 100644 --- a/Rakefile +++ b/Rakefile @@ -166,11 +166,60 @@ def install_term_theme run %{ /usr/libexec/PlistBuddy -c "Add :'Custom Color Presets':'Solarized Dark' dict" ~/Library/Preferences/com.googlecode.iterm2.plist } run %{ /usr/libexec/PlistBuddy -c "Merge 'iTerm2/Solarized Dark.itermcolors' :'Custom Color Presets':'Solarized Dark'" ~/Library/Preferences/com.googlecode.iterm2.plist } - puts "======================================================" - puts "To make sure your profile is using the solarized theme" - puts "Please check your settings under:" - puts "Preferences> Profiles> [your profile]> Colors> Load Preset.." - puts "======================================================" + # If iTerm2 is not installed or has never run, we can't autoinstall the profile since the plist is not there + if !File.exists?(File.join(ENV['HOME'], '/Library/Preferences/com.googlecode.iterm2.plist')) + puts "======================================================" + puts "To make sure your profile is using the solarized theme" + puts "Please check your settings under:" + puts "Preferences> Profiles> [your profile]> Colors> Load Preset.." + puts "======================================================" + return + end + + # Ask the user which theme he wants to install + message = "Which theme would you like to apply to your iTerm2 profile?" + color_scheme = ask message, iTerm_available_themes + color_scheme_file = File.join('iTerm2', "#{color_scheme}.itermcolors") + + # Ask the user on which profile he wants to install the theme + profiles = iTerm_profile_list + message = "I've found #{profiles.size} #{profiles.size>1 ? 'profiles': 'profile'} on your iTerm2 configuration, which one would you like to apply the Solarized theme to?" + profiles << 'All' + selected = ask message, profiles + + if selected == 'All' + (profiles.size-1).times { |idx| apply_theme_to_iterm_profile_idx idx, color_scheme_file } + else + apply_theme_to_iterm_profile_idx profiles.index(selected), color_scheme_file + end +end + +def iTerm_available_themes + Dir['iTerm2/*.itermcolors'].map { |value| File.basename(value, '.itermcolors')} +end + +def iTerm_profile_list + profiles=Array.new + begin + profiles << %x{ /usr/libexec/PlistBuddy -c "Print :'New Bookmarks':#{profiles.size}:Name" ~/Library/Preferences/com.googlecode.iterm2.plist 2>/dev/null} + end while $?.exitstatus==0 + profiles.pop + profiles +end + +def ask(message, values) + puts message + while true + values.each_with_index { |val, idx| puts " #{idx+1}. #{val}" } + selection = STDIN.gets.chomp + if (Float(selection)==nil rescue true) || selection.to_i < 0 || selection.to_i > values.size+1 + puts "ERROR: Invalid selection.\n\n" + else + break + end + end + selection = selection.to_i-1 + values[selection] end def install_prezto @@ -256,6 +305,14 @@ def list_vim_submodules Hash[*result.flatten] end +def apply_theme_to_iterm_profile_idx(index, color_scheme_path) + values = Array.new + 16.times { |i| values << "Ansi #{i} Color" } + values << ['Background Color', 'Bold Color', 'Cursor Color', 'Cursor Text Color', 'Foreground Color', 'Selected Text Color', 'Selection Color'] + values.flatten.each { |entry| run %{ /usr/libexec/PlistBuddy -c "Delete :'New Bookmarks':#{index}:'#{entry}'" ~/Library/Preferences/com.googlecode.iterm2.plist } } + + run %{ /usr/libexec/PlistBuddy -c "Merge '#{color_scheme_path}' :'New Bookmarks':#{index}" ~/Library/Preferences/com.googlecode.iterm2.plist } +end def success_msg(action) puts ""