Sha256: 9ead15e4c784dd76c90f9d7433329bbebcafdb40233086f12657efffb4b6b2f1

Contents?: true

Size: 1.34 KB

Versions: 5

Compression:

Stored size: 1.34 KB

Contents

module Vedeu

  module Editor

    # Capture input from the terminal via 'getch'.
    #
    class Capture

      ESCAPE_KEY_CODE = 27 # \e

      # @param console [IO]
      # @return [String|Symbol]
      def self.read(console)
        new(console).read
      end

      # Returns a new instance of Vedeu::Editor::Capture.
      #
      # @param console [IO]
      # @return [Vedeu::Editor::Capture]
      def initialize(console)
        @console = console
      end

      # @return [String|Symbol]
      def read
        Vedeu::Input::Translator.translate(keys)
      end

      private

      # @return [String]
      def keys
        keys = console.getch

        if keys.ord == ESCAPE_KEY_CODE
          keys << console.read_nonblock(5) rescue nil
          keys << console.read_nonblock(4) rescue nil
          keys << console.read_nonblock(3) rescue nil
          keys << console.read_nonblock(2) rescue nil
        end

        return Vedeu::Input::Mouse.click(keys) if click?(keys)

        keys
      end

      # Returns a boolean indicating whether a mouse click was
      # received.
      #
      # @param keys [String]
      # @return [Boolean]
      def click?(keys)
        keys.start_with?("\e[M")
      end

      # @return [IO]
      def console
        @console || Vedeu::Terminal.console
      end

    end # Capture

  end # Editor

end # Vedeu

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
vedeu-0.6.59 lib/vedeu/editor/capture.rb
vedeu-0.6.58 lib/vedeu/editor/capture.rb
vedeu-0.6.57 lib/vedeu/editor/capture.rb
vedeu-0.6.56 lib/vedeu/editor/capture.rb
vedeu-0.6.54 lib/vedeu/editor/capture.rb