Sha256: 1c24431d5dec45e46d2afa38f89606d27fc01ea4e6ef93f6afea3a2e21aa5227

Contents?: true

Size: 1.83 KB

Versions: 2

Compression:

Stored size: 1.83 KB

Contents

module Vedeu

  # Captures input from the user via {Vedeu::Terminal#input} and translates
  # special characters into symbols.
  #
  # @api private
  class Input

    # @return [String|Symbol]
    def self.capture
      new.capture
    end

    # Returns a new instance of Input.
    #
    # @return [Input]
    def initialize; end

    # Triggers the keypress event with the key(s) pressed.
    #
    # @return []
    def capture
      Vedeu.trigger(:_keypress_, keypress)
    end

    private

    # Returns the input from the terminal.
    #
    # @return [String]
    def input
      @_input ||= Terminal.input
    end

    # Returns the translated (if possible) keypress(es) as either a String or a
    # Symbol.
    #
    # @return [String|Symbol]
    def keypress
      key = input

      specials.fetch(key, key)
    end

    # Translates (if possible) entered escape sequences into symbols
    # representing the key which was pressed.
    #
    # @return [Hash]
    def specials
      {
        "\r"      => :enter,
        "\t"      => :tab,
        "\e"      => :escape,
        "\e[A"    => :up,
        "\e[B"    => :down,
        "\e[C"    => :right,
        "\e[D"    => :left,
        "\e[5~"   => :page_up,
        "\e[6~"   => :page_down,
        "\e[H"    => :home,
        "\e[3~"   => :delete,
        "\e[F"    => :end,
        "\e[Z"    => :shift_tab,
        "\eOP"    => :f1,
        "\eOQ"    => :f2,
        "\eOR"    => :f3,
        "\eOS"    => :f4,
        "\e[15~"  => :f5,
        "\e[17~"  => :f6,
        "\e[18~"  => :f7,
        "\e[19~"  => :f8,
        "\e[20~"  => :f9,
        "\e[21~"  => :f10,
        "\e[23~"  => :f11,
        "\e[24~"  => :f12,
        "\e[1;2P" => :print_screen,
        "\e[1;2Q" => :scroll_lock,
        "\e[1;2R" => :pause_break,
        "\u007F"  => :backspace,
      }
    end

  end # Input

end # Vedeu

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
vedeu-0.2.9 lib/vedeu/input/input.rb
vedeu-0.2.8 lib/vedeu/input/input.rb