rkremap 0.3.0 → 0.3.0.1

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