fusuma 1.6.0 → 1.7.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: 65e85c17ee616861de23dfda299da1de324ebc4dd26aad155d6154641b81e332
4
- data.tar.gz: f8516a7ac078ee2d600e23ebcfb2420a36a12810ded08538ee5ed178baa05283
3
+ metadata.gz: 2653f2589093ec363f62b29d398ed622314f30d9a8c902c3c7f893470c5549a0
4
+ data.tar.gz: 5076d2ee1091be519a3f1eac11b536bf66120c6b9faf485e202e6bf4ecb47d20
5
5
  SHA512:
6
- metadata.gz: fac1ec6baaeb39f8e9ecd2c883b4db02cda3b2afb3f16b832ec6b5a8219dc902a0c8df68f432aa2f78b240d588f2f2734fd92e7368c7372394ab9432251ee7f7
7
- data.tar.gz: 24d8e5d474fcbd318d2b8027110291585dfa71878f5e329b97d2e4f935edb1f37ae0a11d3d7bb330fdd2458d001f1da1e27022ea416bddaf96cb78a33a01cfe9
6
+ metadata.gz: 7433bbb5eb068c0b1f9d3d9e4492878d672105504a5603b7bd4d92c9cb61e34cbf8559e71c0b3d407bba59b5f640e9031e106e8c4cbf38c53f85f871c2517592
7
+ data.tar.gz: 23425a4be0e42f0b006a424e067bed3c18be3e8768173dd8bdc6df5f070339e1613a7319de4ab70fd06981871db38210c8f26aa3e5e030cc3021a5b565d2f358
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [v1.6.0](https://github.com/iberianpig/fusuma/tree/v1.6.0) (2020-03-14)
4
+
5
+ [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.5.0...v1.6.0)
6
+
7
+ ## [v1.5.0](https://github.com/iberianpig/fusuma/tree/v1.5.0) (2020-03-02)
8
+
9
+ [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.4.1...v1.5.0)
10
+
3
11
  ## [v1.4.1](https://github.com/iberianpig/fusuma/tree/v1.4.1) (2020-02-27)
4
12
 
5
13
  [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.4.0...v1.4.1)
data/README.md CHANGED
@@ -76,6 +76,13 @@ $ mkdir -p ~/.config/fusuma # create config directory
76
76
  $ nano ~/.config/fusuma/config.yml # edit config file.
77
77
  ```
78
78
 
79
+ ### About YAML Basic Syntax
80
+ * Comments in YAML begins with the (#) character.
81
+ * Comments must be separated from other tokens by whitespaces.
82
+ * Indentation of whitespace is used to denote structure.
83
+ * Tabs are not included as indentation for YAML files.
84
+
85
+
79
86
  ### Example 1: Gesture Mapping for elementary OS
80
87
 
81
88
  ```yaml
@@ -245,10 +252,23 @@ Fusuma plugins are provided with the `fusuma-plugin-XXXXX` naming convention and
245
252
  | [fusuma-plugin-sendkey](https://github.com/iberianpig/fusuma-plugin-sendkey) | Emulates keyboard events |
246
253
  | [fusuma-plugin-wmctrl](https://github.com/iberianpig/fusuma-plugin-wmctrl) | Manages Window and Workspace |
247
254
  | [fusuma-plugin-keypress](https://github.com/iberianpig/fusuma-plugin-keypress) | Detects gestures while pressing multiple keys |
255
+ | [fusuma-plugin-tap](https://github.com/iberianpig/fusuma-plugin-tap) | Detects Tap and Hold gestures |
256
+
257
+ ## Tutorial Video
258
+
259
+ [![Multitouch Touchpad Gestures in Linux with Fusuma](http://img.youtube.com/vi/bn11Iwvf29I/0.jpg)](http://www.youtube.com/watch?v=bn11Iwvf29I "Multitouch Touchpad Gestures in Linux with Fusuma")
260
+ [Multitouch Touchpad Gestures in Linux with Fusuma](http://www.youtube.com/watch?v=bn11Iwvf29I) by [Eric Adams](https://www.youtube.com/user/igster75)
261
+
248
262
 
249
263
  ## Support
250
264
 
251
- [![Patreon](https://c5.patreon.com/external/logo/become_a_patron_button.png)](https://www.patreon.com/iberianpig)
265
+ I'm a Freelance Engineer in Japan and working on these products after finishing my regular work or on my holidays.
266
+ Currently, my open-source contribution times is not enough.
267
+ If you like my work and want to contribute and become a sponsor, I will be able to focus on my projects.
268
+
269
+ * [GitHub Sponsors](https://github.com/sponsors/iberianpig) (Zero fee!)
270
+ * [Patreon](https://www.patreon.com/iberianpig)
271
+
252
272
 
253
273
  ## Contributing
254
274
 
@@ -4,6 +4,7 @@ require_relative './fusuma/version'
4
4
  require_relative './fusuma/multi_logger'
5
5
  require_relative './fusuma/config.rb'
6
6
  require_relative './fusuma/device.rb'
7
+ require_relative './fusuma/libinput_command.rb'
7
8
  require_relative './fusuma/plugin/manager.rb'
8
9
 
9
10
  # this is top level module
@@ -47,7 +48,7 @@ module Fusuma
47
48
 
48
49
  def print_version
49
50
  MultiLogger.info "Fusuma: #{Fusuma::VERSION}"
50
- MultiLogger.info "libinput: #{Plugin::Inputs::LibinputCommandInput.new.version}"
51
+ MultiLogger.info "libinput: #{LibinputCommand.new.version}"
51
52
  MultiLogger.info "OS: #{`uname -rsv`}".strip
52
53
  MultiLogger.info "Distribution: #{`cat /etc/issue`}".strip
53
54
  MultiLogger.info "Desktop session: #{`echo $DESKTOP_SESSION $XDG_SESSION_TYPE`}".strip
@@ -90,7 +91,7 @@ module Fusuma
90
91
  parsed = parse(filtered) || next
91
92
  buffered = buffer(parsed) || next
92
93
  detected = detect(buffered) || next
93
- merged = merge(detected)
94
+ merged = merge(detected) || next
94
95
  execute(merged)
95
96
  end
96
97
  end
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative './multi_logger'
4
+ require_relative './libinput_command.rb'
5
+
3
6
  module Fusuma
4
7
  # detect input device
5
8
  class Device
@@ -56,7 +59,7 @@ module Fusuma
56
59
  # @return [Array]
57
60
  def fetch_devices
58
61
  line_parser = LineParser.new
59
- Plugin::Inputs::LibinputCommandInput.new.list_devices do |line|
62
+ LibinputCommand.new.list_devices do |line|
60
63
  line_parser.push(line)
61
64
  end
62
65
  line_parser.generate_devices
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'open3'
4
+
5
+ module Fusuma
6
+ # Execute libinput command
7
+ class LibinputCommand
8
+ def initialize(libinput_options: [])
9
+ @libinput_options = libinput_options
10
+ end
11
+
12
+ # `libinput-list-devices` and `libinput-debug-events` are deprecated,
13
+ # use `libinput list-devices` and `libinput debug-events` from 1.8.
14
+ NEW_CLI_OPTION_VERSION = 1.8
15
+
16
+ # @return [Boolean]
17
+ def new_cli_option_available?
18
+ Gem::Version.new(version) >= Gem::Version.new(NEW_CLI_OPTION_VERSION)
19
+ end
20
+
21
+ # @return [String]
22
+ def version
23
+ # versiom_command prints "1.6.3\n"
24
+ @version ||= `#{version_command}`.strip
25
+ end
26
+
27
+ # @yieldparam [String] gives a line in libinput list-devices output to the block
28
+ def list_devices
29
+ cmd = list_devices_command
30
+ MultiLogger.debug(list_devices: cmd)
31
+ Open3.popen3(cmd) do |_i, o, _e, _w|
32
+ o.each { |line| yield(line) }
33
+ end
34
+ end
35
+
36
+ # @yieldparam [String] gives a line in libinput debug-events output to the block
37
+ def debug_events
38
+ prefix = 'stdbuf -oL --'
39
+ cmd = "#{prefix} #{debug_events_command} #{@libinput_options.join(' ')}".strip
40
+ MultiLogger.debug(debug_events: cmd)
41
+ Open3.popen3(cmd) do |_i, o, _e, _w|
42
+ o.each do |line|
43
+ yield(line.chomp)
44
+ end
45
+ end
46
+ end
47
+
48
+ # @return [String] command
49
+ # @raise [SystemExit]
50
+ def version_command
51
+ if which('libinput')
52
+ 'libinput --version'
53
+ elsif which('libinput-list-devices')
54
+ 'libinput-list-devices --version'
55
+ else
56
+ MultiLogger.error 'install libinput-tools'
57
+ exit 1
58
+ end
59
+ end
60
+
61
+ def list_devices_command
62
+ if new_cli_option_available?
63
+ 'libinput list-devices'
64
+ else
65
+ 'libinput-list-devices'
66
+ end
67
+ end
68
+
69
+ def debug_events_command
70
+ if new_cli_option_available?
71
+ 'libinput debug-events'
72
+ else
73
+ 'libinput-debug-events'
74
+ end
75
+ end
76
+
77
+ private
78
+
79
+ # which in ruby: Checking if program exists in $PATH from ruby
80
+ # (https://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby)
81
+ # Cross-platform way of finding an executable in the $PATH.
82
+ #
83
+ # which('ruby') #=> /usr/bin/ruby
84
+ # @return [String, nil]
85
+ def which(command)
86
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
87
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
88
+ exts.each do |ext|
89
+ exe = File.join(path, "#{command}#{ext}")
90
+ return exe if File.executable?(exe) && !File.directory?(exe)
91
+ end
92
+ end
93
+ nil
94
+ end
95
+ end
96
+ end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative './input.rb'
4
- require 'open3'
5
4
 
6
5
  module Fusuma
7
6
  module Plugin
@@ -19,77 +18,11 @@ module Fusuma
19
18
  end
20
19
 
21
20
  def run
22
- debug_events do |line|
21
+ LibinputCommand.new(libinput_options: libinput_options).debug_events do |line|
23
22
  yield event(record: line)
24
23
  end
25
24
  end
26
25
 
27
- # `libinput-list-devices` and `libinput-debug-events` are deprecated,
28
- # use `libinput list-devices` and `libinput debug-events` from 1.8.
29
- NEW_CLI_OPTION_VERSION = 1.8
30
-
31
- # @return [Boolean]
32
- def new_cli_option_available?
33
- Gem::Version.new(version) >= Gem::Version.new(NEW_CLI_OPTION_VERSION)
34
- end
35
-
36
- # @return [String]
37
- def version
38
- # versiom_command prints "1.6.3\n"
39
- @version ||= `#{version_command}`.strip
40
- end
41
-
42
- # @yieldparam [String] gives a line in libinput list-devices output to the block
43
- def list_devices
44
- cmd = list_devices_command
45
- MultiLogger.debug(list_devices: cmd)
46
- Open3.popen3(cmd) do |_i, o, _e, _w|
47
- o.each { |line| yield(line) }
48
- end
49
- end
50
-
51
- # @yieldparam [String] gives a line in libinput debug-events output to the block
52
- def debug_events
53
- prefix = 'stdbuf -oL --'
54
- options = [*libinput_options]
55
- cmd = "#{prefix} #{debug_events_command} #{options.join(' ')}".strip
56
- MultiLogger.debug(debug_events: cmd)
57
- Open3.popen3(cmd) do |_i, o, _e, _w|
58
- o.each do |line|
59
- yield(line.chomp)
60
- end
61
- end
62
- end
63
-
64
- # @return [String] command
65
- # @raise [SystemExit]
66
- def version_command
67
- if which('libinput')
68
- 'libinput --version'
69
- elsif which('libinput-list-devices')
70
- 'libinput-list-devices --version'
71
- else
72
- MultiLogger.error 'install libinput-tools'
73
- exit 1
74
- end
75
- end
76
-
77
- def list_devices_command
78
- if new_cli_option_available?
79
- 'libinput list-devices'
80
- else
81
- 'libinput-list-devices'
82
- end
83
- end
84
-
85
- def debug_events_command
86
- if new_cli_option_available?
87
- 'libinput debug-events'
88
- else
89
- 'libinput-debug-events'
90
- end
91
- end
92
-
93
26
  def libinput_options
94
27
  device = ("--device='#{config_params(:device)}'" if config_params(:device))
95
28
  enable_tap = '--enable-tap' if config_params(:'enable-tap')
@@ -104,25 +37,6 @@ module Fusuma
104
37
  verbose
105
38
  ].compact
106
39
  end
107
-
108
- private
109
-
110
- # which in ruby: Checking if program exists in $PATH from ruby
111
- # (https://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby)
112
- # Cross-platform way of finding an executable in the $PATH.
113
- #
114
- # which('ruby') #=> /usr/bin/ruby
115
- # @return [String, nil]
116
- def which(command)
117
- exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
118
- ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
119
- exts.each do |ext|
120
- exe = File.join(path, "#{command}#{ext}")
121
- return exe if File.executable?(exe) && !File.directory?(exe)
122
- end
123
- end
124
- nil
125
- end
126
40
  end
127
41
  end
128
42
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fusuma
4
- VERSION = '1.6.0'
4
+ VERSION = '1.7.0'
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.6.0
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - iberianpig
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-14 00:00:00.000000000 Z
11
+ date: 2020-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -185,6 +185,7 @@ files:
185
185
  - lib/fusuma/config.yml
186
186
  - lib/fusuma/config/index.rb
187
187
  - lib/fusuma/device.rb
188
+ - lib/fusuma/libinput_command.rb
188
189
  - lib/fusuma/multi_logger.rb
189
190
  - lib/fusuma/plugin/base.rb
190
191
  - lib/fusuma/plugin/buffers/buffer.rb