fusuma-plugin-sendkey 0.3.0 → 0.6.0.pre2
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 +4 -4
- data/.rubocop.yml +13 -1
- data/.travis.yml +1 -1
- data/CHANGELOG.md +10 -2
- data/Gemfile +12 -0
- data/README.md +55 -9
- data/exe/fusuma-sendkey +2 -1
- data/fusuma-plugin-sendkey.gemspec +4 -16
- data/lefthook.yml +29 -0
- data/lib/fusuma/plugin/executors/sendkey_executor.rb +30 -7
- data/lib/fusuma/plugin/sendkey/device.rb +5 -18
- data/lib/fusuma/plugin/sendkey/keyboard.rb +55 -39
- data/lib/fusuma/plugin/sendkey/version.rb +1 -1
- metadata +12 -165
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee1499d1a51df5555b66046538d17cc2090b9201c94cac61a135a5141a836dc7
|
4
|
+
data.tar.gz: 768931781108c14aff7c2824dcd54ef2df7b96766ee09ce1dbef19a8518a01d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82d5f225f2c7e4da87f6f77ed7aa8e80d8efc4d5761ee8413b2a9f1ed8d2fcee246623e53d28add1de8e1ef2b4c526c2c3f6c96d387d5def4125c21786b9f43a
|
7
|
+
data.tar.gz: e702113d297c2969ac28063afa460efb3d6ea9b2b4407ad5a093cefa674d14a5c60ca235b38791141d8f65d7ecdb1b361b48da70f0a5a614e8a37046f51fe0c8
|
data/.rubocop.yml
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
AllCops:
|
2
|
+
TargetRubyVersion: 2.4
|
3
|
+
NewCops: enable
|
4
|
+
|
1
5
|
Metrics/ModuleLength:
|
2
6
|
Exclude:
|
3
7
|
- "**/*_spec.rb"
|
@@ -7,7 +11,15 @@ Metrics/BlockLength:
|
|
7
11
|
- "**/*_spec.rb"
|
8
12
|
- "fusuma-plugin-*.gemspec"
|
9
13
|
|
10
|
-
|
14
|
+
Layout/LineLength:
|
11
15
|
Max: 100
|
12
16
|
Exclude:
|
17
|
+
- "**/*_spec.rb"
|
13
18
|
- "fusuma-plugin-*.gemspec"
|
19
|
+
|
20
|
+
Style/HashEachMethods:
|
21
|
+
Enabled: true
|
22
|
+
Style/HashTransformKeys:
|
23
|
+
Enabled: true
|
24
|
+
Style/HashTransformValues:
|
25
|
+
Enabled: true
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,16 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
## [
|
3
|
+
## [v0.2.1](https://github.com/iberianpig/fusuma-plugin-keypress/tree/v0.2.1) (2020-04-15)
|
4
4
|
|
5
|
-
[Full Changelog](https://github.com/iberianpig/fusuma-plugin-keypress/compare/v0.
|
5
|
+
[Full Changelog](https://github.com/iberianpig/fusuma-plugin-keypress/compare/v0.2.0...v0.2.1)
|
6
|
+
|
7
|
+
**Closed issues:**
|
8
|
+
|
9
|
+
- Only 'LEFTMETA' keycode works on KDE Plasma [\#2](https://github.com/iberianpig/fusuma-plugin-keypress/issues/2)
|
10
|
+
|
11
|
+
## [v0.2.0](https://github.com/iberianpig/fusuma-plugin-keypress/tree/v0.2.0) (2020-03-18)
|
12
|
+
|
13
|
+
[Full Changelog](https://github.com/iberianpig/fusuma-plugin-keypress/compare/v0.1.1...v0.2.0)
|
6
14
|
|
7
15
|
**Closed issues:**
|
8
16
|
|
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 'lefthook'
|
9
|
+
gem 'pry-byebug', '~> 3.4'
|
10
|
+
gem 'pry-doc'
|
11
|
+
gem 'pry-inline'
|
12
|
+
gem 'rake', '~> 13.0'
|
13
|
+
gem 'reek'
|
14
|
+
gem 'rspec', '~> 3.0'
|
15
|
+
gem 'rubocop'
|
16
|
+
gem 'yard'
|
data/README.md
CHANGED
@@ -1,44 +1,70 @@
|
|
1
1
|
# Fusuma::Plugin::Sendkey [](https://badge.fury.io/rb/fusuma-plugin-sendkey) [](https://travis-ci.com/iberianpig/fusuma-plugin-sendkey)
|
2
2
|
|
3
|
-
[Fusuma](https://github.com/iberianpig/fusuma) plugin
|
3
|
+
[Fusuma](https://github.com/iberianpig/fusuma) plugin to send keyboard events
|
4
4
|
|
5
|
-
*
|
6
|
-
*
|
5
|
+
* Low-latency key event emulation with evdev
|
6
|
+
* Alternative to xdotool available for X11 and Wayland
|
7
7
|
|
8
8
|
## Installation
|
9
9
|
|
10
10
|
Run the following code in your terminal.
|
11
11
|
|
12
|
-
### Install dependencies
|
12
|
+
### 1. Install dependencies
|
13
13
|
|
14
|
+
#### For Debian Based Distros (Ubuntu, Debian, Mint, Pop!_OS)
|
15
|
+
|
16
|
+
**NOTE: If you have installed ruby by apt, you must install ruby-dev.**
|
14
17
|
```sh
|
15
|
-
$ sudo apt-get install libevdev-dev ruby-
|
18
|
+
$ sudo apt-get install libevdev-dev ruby-dev build-essential
|
19
|
+
```
|
20
|
+
|
21
|
+
#### For Arch Based Distros (Manjaro, Arch)
|
22
|
+
|
23
|
+
```zsh
|
24
|
+
$ sudo pacman -S libevdev base-devel
|
16
25
|
```
|
17
26
|
|
18
|
-
### Install fusuma-plugin-sendkey
|
27
|
+
### 2. Install fusuma-plugin-sendkey
|
28
|
+
|
29
|
+
|
30
|
+
**Note For Arch Based Distros:** By default in Arch Linux, when running ```gem```, gems are installed per-user (into ```~/.gem/ruby/```), instead of system-wide (into ```/usr/lib/ruby/gems/```). This is considered the best way to manage gems on Arch, because otherwise they might interfere with gems installed by Pacman. (From Arch Wiki)
|
31
|
+
|
32
|
+
To install gems system-wide, see any of the methods listed on [Arch Wiki](https://wiki.archlinux.org/index.php/ruby#Installing_gems_system-wide)
|
33
|
+
|
19
34
|
|
20
35
|
```sh
|
36
|
+
$ sudo gem install revdev
|
37
|
+
$ sudo gem install bundler
|
21
38
|
$ sudo gem install fusuma-plugin-sendkey
|
22
39
|
```
|
23
40
|
|
24
|
-
|
25
41
|
## List available keys
|
26
42
|
|
27
43
|
```sh
|
28
44
|
$ fusuma-sendkey -l
|
29
45
|
```
|
46
|
+
If you want to look up a specific key, like the next song or the previous song, the `grep -i` refinement search is useful.
|
47
|
+
|
48
|
+
```sh
|
49
|
+
$ fusuma-sendkey -l | grep -i song
|
50
|
+
NEXTSONG
|
51
|
+
PREVIOUSSONG
|
52
|
+
```
|
30
53
|
|
31
54
|
## Run fusuma-sendkey on Terminal
|
32
55
|
|
33
56
|
* `fusuma-sendkey` command is available on your terminal
|
34
|
-
* `fusuma-sendkey`
|
35
|
-
|
57
|
+
* `fusuma-sendkey` supports modifier keys and multiple key presses.
|
58
|
+
Combine keys for pressing the same time with `+`
|
36
59
|
|
37
60
|
|
38
61
|
```sh
|
39
62
|
$ fusuma-sendkey LEFTCTRL+T # press ctrl key + t key
|
40
63
|
```
|
41
64
|
|
65
|
+
Some of the keys found with `fusuma-sendkey -l` may actually be invalid keys.
|
66
|
+
So test it once with `fusuma-sendkey <KEYCODE>` and then add it to config.yml.
|
67
|
+
|
42
68
|
|
43
69
|
## Add sendkey properties to config.yml
|
44
70
|
|
@@ -59,6 +85,26 @@ swipe:
|
|
59
85
|
sendkey: "LEFTCTRL+W" # close tab
|
60
86
|
```
|
61
87
|
|
88
|
+
|
89
|
+
### Specify keyboard by device name
|
90
|
+
|
91
|
+
If you got following error message, try to set your keyboard name to `plugin.executors.sendkey_executor.device_name` on config.yml
|
92
|
+
|
93
|
+
```shell
|
94
|
+
$ fusuma-sendkey -l
|
95
|
+
sendkey: Keyboard: /keyboard|Keyboard|KEYBOARD/ is not found
|
96
|
+
```
|
97
|
+
|
98
|
+
Set the following options to recognize keyboard only for the specified keyboard device.
|
99
|
+
Open `~/.config/fusuma/config.yml` and add the following code at the bottom.
|
100
|
+
|
101
|
+
```yaml
|
102
|
+
plugin:
|
103
|
+
executors:
|
104
|
+
sendkey_executor:
|
105
|
+
device_name: 'YOUR KEYBOARD NAME'
|
106
|
+
```
|
107
|
+
|
62
108
|
## Contributing
|
63
109
|
|
64
110
|
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.
|
data/exe/fusuma-sendkey
CHANGED
@@ -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.search_codes
|
24
|
+
puts Fusuma::Plugin::Sendkey::Keyboard.new(name_pattern: nil).search_codes
|
24
25
|
return
|
25
26
|
end
|
26
27
|
|
@@ -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
|
14
|
-
spec.description = 'Fusuma::Plugin::Sendkey emulate keyboard events with
|
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,18 +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 '
|
28
|
-
spec.add_dependency '
|
29
|
-
spec.add_dependency 'linux_input', '~> 1.1'
|
30
|
-
|
31
|
-
spec.add_development_dependency 'bundler'
|
32
|
-
spec.add_development_dependency 'github_changelog_generator', '~> 1.14'
|
33
|
-
spec.add_development_dependency 'pry-byebug', '~> 3.4'
|
34
|
-
spec.add_development_dependency 'pry-doc'
|
35
|
-
spec.add_development_dependency 'pry-inline'
|
36
|
-
spec.add_development_dependency 'rake', '~> 13.0'
|
37
|
-
spec.add_development_dependency 'reek'
|
38
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
39
|
-
spec.add_development_dependency 'rubocop'
|
40
|
-
spec.add_development_dependency 'yard'
|
27
|
+
spec.add_dependency 'fusuma', '~> 2.0.0.pre2'
|
28
|
+
spec.add_dependency 'revdev'
|
41
29
|
end
|
data/lefthook.yml
ADDED
@@ -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,31 +1,45 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative '../sendkey/keyboard
|
3
|
+
require_relative '../sendkey/keyboard'
|
4
4
|
|
5
5
|
module Fusuma
|
6
6
|
module Plugin
|
7
7
|
module Executors
|
8
8
|
# Control Window or Workspaces by executing wctrl
|
9
9
|
class SendkeyExecutor < Executor
|
10
|
+
def execute_keys
|
11
|
+
[:sendkey]
|
12
|
+
end
|
13
|
+
|
10
14
|
def config_param_types
|
11
15
|
{
|
12
|
-
|
16
|
+
device_name: String
|
13
17
|
}
|
14
18
|
end
|
15
19
|
|
16
|
-
# execute sendkey command
|
20
|
+
# fork and execute sendkey command
|
17
21
|
# @param event [Event]
|
18
22
|
# @return [nil]
|
19
23
|
def execute(event)
|
20
24
|
MultiLogger.info(sendkey: search_param(event))
|
21
25
|
pid = fork do
|
22
26
|
Process.daemon(true)
|
23
|
-
|
27
|
+
_execute(event)
|
24
28
|
end
|
25
29
|
|
26
30
|
Process.detach(pid)
|
27
31
|
end
|
28
32
|
|
33
|
+
# execute sendkey command
|
34
|
+
# @param event [Event]
|
35
|
+
# @return [nil]
|
36
|
+
def _execute(event)
|
37
|
+
keyboard.type(
|
38
|
+
param: search_param(event),
|
39
|
+
keep: search_keypress(event)
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
29
43
|
# check executable
|
30
44
|
# @param event [Event]
|
31
45
|
# @return [TrueClass, FalseClass]
|
@@ -39,15 +53,24 @@ module Fusuma
|
|
39
53
|
|
40
54
|
def keyboard
|
41
55
|
@keyboard ||= begin
|
42
|
-
|
43
|
-
|
44
|
-
|
56
|
+
name_pattren = config_params(:device_name)
|
57
|
+
Sendkey::Keyboard.new(name_pattern: name_pattren)
|
58
|
+
end
|
45
59
|
end
|
46
60
|
|
47
61
|
def search_param(event)
|
48
62
|
index = Config::Index.new([*event.record.index.keys, :sendkey])
|
49
63
|
Config.search(index)
|
50
64
|
end
|
65
|
+
|
66
|
+
# @param event [Event]
|
67
|
+
# @return [String]
|
68
|
+
def search_keypress(event)
|
69
|
+
keys = event.record.index.keys
|
70
|
+
keypress_index = keys.find_index { |k| k.symbol == :keypress }
|
71
|
+
code = keypress_index && keys[keypress_index + 1].symbol
|
72
|
+
code.to_s
|
73
|
+
end
|
51
74
|
end
|
52
75
|
end
|
53
76
|
end
|
@@ -1,35 +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
|
-
def initialize(path:
|
11
|
-
|
12
|
-
|
13
|
-
(0..99).lazy.find do |i|
|
14
|
-
evdev = Evdev.new("/dev/input/event#{i}")
|
15
|
-
# NOTE: find keyboard device
|
16
|
-
@evdev = evdev if evdev.supports_event?('KEY_LEFTALT')
|
17
|
-
rescue Errno::ENOENT # No such file or directory
|
18
|
-
false
|
19
|
-
# TODO: rescue Errno::EACCES
|
20
|
-
end
|
8
|
+
def initialize(path:)
|
9
|
+
@evdev = Revdev::EventDevice.new(path)
|
21
10
|
end
|
22
11
|
|
23
12
|
def path
|
24
|
-
raise '
|
13
|
+
raise 'Device path is not found' if @evdev.nil?
|
25
14
|
|
26
15
|
@path ||= @evdev.file.path
|
27
16
|
end
|
28
17
|
|
29
|
-
def
|
30
|
-
@evdev.
|
31
|
-
rescue NameError
|
32
|
-
false
|
18
|
+
def write_event(event)
|
19
|
+
@evdev.write_input_event(event)
|
33
20
|
end
|
34
21
|
end
|
35
22
|
end
|
@@ -1,30 +1,42 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
4
|
-
require '
|
5
|
-
|
3
|
+
require 'revdev'
|
4
|
+
require 'fusuma/device'
|
5
|
+
|
6
|
+
require_relative './device'
|
6
7
|
|
7
8
|
module Fusuma
|
8
9
|
module Plugin
|
9
10
|
module Sendkey
|
10
11
|
# Emulate Keyboard
|
11
12
|
class Keyboard
|
12
|
-
def initialize(
|
13
|
-
|
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}")
|
14
23
|
end
|
15
24
|
|
25
|
+
attr_reader :device
|
26
|
+
|
16
27
|
# @param param [String]
|
17
|
-
|
28
|
+
# @param keep [String]
|
29
|
+
def type(param:, keep: '')
|
18
30
|
return unless param.is_a?(String)
|
19
31
|
|
20
|
-
|
32
|
+
keep_keycodes = split_param(keep)
|
33
|
+
keycodes = split_param(param) - keep_keycodes
|
21
34
|
|
22
|
-
clear_modifiers
|
35
|
+
clear_modifiers(keep_keycodes)
|
23
36
|
keycodes.each { |keycode| key_event(keycode: keycode, press: true) }
|
24
37
|
key_sync(press: true)
|
25
38
|
keycodes.reverse.map { |keycode| key_event(keycode: keycode, press: false) }
|
26
39
|
key_sync(press: false)
|
27
|
-
device_file.close
|
28
40
|
end
|
29
41
|
|
30
42
|
# @param param [String]
|
@@ -35,69 +47,73 @@ module Fusuma
|
|
35
47
|
keycodes.all? { |keycode| support?(keycode) }
|
36
48
|
end
|
37
49
|
|
38
|
-
def device_file
|
39
|
-
return @device_file if @device_file && !@device_file.closed?
|
40
|
-
|
41
|
-
@device_file = File.open(@device.path, Fcntl::O_WRONLY | Fcntl::O_NDELAY)
|
42
|
-
end
|
43
|
-
|
44
50
|
def key_event(keycode:, press: true)
|
45
|
-
event =
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
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)
|
52
58
|
end
|
53
59
|
|
54
60
|
def key_sync(press: true)
|
55
|
-
event =
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
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)
|
62
68
|
end
|
63
69
|
|
64
70
|
def support?(keycode)
|
65
71
|
@supported_code ||= {}
|
66
|
-
@supported_code[keycode] ||= if
|
72
|
+
@supported_code[keycode] ||= if find_code(keycode: keycode)
|
67
73
|
true
|
68
74
|
else
|
69
75
|
search_candidates(keycode: keycode)
|
70
|
-
exit(1)
|
71
76
|
end
|
72
77
|
end
|
73
78
|
|
74
79
|
def search_candidates(keycode:)
|
75
|
-
|
80
|
+
query = keycode&.upcase&.gsub('KEY_', '')
|
81
|
+
|
82
|
+
candidates = search_codes(query: query)
|
76
83
|
|
77
84
|
warn "Did you mean? #{candidates.join(' / ')}" unless candidates.empty?
|
78
85
|
warn "sendkey: #{remove_prefix(keycode)} is unsupported."
|
79
86
|
end
|
80
87
|
|
81
|
-
def search_codes(
|
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)
|
82
95
|
query = keycode&.upcase&.gsub('KEY_', '')
|
83
|
-
|
84
|
-
|
85
|
-
.select { |c| @device.support?(c) }
|
86
|
-
.map { |c| c.to_s.gsub('KEY_', '') }
|
96
|
+
|
97
|
+
Revdev.constants.find { |c| c == "KEY_#{query}".to_sym }
|
87
98
|
end
|
88
99
|
|
89
100
|
def keycode_const(keycode)
|
90
101
|
Object.const_get "LinuxInput::#{keycode}"
|
91
102
|
end
|
92
103
|
|
93
|
-
def clear_modifiers
|
104
|
+
def clear_modifiers(keycodes)
|
94
105
|
modifiers = %w[ CAPSLOCK LEFTALT LEFTCTRL LEFTMETA
|
95
106
|
LEFTSHIFT RIGHTALT RIGHTCTRL RIGHTSHIFT ]
|
96
|
-
|
107
|
+
.map { |code| key_prefix(code) }
|
108
|
+
(modifiers - keycodes).each { |code| key_event(keycode: code, press: false) }
|
97
109
|
end
|
98
110
|
|
99
111
|
private
|
100
112
|
|
113
|
+
def find_device(name_pattern:)
|
114
|
+
Fusuma::Device.all.find { |d| d.name.match(/#{name_pattern}/) }
|
115
|
+
end
|
116
|
+
|
101
117
|
def split_param(param)
|
102
118
|
param.split('+').map { |code| key_prefix(code) }
|
103
119
|
end
|
metadata
CHANGED
@@ -1,198 +1,44 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fusuma-plugin-sendkey
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0.pre2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iberianpig
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-29 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: '1.0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.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:
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '1.5'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: linux_input
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.1'
|
19
|
+
version: 2.0.0.pre2
|
48
20
|
type: :runtime
|
49
21
|
prerelease: false
|
50
22
|
version_requirements: !ruby/object:Gem::Requirement
|
51
23
|
requirements:
|
52
24
|
- - "~>"
|
53
25
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
26
|
+
version: 2.0.0.pre2
|
55
27
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
28
|
+
name: revdev
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
58
30
|
requirements:
|
59
31
|
- - ">="
|
60
32
|
- !ruby/object:Gem::Version
|
61
33
|
version: '0'
|
62
|
-
type: :
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: github_changelog_generator
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '1.14'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '1.14'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: pry-byebug
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '3.4'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '3.4'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: pry-doc
|
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: pry-inline
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: rake
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '13.0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '13.0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: reek
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: rspec
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - "~>"
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '3.0'
|
160
|
-
type: :development
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - "~>"
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '3.0'
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: rubocop
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - ">="
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
174
|
-
type: :development
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - ">="
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0'
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: yard
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - ">="
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: '0'
|
188
|
-
type: :development
|
34
|
+
type: :runtime
|
189
35
|
prerelease: false
|
190
36
|
version_requirements: !ruby/object:Gem::Requirement
|
191
37
|
requirements:
|
192
38
|
- - ">="
|
193
39
|
- !ruby/object:Gem::Version
|
194
40
|
version: '0'
|
195
|
-
description: Fusuma::Plugin::Sendkey emulate keyboard events with
|
41
|
+
description: Fusuma::Plugin::Sendkey emulate keyboard events with evdev
|
196
42
|
email:
|
197
43
|
- yhkyky@gmail.com
|
198
44
|
executables:
|
@@ -214,6 +60,7 @@ files:
|
|
214
60
|
- bin/setup
|
215
61
|
- exe/fusuma-sendkey
|
216
62
|
- fusuma-plugin-sendkey.gemspec
|
63
|
+
- lefthook.yml
|
217
64
|
- lib/fusuma/plugin/executors/sendkey_executor.rb
|
218
65
|
- lib/fusuma/plugin/sendkey.rb
|
219
66
|
- lib/fusuma/plugin/sendkey/device.rb
|
@@ -234,12 +81,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
234
81
|
version: '0'
|
235
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
236
83
|
requirements:
|
237
|
-
- - "
|
84
|
+
- - ">"
|
238
85
|
- !ruby/object:Gem::Version
|
239
|
-
version:
|
86
|
+
version: 1.3.1
|
240
87
|
requirements: []
|
241
|
-
rubygems_version: 3.
|
88
|
+
rubygems_version: 3.2.15
|
242
89
|
signing_key:
|
243
90
|
specification_version: 4
|
244
|
-
summary: Fusuma plugin
|
91
|
+
summary: Fusuma plugin to send keyboard events
|
245
92
|
test_files: []
|