rkremap 0.3.0 → 0.3.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 04a75325e18cfa14e1eeb93462af309c6d692083c5ef4a2609e6dfd53747a6c8
4
- data.tar.gz: 1f86fc05c3098eed25b0d09bbebfc75fdad37122898ee9762376ce5241f21c60
3
+ metadata.gz: 55d8872f73bd984afd69fdf3c17e53f39de16a4f8feef40bc851b6527e57aa17
4
+ data.tar.gz: 99c6a99b3fdd44e206d416eab361ca1ab4c9e4defc0d96bfa2fc0e563a5a1e4c
5
5
  SHA512:
6
- metadata.gz: 3874c3c1a1c9b78a82faf4c3ceb40f28e1d9d5f1380a8ac3f604ffc904f2dcb4099db5b84f2f9542ae4d104ac8f242f4edd8060c8da0aa4f65e8ddc472a4cab2
7
- data.tar.gz: f9700cd0991fb27fa03de2a402dd1bfebe0f23cc35d128b5b35ca9115608988ce2f1aeea55cd8525a3c645e1b4a465b0aa0995703e4cb0b58f73bdb7e2efda3f
6
+ metadata.gz: c9ad9908d2a602e2740748924e5cd83c1f6526eda164c389cde0b22d1b4462d74c7f5eba3809f2c353396500efe5a5447cb22302a0c8db9aaf4fbfa739f1c6a9
7
+ data.tar.gz: 936cef85543d1089d81323ddd4f11a7b4da2afb44d6f7d7c9921132182e300e963a73ad8e51f8e80a6cf879251caad0c5235cddc0cc73a51dc315f2b5a487744
@@ -0,0 +1,57 @@
1
+ # 変換/無変換キーを0.5秒以上押してるとALTキーとして扱う。
2
+ # 0.5秒以内でも変換/無変換キーを押しながら他のキーを押すとALTキーとして扱う。
3
+
4
+ require 'rkremap'
5
+ require 'tmtms_timer' # gem install tmtms_timer
6
+
7
+ include Rkremap::KeyCode
8
+
9
+ rk = Rkremap.new
10
+ rk.grab = true
11
+
12
+ timer = Tmtms::Timer.new
13
+ jobs = {
14
+ KEY_HENKAN => nil,
15
+ KEY_MUHENKAN => nil,
16
+ }
17
+
18
+ henkan_map = {
19
+ KEY_HENKAN => KEY_RIGHTMETA,
20
+ KEY_MUHENKAN => KEY_RIGHTMETA, # LEFTMETA だとデスクトップ環境のメニューが開いたりするため
21
+ }
22
+
23
+ rk.match(code: [KEY_HENKAN, KEY_MUHENKAN]) do |event|
24
+ if event.type == :press
25
+ job = timer.set(0.5) do
26
+ rk.synchronize do
27
+ rk.event(code: henkan_map[event.code], type: :press)
28
+ end
29
+ end
30
+ jobs[event.code] = job
31
+ elsif event.type == :release
32
+ if jobs[event.code]&.cancel
33
+ rk.key(event.code)
34
+ else
35
+ rk.event(code: henkan_map[event.code], type: :release)
36
+ end
37
+ end
38
+ event.skip
39
+ end
40
+
41
+ rk.match(type: :press) do
42
+ [KEY_HENKAN, KEY_MUHENKAN].each do |code|
43
+ if jobs[code]&.cancel
44
+ rk.event(code: henkan_map[code], type: :press)
45
+ end
46
+ end
47
+ end
48
+
49
+ def code2key(code)
50
+ Rkremap::CODE_KEY[code].to_s.sub(/\AKEY_/, '')
51
+ end
52
+
53
+ rk.start do |code, mod|
54
+ key = (mod.select{|_, v| v}.keys + [code]).map{|c| code2key(c)}.join('-')
55
+ puts key
56
+ rk.key(code, mod)
57
+ end
@@ -43,14 +43,20 @@ rk.start do |code, mod, app|
43
43
  next
