fusuma 2.4.1 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +32 -0
  3. data/fusuma.gemspec +17 -18
  4. data/lib/fusuma/config/index.rb +17 -17
  5. data/lib/fusuma/config/searcher.rb +1 -1
  6. data/lib/fusuma/config/yaml_duplication_checker.rb +7 -7
  7. data/lib/fusuma/config.rb +17 -13
  8. data/lib/fusuma/device.rb +12 -12
  9. data/lib/fusuma/environment.rb +10 -10
  10. data/lib/fusuma/hash_support.rb +1 -1
  11. data/lib/fusuma/libinput_command.rb +18 -19
  12. data/lib/fusuma/multi_logger.rb +4 -4
  13. data/lib/fusuma/plugin/base.rb +6 -6
  14. data/lib/fusuma/plugin/buffers/buffer.rb +5 -4
  15. data/lib/fusuma/plugin/buffers/gesture_buffer.rb +6 -6
  16. data/lib/fusuma/plugin/buffers/timer_buffer.rb +2 -2
  17. data/lib/fusuma/plugin/detectors/detector.rb +5 -5
  18. data/lib/fusuma/plugin/detectors/hold_detector.rb +29 -29
  19. data/lib/fusuma/plugin/detectors/pinch_detector.rb +47 -47
  20. data/lib/fusuma/plugin/detectors/rotate_detector.rb +40 -40
  21. data/lib/fusuma/plugin/detectors/swipe_detector.rb +43 -43
  22. data/lib/fusuma/plugin/events/event.rb +11 -11
  23. data/lib/fusuma/plugin/events/records/gesture_record.rb +5 -5
  24. data/lib/fusuma/plugin/events/records/index_record.rb +5 -5
  25. data/lib/fusuma/plugin/events/records/record.rb +2 -2
  26. data/lib/fusuma/plugin/events/records/text_record.rb +1 -1
  27. data/lib/fusuma/plugin/executors/command_executor.rb +4 -4
  28. data/lib/fusuma/plugin/executors/executor.rb +3 -3
  29. data/lib/fusuma/plugin/filters/filter.rb +3 -3
  30. data/lib/fusuma/plugin/filters/libinput_device_filter.rb +12 -12
  31. data/lib/fusuma/plugin/inputs/input.rb +8 -8
  32. data/lib/fusuma/plugin/inputs/libinput_command_input.rb +13 -13
  33. data/lib/fusuma/plugin/inputs/timer_input.rb +3 -3
  34. data/lib/fusuma/plugin/manager.rb +27 -21
  35. data/lib/fusuma/plugin/parsers/libinput_gesture_parser.rb +10 -10
  36. data/lib/fusuma/plugin/parsers/parser.rb +3 -3
  37. data/lib/fusuma/string_support.rb +3 -3
  38. data/lib/fusuma/version.rb +1 -1
  39. data/lib/fusuma.rb +10 -10
  40. metadata +3 -79
  41. data/spec/helpers/config_helper.rb +0 -20
  42. data/spec/lib/config/searcher_spec.rb +0 -179
  43. data/spec/lib/config_spec.rb +0 -104
  44. data/spec/lib/custom_process_spec.rb +0 -29
  45. data/spec/lib/device_spec.rb +0 -96
  46. data/spec/lib/dummy_config.yml +0 -31
  47. data/spec/lib/fusuma_spec.rb +0 -103
  48. data/spec/lib/libinput-list-devices_iberianpig-XPS-9360.txt +0 -181
  49. data/spec/lib/libinput-list-devices_magic_trackpad.txt +0 -51
  50. data/spec/lib/libinput-list-devices_razer_razer_blade.txt +0 -252
  51. data/spec/lib/libinput-list-devices_thejinx0r.txt +0 -361
  52. data/spec/lib/libinput-list-devices_unavailable.txt +0 -36
  53. data/spec/lib/libinput_command_spec.rb +0 -164
  54. data/spec/lib/plugin/base_spec.rb +0 -74
  55. data/spec/lib/plugin/buffers/buffer_spec.rb +0 -80
  56. data/spec/lib/plugin/buffers/dummy_buffer.rb +0 -20
  57. data/spec/lib/plugin/buffers/gesture_buffer_spec.rb +0 -192
  58. data/spec/lib/plugin/detectors/detector_spec.rb +0 -43
  59. data/spec/lib/plugin/detectors/dummy_detector.rb +0 -24
  60. data/spec/lib/plugin/detectors/hold_detector_spec.rb +0 -145
  61. data/spec/lib/plugin/detectors/pinch_detector_spec.rb +0 -119
  62. data/spec/lib/plugin/detectors/rotate_detector_spec.rb +0 -125
  63. data/spec/lib/plugin/detectors/swipe_detector_spec.rb +0 -118
  64. data/spec/lib/plugin/events/event_spec.rb +0 -30
  65. data/spec/lib/plugin/events/records/gesture_record_spec.rb +0 -22
  66. data/spec/lib/plugin/events/records/record_spec.rb +0 -31
  67. data/spec/lib/plugin/events/records/text_record_spec.rb +0 -26
  68. data/spec/lib/plugin/executors/command_executor_spec.rb +0 -57
  69. data/spec/lib/plugin/executors/executor_spec.rb +0 -164
  70. data/spec/lib/plugin/filters/filter_spec.rb +0 -92
  71. data/spec/lib/plugin/filters/libinput_filter_spec.rb +0 -120
  72. data/spec/lib/plugin/inputs/input_spec.rb +0 -70
  73. data/spec/lib/plugin/inputs/libinput_command_input_spec.rb +0 -121
  74. data/spec/lib/plugin/inputs/timer_input_spec.rb +0 -40
  75. data/spec/lib/plugin/manager_spec.rb +0 -27
  76. data/spec/lib/plugin/parsers/libinput_gesture_parser_spec.rb +0 -76
  77. data/spec/lib/plugin/parsers/parser_spec.rb +0 -45
  78. data/spec/spec_helper.rb +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 134ea9e98557e1475809d32c0fff6a636721118b6923eec3a74d69ac94659126
