fusuma-plugin-sendkey 0.2.1 → 0.6.0.pre

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: 37cb58747c750acf4c991fd174a8e19182336f518a54f4b2c816e3ead7f628eb
4
- data.tar.gz: 9309dd43e32c3cd8b6791fe6c1a56f439fff6d7a05af41f9654e96360efd76bd
3
+ metadata.gz: 5f604b8593c06c599afd8bd3c14344fcb503e2ffacc48025550c78daa8b970ae
4
+ data.tar.gz: 80f5ed997dac202b7f86f2f518538cf6181e54ec84bb52d47e92412b77c1645f
5
5
  SHA512:
6
- metadata.gz: 9f93e2a400820e3b4e138da96e71f90067bf514d35751bc6f31f6d58d9d4bc72ec18e621f04ede71eaa26131bbede74b7fb8bda420e8c38e3895f78299169616
7
- data.tar.gz: 934f126d52d893d577fa9b5cec25209a88fbb3298d0004238e004676a898ced197ff481bed6aa1e3015fb55a05d33762aac9823b4a10d3bc796a940dc5e28ffc
6
+ metadata.gz: ff64de3322846b3df4e476767a6ea78d406a773295d3c3c3b2997a13797468c3fc2cef4d46c82c6db325ba7513710bf797088c7199fcd4e26479cc35714071d7
7
+ data.tar.gz: 11cbe3e6612ae1e4f2d9f466c0a26283d2a144a1f369c19d9eb0414095e9508ad329278788ef6f58efeba8f8d47ad106ce113d1d2feba68edee49ef032d36287
@@ -1,3 +1,11 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.4
3
+ NewCops: enable
4
+ Layout/BeginEndAlignment:
5
+ Enabled: true
6
+ Layout/EmptyLinesAroundAttributeAccessor:
7
+ Enabled: true
8
+
1
9
  Metrics/ModuleLength:
2
10
  Exclude:
3
11
  - "**/*_spec.rb"
@@ -7,7 +15,15 @@ Metrics/BlockLength:
7
15
  - "**/*_spec.rb"
8
16
  - "fusuma-plugin-*.gemspec"
9
17
 
10
- Metrics/LineLength:
18
+ Layout/LineLength:
11
19
  Max: 100
12
20
  Exclude:
21
+ - "**/*_spec.rb"
13
22
  - "fusuma-plugin-*.gemspec"
23
+
24
+ Style/HashEachMethods:
25
+ Enabled: true
26
+ Style/HashTransformKeys:
27
+ Enabled: true
28
+ Style/HashTransformValues:
29
+ Enabled: true
@@ -6,4 +6,4 @@ rvm:
6
6
  - 2.6.1
7
7
  before_install:
8
8
  - gem install bundler -v 2.0.1
9
- - sudo apt-get -y install evemu-tools libevdev-dev
9
+ - sudo apt-get -y install libevdev-dev
data/Gemfile CHANGED
@@ -2,3 +2,15 @@ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in fusuma-plugin-sendkey.gemspec
4
4
  gemspec
5
+
6
+ gem 'bundler'
7
+ gem 'github_changelog_generator', '~> 1.14'
8
+ gem 'pry-byebug', '~> 3.4'
9
+ gem 'pry-doc'
10
+ gem 'pry-inline'
11
+ gem 'rake', '~> 13.0'
12
+ gem 'reek'
13
+ gem 'rspec', '~> 3.0'
14
+ gem 'rubocop'
15
+ gem 'yard'
16
+ gem 'lefthook'
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
1
  # Fusuma::Plugin::Sendkey [![Gem Version](https://badge.fury.io/rb/fusuma-plugin-sendkey.svg)](https://badge.fury.io/rb/fusuma-plugin-sendkey) [![Build Status](https://travis-ci.com/iberianpig/fusuma-plugin-sendkey.svg?branch=master)](https://travis-ci.com/iberianpig/fusuma-plugin-sendkey)
2
2
 
