fusuma 3.3.0 → 3.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 978dc626380b79b464091c15883ed5ab63abf0cc9d6e649ef46f87188e8dfc4c
4
- data.tar.gz: 9ff7b618f47fda0fdb648c4a5422e689476d7e257160a45494f7e5d4396b0891
3
+ metadata.gz: 2069b9d7aebc84b8476061feceda9dbccdc1496d631bc321918c64df252fef40
4
+ data.tar.gz: 2efa46442f89aa15aa53f4e4b743f6cb4ef2449ca3f487a1a35940ad9ae38b9f
5
5
  SHA512:
6
- metadata.gz: ddff427ccdaffc0fa0661685ea404d620ae85ad2cc2477dad2e7a2c066dd1c75ba2409bb2808c41977b22eff0812faa1343c6a32f186d5c8e945f20ec9023fa1
7
- data.tar.gz: 06e687954d1b876c63f496017a39109a8e3d63a28919cec2096761a87c5528a72268eeae21ccbbd744dff946180005387dfe967776cd64b070894b245f5f556c
6
+ metadata.gz: 6b13060987b8cceadf030c6601a4f05886b2d0db6c44f900e33f0c5f689afcf48ab98809d12014394da24e9be5bde3b303f15527c792b540e6f352d1b39f4225
7
+ data.tar.gz: b3620182b6cc50c22582e36927b478c6a68b1e86b3cfe7eee7fc29060e87d2ce1f3e36579e112cbfb62b488927aae427ad75630210c4db53e3127619a487253b
@@ -14,7 +14,7 @@ module Fusuma
14
14
  key = Key.new(key) if !key.is_a? Key
15
15
  @keys << key
16
16
  key.symbol
17
- end.join(",")
17
+ end.join(",").to_sym
18
18
  else
19
19
  key = Key.new(keys)
20
20
  @cache_key = key.symbol
@@ -22,10 +22,16 @@ module Fusuma
22
22
  end
23
23
  end
24
24
 
25
- def inspect
25
+ def to_s
26
26
  @keys.map(&:inspect)
27
27
  end
28
28
 
29
+ def ==(other)
30
+ return false unless other.is_a? Index
31
+
32
+ cache_key == other.cache_key
33
+ end
34
+
29
35
  attr_reader :keys, :cache_key
30
36
 
31
37
  # Keys in Index
@@ -40,7 +46,7 @@ module Fusuma
40
46
  @skippable = skippable
41
47
  end
42
48
 
43
- def inspect
49
+ def to_s
44
50
  if @skippable
45
51
  "#{@symbol}(skippable)"
46
52
  else
@@ -100,7 +100,7 @@ module Fusuma
100
100
  # no_context?(&block) ||
101
101
  # complete_match_context(request_context, &block) ||
102
102
  # partial_match_context(request_context, &block)
103
- fallbacks.each do |method|
103
+ fallbacks.find do |method|
104
104
  result = send(method, request_context, &block)
105
105
  return result if result
106
106
  end
data/lib/fusuma/config.rb CHANGED
@@ -1,11 +1,11 @@
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 "./plugin/manager"
8
- require_relative "./hash_support"
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 "plugin/manager"
8
+ require_relative "hash_support"
9
9
  require "singleton"
10
10
  require "yaml"
11
11
 
@@ -65,6 +65,7 @@ module Fusuma
65
65
 
66
66
  # reset searcher cache
67
67
  @searcher = Searcher.new
68
+ @cache_execute_keys = nil
68
69
 
69
70
  self
70
71
  rescue InvalidFileError => e
@@ -117,10 +118,17 @@ module Fusuma
117
118
  executor.new.execute_keys
118
119
  end.flatten
119
120
 
120
- execute_params = search(index)
121
- return if execute_params.nil? || !execute_params.is_a?(Hash)
121
+ @cache_execute_keys ||= {}
122
122
 
123
- @execute_keys.find { |k| execute_params.key?(k) }
123
+ cache_key = [index.cache_key, Searcher.context].join
124
+
125
+ return @cache_execute_keys[cache_key] if @cache_execute_keys.has_key?(cache_key)
126
+
127
+ @cache_execute_keys[cache_key] =
128
+ @execute_keys.find do |execute_key|
129
+ new_index = Config::Index.new(index.keys | [execute_key])
130
+ search(new_index)
131
+ end
124
132
  end
125
133
 
126
134
  private
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./string_support"
3
+ require_relative "string_support"
4
4
 
5
5
  module Fusuma
6
6
  # Rename process
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
@@ -1,8 +1,8 @@
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
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./manager"
3
+ require_relative "manager"
4
4
  require_relative "../config"
5
5
  require_relative "../custom_process"
6
6
 
@@ -1,6 +1,6 @@
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
@@ -1,6 +1,6 @@
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
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./detector"
3
+ require_relative "detector"
4
4
  require_relative "../inputs/timer_input"
5
5
 
6
6
  module Fusuma
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./detector"
3
+ require_relative "detector"
4
4
 
5
5
  module Fusuma
6
6
  module Plugin
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./detector"
3
+ require_relative "detector"
4
4
 
5
5
  module Fusuma
6
6
  module Plugin
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./detector"
3
+ require_relative "detector"
4
4
 
5
5
  module Fusuma
6
6
  module Plugin
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "../base"
4
- require_relative "./records/record"
5
- require_relative "./records/text_record"
4
+ require_relative "records/record"
5
+ require_relative "records/text_record"
6
6
 
7
7
  module Fusuma
8
8
  module Plugin
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./text_record"
3
+ require_relative "text_record"
4
4
 
5
5
  module Fusuma
6
6
  module Plugin
@@ -29,6 +29,10 @@ module Fusuma
29
29
  @finger = finger.to_i
