fusuma-plugin-sendkey 0.4.0 → 0.6.0

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: 23d68a2efd5f41fe72149b824d2ccb15d9153b70e177e0c6547c6fdc531d7015
4
- data.tar.gz: 206d32b21db53813a0213aa6efa7f4005132332ad06f5d360bb57aed291bd61c
3
+ metadata.gz: 707d75db2c999853574d86dc395d0b95fdef3ca57a734bc50dbafedb02170eb5
4
+ data.tar.gz: 8842a7e50e1e20ac502a46da93b30d67449e0073cc4e31483db1eaa248119b52
5
5
  SHA512:
6
- metadata.gz: d8565fdb87ae1ed53a903587c45fc529b780983e845be2f81601e72160244de3852fdc63d8d1f9960cb20c30b82e86713a4c56c393064cf67e04548f1c187323
7
- data.tar.gz: 84f81cc005e1cfe105844f0108241a8e4c2c99f454a2ae5dbfa52023c4c094efb534f87f7c6f6705647b5f4fd556387c8d3ef6def58a6141c39cc94faa6dd6a2
6
+ metadata.gz: 0c484ac88ad76c780c2a9f5eb4c787c121f3c5078aae3dc8167ffed1b369cd97e63105d14e5a192fda1a3bf0c000abf9edcf4c0457bdee8358b7350545b722c3
7
+ data.tar.gz: 5c02dea7596324a16efc5010c25bbeb3cab7188d0e2065b78fa429419035246d8a2cd4b238de78a12cf6537f59e8329743c8abc30e8d8013fcd1a78af6700332
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
- Metrics/LineLength:
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/CHANGELOG.md CHANGED
@@ -1,8 +1,16 @@
1
1
  # Changelog
2
2
 
3
- ## [Unreleased](https://github.com/iberianpig/fusuma-plugin-keypress/tree/HEAD)
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.1.1...HEAD)
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
@@ -2,43 +2,69 @@
2
2
 
3
3
  [Fusuma](https://github.com/iberianpig/fusuma) plugin to send keyboard events
4
4
 
5
- * Emulate keyboard events with evdev
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
 
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
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` can send multiple key events
35
- * Combine keys for pressing the same time with `+`
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
 
@@ -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 'fusuma', '~> 1.7'
27
+ spec.add_dependency 'fusuma', '~> 2.0.0'
28
28
  spec.add_dependency 'revdev'
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'
40
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.rb'
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
- 'device_name': String
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
- keyboard.type(param: search_param(event))
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
- name_pattren = config_params(:device_name)
43
- Sendkey::Keyboard.new(name_pattern: name_pattren)
44
- end
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
@@ -10,7 +10,7 @@ module Fusuma
10
10
  end
11
11
 
12
12
  def path
13
- raise 'Keyboard is not found' if @evdev.nil?
13
+ raise 'Device path is not found' if @evdev.nil?
14
14
 
15
15
  @path ||= @evdev.file.path
16
16
  end
@@ -3,7 +3,7 @@
3
3
  require 'revdev'
4
4
  require 'fusuma/device'
5
5
 
6
- require_relative './device.rb'
6
+ require_relative './device'
7
7
 
8
8
  module Fusuma
9
9
  module Plugin
@@ -11,26 +11,28 @@ module Fusuma
11
11
  # Emulate Keyboard
12
12
  class Keyboard
13
13
  def initialize(name_pattern: nil)
14
- name_pattern ||= 'keyboard'
14
+ name_pattern ||= 'keyboard|Keyboard|KEYBOARD'
15
15
  device = find_device(name_pattern: name_pattern)
16
16
 
17
17
  if device.nil?
18
- warn "sendkey: Keyboard /#{name_pattern}/ is not found"
18
+ warn "sendkey: Keyboard: /#{name_pattern}/ is not found"
19
19
  exit(1)
20
20
  end
21
21
 
22
22
  @device = Device.new(path: "/dev/input/#{device.id}")
23
23
  end
24
24
 
25
- attr_writer :device
25
+ attr_reader :device
26
26
 
27
27
  # @param param [String]
28
- def type(param:)
28
+ # @param keep [String]
29
+ def type(param:, keep: '')
29
30
  return unless param.is_a?(String)
30
31
 
31
- keycodes = split_param(param)
32
+ keep_keycodes = split_param(keep)
33
+ keycodes = split_param(param) - keep_keycodes
32
34
 
33
- clear_modifiers
35
+ clear_modifiers(keep_keycodes)
34
36
  keycodes.each { |keycode| key_event(keycode: keycode, press: true) }
35
37
  key_sync(press: true)
36
38
  keycodes.reverse.map { |keycode| key_event(keycode: keycode, press: false) }
@@ -99,10 +101,11 @@ module Fusuma
99
101
  Object.const_get "LinuxInput::#{keycode}"
100
102
  end
101
103
 
102
- def clear_modifiers
104
+ def clear_modifiers(keycodes)
103
105
  modifiers = %w[ CAPSLOCK LEFTALT LEFTCTRL LEFTMETA
104
106
  LEFTSHIFT RIGHTALT RIGHTCTRL RIGHTSHIFT ]
105
- modifiers.each { |code| key_event(keycode: key_prefix(code), press: false) }
107
+ .map { |code| key_prefix(code) }
108
+ (modifiers - keycodes).each { |code| key_event(keycode: code, press: false) }
106
109
  end
107
110
 
108
111
  private
@@ -3,7 +3,7 @@
3
3
  module Fusuma
4
4
  module Plugin
5
5
  module Sendkey
6
- VERSION = '0.4.0'
6
+ VERSION = '0.6.0'
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.4.0
4
+ version: 0.6.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-25 00:00:00.000000000 Z
11
+ date: 2021-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fusuma
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: 2.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: 2.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: revdev
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,146 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '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'
153
- - !ruby/object:Gem::Dependency
154
- name: rubocop
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- 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
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
41
  description: Fusuma::Plugin::Sendkey emulate keyboard events with evdev
182
42
  email:
183
43
  - yhkyky@gmail.com
@@ -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
@@ -224,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
224
85
  - !ruby/object:Gem::Version
225
86
  version: '0'
226
87
  requirements: []
227
- rubygems_version: 3.0.3
88
+ rubygems_version: 3.1.4
228
89
  signing_key:
229
90
  specification_version: 4
230
91
  summary: Fusuma plugin to send keyboard events