fusuma 1.10.2 → 1.11.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dddc8b3508264aaa617b19ed621ed6ee97c5f0d8435cb988a29a9789f9fe2a22
4
- data.tar.gz: 8c99bd1dbddf7640d9422ed505ac090361b97b87fc0ea77584ddc6fb8f6416db
3
+ metadata.gz: bd9b74b06494e85c0caf6250e0dfeed80c37187098982b4f32c2dd8e727732fb
4
+ data.tar.gz: eb8c3d19693570b77b26519d7296856480342eec3eba0205ed970e01a4b46a16
5
5
  SHA512:
6
- metadata.gz: 107aa86cb7e326e17e7cb5c183e3fcb49a6352fd1f9b6a04211d2820bd6e738b9abb00f2ecddeef31903f2bb77ad15b7dcc742ca835df9eb9f67e970b166e843
7
- data.tar.gz: 294b6a9c9fd0770bf470c38af08f5c48fd7fc14d38f3acd0f802ac3f51e21d200de6d02be1f197edea65c0e5d13ee95f4e43a85c8cea0a0a80372154eda3ea15
6
+ metadata.gz: abe0b55ab9f332d3f67c423b0890135973d57a4cf8b7d6fafc7b01b44874c2489b6752fcb7a66d0b0a625c612879e35ce7d11b6a3b5ce485711b84e8f45e5279
7
+ data.tar.gz: 323c35769c6f9827f8a94532a4dd10a25facf6bc6858d85b2b6540a6d78064e9003d4ccb83f4914f214aa6523cea8878b5f63abbe113211b1b0900ce0e203521
@@ -27,6 +27,10 @@ Style/HashTransformKeys:
27
27
  Style/HashTransformValues:
28
28
  Enabled: true
29
29
 
30
+ # For compatible ruby 2.3
31
+ Style/RedundantBegin:
32
+ Enabled: false
33
+
30
34
  Lint/RaiseException:
31
35
  Enabled: true
32
36
  Lint/StructNewOverride:
@@ -1,5 +1,42 @@
1
1
  # Changelog
2
2
 
