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 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