Sha256: e2f5b5a72c4b55fb9c187ce0fa6fde7a99827e52a2c1e02972b80d1af46793cf

Contents?: true

Size: 1.18 KB

Versions: 42

Compression:

Stored size: 1.18 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
          @chars = 3

          begin
            keys << console.read_nonblock(@chars)

          rescue IO::WaitReadable
            IO.select([console])
            @chars -= 1
            retry

          rescue IO::WaitWritable
            IO.select(nil, [console])
            @chars -= 1
            retry

          end
        end

        keys
      end

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

    end # Capture

  end # Editor

end # Vedeu

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
vedeu-0.6.49 lib/vedeu/editor/capture.rb
vedeu-0.6.48 lib/vedeu/editor/capture.rb
vedeu-0.6.47 lib/vedeu/editor/capture.rb
vedeu-0.6.46 lib/vedeu/editor/capture.rb
vedeu-0.6.45 lib/vedeu/editor/capture.rb
vedeu-0.6.44 lib/vedeu/editor/capture.rb
vedeu-0.6.43 lib/vedeu/editor/capture.rb
vedeu-0.6.42 lib/vedeu/editor/capture.rb
vedeu-0.6.41 lib/vedeu/editor/capture.rb
vedeu-0.6.40 lib/vedeu/editor/capture.rb
vedeu-0.6.39 lib/vedeu/editor/capture.rb
vedeu-0.6.38 lib/vedeu/editor/capture.rb
vedeu-0.6.37 lib/vedeu/editor/capture.rb
vedeu-0.6.36 lib/vedeu/editor/capture.rb
vedeu-0.6.35 lib/vedeu/editor/capture.rb
vedeu-0.6.34 lib/vedeu/editor/capture.rb
vedeu-0.6.33 lib/vedeu/editor/capture.rb
vedeu-0.6.32 lib/vedeu/editor/capture.rb
vedeu-0.6.31 lib/vedeu/editor/capture.rb
vedeu-0.6.30 lib/vedeu/editor/capture.rb