xkeyrap 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +27 -1
- data/bin/xkeyrap +4 -1
- data/lib/xkeyrap/command.rb +16 -19
- data/lib/xkeyrap/key.rb +27 -2
- data/lib/xkeyrap/version.rb +1 -1
- data/lib/xkeyrap.rb +3 -6
- data/xkeyrap.gemspec +0 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc2fe8eb39aa1e50cf8d7ad39e3823ff4b45f1eea0be50a2b5c7f755d54c5162
|
4
|
+
data.tar.gz: 36c2677e59b9044b89f7531cebeea83a9fbaf3af8c10cd29a70f1c5549d06eca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '086a216bb4c9b12225cf5168b86b83726655e4abab7b6cba8a4e05a07c65b5c406da959708cf3730f20a6e66fe481d4e209d22dd3df543d57d57fa4fd1535dcc'
|
7
|
+
data.tar.gz: 2c4666c41b40c1ff0aa427c9f9b249eeeeb00d7b6b8ac014235ecf2cbfd399cf964d9197ddd7ff6f37acf4daa9f39c42b0c44144a0f506a1da1c0274ef488f5e
|
data/README.md
CHANGED
@@ -1 +1,27 @@
|
|
1
|
-
#
|
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
data/lib/xkeyrap/command.rb
CHANGED
@@ -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,
|
14
|
-
self.
|
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
|
-
|
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
|
data/lib/xkeyrap/version.rb
CHANGED
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(
|
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,
|
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
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.
|
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-
|
11
|
+
date: 2018-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|