44
44
  end
45
45
 
46
- # ALT+[A-Z]/Enter を Ctrl+[A-Z]/Enter に変換
47
- if (mod[KEY_LEFTALT] || mod[KEY_RIGHTALT]) && (Rkremap::CODE_KEY[code] =~ /\AKEY_[A-Z]\z/ || code == KEY_ENTER)
48
- mod.merge!(mod_disable_alt, {KEY_LEFTCTRL => true})
46
+ # SUPER+[A-Z]/Enter を Ctrl+[A-Z]/Enter に変換
47
+ if (mod[KEY_LEFTMETA] || mod[KEY_RIGHTMETA]) && (Rkremap::CODE_KEY[code] =~ /\AKEY_[A-Z]\z/ || code == KEY_ENTER)
48
+ mod.merge!(mod_disable_meta, {KEY_LEFTCTRL => true})
49
49
  mod[KEY_LEFTCTRL] = true
50
50
  rk.key(code, mod)
51
51
  next
52
52
  end
53
53
 
54
+ # Alt + F, B は Ctrl + →, ← に変換
55
+ if (mod[KEY_LEFTALT] || mod[KEY_RIGHTALT]) && (code == KEY_F || code == KEY_B)
56
+ rk.key(code == KEY_F ? KEY_RIGHT : KEY_LEFT, mod.merge(mod_disable_alt, {KEY_LEFTCTRL => true}))
57
+ next
58
+ end
59
+
54
60
  # Ctrl は他のキーに変換
55
61
  if mod[KEY_LEFTCTRL] || mod[KEY_RIGHTCTRL]
56
62
  # Ctrl+K は行末まで削除
data/example/tmtms.rb CHANGED
@@ -1,86 +1,46 @@
1
1
  # tmtms 用
2
2
 
3
3
  require 'rkremap'
4
- include Rkremap::KeyCode
5
-
6
- class State
7
- attr_accessor :converted
8
-
9
- def initialize
10
- @press = nil
11
- @converted = false
12
- @thread = nil
13
- end
14
-
15
- def press(thread)
16
- @press = true
17
- @converted = false
18
- @thread = thread
19
- end
4
+ require 'tmtms_timer' # gem install tmtms_timer
20
5
 
21
- def release
22
- @press = false
23
- @converted = false
24
- @thread.kill
25
- @thread = nil
26
- end
27
-
28
- def pressed?
29
- @press
30
- end
31
- end
6
+ include Rkremap::KeyCode
32
7
 
33
8
  rk = Rkremap.new
34
9
  rk.grab = true
35
10
  rk.x11 = true
36
11
 