4
- data.tar.gz: 40c33331caa554239fd5c56187c5273bd5abe0c9b83f1498a4cb8e4ff821d2d5
3
+ metadata.gz: 8c6f872a195572cd05d5cbf86ff5a55e3b7419b9ddc3a2e1b1b09bd395adde36
4
+ data.tar.gz: 51c32b562df304b04a0b607b9e4404bfb7fb031fee73388a2902b56a6a94c4a5
5
5
  SHA512:
6
- metadata.gz: eb7e3ee14cce7f5efa087fa48ded433068e2b5ab3c4e083e282ac0cc5d837bef84c43c755d8c2b3d70d931883076856579797d104e414c89360478eb71ec9134
7
- data.tar.gz: 61dc019f239f4bcd0e9398c0791cf2e16def41f82a458b20cb76a34aa36e414f3fea6e287eca731c7537d30fc4352f8c172dc95e1b23763f352085d2446a0d09
6
+ metadata.gz: 90da79d6210fc47324fda9d3b5e4f9ed1f4e820ccead8c2dc0341d2bb69e3bd691c34db39bdb83cd94529f9e69efe478d02c1cca43f4b953bddd4b0eb46f8888
7
+ data.tar.gz: adbd22a0b5a1d8213d96994e33a38c4cf2c6f667d33d16019cf1e4f90dee7d114301fee0c544e18e1e532fa7f10c5aa13c09963d5694072c63721bbc8f5ab065
data/README.md CHANGED
@@ -99,6 +99,38 @@ For sending shortcuts:
99
99
  sudo pacman -S xdotool
