fusuma-plugin-sendkey 0.1.0 → 0.1.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: afdee578801f2000ddbdccc13fb96f038690a562f6e391202867f02aa5f7c01b
4
- data.tar.gz: 61443a67eaaa58354c8843a4133c30d6063e148bc98ff2d683a49782615ddbd1
3
+ metadata.gz: 3087cd15e356a48d1f8fd2398daed7f6153d4e9c005db98ffad34627b357bc65
4
+ data.tar.gz: 0dd9da2ff1ef200d76691f9a3e72fe8efff68cea8e6eef1c448387df6154daf1
5
5
  SHA512:
6
- metadata.gz: 05adaa93109610fc54290512fd9d1694c99eb2db192f1976254d26d6d9d65b1691e576b5eb001aa61a72a564f5bbfa084d542e1c43f3209df4d99cc954e2d2d5
7
- data.tar.gz: fc7358d9338e3ea77d868c219db41277857983fe85fcbc5c8d1801d1fd94563277d2b10a1686f7aeed96f5ab627172b6ef00f7ce6883d2cd9b16d234b784b137
6
+ metadata.gz: 830a41f20bfa018ceff548a8c660012947657fbd18b8e369a1033fb4f4d0e2f665ade047eeafa9d3ba3ade8ba5079a1c1044cc6401b4222da20847bced619a7b
7
+ data.tar.gz: 9f8ae60d5377799ed80844ba3a218049c1a736cf7ed0e733dea347067a30fc548f6aa5c82b2311858e2474f8ad0d1df8a3e8739730d9e301664a784d2a073b26
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [Fusuma](https://github.com/iberianpig/fusuma) plugin that sending virtual keyboard events
4
4
 
5
- * Send emulate keyboard events with evemu-event
5
+ * Emulate keyboard events with evemu-event
6
6
  * This plugin replaces xdotool
7
7
 
8
8
  ## Installation
@@ -7,6 +7,12 @@ module Fusuma
7
7
  module Executors
8
8
  # Control Window or Workspaces by executing wctrl
9
9
  class SendkeyExecutor < Executor
10
+ def config_param_types
11
+ {
12
+ 'device_path': String
13
+ }
14
+ end
15
+
10
16
  # execute sendkey command
11
17
  # @param event [Event]
12
18
  # @return [nil]
@@ -35,7 +41,10 @@ module Fusuma
35
41
  # @return [String]
36
42
  # @return [NilClass]
37
43
  def search_command(event)
38
- @keyboard ||= Keyboard.new
44
+ @keyboard ||= begin
45
+ device = Sendkey::Device.new(path: config_params(:device_path))
46
+ Sendkey::Keyboard.new(device: device)
47
+ end
39
48
  @keyboard.type_command(param: search_param(event))
40
49
  end
41
50
 
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'evdev'
4
+
5
+ module Fusuma
6
+ module Plugin
7
+ module Sendkey
8
+ # handle Evdev device
9
+ class Device
10
+ attr_reader :device_id
11
+ def initialize(path: nil)
12
+ return if path && (@evdev = Evdev.new(path))
13
+
14
+ (0..99).lazy.find do |i|
15
+ begin
16
+ evdev = Evdev.new("/dev/input/event#{i}")
17
+ @evdev = evdev if evdev.supports_event?(convert_keycode('LEFTALT'))
18
+ rescue Errno::ENOENT # No such file or directory
19
+ false
20
+ # TODO: rescue Errno::EACCES
21
+ end
22
+ end
23
+ end
24
+
25
+ def path
26
+ raise 'Keyboard is not found' if @evdev.nil?
27
+
28
+ @path ||= @evdev.file.path
29
+ end
30
+
31
+ def support?(code)
32
+ keycode = convert_keycode(code)
33
+ @evdev.supports_event?(keycode)
34
+ rescue NameError
35
+ candidates = search_codes(code: code)
36
+
37
+ warn "Did you mean? #{candidates.join(' / ')}" unless candidates.empty?
38
+
39
+ false
40
+ end
41
+
42
+ def search_codes(code: nil)
43
+ query = code&.upcase
44
+ LinuxInput.constants
45
+ .select { |c| c[/KEY_.*#{query}.*/] }
46
+ .select { |c| @evdev.supports_event?(c) }
47
+ .map { |c| c.to_s.gsub('KEY_', '') }
48
+ end
49
+
50
+ def emulate(code:, press: true)
51
+ keycode = convert_keycode(code)
52
+ v = press ? 1 : 0
53
+ "evemu-event #{path} --type EV_KEY --code #{keycode} --value #{v} --sync"
54
+ end
55
+
56
+ private
57
+
58
+ def convert_keycode(code)
59
+ "KEY_#{code.upcase}"
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -1,101 +1,54 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'evdev'
4
-
5
- # Emulate Keyboard
6
- class Keyboard
7
- def initialize
8
- @device = Device.new
9
- @path = @device.path
10
- end
3
+ require_relative './device.rb'
4
+
5
+ module Fusuma
6
+ module Plugin
7
+ module Sendkey
8
+ # Emulate Keyboard
9
+ class Keyboard
10
+ def initialize(device: nil)
11
+ @device = device || Device.new
12
+ end
11
13
 
12
- # @param param [String]
13
- def type_command(param:)
14
- return unless param.is_a?(String)
14
+ # @param param [String]
15
+ def type_command(param:)
16
+ return unless param.is_a?(String)
15
17
 
16
- codes = param.split('+')
17
- press_commands = codes.map { |code| press_command(code) }
18
- release_commands = codes.reverse.map { |code| release_command(code) }
18
+ codes = param.split('+')
19
+ press_commands = codes.map { |code| press_command(code) }
20
+ release_commands = codes.reverse.map { |code| release_command(code) }
19
21
 
20
- (press_commands | release_commands).join(' && ')
21
- end
22
-
23
- def press_command(code)
24
- return unless support?(code)
22
+ (press_commands | release_commands).join(' && ')
23
+ end
25
24
 
26
- @device.emulate(code: code, press: true)
27
- end
25
+ def press_command(code)
26
+ return unless support?(code)
28
27
 
29
- def release_command(code)
30
- return unless support?(code)
28
+ @device.emulate(code: code, press: true)
29
+ end
31
30
 
32
- @device.emulate(code: code, press: false)
33
- end
31
+ def release_command(code)
32
+ return unless support?(code)
34
33
 
35
- def support?(code)
36
- @supported_code ||= {}
37
- @supported_code[code] ||= if @device.support?(code)
38
- true
39
- else
40
- warn "sendkey: #{code} is unsupported."
41
- warn 'Please check your config.yml.'
42
- exit 1
43
- end
44
- end
34
+ @device.emulate(code: code, press: false)
35
+ end
45
36
 
46
- def available_codes
47
- @device.search_codes
48
- end
37
+ def support?(code)
38
+ @supported_code ||= {}
39
+ @supported_code[code] ||= if @device.support?(code)
40
+ true
41
+ else
42
+ warn "sendkey: #{code} is unsupported."
43
+ warn 'Please check your config.yml.'
44
+ exit 1
45
+ end
46
+ end
49
47
 
50
- # handle Evdev device
51
- class Device
52
- attr_reader :device_id
53
- def initialize
54
- (0..99).lazy.find do |i|
55
- begin
56
- evdev = Evdev.new("/dev/input/event#{i}")
57
- @evdev = evdev if evdev.supports_event?(convert_keycode('LEFTALT'))
58
- rescue Errno::ENOENT
59
- false
48
+ def available_codes
49
+ @device.search_codes
60
50
  end
61
51
  end
62
52
  end
63
-
64
- def path
65
- raise 'Keyboard is not found' if @evdev.nil?
66
-
67
- @path ||= @evdev.file.path
68
- end
69
-
70
- def support?(code)
71
- keycode = convert_keycode(code)
72
- @evdev.supports_event?(keycode)
73
- rescue NameError
74
- candidates = search_codes(code: code)
75
-
76
- warn "Did you mean? #{candidates.join(' / ')}" unless candidates.empty?
77
-
78
- false
79
- end
80
-
81
- def search_codes(code: nil)
82
- query = code&.upcase
83
- LinuxInput.constants
84
- .select { |c| c[/KEY_.*#{query}.*/] }
85
- .select { |c| @evdev.supports_event?(c) }
86
- .map { |c| c.to_s.gsub('KEY_', '') }
87
- end
88
-
89
- def emulate(code:, press: true)
90
- keycode = convert_keycode(code)
91
- v = press ? 1 : 0
92
- "evemu-event #{path} --type EV_KEY --code #{keycode} --value #{v} --sync"
93
- end
94
-
95
- private
96
-
97
- def convert_keycode(code)
98
- "KEY_#{code.upcase}"
99
- end
100
53
  end
101
54
  end
@@ -3,7 +3,7 @@
3
3
  module Fusuma
4
4
  module Plugin
5
5
  module Sendkey
6
- VERSION = '0.1.0'
6
+ VERSION = '0.1.1'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fusuma-plugin-sendkey
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.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-03-02 00:00:00.000000000 Z
11
+ date: 2020-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: evdev
@@ -201,6 +201,7 @@ files:
201
201
  - fusuma-plugin-sendkey.gemspec
202
202
  - lib/fusuma/plugin/executors/sendkey_executor.rb
203
203
  - lib/fusuma/plugin/sendkey.rb
204
+ - lib/fusuma/plugin/sendkey/device.rb
204
205
  - lib/fusuma/plugin/sendkey/keyboard.rb
205
206
  - lib/fusuma/plugin/sendkey/version.rb
206
207
  homepage: https://github.com/iberianpig/fusuma-plugin-sendkey