3
- [Fusuma](https://github.com/iberianpig/fusuma) plugin that sending virtual keyboard events
3
+ [Fusuma](https://github.com/iberianpig/fusuma) plugin to send keyboard events
4
4
 
5
- * Emulate keyboard events with evemu-event
6
- * This plugin is wayland compatible and alternative to xdotool
5
+ * Low-latency key event emulation with evdev
6
+ * Alternative to xdotool available for X11 and Wayland
7
7
 
8
8
  ## Installation
9
9
 
@@ -11,8 +11,9 @@ Run the following code in your terminal.
11
11
 
12
12
  ### Install dependencies
13
13
 
14
+ **NOTE: If you have installed ruby by apt, you must install ruby-dev.**
14
15
  ```sh
15
- $ sudo apt-get install evemu-tools libevdev-dev ruby-ffi
16
+ $ sudo apt-get install libevdev-dev ruby-dev build-essential
16
17
  ```
17
18
 
18
19
  ### Install fusuma-plugin-sendkey
@@ -22,22 +23,33 @@ $ sudo gem install fusuma-plugin-sendkey
22
23
  ```
23
24
 
24
25
 
25
- ## List avaiable keys
26
+ ## List available keys
26
27
 
27
28
  ```sh
28
29
  $ fusuma-sendkey -l
29
30
  ```
31
+ If you want to look up a specific key, like the next song or the previous song, the `grep -i` refinement search is useful.
32
+
33
+ ```sh
34
+ $ fusuma-sendkey -l | grep -i song
35
+ NEXTSONG
36
+ PREVIOUSSONG
37
+ ```
30
38
 
31
39
  ## Run fusuma-sendkey on Terminal
32
40
 
33
- * `fusuma-sendkey` can emulate keyboard inputs as a command
34
- * Combine keys for pressing the same time with `+`
41
+ * `fusuma-sendkey` command is available on your terminal
42
+ * `fusuma-sendkey` supports modifier keys and multiple key presses.
43
+ Combine keys for pressing the same time with `+`
35
44
 
36
45
 
37
46
  ```sh
38
- $ fusuma-sendkey LEFTCTRL+T
47
+ $ fusuma-sendkey LEFTCTRL+T # press ctrl key + t key
39
48
  ```
40
49
 
50
+ Some of the keys found with `fusuma-sendkey -l` may actually be invalid keys.
51
+ So test it once with `fusuma-sendkey <KEYCODE>` and then add it to config.yml.
52
+
41
53
 
42
54
  ## Add sendkey properties to config.yml
43
55
 
@@ -58,6 +70,26 @@ swipe:
58
70
  sendkey: "LEFTCTRL+W" # close tab
59
71
  ```
60
72
 
73
+
74
+ ### Specify keyboard by device name
75
+
76
+ If you got following error message, try to set your keyboard name to `plugin.executors.sendkey_executor.device_name` on config.yml
77
+
78
+ ```shell
79
+ $ fusuma-sendkey -l
80
+ sendkey: Keyboard: /keyboard|Keyboard|KEYBOARD/ is not found
81
+ ```
82
+
83
+ Set the following options to recognize keyboard only for the specified keyboard device.
84
+ Open `~/.config/fusuma/config.yml` and add the following code at the bottom.
85
+
86
+ ```yaml
87
+ plugin:
88
+ executors:
89
+ sendkey_executor:
90
+ device_name: 'YOUR KEYBOARD NAME'
91
+ ```
92
+
61
93
  ## Contributing
62
94
 
63
95
  Bug reports and pull requests are welcome on GitHub at https://github.com/iberianpig/fusuma-plugin-sendkey. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
@@ -1,14 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "bundler/setup"
4
+ require 'fusuma/plugin/executors/executor'
4
5
  require "fusuma/plugin/sendkey"
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
8
9
 
9
10
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start(__FILE__)
11
+ require "pry"
12
+ Pry.start
@@ -2,6 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require 'optparse'
5
+ require 'fusuma/plugin/inputs/libinput_command_input.rb'
5
6
  require_relative '../lib/fusuma/plugin/sendkey/keyboard.rb'
6
7
  require_relative '../lib/fusuma/plugin/sendkey/version.rb'
7
8
 
@@ -20,7 +21,7 @@ end
20
21
  opt.parse!(ARGV)
21
22
 
22
23
  if option[:list]
23
- puts Fusuma::Plugin::Sendkey::Keyboard.new.available_codes
24
+ puts Fusuma::Plugin::Sendkey::Keyboard.new(name_pattern: nil).search_codes
24
25
  return
25
26
  end
26
27
 
@@ -37,6 +38,5 @@ if param.nil?
37
38
  exit 1
38
39
  end
39
40
 
40
- Fusuma::Plugin::Sendkey::Keyboard.new.type_command(param: param).tap do |command|
41
- exec(command)
42
- end
41
+ keyboard = Fusuma::Plugin::Sendkey::Keyboard.new
42
+ keyboard.valid?(param: param) && keyboard.type(param: param)
@@ -10,8 +10,8 @@ Gem::Specification.new do |spec|
10
10
  spec.authors = ['iberianpig']
11
11
  spec.email = ['yhkyky@gmail.com']
12
12
 
13
- spec.summary = 'Fusuma plugin that sending virtual keyboard events'
14
- spec.description = 'Fusuma::Plugin::Sendkey emulate keyboard events with evemu-event'
13
+ spec.summary = 'Fusuma plugin to send keyboard events'
14
+ spec.description = 'Fusuma::Plugin::Sendkey emulate keyboard events with evdev'
15
15
  spec.homepage = 'https://github.com/iberianpig/fusuma-plugin-sendkey'
16
16
  spec.license = 'MIT'
17
17
 
@@ -24,17 +24,6 @@ Gem::Specification.new do |spec|
24
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
25
  spec.require_paths = ['lib']
26
26
 
27
- spec.add_dependency 'evdev'
28
- spec.add_dependency 'fusuma', '~> 1.5.0'
29
-
30
- spec.add_development_dependency 'bundler'
31
- spec.add_development_dependency 'github_changelog_generator', '~> 1.14'
32
- spec.add_development_dependency 'pry-byebug', '~> 3.4'
33
- spec.add_development_dependency 'pry-doc'
34
- spec.add_development_dependency 'pry-inline'
35
- spec.add_development_dependency 'rake', '~> 13.0'
36
- spec.add_development_dependency 'reek'
37
- spec.add_development_dependency 'rspec', '~> 3.0'
38
- spec.add_development_dependency 'rubocop'
39
- spec.add_development_dependency 'yard'
27
+ spec.add_dependency 'fusuma', '~> 2.0.0.pre'
28
+ spec.add_dependency 'revdev'
40
29
  end
@@ -0,0 +1,29 @@
1
+ # EXAMPLE USAGE
2
+ # Refer for explanation to following link:
3
+ # https://github.com/Arkweid/lefthook/blob/master/docs/full_guide.md
4
+
5
+ # pre-push:
6
+ # commands:
7
+ # packages-audit:
8
+ # tags: frontend security
9
+ # run: yarn audit
10
+ # gems-audit:
11
+ # tags: backend security
12
+ # run: bundle audit
13
+
14
+ pre-commit:
15
+ parallel: true
16
+ commands:
17
+ # eslint:
18
+ # glob: "*.{js,ts}"
19
+ # run: yarn eslint {staged_files}
20
+ rubocop:
21
+ tags: backend style
22
+ glob: "*.rb"
23
+ # exclude: "application.rb|routes.rb"
24
+ run: bundle exec rubocop --force-exclusion {staged_files}
25
+ # scripts:
26
+ # "hello.js":
27
+ # runner: node
28
+ # "any.go":
29
+ # runner: go run
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../sendkey/keyboard.rb'
3
+ require_relative '../sendkey/keyboard'
4
4
 
5
5
  module Fusuma
6
6
  module Plugin
@@ -9,51 +9,64 @@ module Fusuma
9
9
  class SendkeyExecutor < Executor
10
10
  def config_param_types
11
11
  {
12
- 'device_path': String
12
+ 'device_name': String
13
13
  }
14
14
  end
15
15
 
16
- # execute sendkey command
16
+ # fork and execute sendkey command
17
17
  # @param event [Event]
18
18
  # @return [nil]
19
19
  def execute(event)
20
- return if search_command(event).nil?
21
-
22
20
  MultiLogger.info(sendkey: search_param(event))
23
21
  pid = fork do
24
22
  Process.daemon(true)
25
- exec(search_command(event))
23
+ _execute(event)
26
24
  end
27
25
 
28
26
  Process.detach(pid)
29
27
  end
30
28
 
29
+ # execute sendkey command
30
+ # @param event [Event]
31
+ # @return [nil]
32
+ def _execute(event)
33
+ keyboard.type(
34
+ param: search_param(event),
35
+ keep: search_keypress(event)
36
+ )
37
+ end
38
+
31
39
  # check executable
32
40
  # @param event [Event]
33
41
  # @return [TrueClass, FalseClass]
34
42
  def executable?(event)
35
43
  event.tag.end_with?('_detector') &&
36
44
  event.record.type == :index &&
37
- search_command(event)
45
+ keyboard.valid?(param: search_param(event))
38
46
  end
39
47
 
40
- # @param event [Event]
41
- # @return [String]
42
- # @return [NilClass]
43
- def search_command(event)
48
+ private
49
+
50
+ def keyboard
44
51
  @keyboard ||= begin
45
- device = Sendkey::Device.new(path: config_params(:device_path))
46
- Sendkey::Keyboard.new(device: device)
47
- end
48
- @keyboard.type_command(param: search_param(event))
52
+ name_pattren = config_params(:device_name)
53
+ Sendkey::Keyboard.new(name_pattern: name_pattren)
54
+ end
49
55
  end
50
56
 
51
- private
52
-
53
57
  def search_param(event)
54
58
  index = Config::Index.new([*event.record.index.keys, :sendkey])
55
59
  Config.search(index)
56
60
  end
61
+
62
+ # @param event [Event]
63
+ # @return [String]
64
+ def search_keypress(event)
65
+ keys = event.record.index.keys
66
+ keypress_index = keys.find_index { |k| k.symbol == :keypress }
67
+ code = keypress_index && keys[keypress_index + 1].symbol
68
+ code.to_s
69
+ end
57
70
  end
58
71
  end
59
72
  end
@@ -1,62 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'evdev'
4
-
5
3
  module Fusuma
6
4
  module Plugin
7
5
  module Sendkey
8
6
  # handle Evdev device
9
7
  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
8
+ def initialize(path:)
9
+ @evdev = Revdev::EventDevice.new(path)
23
10
  end
24
11
 
25
12
  def path
26
- raise 'Keyboard is not found' if @evdev.nil?
13
+ raise 'Device path is not found' if @evdev.nil?
27
14
 
28
15
  @path ||= @evdev.file.path
29
16
  end
30
17
 
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}"
18
+ def write_event(event)
19
+ @evdev.write_input_event(event)
60
20
  end
61
21
  end
62
22
  end
@@ -1,52 +1,129 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative './device.rb'
3
+ require 'revdev'
4
+ require 'fusuma/device'
5
+
6
+ require_relative './device'
4
7
 
5
8
  module Fusuma
6
9
  module Plugin
7
10
  module Sendkey
8
11
  # Emulate Keyboard
9
12
  class Keyboard
10
- def initialize(device: nil)
11
- @device = device || Device.new
13
+ def initialize(name_pattern: nil)
14
+ name_pattern ||= 'keyboard|Keyboard|KEYBOARD'
15
+ device = find_device(name_pattern: name_pattern)
16
+
17
+ if device.nil?
18
+ warn "sendkey: Keyboard: /#{name_pattern}/ is not found"
19
+ exit(1)
20
+ end
21
+
22
+ @device = Device.new(path: "/dev/input/#{device.id}")
12
23
  end
13
24
 
25
+ attr_reader :device
26
+
14
27
  # @param param [String]
15
- def type_command(param:)
28
+ # @param keep [String]
29
+ def type(param:, keep: '')
16
30
  return unless param.is_a?(String)
17
31
 
18
- codes = param.split('+')
19
- press_commands = codes.map { |code| press_command(code) }
20
- release_commands = codes.reverse.map { |code| release_command(code) }
32
+ keep_keycodes = split_param(keep)
33
+ keycodes = split_param(param) - keep_keycodes
21
34
 
22
- (press_commands | release_commands).join(' && ')
35
+ clear_modifiers(keep_keycodes)
36
+ keycodes.each { |keycode| key_event(keycode: keycode, press: true) }
37
+ key_sync(press: true)
38
+ keycodes.reverse.map { |keycode| key_event(keycode: keycode, press: false) }
39
+ key_sync(press: false)
23
40
  end
24
41
 
25
- def press_command(code)
26
- return unless support?(code)
42
+ # @param param [String]
43
+ def valid?(param:)
44
+ return unless param.is_a?(String)
27
45
 
28
- @device.emulate(code: code, press: true)
46
+ keycodes = split_param(param)
47
+ keycodes.all? { |keycode| support?(keycode) }
29
48
  end
30
49
 
31
- def release_command(code)
32
- return unless support?(code)
50
+ def key_event(keycode:, press: true)
51
+ event = Revdev::InputEvent.new(
52
+ nil,
53
+ Revdev.const_get(:EV_KEY),
54
+ Revdev.const_get(keycode),
55
+ press ? 1 : 0
56
+ )
57
+ @device.write_event(event)
58
+ end
33
59
 
34
- @device.emulate(code: code, press: false)
60
+ def key_sync(press: true)
61
+ event = Revdev::InputEvent.new(
62
+ nil,
63
+ Revdev.const_get(:EV_SYN),
64
+ Revdev.const_get(:SYN_REPORT),
65
+ press ? 1 : 0
66
+ )
67
+ @device.write_event(event)
35
68
  end
36
69
 
37
- def support?(code)
70
+ def support?(keycode)
38
71
  @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
72
+ @supported_code[keycode] ||= if find_code(keycode: keycode)
73
+ true
74
+ else
75
+ search_candidates(keycode: keycode)
76
+ end
77
+ end
78
+
79
+ def search_candidates(keycode:)
80
+ query = keycode&.upcase&.gsub('KEY_', '')
81
+
82
+ candidates = search_codes(query: query)
83
+
84
+ warn "Did you mean? #{candidates.join(' / ')}" unless candidates.empty?
85
+ warn "sendkey: #{remove_prefix(keycode)} is unsupported."
86
+ end
87
+
88
+ def search_codes(query: nil)
89
+ Revdev.constants
90
+ .select { |c| c[/KEY_.*#{query}.*/] }
91
+ .map { |c| c.to_s.gsub('KEY_', '') }
92
+ end
93
+
94
+ def find_code(keycode: nil)
95
+ query = keycode&.upcase&.gsub('KEY_', '')
96
+
97
+ Revdev.constants.find { |c| c == "KEY_#{query}".to_sym }
98
+ end
99
+
100
+ def keycode_const(keycode)
101
+ Object.const_get "LinuxInput::#{keycode}"
102
+ end
103
+
104
+ def clear_modifiers(keycodes)
105
+ modifiers = %w[ CAPSLOCK LEFTALT LEFTCTRL LEFTMETA
106
+ LEFTSHIFT RIGHTALT RIGHTCTRL RIGHTSHIFT ]
107
+ .map { |code| key_prefix(code) }
108
+ (modifiers - keycodes).each { |code| key_event(keycode: code, press: false) }
109
+ end
110
+
111
+ private
112
+
113
+ def find_device(name_pattern:)
114
+ Fusuma::Device.all.find { |d| d.name.match(/#{name_pattern}/) }
115
+ end
116
+
117
+ def split_param(param)
118
+ param.split('+').map { |code| key_prefix(code) }
119
+ end
120
+
121
+ def key_prefix(code)
122
+ "KEY_#{code.upcase}"
46
123
  end
47
124
 
48
- def available_codes
49
- @device.search_codes
125
+ def remove_prefix(keycode)
126
+ keycode.gsub('KEY_', '')
50
127
  end
51
128
  end
52
129
  end
@@ -3,7 +3,7 @@
3
3
  module Fusuma
4
4
  module Plugin
5
5
  module Sendkey
6
- VERSION = '0.2.1'
6
+ VERSION = '0.6.0.pre'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,184 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fusuma-plugin-sendkey
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.6.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - iberianpig
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-04 00:00:00.000000000 Z
11
+ date: 2020-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: evdev
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: fusuma
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: 1.5.0
19
+ version: 2.0.0.pre
34
20
  type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: 1.5.0
41
- - !ruby/object:Gem::Dependency
42
- name: bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: github_changelog_generator
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '1.14'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '1.14'
69
- - !ruby/object:Gem::Dependency
70
- name: pry-byebug
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '3.4'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '3.4'
83
- - !ruby/object:Gem::Dependency
84
- name: pry-doc
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: pry-inline
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: rake
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '13.0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '13.0'
125
- - !ruby/object:Gem::Dependency
126
- name: reek
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: rspec
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: '3.0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '3.0'
26
+ version: 2.0.0.pre
153
27
  - !ruby/object:Gem::Dependency
154
- name: rubocop
28
+ name: revdev
155
29
  requirement: !ruby/object:Gem::Requirement
156
30
  requirements:
157
31
  - - ">="
158
32
  - !ruby/object:Gem::Version
159
33
  version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: yard
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :development
34
+ type: :runtime
175
35
  prerelease: false
176
36
  version_requirements: !ruby/object:Gem::Requirement
177
37
  requirements:
178
38
  - - ">="
179
39
  - !ruby/object:Gem::Version
180
40
  version: '0'
181
- description: Fusuma::Plugin::Sendkey emulate keyboard events with evemu-event
41
+ description: Fusuma::Plugin::Sendkey emulate keyboard events with evdev
182
42
  email:
183
43
  - yhkyky@gmail.com
184
44
  executables:
@@ -200,6 +60,7 @@ files:
200
60
  - bin/setup
201
61
  - exe/fusuma-sendkey
202
62
  - fusuma-plugin-sendkey.gemspec
63
+ - lefthook.yml
203
64
  - lib/fusuma/plugin/executors/sendkey_executor.rb
204
65
  - lib/fusuma/plugin/sendkey.rb
205
66
  - lib/fusuma/plugin/sendkey/device.rb
@@ -209,7 +70,7 @@ homepage: https://github.com/iberianpig/fusuma-plugin-sendkey
209
70
  licenses:
210
71
  - MIT
211
72
  metadata: {}
212
- post_install_message:
73
+ post_install_message:
213
74
  rdoc_options: []
214
75
  require_paths:
215
76
  - lib
@@ -220,12 +81,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
220
81
  version: '0'
221
82
  required_rubygems_version: !ruby/object:Gem::Requirement
222
83
  requirements:
223
- - - ">="
84
+ - - ">"
224
85
  - !ruby/object:Gem::Version
225
- version: '0'
86
+ version: 1.3.1
226
87
  requirements: []
227
- rubygems_version: 3.0.6
228
- signing_key:
88
+ rubygems_version: 3.1.4
89
+ signing_key:
229
90
  specification_version: 4
230
- summary: Fusuma plugin that sending virtual keyboard events
91
+ summary: Fusuma plugin to send keyboard events
231
92
  test_files: []