100
100
  ```
101
101
 
102
+ ### For Fedora
103
+
104
+ #### 1. Install libinput-tools
105
+
106
+ You need `libinput` release 1.0 or later.
107
+
108
+ ```bash
109
+ sudo dnf install libinput
110
+ ```
111
+
112
+ #### 2. Install Ruby
113
+
114
+ Fusuma runs in Ruby, so you must install it first.
115
+
116
+ ```bash
117
+ sudo dnf install ruby
118
+ ```
119
+
120
+ #### 3. Install Fusuma
121
+
122
+ ```bash
123
+ sudo gem install fusuma
124
+ ```
125
+
126
+ #### 4. Install xdotool (optional)
127
+
128
+ For sending shortcuts:
129
+
130
+ ```bash
131
+ sudo dnf install xdotool
132
+ ```
133
+
102
134
  ### Touchpad not working in GNOME
103
135
 
104
136
  Ensure the touchpad events are being sent to the GNOME desktop by running the following command:
data/fusuma.gemspec CHANGED
@@ -1,30 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path('lib', __dir__)
3
+ lib = File.expand_path("lib", __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'fusuma/version'
5
+ require "fusuma/version"
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = 'fusuma'
9
- spec.version = Fusuma::VERSION
10
- spec.authors = ['iberianpig']
11
- spec.email = ['yhkyky@gmail.com']
8
+ spec.name = "fusuma"
9
+ spec.version = Fusuma::VERSION
10
+ spec.authors = ["iberianpig"]
11
+ spec.email = ["yhkyky@gmail.com"]
12
12
 
13
- spec.summary = 'Multitouch gestures with libinput driver, Linux'
14
- spec.description = 'Fusuma is multitouch gesture recognizer. This gem makes your touchpad on Linux able to recognize swipes or pinchs and assign command to them. Read installation on Github(https://github.com/iberianpig/fusuma#installation).'
15
- spec.homepage = 'https://github.com/iberianpig/fusuma'
16
- spec.license = 'MIT'
13
+ spec.summary = "Multitouch gestures with libinput driver, Linux"
14
+ spec.description = "Fusuma is multitouch gesture recognizer. This gem makes your touchpad on Linux able to recognize swipes or pinchs and assign command to them. Read installation on Github(https://github.com/iberianpig/fusuma#installation)."
15
+ spec.homepage = "https://github.com/iberianpig/fusuma"
16
+ spec.license = "MIT"
17
17
 
18
- spec.files = Dir['{bin,lib,exe}/**/*', 'LICENSE*', 'README*', '*.gemspec']
19
- spec.test_files = Dir['{test,spec,features}/**/*']
20
- spec.bindir = 'exe'
21
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
- spec.require_paths = ['lib']
18
+ spec.files = Dir["{bin,lib,exe}/**/*", "LICENSE*", "README*", "*.gemspec"]
19
+ spec.bindir = "exe"
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ["lib"]
23
22
  spec.metadata = {
24
- 'rubygems_mfa_required' => 'true',
25
- 'yard.run' => 'yri' # use "yard" to build full HTML docs.
23
+ "rubygems_mfa_required" => "true",
24
+ "yard.run" => "yri" # use "yard" to build full HTML docs.
26
25
  }
27
26
 
28
- spec.required_ruby_version = '>= 2.5.1' # https://packages.ubuntu.com/search?keywords=ruby&searchon=names&exact=1&suite=all&section=main
27
+ spec.required_ruby_version = ">= 2.5.1" # https://packages.ubuntu.com/search?keywords=ruby&searchon=names&exact=1&suite=all&section=main
29
28
  # support bionic (18.04LTS) 2.5.1
30
29
  end
@@ -7,17 +7,17 @@ module Fusuma
7
7
  class Index
8
8
  def initialize(keys)
9
9
  @keys = case keys
10
- when Array
11
- keys.map do |key|
12
- if key.is_a? Key
13
- key
14
- else
15
- Key.new(key)
16
- end
17
- end
18
- else
19
- [Key.new(keys)]
20
- end
10
+ when Array
11
+ keys.map do |key|
12
+ if key.is_a? Key
13
+ key
14
+ else
15
+ Key.new(key)
16
+ end
17
+ end
18
+ else
19
+ [Key.new(keys)]
20
+ end
21
21
  end
22
22
 
23
23
  def inspect
@@ -29,11 +29,11 @@ module Fusuma
29
29
  def cache_key
30
30
  case @keys
31
31
  when Array
32
- @keys.map(&:symbol).join(',')
32
+ @keys.map(&:symbol).join(",")
33
33
  when Key
34
34
  @keys.symbol
35
35
  else
36
- raise 'invalid keys'
36
+ raise "invalid keys"
37
37
  end
38
38
  end
39
39
 
@@ -56,7 +56,7 @@ module Fusuma
56
56
  def initialize(symbol_word, skippable: false, fallback: nil)
57
57
  @symbol = begin
58
58
  symbol_word.to_sym
59
- rescue StandardError
59
+ rescue
60
60
  symbol_word
61
61
  end
62
62
 
@@ -64,14 +64,14 @@ module Fusuma
64
64
 
65
65
  @fallback = begin
66
66
  fallback.to_sym
67
- rescue StandardError
67
+ rescue
68
68
  fallback
69
69
  end
70
70
  end
71
71
 
72
72
  def inspect
73
- skip_marker = @skippable && Searcher.skip? ? '(skip)' : ''
74
- fallback_marker = @fallback && Searcher.fallback? ? '(fallback)' : ''
73
+ skip_marker = @skippable && Searcher.skip? ? "(skip)" : ""
74
+ fallback_marker = @fallback && Searcher.fallback? ? "(fallback)" : ""
75
75
  "#{@symbol}#{skip_marker}#{fallback_marker}"
76
76
  end
77
77
 
@@ -55,7 +55,7 @@ module Fusuma
55
55
 
56
56
  def cache(key)
57
57
  @cache ||= {}
58
- key = key.join(',') if key.is_a? Array
58
+ key = key.join(",") if key.is_a? Array
59
59
  if @cache.key?(key)
60
60
  @cache[key]
61
61
  else
@@ -7,13 +7,13 @@ module Fusuma
7
7
  module YAMLDuplicationChecker
8
8
  def self.check(yaml_string, filename, &on_duplicated)
9
9
  # Ruby 2.6+
10
- tree = if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0')
11
- # Specify filename to display helpful message when it raises
12
- # an error.
13
- YAML.parse(yaml_string, filename: filename)
14
- else
15
- YAML.parse(yaml_string, filename)
16
- end
10
+ tree = if Gem::Version.new(Psych::VERSION) >= Gem::Version.new("3.1.0")
11
+ # Specify filename to display helpful message when it raises
12
+ # an error.
13
+ YAML.parse(yaml_string, filename: filename)
14
+ else
15
+ YAML.parse(yaml_string, filename)
16
+ end
17
17
  return unless tree
18
18
 
19
19
  traverse(tree, &on_duplicated)
data/lib/fusuma/config.rb CHANGED
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative './multi_logger'
4
- require_relative './config/index'
5
- require_relative './config/searcher'
6
- require_relative './config/yaml_duplication_checker'
7
- require_relative './hash_support'
8
- require 'singleton'
9
- require 'yaml'
3
+ require_relative "./multi_logger"
4
+ require_relative "./config/index"
5
+ require_relative "./config/searcher"
6
+ require_relative "./config/yaml_duplication_checker"
7
+ require_relative "./hash_support"
8
+ require "singleton"
9
+ require "yaml"
10
10
 
11
11
  # module as namespace
12
12
  module Fusuma
@@ -51,6 +51,9 @@ module Fusuma
51
51
  MultiLogger.info "reload config: #{path}"
52
52
  @keymap = validate(path)
53
53
  self
54
+ rescue InvalidFileError => e
55
+ MultiLogger.error e.message
56
+ exit 1
54
57
  end
55
58
 
56
59
  # @return [Hash] If check passes
@@ -64,10 +67,11 @@ module Fusuma
64
67
  raise InvalidFileError, "Detect duplicate keys #{duplicates}" unless duplicates.empty?
65
68
 
66
69
  yamls = YAML.load_stream(File.read(path)).compact
67
- yamls.map(&:deep_symbolize_keys)
68
- rescue StandardError => e
69
- MultiLogger.error e.message
70
- raise InvalidFileError, e.message
70
+ yamls.map do |yaml|
71
+ raise InvalidFileError, "invalid config.yml: #{path}" unless yaml.is_a? Hash
72
+
73
+ yaml.deep_symbolize_keys
74
+ end
71
75
  end
72
76
 
73
77
  # @param index [Index]
@@ -86,13 +90,13 @@ module Fusuma
86
90
  execute_params = search(index)
87
91
  return if execute_params.nil? || !execute_params.is_a?(Hash)
88
92
 
89
- @execute_keys.find { |k| execute_params.keys.include?(k) }
93
+ @execute_keys.find { |k| execute_params.key?(k) }
90
94
  end
91
95
 
92
96
  private
93
97
 
94
98
  def find_filepath
95
- filename = 'fusuma/config.yml'
99
+ filename = "fusuma/config.yml"
96
100
  if custom_path
97
101
  return expand_custom_path if File.exist?(expand_custom_path)
98
102
 
data/lib/fusuma/device.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative './multi_logger'
4
- require_relative './libinput_command'
3
+ require_relative "./multi_logger"
4
+ require_relative "./libinput_command"
5
5
 
6
6
  module Fusuma
7
7
  # detect input device
@@ -46,7 +46,7 @@ module Fusuma
46
46
  def available
47
47
  @available ||= all.select(&:available).tap do |d|
48
48
  MultiLogger.debug(available_devices: d)
49
- raise 'Touchpad is not found' if d.empty?
49
+ raise "Touchpad is not found" if d.empty?
50
50
  end
51
51
  rescue RuntimeError => e
52
52
  # FIXME: should not exit without Runner class
@@ -106,40 +106,40 @@ module Fusuma
106
106
  # @return [Hash]
107
107
  def extract_attribute(line:)
108
108
  if (id = id_from(line))
109
- { id: id }
109
+ {id: id}
110
110
  elsif (name = name_from(line))
111
- { name: name }
111
+ {name: name}
112
112
  elsif (capabilities = capabilities_from(line))
113
- { capabilities: capabilities }
113
+ {capabilities: capabilities}
114
114
  elsif (available = available_from(line))
115
- { available: available }
115
+ {available: available}
116
116
  else
117
117
  {}
118
118
  end
119
119
  end
120
120
 
121
121
  def id_from(line)
122
- line.match('^Kernel:[[:space:]]*') do |m|
122
+ line.match("^Kernel:[[:space:]]*") do |m|
123
123
  m.post_match.match(/event[0-9]+/).to_s
124
124
  end
125
125
  end
126
126
 
127
127
  def name_from(line)
128
- line.match('^Device:[[:space:]]*') do |m|
128
+ line.match("^Device:[[:space:]]*") do |m|
129
129
  m.post_match.strip
130
130
  end
131
131
  end
132
132
 
133
133
  def capabilities_from(line)
134
- line.match('^Capabilities:[[:space:]]*') do |m|
134
+ line.match("^Capabilities:[[:space:]]*") do |m|
135
135
  m.post_match.strip
136
136
  end
137
137
  end
138
138
 
139
139
  def available_from(line)
140
140
  # NOTE: is natural scroll available?
141
- if line =~ /^Nat.scrolling: /
142
- return false if line =~ %r{n/a}
141
+ if /^Nat.scrolling: /.match?(line)
142
+ return false if %r{n/a}.match?(line)
143
143
 
144
144
  return true # disabled / enabled
145
145
  end
@@ -1,19 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative './version'
4
- require_relative './libinput_command'
5
- require_relative './multi_logger'
3
+ require_relative "./version"
4
+ require_relative "./libinput_command"
5
+ require_relative "./multi_logger"
6
6
 
7
7
  module Fusuma
8
8
  # Output Environment information
9
9
  class Environment
10
10
  class << self
11
11
  def dump_information
12
- MultiLogger.info '---------------------------------------------'
12
+ MultiLogger.info "---------------------------------------------"
13
13
  print_version
14
- MultiLogger.info '---------------------------------------------'
14
+ MultiLogger.info "---------------------------------------------"
15
15
  print_enabled_plugins
16
- MultiLogger.info '---------------------------------------------'
16
+ MultiLogger.info "---------------------------------------------"
17
17
  end
18
18
 
19
19
  def print_version
@@ -27,11 +27,11 @@ module Fusuma
27
27
  end
28
28
 
29
29
  def print_enabled_plugins
30
- MultiLogger.info 'Enabled Plugins: '
30
+ MultiLogger.info "Enabled Plugins: "
31
31
  Plugin::Manager.plugins
32
- .reject { |k, _v| k.to_s =~ /Base/ }
33
- .map { |_base, plugins| plugins.map { |plugin| " #{plugin}" } }
34
- .flatten.sort.each { |name| MultiLogger.info(name) }
32
+ .reject { |k, _v| k.to_s =~ /Base/ }
33
+ .map { |_base, plugins| plugins.map { |plugin| " #{plugin}" } }
34
+ .flatten.sort.each { |name| MultiLogger.info(name) }
35
35
  end
36
36
 
37
37
  def print_device_list
@@ -6,7 +6,7 @@ class Hash
6
6
  def deep_symbolize_keys
7
7
  deep_transform_keys do |key|
8
8
  key.to_sym
9
- rescue StandardError
9
+ rescue
10
10
  key
11
11
  end
12
12
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'open3'
3
+ require "open3"
4
4
 
5
5
  module Fusuma
6
6
  # Execute libinput command
@@ -13,7 +13,7 @@ module Fusuma
13
13
 
14
14
  # `libinput-list-devices` and `libinput-debug-events` are deprecated,
15
15
  # use `libinput list-devices` and `libinput debug-events` from 1.8.
16
- NEW_CLI_OPTION_VERSION = '1.8'
16
+ NEW_CLI_OPTION_VERSION = "1.8"
17
17
 
18
18
  # @return [Boolean]
19
19
  def new_cli_option_available?
@@ -40,10 +40,9 @@ module Fusuma
40
40
  # @return [Integer] return a latest line libinput debug-events
41
41
  def debug_events(writer)
42
42
  @debug_events ||= begin
43
- pid = Process.spawn(debug_events_with_options, out: writer,
44
- in: '/dev/null')
45
- Process.detach(pid)
46
- pid
43
+ t = Open3.pipeline_start([debug_events_with_options], ["grep -v POINTER_ --line-buffered"],
44
+ out: writer, in: "/dev/null")
45
+ t[0].pid
47
46
  end
48
47
  end
49
48
 
@@ -52,12 +51,12 @@ module Fusuma
52
51
  def version_command
53
52
  if @debug_events_command && @list_devices_command
54
53
  "#{@list_devices_command} --version"
55
- elsif which('libinput')
56
- 'libinput --version'
57
- elsif which('libinput-list-devices')
58
- 'libinput-list-devices --version'
54
+ elsif which("libinput")
55
+ "libinput --version"
56
+ elsif which("libinput-list-devices")
57
+ "libinput-list-devices --version"
59
58
  else
60
- MultiLogger.error 'Please install libinput-tools'
59
+ MultiLogger.error "Please install libinput-tools"
61
60
  exit 1
62
61
  end
63
62
  end
@@ -66,9 +65,9 @@ module Fusuma
66
65
  if @list_devices_command
67
66
  @list_devices_command
68
67
  elsif new_cli_option_available?
69
- 'libinput list-devices'
68
+ "libinput list-devices"
70
69
  else
71
- 'libinput-list-devices'
70
+ "libinput-list-devices"
72
71
  end
73
72
  end
74
73
 
@@ -76,15 +75,15 @@ module Fusuma
76
75
  if @debug_events_command
77
76
  @debug_events_command
78
77
  elsif new_cli_option_available?
79
- 'libinput debug-events'
78
+ "libinput debug-events"
80
79
  else
81
- 'libinput-debug-events'
80
+ "libinput-debug-events"
82
81
  end
83
82
  end
84
83
 
85
84
  def debug_events_with_options
86
- prefix = 'stdbuf -oL --'
87
- "#{prefix} #{debug_events_command} #{@libinput_options.join(' ')}".strip
85
+ prefix = "stdbuf -oL --"
86
+ "#{prefix} #{debug_events_command} #{@libinput_options.join(" ")}".strip
88
87
  end
89
88
 
90
89
  private
@@ -96,8 +95,8 @@ module Fusuma
96
95
  # which('ruby') #=> /usr/bin/ruby
97
96
  # @return [String, nil]
98
97
  def which(command)
99
- exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
100
- ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
98
+ exts = ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [""]
99
+ ENV["PATH"].split(File::PATH_SEPARATOR).each do |path|
101
100
  exts.each do |ext|
102
101
  exe = File.join(path, "#{command}#{ext}")
103
102
  return exe if File.executable?(exe) && !File.directory?(exe)
@@ -2,8 +2,8 @@
2
2
 
3
3
  # module as namespace
4
4
  module Fusuma
5
- require 'logger'
6
- require 'singleton'
5
+ require "logger"
6
+ require "singleton"
7
7
  # logger separate between stdout and strerr
8
8
  class MultiLogger < Logger
9
9
  include Singleton
@@ -16,9 +16,9 @@ module Fusuma
16
16
  end
17
17
 
18
18
  def initialize
19
- filepath = self.class.instance_variable_get('@filepath')
19
+ filepath = self.class.instance_variable_get(:@filepath)
20
20
  if filepath
21
- logfile = File.new(filepath, 'a')
21
+ logfile = File.new(filepath, "a")
22
22
  logfile.sync = true
23
23
  super(logfile)
24
24
  $stderr = logfile
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative './manager'
4
- require_relative '../config'
5
- require_relative '../custom_process'
3
+ require_relative "./manager"
4
+ require_relative "../config"
5
+ require_relative "../custom_process"
6
6
 
7
7
  module Fusuma
8
8
  module Plugin
@@ -44,15 +44,15 @@ module Fusuma
44
44
 
45
45
  next if param_types.any? { |klass| val.is_a?(klass) }
46
46
 
47
- MultiLogger.error('Please fix config.yml.')
47
+ MultiLogger.error("Please fix config.yml.")
48
48
  MultiLogger.error(":#{base.keys.map(&:symbol)
49
- .join(' => :')} => :#{key} should be #{param_types.join(' OR ')}.")
49
+ .join(" => :")} => :#{key} should be #{param_types.join(" OR ")}.")
50
50
  exit 1
51
51
  end
52
52
  end
53
53
 
54
54
  def config_index
55
- Config::Index.new(self.class.name.gsub('Fusuma::', '').underscore.split('/'))
55
+ Config::Index.new(self.class.name.gsub("Fusuma::", "").underscore.split("/"))
56
56
  end
57
57
  end
58
58
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../base'
3
+ require_relative "../base"
4
4
 
5
5
  module Fusuma
6
6
  module Plugin
@@ -16,7 +16,7 @@ module Fusuma
16
16
 
17
17
  # @return [String]
18
18
  def type
19
- @type ||= self.class.name.underscore.split('/').last.gsub('_buffer', '')
19
+ @type ||= self.class.name.underscore.split("/").last.gsub("_buffer", "")
20
20
  end
21
21
 
22
22
  # @param event [Event]
@@ -28,7 +28,8 @@ module Fusuma
28
28
 
29
29
  # clear old events
30
30
  # @param current_time [Time]
31
- def clear_expired(current_time: Time.now); end
31
+ def clear_expired(current_time: Time.now)
32
+ end
32
33
 
33
34
  # clear buffer
34
35
  def clear
@@ -38,7 +39,7 @@ module Fusuma
38
39
  # Set source for tag from config.yml.
39
40
  # DEFAULT_SOURCE is defined in each plugins.
40
41
  def source
41
- @source ||= config_params(:source) || self.class.const_get('DEFAULT_SOURCE')
42
+ @source ||= config_params(:source) || self.class.const_get(:DEFAULT_SOURCE)
42
43
  end
43
44
  end
44
45
  end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative './buffer'
3
+ require_relative "./buffer"
4
4
 
5
5
  module Fusuma
6
6
  module Plugin
7
7
  module Buffers
8
8
  # manage events and generate command
9
9
  class GestureBuffer < Buffer
10
- DEFAULT_SOURCE = 'libinput_gesture_parser'
10
+ DEFAULT_SOURCE = "libinput_gesture_parser"
11
11
  DEFAULT_SECONDS_TO_KEEP = 100
12
12
 
13
13
  def config_param_types
@@ -47,7 +47,7 @@ module Fusuma
47
47
  return false if empty?
48
48
 
49
49
  case @events.last.record.status
50
- when 'end', 'cancelled'
50
+ when "end", "cancelled"
51
51
  true
52
52
  else
53
53
  false
@@ -63,7 +63,7 @@ module Fusuma
63
63
  end
64
64
 
65
65
  def updating_events
66
- @events.select { |e| e.record.status == 'update' }
66
+ @events.select { |e| e.record.status == "update" }
67
67
  end
68
68
 
69
69
  # @param attr [Symbol]
@@ -90,7 +90,7 @@ module Fusuma
90
90
  end
91
91
 
92
92
  def select_by_events(&block)
93
- return enum_for(:select_by_events) unless block_given?
93
+ return enum_for(:select_by_events) unless block
94
94
 
95
95
  events = @events.select(&block)
96
96
  self.class.new events
@@ -99,7 +99,7 @@ module Fusuma
99
99
  def select_from_last_begin
100
100
  return self if empty?
101
101
 
102
- index_from_last = @events.reverse.find_index { |e| e.record.status == 'begin' }
102
+ index_from_last = @events.reverse.find_index { |e| e.record.status == "begin" }
103
103
  return GestureBuffer.new([]) if index_from_last.nil?
104
104
 
105
105
  index_last_begin = events.length - index_from_last - 1
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative './buffer'
3
+ require_relative "./buffer"
4
4
 
5
5
  module Fusuma
6
6
  module Plugin
7
7
  module Buffers
8
8
  # manage events and generate command
9
9
  class TimerBuffer < Buffer
10
- DEFAULT_SOURCE = 'timer_input'
10
+ DEFAULT_SOURCE = "timer_input"
11
11
  DEFAULT_SECONDS_TO_KEEP = 3
12
12
 
13
13
  def config_param_types