Sha256: cc821c3f6122e74991e872b3f9577391a6ebe60c74e079922dcda9a5aeb3e62c

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

module Fusuma
  # detect input device
  class Device
    class << self
      attr_writer :names

      def names
        return @names unless @names.nil?
        device_names = fetch_device_names
        MultiLogger.debug(device_names: device_names)
        raise 'Touchpad is not found' if device_names.empty?
        @names = device_names
      rescue RuntimeError => ex
        MultiLogger.error(ex.message)
        exit 1
      end

      private

      # @return [Array]
      def fetch_device_names
        [].tap do |devices|
          current_device = nil
          LibinputCommands.new.list_devices do |line|
            current_device = extracted_input_device_from(line) || current_device
            next unless natural_scroll_is_available?(line)
            devices << current_device
          end
        end.compact
      end

      def extracted_input_device_from(line)
        return unless line =~ /^Kernel: /
        line.match(/event[0-9]+/).to_s
      end

      def natural_scroll_is_available?(line)
        return false unless line =~ /^Nat.scrolling: /
        return false if line =~ %r{n/a}
        true
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fusuma-0.7.2 lib/fusuma/device.rb