def apply_options(options)
      return unless options
      
      options.each do |key, value|
        options[key] = value.call if value.kind_of?(Proc)
      end
      @_options ||= {}
      @_options.merge! options
      @input  = setup_input_method(options[:input] || @input)
      @output = setup_output_method(options[:output] || @output)
      @output.silenced = options.key?(:silent) ? options[:silent] : !@output || @output.silenced?
      @line_processor = options[:processor] || options[:line_processor] || @line_processor
      @allow_ruby = options.key?(:allow_ruby) ? options[:allow_ruby] : @allow_ruby

      if options[:namespace]
        ns = options[:namespace] == :self ? self : options[:namespace]
        @namespace.replace(ns)
      end
      
      if @input
        @input.output = @output
        @input.prompt = prompt
        if @input.respond_to?(:completion_proc)
          @input.completion_proc = proc { |line| autocomplete(line) }
        end
      end
    end
def apply_options(options)
      return unless options
      
      options.each do |key, value|
        options[key] = value.call if value.kind_of?(Proc)
      end
      @_options ||= {}
      @_options.merge! options
      @input  = setup_input_method(options[:input] || @input)
      @output = setup_output_method(options[:output] || @output)
      @output.silenced = options.key?(:silent) ? options[:silent] : !@output || @output.silenced?
      @line_processor = options[:processor] || options[:line_processor] || @line_processor
      @allow_ruby = options.key?(:allow_ruby) ? options[:allow_ruby] : @allow_ruby

      if options[:namespace]
        ns = options[:namespace] == :self ? self : options[:namespace]
        @namespace.replace(ns)
      end
      
      if @input
        @input.output = @output
        @input.prompt = prompt
        if @input.respond_to?(:completion_proc)
          @input.completion_proc = proc { |line| autocomplete(line) }
        end
      end
    end
Applies a new set of options. Options that are currently unset or nil will not be modified.