3
+ ## [v1.11.0](https://github.com/iberianpig/fusuma/tree/v1.11.0) (2020-07-25)
4
+
5
+ [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.10.2...v1.11.0)
6
+
7
+ **Implemented enhancements:**
8
+
9
+ - Feature/yaml check [\#193](https://github.com/iberianpig/fusuma/pull/193) ([iberianpig](https://github.com/iberianpig))
10
+
11
+ ## [v1.10.2](https://github.com/iberianpig/fusuma/tree/v1.10.2) (2020-07-23)
12
+
13
+ [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.10.1...v1.10.2)
14
+
15
+ **Closed issues:**
16
+
17
+ - Gestures from libinput are not recognised [\#192](https://github.com/iberianpig/fusuma/issues/192)
18
+ - Vertical 4 finger swipe and rotation not recognised [\#189](https://github.com/iberianpig/fusuma/issues/189)
19
+ - Pinch in gesture not recognized in Popos 20.04 \(Ubuntu 20.04\) [\#184](https://github.com/iberianpig/fusuma/issues/184)
20
+ - Fusuma crashes while switching between workspaces on KDE Plasma [\#181](https://github.com/iberianpig/fusuma/issues/181)
21
+ - Window Prev/Next moves desktop environment when no active window [\#178](https://github.com/iberianpig/fusuma/issues/178)
22
+ - Add ydotool to docs. [\#177](https://github.com/iberianpig/fusuma/issues/177)
23
+ - Can't use alternative .config.yml [\#176](https://github.com/iberianpig/fusuma/issues/176)
24
+ - Fusuma stops working sometimes [\#175](https://github.com/iberianpig/fusuma/issues/175)
25
+ - Pinch \(2, in\) does not work. [\#174](https://github.com/iberianpig/fusuma/issues/174)
26
+
27
+ **Merged pull requests:**
28
+
29
+ - 177. Add ydootool to docs. [\#179](https://github.com/iberianpig/fusuma/pull/179) ([mattdemarillac](https://github.com/mattdemarillac))
30
+
31
+ ## [v1.10.1](https://github.com/iberianpig/fusuma/tree/v1.10.1) (2020-05-15)
32
+
33
+ [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.10.0...v1.10.1)
34
+
35
+ **Closed issues:**
36
+
37
+ - Some gestures are not always recognized [\#172](https://github.com/iberianpig/fusuma/issues/172)
38
+ - Unable to reprogram Pinch [\#171](https://github.com/iberianpig/fusuma/issues/171)
39
+
3
40
  ## [v1.10.0](https://github.com/iberianpig/fusuma/tree/v1.10.0) (2020-05-04)
4
41
 
5
42
  [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.9.0...v1.10.0)
@@ -48,8 +48,6 @@ module Fusuma
48
48
  end
49
49
 
50
50
  def load_custom_config(config_path = nil)
51
- return unless config_path
52
-
53
51
  Config.custom_path = config_path
54
52
  end
55
53
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative './multi_logger.rb'
4
4
  require_relative './config/index.rb'
5
+ require_relative './config/yaml_duplication_checker.rb'
5
6
  require 'singleton'
6
7
  require 'yaml'
7
8
 
@@ -9,6 +10,9 @@ require 'yaml'
9
10
  module Fusuma
10
11
  # read keymap from yaml file
11
12
  class Config
13
+ class NotFoundError < StandardError; end
14
+ class InvalidFileError < StandardError; end
15
+
12
16
  include Singleton
13
17
 
14
18
  class << self
@@ -28,7 +32,6 @@ module Fusuma
28
32
  @custom_path = nil
29
33
  @cache = nil
30
34
  @keymap = nil
31
- reload
32
35
  end
33
36
 
34
37
  def custom_path=(new_path)
@@ -37,12 +40,33 @@ module Fusuma
37
40
  end
38
41
 
39
42
  def reload
40
- @cache = nil
41
- @keymap = YAML.load_file(file_path).deep_symbolize_keys
42
- MultiLogger.info "reload config : #{file_path}"
43
+ @cache = nil
44
+ path = find_filepath
45
+ MultiLogger.info "reload config: #{path}"
46
+ @keymap = validate(path)
43
47
  self
44
48
  end
45
49
 
50
+ # @return [Hash]
51
+ # @raise [InvalidError]
52
+ def validate(path)
53
+ duplicates = []
54
+ YAMLDuplicationChecker.check(File.read(path), path) do |ignored, duplicate|
55
+ MultiLogger.error "#{path}: #{ignored.value} is duplicated"
56
+ duplicates << duplicate.value
57
+ end
58
+ raise InvalidFileError, "Detect duplicate keys #{duplicates}" unless duplicates.empty?
59
+
60
+ yaml = YAML.load_file(path)
61
+
62
+ raise InvalidFileError, 'Invaid YAML file' unless yaml.is_a? Hash
63
+
64
+ yaml.deep_symbolize_keys
65
+ rescue StandardError => e
66
+ MultiLogger.error e.message
67
+ raise InvalidFileError, e.message
68
+ end
69
+
46
70
  # @param index [Index]
47
71
  def search(index)
48
72
  cache(index.cache_key) do
@@ -64,13 +88,16 @@ module Fusuma
64
88
 
65
89
  private
66
90
 
67
- def file_path
91
+ def find_filepath
68
92
  filename = 'fusuma/config.yml'
69
- if custom_path && File.exist?(expand_custom_path)
70
- expand_custom_path
93
+ if custom_path
94
+ return expand_custom_path if File.exist?(expand_custom_path)
95
+
96
+ raise NotFoundError, "#{expand_custom_path} is NOT FOUND"
71
97
  elsif File.exist?(expand_config_path(filename))
72
98
  expand_config_path(filename)
73
99
  else
100
+ MultiLogger.warn "config file: #{expand_config_path(filename)} is NOT FOUND"
74
101
  expand_default_path(filename)
75
102
  end
76
103
  end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fusuma
4
+ class Config
5
+ # ref: https://github.com/rubocop-hq/rubocop/blob/97e4ffc8a71e9e5239a927c6a534dfc1e0da917f/lib/rubocop/yaml_duplication_checker.rb
6
+ # Find duplicated keys from YAML.
7
+ module YAMLDuplicationChecker
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
17
+ return unless tree
18
+
19
+ traverse(tree, &on_duplicated)
20
+ end
21
+
22
+ def self.traverse(tree, &on_duplicated)
23
+ case tree
24
+ when Psych::Nodes::Mapping
25
+ tree.children.each_slice(2).with_object([]) do |(key, value), keys|
26
+ exist = keys.find { |key2| key2.value == key.value }
27
+ on_duplicated.call(exist, key) if exist
28
+ keys << key
29
+ traverse(value, &on_duplicated)
30
+ end
31
+ else
32
+ children = tree.children
33
+ return unless children
34
+
35
+ children.each { |c| traverse(c, &on_duplicated) }
36
+ end
37
+ end
38
+
39
+ private_class_method :traverse
40
+ end
41
+ end
42
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fusuma
4
- VERSION = '1.10.2'
4
+ VERSION = '1.11.1'
5
5
  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: 1.10.2
4
+ version: 1.11.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - iberianpig
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-23 00:00:00.000000000 Z
11
+ date: 2020-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -200,6 +200,7 @@ files:
200
200
  - lib/fusuma/config.rb
201
201
  - lib/fusuma/config.yml
202
202
  - lib/fusuma/config/index.rb
203
+ - lib/fusuma/config/yaml_duplication_checker.rb
203
204
  - lib/fusuma/device.rb
204
205
  - lib/fusuma/environment.rb
205
206
  - lib/fusuma/libinput_command.rb
@@ -247,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
248
  - !ruby/object:Gem::Version
248
249
  version: '0'
249
250
  requirements: []
250
- rubygems_version: 3.0.3
251
+ rubygems_version: 3.2.0.rc.1
251
252
  signing_key:
252
253
  specification_version: 4
253
254
  summary: Multitouch gestures with libinput dirver on X11, Linux