Method: Keybox::Application::PasswordSafe#load_color_scheme

Defined in:
lib/keybox/application/password_safe.rb

#load_color_schemeObject

load the given color scheme. If the scheme cannot be found it will default to the :none scheme which has no color

The color_scheme file exists either in the application data directory, or in the same directory as the configuration file.

The file name convention for the scheme file is schemename.color_scheme.yaml. So for instance the default :dark_bg color scheme file is named:

dark_bg.color_scheme.yaml


161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'lib/keybox/application/password_safe.rb', line 161

def load_color_scheme
    if @options.color_scheme != :none then
        search_directories  = [ Keybox::APP_DATA_DIR, File.dirname(@options.config_file) ]
        scheme_basename     = "#{@options.color_scheme.to_s}.color_scheme.yaml"
        scheme_path         = nil
       
        # get the path to the file
        search_directories.each do |sd|
            if File.exists?(File.join(sd,scheme_basename)) then
                scheme_path = File.join(sd,scheme_basename)
                break
            end
        end
      
        # if we have a file then load it and make sure we have
        # all the valid labels.
        if scheme_path then
            initial_color_scheme = YAML::load(File.read(scheme_path))
          
            # make sure that everything is a Symbol and in the
            # process make sure that all of the required labels
            # are there.
            color_scheme = {}
            initial_color_scheme.each_pair do |label,ansi_seq|
                color_scheme[label.to_sym] = ansi_seq.collect { |a| a.to_sym }
            end

            # validate that all the required color labels exist
            if (NONE_SCHEME.keys - color_scheme.keys).size == 0 then
                ::HighLine.color_scheme = ::HighLine::ColorScheme.new(color_scheme)
            else
                @options.color_scheme   = :none  
                ::HighLine.color_scheme = ::HighLine::ColorScheme.new(NONE_SCHEME)

                @stdout.puts "The color scheme in file '#{scheme_path}' is Invalid"
                @stdout.puts "It is missing the following items:"

                (NONE_SCHEME.keys - color_scheme.keys).each do |missing_label|
                    @stdout.puts "\t :#{missing_label}"
                end

                @stdout.puts "Not using any color scheme."
            end

        else
            # if we don't have a file then set the color
            # scheme to nil and we're done
            @options.color_scheme = :none
            ::HighLine.color_scheme = ::HighLine::ColorScheme.new(NONE_SCHEME)
        end
    else
        ::HighLine.color_scheme = ::HighLine::ColorScheme.new(NONE_SCHEME)
    end
end