fusuma-plugin-sendkey 0.2.1 → 0.6.0.pre

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: 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: []