fusuma 3.4.0 → 3.6.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: 2069b9d7aebc84b8476061feceda9dbccdc1496d631bc321918c64df252fef40
4
- data.tar.gz: 2efa46442f89aa15aa53f4e4b743f6cb4ef2449ca3f487a1a35940ad9ae38b9f
3
+ metadata.gz: 82378c097f2a0af57970c6ac59afbee3ef8e0ce2d0b2957ebc968673490c1623
4
+ data.tar.gz: 7324182088a879f6ccc057a311945258bf49f3f255cda67c161b5e6d847871d5
5
5
  SHA512:
6
- metadata.gz: 6b13060987b8cceadf030c6601a4f05886b2d0db6c44f900e33f0c5f689afcf48ab98809d12014394da24e9be5bde3b303f15527c792b540e6f352d1b39f4225
7
- data.tar.gz: b3620182b6cc50c22582e36927b478c6a68b1e86b3cfe7eee7fc29060e87d2ce1f3e36579e112cbfb62b488927aae427ad75630210c4db53e3127619a487253b
6
+ metadata.gz: deb0bc67936c61576f2ef0fa69ac0db89233ae2765633fe0da946368c91f0d2930520cea15a451119b79f451c8e103efb74b84a2fda2bbb9982625a29f560e65
7
+ data.tar.gz: ea89aef6ec99904287cd958c03beaf46f031b71757293bf77b8920d2b2cb5ead60f2cf525800644537d7a8e3f68aee47323f31f81a579f8a8bb8ebcc57eaccd9
@@ -81,18 +81,20 @@ module Fusuma
81
81
  # Search with context from load_streamed Config
82
82
  # @param context [Hash]
83
83
  # @return [Object]
84
- def with_context(context, &block)
85
- @context = context || {}
84
+ def with_context(context = {}, &block)
85
+ before = @context
86
+ @context = context
86
87
  result = block.call
87
- @context = {}
88
+ ensure # NOTE: ensure is called even if return in block
89
+ @context = before
88
90
  result
89
91
  end
90
92
 
91
- CONEXT_SEARCH_ORDER = [:no_context, :complete_match_context, :partial_match_context]
93
+ CONTEXT_SEARCH_ORDER = [:no_context, :complete_match_context, :partial_match_context]
92
94
  # Return a matching context from config
93
95
  # @params request_context [Hash]
94
96
  # @return [Hash]
95
- def find_context(request_context, fallbacks = CONEXT_SEARCH_ORDER, &block)
97
+ def find_context(request_context, fallbacks = CONTEXT_SEARCH_ORDER, &block)
96
98
  # Search in blocks in the following order.
97
99
  # 1. primary context(no context)
98
100
  # 2. complete match config[:context] == request_context
@@ -6,14 +6,7 @@ module Fusuma
6
6
  # Find duplicated keys from YAML.
7
7
  module YAMLDuplicationChecker
8
8
  def self.check(yaml_string, filename, &on_duplicated)
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
9
+ tree = YAML.parse(yaml_string, filename: filename)
17
10
  return unless tree
18
11
 
19
12
  traverse(tree, &on_duplicated)
data/lib/fusuma/config.rb CHANGED
@@ -100,10 +100,12 @@ module Fusuma
100
100
 
101
101
  yamls = YAML.load_stream(File.read(path)).compact
102
102
  yamls.map do |yaml|
103
- raise InvalidFileError, "invalid config.yml: #{path}" unless yaml.is_a? Hash
103
+ raise InvalidFileError, "Invalid config.yml: #{path}" unless yaml.is_a? Hash
104
104
 
105
105
  yaml.deep_symbolize_keys
106
106
  end
107
+ rescue Psych::SyntaxError => e
108
+ raise InvalidFileError, "Invalid syntax: #{path} #{e.message}"
107
109
  end
108
110
 
109
111
  # @param index [Index]
@@ -13,6 +13,22 @@ module Fusuma
13
13
 
14
14
  class << self
15
15
  attr_writer :filepath
16
+
17
+ def info(msg)
18
+ instance.info(msg)
19
+ end
20
+
21
+ def debug(msg)
22
+ instance.debug(msg)
23
+ end
24
+
25
+ def warn(msg)
26
+ instance.warn(msg)
27
+ end
28
+
29
+ def error(msg)
30
+ instance.error(msg)
31
+ end
16
32
  end
17
33
 
18
34
  def initialize
@@ -49,8 +65,11 @@ module Fusuma
49
65
  debug_mode
50
66
  end
51
67
 
68
+ private
69
+
52
70
  def ignore_pattern?(msg)
53
71
  # TODO: configurable from config.yml
72
+ # pattern = /timer_input|remap_touchpad_input|thumbsense context|libinput_command_input/
54
73
  pattern = /timer_input/
55
74
  case msg
56
75
  when Hash
@@ -58,27 +77,11 @@ module Fusuma
58
77
  return unless e
59
78
 
60
79
  e.tag.match?(pattern)
80
+ when String
81
+ msg.match?(pattern)
61
82
  else
62
83
  false
63
84
  end
64
85
  end
65
-
66
- class << self
67
- def info(msg)
68
- instance.info(msg)
69
- end
70
-
71
- def debug(msg)
72
- instance.debug(msg)
73
- end
74
-
75
- def warn(msg)
76
- instance.warn(msg)
77
- end
78
-
79
- def error(msg)
80
- instance.error(msg)
81
- end
82
- end
83
86
  end
84
87
  end
@@ -31,6 +31,11 @@ module Fusuma
31
31
  def clear_expired(current_time: Time.now)
32
32
  end
33
33
 
34
+ # @return [TrueClass, FalseClass]
35
+ def empty?
36
+ @events.empty?
37
+ end
38
+
34
39
  # clear buffer
35
40
  def clear
36
41
  @events.clear
@@ -127,10 +127,6 @@ module Fusuma
127
127
  @events.last.record.gesture
128
128
  end
129
129
 
130
- def empty?
131
- @events.empty?
132
- end
133
-
134
130
  def select_by_events(&block)
135
131
  return enum_for(:select_by_events) unless block
136
132
 
@@ -34,10 +34,6 @@ module Fusuma
34
34
  @events.delete(e)
35
35
  end
36
36
  end
37
-
38
- def empty?
39
- @events.empty?
40
- end
41
37
  end
42
38
  end
43
39
  end
@@ -26,12 +26,12 @@ module Fusuma
26
26
  Records::TextRecord.new(record)
27
27
  else
28
28
  raise ArgumentError,
29
- "@record should be String or Record"
29
+ "@record should be String or Record: #{record.class}, #{record}"
30
30
  end
31
31
  end
32
32
 
33
33
  def inspect
34
- "time: #{time}, tag: #{tag}, record: #{record}"
34
+ "tag: #{tag}, record: #{record}"
35
35
  end
36
36
  end
37
37
  end
@@ -31,7 +31,7 @@ module Fusuma
31
31
  end
32
32
 
33
33
  def to_s
34
- "#{@gesture}, #{@finger}, #{@status}, #{@delta}"
34
+ "#{@gesture}, Finger: #{@finger}, Status: #{@status}"
35
35
  end
36
36
  end
37
37
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fusuma
4
- VERSION = "3.4.0"
4
+ VERSION = "3.6.0"
5
5
  end
data/lib/fusuma.rb CHANGED
@@ -15,14 +15,13 @@ module Fusuma
15
15
  def run(option = {})
16
16
  read_options(option)
17
17
  instance = new
18
+ instance.initialize_plugins
18
19
  instance.set_trap
19
20
  ## NOTE: Uncomment following line to measure performance
20
21
  # instance.run_with_lineprof
21
22
  instance.run
22
- rescue => e
23
- MultiLogger.error("Shutdown by error")
24
- MultiLogger.error(e)
25
- instance.send(:shutdown)
23
+ ensure
24
+ instance&.send(:shutdown)
26
25
  end
27
26
 
28
27
  private
@@ -59,7 +58,9 @@ module Fusuma
59
58
  end
60
59
  end
61
60
 
62
- def initialize
61
+ def initialize; end
62
+
63
+ def initialize_plugins
63
64
  @inputs = Plugin::Inputs::Input.plugins.map do |cls|
64
65
  cls.ancestors.include?(Singleton) ? cls.instance : cls.new
65
66
  end
@@ -206,7 +207,7 @@ module Fusuma
206
207
  private
207
208
 
208
209
  def shutdown
209
- [@inputs, @filters, @parsers, @buffers, @detectors, @executors].flatten.each do |plugin|
210
+ [@inputs, @filters, @parsers, @buffers, @detectors, @executors].flatten.compact.each do |plugin|
210
211
  plugin.shutdown
211
212
  end
212
213
  end
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.4.0
4
+ version: 3.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - iberianpig
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-19 00:00:00.000000000 Z
11
+ date: 2024-07-02 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