Sha256: 82676cf616a0b6da8f4bd05a7b6509c83a61bb24e8db7b83f7fb7071cc3d1b5e

Contents?: true

Size: 1.17 KB

Versions: 3

Compression:

Stored size: 1.17 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

      def fetch_device_names
        current_device = nil
        list_devices_logs.map do |line|
          current_device = extracted_input_device_from(line) || current_device
          next unless natural_scroll_is_available?(line)
          current_device
        end.compact
      end

      def list_devices_logs
        Open3.popen3('libinput-list-devices') do |_i, o, _e, _w|
          return o.to_a
        end
      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

3 entries across 3 versions & 1 rubygems

Version Path
fusuma-0.7.1 lib/fusuma/device.rb
fusuma-0.7.0 lib/fusuma/device.rb
fusuma-0.6.0 lib/fusuma/device.rb