Sha256: 47db95a528d586a131564ceef3082e64bdaca05a55cd80f524aee879cfe21e27

Contents?: true

Size: 1.45 KB

Versions: 3

Compression:

Stored size: 1.45 KB

Contents

module VER
  class View::List::Ex < View::List
    def initialize(parent, filter, &callback)
      @filter = filter
      @previous = ''
      @propose = nil
      super(parent, &callback)
    end

    def update
      value = entry.value

      if value =~ /\s/
        completion
      else
        list.value = @filter.call(value)
      end
    end

    def pick_selection
      if @propose
        pick_action(@command, @propose)
      else
        pick_action(entry.value)
      end

      destroy
    end

    def completion
      value = entry.value
      command, arg = value.split(' ', 2)
      complete_command(command, arg)
    end

    def complete_command(command, arg)
      name = "complete_#{command}"

      if respond_to?(name)
        possible = send(name, arg)
        list.value = possible
        completed = complete_arg(arg, possible)
        @command, @propose = command, completed
        entry.value = "#{command} #{completed}"
      end
    end

    def complete_arg(arg, possible)
      case possible.size
      when 0
        return arg
      when 1
        return possible.first
      else
        require 'abbrev'
        abbrev = possible.abbrev

        if found = abbrev[arg]
          return found
        else
          return abbrev.keys.sort_by{|k| k.size }.first[0..-2]
        end
      end
    end

    def complete_e(value)
      Dir["#{value}*"].map{|f| File.directory?(f) ? "#{f}/" : f }
    end
    alias complete_o complete_e
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ver-2009.12.14 lib/ver/view/list/ex.rb
ver-2009.11.29 lib/ver/view/list/ex.rb
ver-2009.11.28 lib/ver/view/list/ex.rb