xkeyrap 0.0.1 → 0.0.2

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: fcbb8debd9c802033dd0c1bb18f8ec2b140de08a9ea040e4968679b5c4d7bda0
4
- data.tar.gz: 26338c6cec1a0d546a8df49e9cc8ffad58d682b559922f00012f346ed52835f6
3
+ metadata.gz: fc2fe8eb39aa1e50cf8d7ad39e3823ff4b45f1eea0be50a2b5c7f755d54c5162
4
+ data.tar.gz: 36c2677e59b9044b89f7531cebeea83a9fbaf3af8c10cd29a70f1c5549d06eca
5
5
  SHA512:
6
- metadata.gz: 0f0aa81ad89305218900ec4cc1f393c5d4f60d8c7a97b38cf30facdf8614f2f1da4647653c7880024d792a9a35ec0180562e36b10247765f0cba0b6a788b885c
7
- data.tar.gz: 1da4fe400ff6b280ad78c33388e302e4db0f894dc7d2921c5c6ad6a14c2f3a9f3fb48227a613b0bf41e8dd7a4a0e1e40e2ea78d29f2d3d82474be3a4c34c244c
6
+ metadata.gz: '086a216bb4c9b12225cf5168b86b83726655e4abab7b6cba8a4e05a07c65b5c406da959708cf3730f20a6e66fe481d4e209d22dd3df543d57d57fa4fd1535dcc'
7
+ data.tar.gz: 2c4666c41b40c1ff0aa427c9f9b249eeeeb00d7b6b8ac014235ecf2cbfd399cf964d9197ddd7ff6f37acf4daa9f39c42b0c44144a0f506a1da1c0274ef488f5e
data/README.md CHANGED
@@ -1 +1,27 @@
1
- # hello world
1
+ # Xkeyrap
2
+
3
+ Xkeyrap 是一个受 [https://github.com/mooz/xkeysnail](xkeysnail) 启发的项目。
4
+
5
+ 如果你和我有一样的 [https://www.songofcode.com/posts/linux-shortcuts-for-macos/](改键需求), 可以使用下面的配置文件:
6
+
7
+ ``` json
8
+ {
9
+ "Firefox": {
10
+ "KEY_LEFTALT": "KEY_LEFTCTRL",
11
+ "KEY_CAPSLOCK": "KEY_LEFTALT"
12
+ },
13
+ "Google-chrome": {
14
+ "KEY_LEFTALT": "KEY_LEFTCTRL",
15
+ "KEY_CAPSLOCK": "KEY_LEFTALT"
16
+ }
17
+ }
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ ``` shell
23
+ sudo gem install xkeyrap # need sudo
24
+
25
+ xhost +SI:localuser:root
26
+ sudo xkeyrap config.json
27
+ ```
data/bin/xkeyrap CHANGED
@@ -2,4 +2,7 @@
2
2
 
3
3
  require 'xkeyrap'
4
4
 
5
- Xkeyrap::Cli.run
5
+ input_device = ARGV[1] # '/dev/input/event4'
6
+ config_file = ARGV[2] # 'config.json'
7
+
8
+ Xkeyrap::Cli.run(input_device, config_file)
@@ -1,41 +1,38 @@
1
1
  require "evdev"
2
2
  require 'libevdev'
3
-
4
3
  require 'uinput/device'
4
+ require 'json'
5
5
 
6
6
  module Xkeyrap
7
7
  class Command
8
- attr_accessor :keys
9
- attr_accessor :modifier_keys
10
8
  attr_accessor :output_device
11
9
  attr_accessor :config
12
10
 
13
- def initialize(device, config)
14
- self.keys = Set.new
15
- self.modifier_keys = Set.new
11
+ def initialize(device, config_file)
12
+ self.config = default_config.merge(JSON.parse(config_file)) rescue default_config
16
13
  self.output_device = device
17
- unless config
18
- self.config = {
19
- global: {
20
- KEY_CAPSLOCK: :KEY_LEFTCTRL,
21
- KEY_LEFTCTRL: :KEY_CAPSLOCK
22
- },
23
- "Firefox": {
24
- KEY_LEFTALT: :KEY_LEFTCTRL,
25
- KEY_CAPSLOCK: :KEY_LEFTALT
26
- }
27
- }
28
- end
29
14
  end
30
15
 
31
16
  def receive(state, key, wm_class_name = "global")
17
+ key = key.to_sym
32
18
  puts "input: #{state} ... #{key}"
33
19
  sub_json = self.config[wm_class_name.to_sym] || self.config[:global]
34
20
  mapped_key = sub_json[key] || self.config[:global][key] || key
35
21
  puts "output: #{state} ... #{mapped_key}"
36
- self.output_device.send_event(:EV_KEY, mapped_key, state)
22
+ self.output_device.send_event(:EV_KEY, mapped_key.to_sym, state)
37
23
  self.output_device.send_event(:EV_SYN, :SYN_REPORT)
38
24
  end
39
25
 
26
+ def default_config
27
+ {
28
+ global: {
29
+ KEY_CAPSLOCK: :KEY_LEFTCTRL,
30
+ KEY_LEFTCTRL: :KEY_CAPSLOCK,
31
+ KEY_LEFTALT: :KEY_LEFTMETA,
32
+ KEY_LEFTMETA: :KEY_LEFTALT
33
+ }
34
+ }
35
+ end
36
+
40
37
  end
41
38
  end
data/lib/xkeyrap/key.rb CHANGED
@@ -29,7 +29,17 @@ module Xkeyrap
29
29
  :KEY_COMMA,
30
30
  :KEY_DOT,
31
31
  :KEY_SLASH,
32
- :KEY_BACKSLASH
32
+ :KEY_BACKSLASH,
33
+ :KEY_HOME,
34
+ :KEY_UP,
35
+ :KEY_PAGEUP,
36
+ :KEY_LEFT,
37
+ :KEY_RIGHT,
38
+ :KEY_END,
39
+ :KEY_DOWN,
40
+ :KEY_PAGEDOWN,
41
+ :KEY_INSERT,
42
+ :KEY_DELETE,
33
43
  ]
34
44
 
35
45
  LETTER_KEYS = [
@@ -75,7 +85,22 @@ module Xkeyrap
75
85
  :KEY_RIGHTCTRL
76
86
  ]
77
87
 
78
- ALL_KEYS = NUMBER_KEYS + MISC_KEYS + LETTER_KEYS + MODIFIER_KEYS
88
+ FUNCTION_KEYS = [
89
+ :KEY_F1,
90
+ :KEY_F2,
91
+ :KEY_F3,
92
+ :KEY_F4,
93
+ :KEY_F5,
94
+ :KEY_F6,
95
+ :KEY_F7,
96
+ :KEY_F8,
97
+ :KEY_F9,
98
+ :KEY_F10,
99
+ :KEY_F11,
100
+ :KEY_F12,
101
+ ]
102
+
103
+ ALL_KEYS = NUMBER_KEYS + MISC_KEYS + LETTER_KEYS + MODIFIER_KEYS + FUNCTION_KEYS
79
104
 
80
105
  end
81
106
  end
@@ -1,3 +1,3 @@
1
1
  module Xkeyrap
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/xkeyrap.rb CHANGED
@@ -10,7 +10,7 @@ require 'uinput/device'
10
10
  module Xkeyrap
11
11
  class Cli
12
12
 
13
- def self.run
13
+ def self.run(input_device, config_file)
14
14
  display = XlibObj::Display.new(':0')
15
15
  device = Uinput::Device.new do
16
16
  self.name = "Xkeyrap virtual device"
@@ -24,13 +24,10 @@ module Xkeyrap
24
24
  self.add_event(:EV_SYN)
25
25
  end
26
26
 
27
- keyboard = Evdev.new('/dev/input/event4')
28
-
29
- puts keyboard.supports_event? :KEY_ENTER
30
- puts keyboard.supports_event? :KEY_KPENTER
27
+ keyboard = Evdev.new(input_device)
31
28
  keyboard.grab
32
29
 
33
- command = Command.new(device, nil)
30
+ command = Command.new(device, config_file)
34
31
 
35
32
  key_handler = keyboard.on(*Xkeyrap::Key::ALL_KEYS) do |state, key|
36
33
  root_window = display.screens.first.root_window
data/xkeyrap.gemspec CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  lib = File.expand_path("../lib", __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require "xkeyrap/version"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xkeyrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - teddy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-14 00:00:00.000000000 Z
11
+ date: 2018-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler