rkremap 0.5.0 → 0.5.1
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/example/henkan-super.rb +4 -2
- data/example/tmtms.rb +35 -4
- data/lib/rkremap/event.rb +6 -2
- data/lib/rkremap/remap.rb +21 -8
- data/lib/rkremap/version.rb +1 -1
- data/lib/rkremap.rb +9 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93f0a2d7d2c705b779d942618d4da708ef395386bc9529d06cc4c4f644243bac
|
4
|
+
data.tar.gz: bddb932d29c287b3e00105adac03fc420506253c5f00c309dee22da46678502f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41fff4f8444a6c585403ac5a3655eb5b4e1d631332594c95e4d3149a973dced926b4a726cf912522e7ac3c0dcbb4ba0e3ea6461dfe6853e04c1a9086162307e2
|
7
|
+
data.tar.gz: 88b6bdb97c04ed2629d1eac337e89f9854f954daf392b4e0a395e6df94699ff1c7e7e66be78ea3adeb3221fff8a6a88d2d8a38699f503575c5376bbdfcf96556
|
data/example/henkan-super.rb
CHANGED
@@ -16,8 +16,10 @@ rk.remap(hold: 0.5, map: {
|
|
16
16
|
|
17
17
|
# マウスボタンイベントはそのまま
|
18
18
|
rk.match(device: :mouse) do |event|
|
19
|
-
|
20
|
-
|
19
|
+
unless Rkremap::CODE_KEY[event.code] =~ /^KEY_/
|
20
|
+
rk.event(code: event.code, type: event.type)
|
21
|
+
event.skip
|
22
|
+
end
|
21
23
|
end
|
22
24
|
|
23
25
|
rk.start do |code, mod|
|
data/example/tmtms.rb
CHANGED
@@ -20,8 +20,10 @@ rk.remap(hold: 0.5, map: {
|
|
20
20
|
|
21
21
|
# マウスボタンイベントはそのまま
|
22
22
|
rk.match(device: :mouse) do |event|
|
23
|
-
|
24
|
-
|
23
|
+
unless Rkremap::CODE_KEY[event.code] =~ /^KEY_/
|
24
|
+
rk.event(code: event.code, type: event.type)
|
25
|
+
event.skip
|
26
|
+
end
|
25
27
|
end
|
26
28
|
|
27
29
|
# CAPSLOCK は CTRL に変換
|
@@ -55,12 +57,26 @@ mod_disable_meta = {
|
|
55
57
|
}
|
56
58
|
mod_disable_all = {}.merge(mod_disable_ctrl, mod_disable_shift, mod_disable_alt, mod_disable_meta)
|
57
59
|
|
58
|
-
#
|
59
|
-
rk.match(app: /
|
60
|
+
# VirtualBox
|
61
|
+
rk.match(app: /VirtualBox Machine/) do |event|
|
60
62
|
rk.event(code: event.code, type: event.type)
|
61
63
|
event.skip
|
62
64
|
end
|
63
65
|
|
66
|
+
# Emacs
|
67
|
+
rk.match(app: {class_name: 'Emacs'}) do |event, mod|
|
68
|
+
# 修飾キーが Super だけの場合は Alt として扱う。ただしキーが TAB の場合は除く。
|
69
|
+
mod_enabled = mod.select{_2}.keys
|
70
|
+
if !mod_enabled.empty? && mod_enabled.all?{_1 == KEY_LEFTMETA || _1 == KEY_RIGHTMETA} && event.code != KEY_TAB
|
71
|
+
rk.with_modifier(mod_disable_meta.merge(KEY_LEFTALT => true)) do
|
72
|
+
rk.event(code: event.code, type: event.type)
|
73
|
+
end
|
74
|
+
else
|
75
|
+
rk.event(code: event.code, type: event.type)
|
76
|
+
end
|
77
|
+
event.skip
|
78
|
+
end
|
79
|
+
|
64
80
|
# 端末
|
65
81
|
rk.match(app: /terminal/i) do |event, mod|
|
66
82
|
# Super+Ctrl はそのまま
|
@@ -83,6 +99,16 @@ rk.match(app: /terminal/i) do |event, mod|
|
|
83
99
|
event.skip
|
84
100
|
end
|
85
101
|
|
102
|
+
# Firefox で Super+Ctrl+C は Alt+Ctrl+C に変換
|
103
|
+
rk.match(app: {class_name: 'firefox'}) do |event, mod|
|
104
|
+
if (mod[KEY_LEFTMETA] || mod[KEY_RIGHTMETA]) && (mod[KEY_LEFTCTRL] || mod[KEY_RIGHTCTRL]) && event.code == KEY_C
|
105
|
+
rk.with_modifier(mod_disable_meta.merge(KEY_LEFTCTRL => true, KEY_LEFTALT => true)) do
|
106
|
+
rk.event(code: event.code, type: event.type)
|
107
|
+
end
|
108
|
+
event.skip
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
86
112
|
# その他のウィンドウ
|
87
113
|
ctrl_map = {
|
88
114
|
KEY_A => KEY_HOME,
|
@@ -108,6 +134,11 @@ rk.start do |code, mod|
|
|
108
134
|
rk.key(code, mod.merge(mod_disable_meta, KEY_LEFTCTRL => true))
|
109
135
|
next
|
110
136
|
end
|
137
|
+
# Super+[←→] を Alt+[←→] に変換
|
138
|
+
if (mod[KEY_LEFTMETA] || mod[KEY_RIGHTMETA]) && (Rkremap::CODE_KEY[code] =~ /\AKEY_(LEFT|RIGHT)\z/)
|
139
|
+
rk.key(code, mod.merge(mod_disable_meta, KEY_LEFTALT => true))
|
140
|
+
next
|
141
|
+
end
|
111
142
|
|
112
143
|
# Alt + F, B は Ctrl + →, ← に変換
|
113
144
|
if (mod[KEY_LEFTALT] || mod[KEY_RIGHTALT]) && (code == KEY_F || code == KEY_B)
|
data/lib/rkremap/event.rb
CHANGED
@@ -23,11 +23,15 @@ class Rkremap
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def inspect
|
26
|
-
|
26
|
+
if ev_type == EV_KEY
|
27
|
+
"#<Rkremap::Event: #{code}(#{CODE_KEY[code]}) #{value} #{device.inspect}>"
|
28
|
+
else
|
29
|
+
"#<Rkremap::Event: type: #{ev_type}>"
|
30
|
+
end
|
27
31
|
end
|
28
32
|
|
29
33
|
def type
|
30
|
-
|
34
|
+
value == 1 ? :press : value == 0 ? :release : :repeat
|
31
35
|
end
|
32
36
|
|
33
37
|
def match?(device:, code:, type:, app:)
|
data/lib/rkremap/remap.rb
CHANGED
@@ -26,6 +26,10 @@ class Rkremap
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
@rk.match(code: keycodes, type: :repeat) do |event|
|
30
|
+
event.skip
|
31
|
+
end
|
32
|
+
|
29
33
|
@rk.match(code: keycodes, type: :release) do |event|
|
30
34
|
if @pressed[event.code]
|
31
35
|
@rk.event(code: @pressed[event.code], type: :release)
|
@@ -59,12 +63,17 @@ class Rkremap
|
|
59
63
|
end
|
60
64
|
|
61
65
|
@rk.match(code: keycodes, type: :release) do |event|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
+
code = event.code
|
67
|
+
if jobs[code]
|
68
|
+
if jobs[code].cancel
|
69
|
+
event.value = 1
|
70
|
+
@rk.append_event(Event.new(event.device, event.time, event.ev_type, event.code, 0))
|
71
|
+
elsif map[code]
|
72
|
+
event.code = map[code]
|
73
|
+
@pressed[code] = nil
|
74
|
+
end
|
75
|
+
jobs[code] = nil
|
66
76
|
end
|
67
|
-
event.skip
|
68
77
|
end
|
69
78
|
|
70
79
|
@rk.match(type: :press) do
|
@@ -89,17 +98,21 @@ class Rkremap
|
|
89
98
|
# @param to [Integer, Array<Integer>]
|
90
99
|
# @param event [Rkremap::Event, nil]
|
91
100
|
def make_press_event(to, event=nil)
|
92
|
-
Array(to)
|
101
|
+
to = Array(to)
|
102
|
+
f = true
|
103
|
+
to.each do |key|
|
93
104
|
@pressed[event.code] = key if event
|
94
105
|
if @rk.modifiers.include? key
|
95
106
|
@rk.event(code: key, type: :press)
|
96
|
-
event&.skip
|
97
107
|
elsif event
|
98
108
|
event.code = key
|
109
|
+
f = false
|
99
110
|
else
|
100
|
-
@rk.key(
|
111
|
+
@rk.key(key)
|
112
|
+
f = false
|
101
113
|
end
|
102
114
|
end
|
115
|
+
event&.skip if f
|
103
116
|
end
|
104
117
|
end
|
105
118
|
end
|
data/lib/rkremap/version.rb
CHANGED
data/lib/rkremap.rb
CHANGED
@@ -83,9 +83,10 @@ class Rkremap
|
|
83
83
|
@evdev_list.detect_loop
|
84
84
|
@mod_state = @modifiers.map.to_h{|m| [m, false]}
|
85
85
|
winattr = WinAttr.new if @x11
|
86
|
+
@events = []
|
86
87
|
while true
|
87
88
|
@keys = []
|
88
|
-
event = @evdev_list.read_event
|
89
|
+
event = @events.shift || @evdev_list.read_event
|
89
90
|
if event.ev_type != EV_KEY
|
90
91
|
if event.device.grab?
|
91
92
|
@uinput.write_event(event.ev_type, event.code, event.value)
|
@@ -138,6 +139,12 @@ class Rkremap
|
|
138
139
|
end
|
139
140
|
end
|
140
141
|
|
142
|
+
# @param event [Rkremap::Event]
|
143
|
+
def append_event(event)
|
144
|
+
@events.push event
|
145
|
+
@events.push Event.new(event.device, event.time, EV_SYN, SYN_REPORT, 0)
|
146
|
+
end
|
147
|
+
|
141
148
|
private
|
142
149
|
|
143
150
|
def update_modifiers(code, value)
|
@@ -190,7 +197,7 @@ class Rkremap
|
|
190
197
|
# @param app [Array, Hash, String, Regexp]
|
191
198
|
# @return [Boolean]
|
192
199
|
def match?(app)
|
193
|
-
|
200
|
+
[app].flatten.each do |a|
|
194
201
|
a = {class_name: a, title: a} unless a.is_a? Hash
|
195
202
|
return true if match_sub(a[:class_name], class_name) || match_sub(a[:title], title)
|
196
203
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rkremap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TOMITA Masahiro
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tmtms_timer
|
@@ -68,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
requirements: []
|
71
|
-
rubygems_version: 3.
|
71
|
+
rubygems_version: 3.5.0.dev
|
72
72
|
signing_key:
|
73
73
|
specification_version: 4
|
74
74
|
summary: key remapper
|