30
30
  @delta = delta
31
31
  end
32
+
33
+ def to_s
34
+ "#{@gesture}, #{@finger}, #{@status}, #{@delta}"
35
+ end
32
36
  end
33
37
  end
34
38
  end
@@ -22,6 +22,10 @@ module Fusuma
22
22
  @args = args
23
23
  end
24
24
 
25
+ def to_s
26
+ "#{@index}, #{@position}, #{@trigger}, #{@args}"
27
+ end
28
+
25
29
  def type
26
30
  :index
27
31
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./record"
3
+ require_relative "record"
4
4
 
5
5
  module Fusuma
6
6
  module Plugin
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./executor"
3
+ require_relative "executor"
4
4
 
5
5
  module Fusuma
6
6
  module Plugin
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./filter"
3
+ require_relative "filter"
4
4
  require_relative "../../device"
5
5
 
6
6
  module Fusuma
@@ -25,19 +25,22 @@ module Fusuma
25
25
 
26
26
  input = inputs.find { |i| i.io == io }
27
27
 
28
- begin
29
- # NOTE: io.readline is blocking method
30
- # each input plugin must write line to pipe (include `\n`)
31
- line = io.readline(chomp: true)
32
- rescue EOFError => e
33
- MultiLogger.error "#{input.class.name}: #{e}"
34
- MultiLogger.error "Shutdown fusuma process..."
35
- Process.kill("TERM", Process.pid)
36
- rescue => e
37
- MultiLogger.error "#{input.class.name}: #{e}"
38
- exit 1
39
- end
40
- input.create_event(record: line)
28
+ input.create_event(record: input.read_from_io)
29
+ end
30
+
31
+ # @return [String, Record]
32
+ # IO#readline is blocking method
33
+ # so input plugin must write line to pipe (include `\n`)
34
+ # or, override read_from_io and implement your own read method
35
+ def read_from_io
36
+ io.readline(chomp: true)
37
+ rescue EOFError => e
38
+ MultiLogger.error "#{self.class.name}: #{e}"
39
+ MultiLogger.error "Shutdown fusuma process..."
40
+ Process.kill("TERM", Process.pid)
41
+ rescue => e
42
+ MultiLogger.error "#{self.class.name}: #{e}"
43
+ exit 1
41
44
  end
42
45
 
43
46
  # @return [Integer]
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "../../libinput_command"
4
- require_relative "./input"
4
+ require_relative "input"
5
5
 
6
6
  module Fusuma
7
7
  module Plugin
@@ -57,7 +57,7 @@ module Fusuma
57
57
  enable_dwt,
58
58
  disable_dwt,
59
59
  show_keycodes,
60
- verbose,
60
+ verbose
61
61
  ].compact
62
62
  end
63
63
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./input"
3
+ require_relative "input"
4
4
  require "timeout"
5
5
 
6
6
  module Fusuma
@@ -101,14 +101,14 @@ module Fusuma
101
101
  end
102
102
 
103
103
  def require_base_plugins
104
- require_relative "./base"
105
- require_relative "./events/event"
106
- require_relative "./inputs/input"
107
- require_relative "./filters/filter"
108
- require_relative "./parsers/parser"
109
- require_relative "./buffers/buffer"
110
- require_relative "./detectors/detector"
111
- require_relative "./executors/executor"
104
+ require_relative "base"
105
+ require_relative "events/event"
106
+ require_relative "inputs/input"
107
+ require_relative "filters/filter"
108
+ require_relative "parsers/parser"
109
+ require_relative "buffers/buffer"
110
+ require_relative "detectors/detector"
111
+ require_relative "executors/executor"
112
112
  end
113
113
 
114
114
  def plugins
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fusuma
4
- VERSION = "3.3.0"
4
+ VERSION = "3.4.0"
5
5
  end
data/lib/fusuma.rb CHANGED
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./fusuma/version"
4
- require_relative "./fusuma/multi_logger"
5
- require_relative "./fusuma/config"
6
- require_relative "./fusuma/environment"
7
- require_relative "./fusuma/device"
8
- require_relative "./fusuma/plugin/manager"
3
+ require_relative "fusuma/version"
4
+ require_relative "fusuma/multi_logger"
5
+ require_relative "fusuma/config"
6
+ require_relative "fusuma/environment"
7
+ require_relative "fusuma/device"
8
+ require_relative "fusuma/plugin/manager"
9
9
 
10
10
  # this is top level module
11
11
  module Fusuma
@@ -19,6 +19,10 @@ module Fusuma
19
19
  ## NOTE: Uncomment following line to measure performance
20
20
  # instance.run_with_lineprof
21
21
  instance.run
22
+ rescue => e
23
+ MultiLogger.error("Shutdown by error")
24
+ MultiLogger.error(e)
25
+ instance.send(:shutdown)
22
26
  end
23
27
 
24
28
  private
@@ -191,11 +195,11 @@ module Fusuma
191
195
  def set_trap
192
196
  Signal.trap("INT") {
193
197
  shutdown
194
- puts exit
198
+ exit
195
199
  } # Trap ^C
196
200
  Signal.trap("TERM") {
197
201
  shutdown
198
- puts exit
202
+ exit
199
203
  } # Trap `Kill `
200
204
  end
201
205
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fusuma
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - iberianpig
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-25 00:00:00.000000000 Z
11
+ date: 2024-01-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Fusuma is multitouch gesture recognizer. This gem makes your touchpad
14
14
  on Linux able to recognize swipes or pinchs and assign command to them. Read installation
@@ -87,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  requirements: []
90
- rubygems_version: 3.4.10
90
+ rubygems_version: 3.4.19
91
91
  signing_key:
92
92
  specification_version: 4
93
93
  summary: Multitouch gestures with libinput driver, Linux