37
- # 変換/無変換キーを0.5秒以上押してるとALTキーとして扱う。
38
- # 0.5秒以内でも変換/無変換キーを押しながら他のキーを押すとALTキーとして扱う。
39
-
40
- state = {
41
- KEY_HENKAN => State.new,
42
- KEY_MUHENKAN => State.new,
12
+ timer = Tmtms::Timer.new
13
+ jobs = {
14
+ KEY_HENKAN => nil,
15
+ KEY_MUHENKAN => nil,
43
16
  }
44
-
45
17
  henkan_map = {
46
- KEY_HENKAN => KEY_RIGHTALT,
47
- KEY_MUHENKAN => KEY_LEFTALT,
18
+ KEY_HENKAN => KEY_RIGHTMETA,
19
+ KEY_MUHENKAN => KEY_RIGHTMETA, # LEFTMETA だとデスクトップ環境のメニューが開いたりするため
48
20
  }
49
21
 
50
- rk.match(code: [KEY_HENKAN, KEY_MUHENKAN], type: :press) do |event|
51
- thr = Thread.new(event.code) do |code|
52
- sleep 0.5
53
- rk.synchronize do
54
- if state[code].pressed?
55
- rk.event(code: henkan_map[code], type: :press)
56
- state[code].converted = true
22
+ rk.match(code: [KEY_HENKAN, KEY_MUHENKAN]) do |event|
23
+ if event.type == :press
24
+ job = timer.set(0.5) do
25
+ rk.synchronize do
26
+ rk.event(code: henkan_map[event.code], type: :press)
57
27
  end
58
28
  end
29
+ jobs[event.code] = job
30
+ elsif event.type == :release
31
+ if jobs[event.code]&.cancel
32
+ rk.key(event.code)
33
+ else
34
+ rk.event(code: henkan_map[event.code], type: :release)
35
+ end
59
36
  end
60
- state[event.code].press(thr)
61
- event.skip
62
- end
63
-
64
- rk.match(code: [KEY_HENKAN, KEY_MUHENKAN], type: :release) do |event|
65
- if state[event.code].converted
66
- rk.event(code: henkan_map[event.code], type: :release)
67
- event.skip
68
- else
69
- rk.event(code: event.code, type: :press)
70
- rk.event(code: event.code, type: :release)
71
- end
72
- state[event.code].release
73
- end
74
-
75
- rk.match(code: [KEY_HENKAN, KEY_MUHENKAN], type: :repeat) do |event|
76
37
  event.skip
77
38
  end
78
39
 
79
40
  rk.match(type: :press) do
80
41
  [KEY_HENKAN, KEY_MUHENKAN].each do |code|
81
- if state[code].pressed?
42
+ if jobs[code]&.cancel
82
43
  rk.event(code: henkan_map[code], type: :press)
83
- state[code].converted = true
84
44
  end
85
45
  end
86
46
  end
@@ -139,18 +99,24 @@ rk.start do |code, mod, app|
139
99
  next
140
100
  end
141
101
 
142
- # ALT+[A-Z]/Enter を Ctrl+[A-Z]/Enter に変換
143
- if (mod[KEY_LEFTALT] || mod[KEY_RIGHTALT]) && (Rkremap::CODE_KEY[code] =~ /\AKEY_[A-Z]\z/ || code == KEY_ENTER)
144
- mod.merge!(mod_disable_alt, {KEY_LEFTCTRL => true})
102
+ # SUPER+[A-Z]/Enter を Ctrl+[A-Z]/Enter に変換
103
+ if (mod[KEY_LEFTMETA] || mod[KEY_RIGHTMETA]) && (Rkremap::CODE_KEY[code] =~ /\AKEY_[A-Z]\z/ || code == KEY_ENTER)
104
+ mod.merge!(mod_disable_meta, {KEY_LEFTCTRL => true})
145
105
  mod[KEY_LEFTCTRL] = true
146
106
  rk.key(code, mod)
147
107
  next
148
108
  end
149
109
 
110
+ # Alt + F, B は Ctrl + →, ← に変換
111
+ if (mod[KEY_LEFTALT] || mod[KEY_RIGHTALT]) && (code == KEY_F || code == KEY_B)
112
+ rk.key(code == KEY_F ? KEY_RIGHT : KEY_LEFT, mod.merge(mod_disable_alt, {KEY_LEFTCTRL => true}))
113
+ next
114
+ end
115
+
150
116
  # Ctrl は他のキーに変換
151
117
  if mod[KEY_LEFTCTRL] || mod[KEY_RIGHTCTRL]
152
118
  # Ctrl+I/O はそのまま
153
- if code == KEY_I || code ==KEY_O
119
+ if code == KEY_I || code == KEY_O
154
120
  rk.key(code, mod)
155
121
  next
156
122
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Rkremap
4
- VERSION = "0.3.0"
4
+ VERSION = "0.3.0.1"
5
5
  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.3.0
4
+ version: 0.3.0.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: 2022-03-05 00:00:00.000000000 Z
11
+ date: 2022-07-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: key remapper
14
14
  email:
@@ -18,7 +18,7 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - README.md
21
- - example/henkan-alt.rb
21
+ - example/henkan-super.rb
22
22
  - example/keylogger.rb
23
23
  - example/mac-shortcut.rb
24
24
  - example/tmtms.rb
@@ -27,12 +27,12 @@ files:
27
27
  - lib/rkremap/keycode.rb
28
28
  - lib/rkremap/version.rb
29
29
  - lib/rkremap/winattr.rb
30
- homepage: https://github.com/tmtm/rkremap
30
+ homepage: https://gitlab.com/tmtms/rkremap
31
31
  licenses:
32
32
  - MIT
33
33
  metadata:
34
- homepage_uri: https://github.com/tmtm/rkremap
35
- source_code_uri: https://github.com/tmtm/rkremap
34
+ homepage_uri: https://gitlab.com/tmtms/rkremap
35
+ source_code_uri: https://gitlab.com/tmtms/rkremap
36
36
  documentation_uri: https://www.rubydoc.info/gems/rkremap
37
37
  rubygems_mfa_required: 'true'
38
38
  post_install_message:
@@ -50,7 +50,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
50
50
  - !ruby/object:Gem::Version
51
51
  version: '0'
52
52
  requirements: []
53
- rubygems_version: 3.3.3
53
+ rubygems_version: 3.3.7
54
54
  signing_key:
55
55
  specification_version: 4
56
56
  summary: key remapper
@@ -1,93 +0,0 @@
1
- # 変換/無変換キーを0.5秒以上押してるとALTキーとして扱う。
2
- # 0.5秒以内でも変換/無変換キーを押しながら他のキーを押すとALTキーとして扱う。
3
-
4
- require 'rkremap'
5
- include Rkremap::KeyCode
6
-
7
- rk = Rkremap.new
8
- rk.grab = true
9
-
10
- class State
11
- attr_accessor :converted
12
-
13
- def initialize
14
- @press = nil
15
- @converted = false
16
- @thread = nil
17
- end
18
-
19
- def press(thread)
20
- @press = true
21
- @converted = false
22
- @thread = thread
23
- end
24
-
25
- def release
26
- @press = false
27
- @converted = false
28
- @thread.kill
29
- @thread = nil
30
- end
31
-
32
- def pressed?
33
- @press
34
- end
35
- end
36
-
37
- state = {
38
- KEY_HENKAN => State.new,
39
- KEY_MUHENKAN => State.new,
40
- }
41
-
42
- MAP = {
43
- KEY_HENKAN => KEY_RIGHTALT,
44
- KEY_MUHENKAN => KEY_LEFTALT,
45
- }
46
-
47
- rk.match(code: [KEY_HENKAN, KEY_MUHENKAN], type: :press) do |event|
48
- thr = Thread.new(event.code) do |code|
49
- sleep 0.5
50
- rk.synchronize do
51
- if state[code].pressed?
52
- rk.event(code: MAP[code], type: :press)
53
- state[code].converted = true
54
- end
55
- end
56
- end
57
- state[event.code].press(thr)
58
- event.skip
59
- end
60
-
61
- rk.match(code: [KEY_HENKAN, KEY_MUHENKAN], type: :release) do |event|
62
- if state[event.code].converted
63
- rk.event(code: MAP[event.code], type: :release)
64
- event.skip
65
- else
66
- rk.event(code: event.code, type: :press)
67
- rk.event(code: event.code, type: :release)
68
- end
69
- state[event.code].release
70
- end
71
-
72
- rk.match(code: [KEY_HENKAN, KEY_MUHENKAN], type: :repeat) do |event|
73
- event.skip
74
- end
75
-
76
- rk.match(type: :press) do
77
- [KEY_HENKAN, KEY_MUHENKAN].each do |code|
78
- if state[code].pressed?
79
- rk.event(code: MAP[code], type: :press)
80
- state[code].converted = true
81
- end
82
- end
83
- end
84
-
85
- def code2key(code)
86
- Rkremap::CODE_KEY[code].to_s.sub(/\AKEY_/, '')
87
- end
88
-
89
- rk.start do |code, mod|
90
- key = (mod.select{|_, v| v}.keys + [code]).map{|c| code2key(c)}.join('-')
91
- puts key
92
- rk.key(code, mod)
93
- end