karabiner 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +35 -0
- data/README.md +27 -17
- data/lib/karabiner/key.rb +65 -12
- data/lib/karabiner/version.rb +1 -1
- data/spec/lib/karabiner/key_spec.rb +41 -26
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f432819fc1b42ec63bc0505b92644bffa27edcb
|
4
|
+
data.tar.gz: e68ef48995d6def0b813c4c389183f89f002cc30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e966346719f6afcbdfbdfd606b6b9d807dfa9ace01e5e340c8fc5d962bfebc60461d16c20e0854ac294e635e82f46020621c56f582b8a9024f170321409e6cb
|
7
|
+
data.tar.gz: fb23950b2c04ff2cd35dd0b9d8a5bbf6bb17dcf9aade7e6fe97e93525a86101081d14482470e1101f1fdd66b76fe6a3bad166a25caa92a660044953cededac36
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# Change Log
|
2
|
+
|
3
|
+
## [v0.3.1](https://github.com/k0kubun/karabiner-dsl/tree/v0.3.1) (2016-05-17)
|
4
|
+
[Full Changelog](https://github.com/k0kubun/karabiner-dsl/compare/v0.3.0...v0.3.1)
|
5
|
+
|
6
|
+
## [v0.3.0](https://github.com/k0kubun/karabiner-dsl/tree/v0.3.0) (2015-12-31)
|
7
|
+
[Full Changelog](https://github.com/k0kubun/karabiner-dsl/compare/v0.2.1...v0.3.0)
|
8
|
+
|
9
|
+
**Merged pull requests:**
|
10
|
+
|
11
|
+
- Can invoke the application of any place [\#5](https://github.com/k0kubun/karabiner-dsl/pull/5) ([elim](https://github.com/elim))
|
12
|
+
|
13
|
+
## [v0.2.1](https://github.com/k0kubun/karabiner-dsl/tree/v0.2.1) (2015-08-30)
|
14
|
+
[Full Changelog](https://github.com/k0kubun/karabiner-dsl/compare/v0.2.0...v0.2.1)
|
15
|
+
|
16
|
+
## [v0.2.0](https://github.com/k0kubun/karabiner-dsl/tree/v0.2.0) (2015-07-08)
|
17
|
+
[Full Changelog](https://github.com/k0kubun/karabiner-dsl/compare/v0.1.2...v0.2.0)
|
18
|
+
|
19
|
+
## [v0.1.2](https://github.com/k0kubun/karabiner-dsl/tree/v0.1.2) (2015-05-21)
|
20
|
+
[Full Changelog](https://github.com/k0kubun/karabiner-dsl/compare/v0.1.1...v0.1.2)
|
21
|
+
|
22
|
+
**Merged pull requests:**
|
23
|
+
|
24
|
+
- Add supporting BACKQUOTE [\#4](https://github.com/k0kubun/karabiner-dsl/pull/4) ([cnosuke](https://github.com/cnosuke))
|
25
|
+
|
26
|
+
## [v0.1.1](https://github.com/k0kubun/karabiner-dsl/tree/v0.1.1) (2014-11-16)
|
27
|
+
[Full Changelog](https://github.com/k0kubun/karabiner-dsl/compare/v0.0.8...v0.1.1)
|
28
|
+
|
29
|
+
## [v0.0.8](https://github.com/k0kubun/karabiner-dsl/tree/v0.0.8) (2014-11-16)
|
30
|
+
[Full Changelog](https://github.com/k0kubun/karabiner-dsl/compare/v0.1.0...v0.0.8)
|
31
|
+
|
32
|
+
## [v0.1.0](https://github.com/k0kubun/karabiner-dsl/tree/v0.1.0) (2014-11-16)
|
33
|
+
|
34
|
+
|
35
|
+
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
|
data/README.md
CHANGED
@@ -81,34 +81,44 @@ You have to write "key expression" to specify keys to remap.
|
|
81
81
|
#### key expression
|
82
82
|
|
83
83
|
- `a`, `A`, `1`, `;`, `tab`, `Tab`, `space`, `up`, `down`
|
84
|
-
- any string without `-` will be regarded as single key
|
85
|
-
-
|
86
|
-
- `
|
87
|
-
-
|
88
|
-
-
|
89
|
-
- `
|
90
|
-
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
- `
|
97
|
-
|
98
|
-
|
84
|
+
- any string without `-` or `+` will be regarded as a single key
|
85
|
+
- strings are case insensitive
|
86
|
+
- `Volume Mute`, `Mute`, `Brightness Down`, `Brightness_Down`
|
87
|
+
- support system (consumer) keys
|
88
|
+
- words could be separated by space ` ` or underscore `_`
|
89
|
+
- nil, `nil`, `none`
|
90
|
+
- you can drop any key by using nil or the corresponding aliases
|
91
|
+
|
92
|
+
#### key combination
|
93
|
+
|
94
|
+
| Key combination | Regarded as | Notes |
|
95
|
+
| ---------------------------------------------------------- | --------------------- | ------ |
|
96
|
+
| `C-a`, `Ctrl-a`, `C+a`, `Ctrl+a` | Control + A | `C-` is a short alias for `Ctrl-` |
|
97
|
+
| `M-a`, `Opt-a`, `Alt-a`, `M+a`, `Opt+a`, `Alt+a` | Option + A | `M-` and `Alt-` are aliases for `Opt-` |
|
98
|
+
| `Shift-a`, `Shift+a` | Shift + A (capital A) | if you write just `A`, it will be regarded as small a |
|
99
|
+
| `Cmd-a`, `Cmd+a` | Command + A | |
|
100
|
+
| `Cmd-Shift-a`, `Cmd+Shift-a`, `Cmd-Shift+a`, `Cmd+Shift+a` | Command + Shift + A | you can use any combination of Ctrl, Opt, Shift, Cmd |
|
99
101
|
|
100
102
|
#### available single keys
|
101
103
|
|
104
|
+
[Karabiner DSL keycode and alias reference](https://github.com/k0kubun/karabiner-dsl/blob/master/lib/karabiner/key.rb)
|
105
|
+
|
106
|
+
[Karabiner full keycode reference](https://pqrs.org/osx/karabiner/xml.html#keycode-list)
|
107
|
+
|
102
108
|
```
|
103
109
|
a b c ... x y z
|
104
110
|
0 1 2 ... 7 8 9
|
111
|
+
|
105
112
|
F1 F2 ... F11 F12
|
106
113
|
\ [ ] ; ' ` , . / - =
|
107
114
|
Up Down Right Left
|
108
|
-
|
115
|
+
Space Tab Delete ... Forward_Delete Esc Capslock
|
116
|
+
Mute Volume_Down Volume_Up ... Prev Play Next
|
117
|
+
|
118
|
+
nil none
|
109
119
|
|
110
120
|
Ctrl_R Ctrl_L
|
111
|
-
Opt_R Opt_L
|
121
|
+
Opt_R Opt_L Alt_R Alt_L
|
112
122
|
Cmd_R Cmd_L
|
113
123
|
Shift_R Shift_L
|
114
124
|
```
|
data/lib/karabiner/key.rb
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
class Karabiner::Key
|
2
|
-
|
2
|
+
def self.normalize_input(raw_input)
|
3
|
+
if raw_input.match(/^VK_/)
|
4
|
+
raw_input
|
5
|
+
else
|
6
|
+
raw_input = raw_input.tr(' ', '_').tr('+', '-').upcase
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.normalize_and_freeze!(map)
|
11
|
+
map.tap do |h|
|
12
|
+
h.keys.each { |k| h[normalize_input(k)] = h.delete(k) }
|
13
|
+
end
|
14
|
+
map.freeze
|
15
|
+
end
|
16
|
+
|
17
|
+
# Karabiner full keycode reference:
|
18
|
+
# https://pqrs.org/osx/karabiner/xml.html#keycode-list
|
19
|
+
KEYCODE_MAP = normalize_and_freeze!({
|
20
|
+
"nil" => "VK_NONE",
|
21
|
+
"none" => "VK_NONE",
|
3
22
|
"0" => "KEY_0",
|
4
23
|
"1" => "KEY_1",
|
5
24
|
"2" => "KEY_2",
|
@@ -33,15 +52,42 @@ class Karabiner::Key
|
|
33
52
|
"Opt_L" => "OPTION_L",
|
34
53
|
"Cmd_R" => "COMMAND_R",
|
35
54
|
"Cmd_L" => "COMMAND_L",
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
"
|
40
|
-
"
|
41
|
-
"
|
42
|
-
"
|
43
|
-
"
|
44
|
-
|
55
|
+
"Esc" => "ESCAPE",
|
56
|
+
})
|
57
|
+
CONSUMER_MAP = normalize_and_freeze!({
|
58
|
+
"Brightness Down" => "BRIGHTNESS_DOWN",
|
59
|
+
"Brightness Up" => "BRIGHTNESS_UP",
|
60
|
+
"Keyboardlight Off" => "KEYBOARDLIGHT_OFF",
|
61
|
+
"Keyboardlight Low" => "KEYBOARDLIGHT_LOW",
|
62
|
+
"Keyboardlight High" => "KEYBOARDLIGHT_HIGH",
|
63
|
+
"Keyboard Light Off" => "KEYBOARDLIGHT_OFF",
|
64
|
+
"Keyboard Light Low" => "KEYBOARDLIGHT_LOW",
|
65
|
+
"Keyboard Light High" => "KEYBOARDLIGHT_HIGH",
|
66
|
+
"Music Prev" => "MUSIC_PREV",
|
67
|
+
"Music Play" => "MUSIC_PLAY",
|
68
|
+
"Music Next" => "MUSIC_NEXT",
|
69
|
+
"Prev" => "MUSIC_PREV",
|
70
|
+
"Play" => "MUSIC_PLAY",
|
71
|
+
"Next" => "MUSIC_NEXT",
|
72
|
+
"Volume Mute" => "VOLUME_MUTE",
|
73
|
+
"Volume Down" => "VOLUME_DOWN",
|
74
|
+
"Volume Up" => "VOLUME_UP",
|
75
|
+
"Mute" => "VOLUME_MUTE",
|
76
|
+
"Eject" => "EJECT",
|
77
|
+
"Power" => "POWER",
|
78
|
+
"Numlock" => "NUMLOCK",
|
79
|
+
"Num Lock" => "NUMLOCK",
|
80
|
+
"Video Mirror" => "VIDEO_MIRROR",
|
81
|
+
})
|
82
|
+
PREFIX_MAP = normalize_and_freeze!({
|
83
|
+
"C" => "VK_CONTROL",
|
84
|
+
"Ctrl" => "VK_CONTROL",
|
85
|
+
"Cmd" => "VK_COMMAND",
|
86
|
+
"Shift" => "VK_SHIFT",
|
87
|
+
"M" => "VK_OPTION",
|
88
|
+
"Opt" => "VK_OPTION",
|
89
|
+
"Alt" => "VK_OPTION",
|
90
|
+
})
|
45
91
|
PREFIX_EXPRESSION = "(#{PREFIX_MAP.keys.map { |k| k + '-' }.join('|')})"
|
46
92
|
|
47
93
|
def initialize(expression)
|
@@ -55,6 +101,8 @@ class Karabiner::Key
|
|
55
101
|
private
|
56
102
|
|
57
103
|
def key_combination(raw_combination)
|
104
|
+
return "KeyCode::VK_NONE" if raw_combination.nil?
|
105
|
+
raw_combination = normalize_key_combination(raw_combination)
|
58
106
|
raw_prefixes, raw_key = split_key_combination(raw_combination)
|
59
107
|
return key_expression(raw_key) if raw_prefixes.empty?
|
60
108
|
|
@@ -64,14 +112,19 @@ class Karabiner::Key
|
|
64
112
|
|
65
113
|
def key_expression(raw_key)
|
66
114
|
case raw_key
|
67
|
-
when
|
115
|
+
when /^#{Regexp.union(KEYCODE_MAP.keys)}$/
|
68
116
|
"KeyCode::#{KEYCODE_MAP[raw_key]}"
|
117
|
+
when /^#{Regexp.union(CONSUMER_MAP.keys)}$/
|
118
|
+
"ConsumerKeyCode::#{CONSUMER_MAP[raw_key]}"
|
69
119
|
else
|
70
|
-
raw_key = raw_key.upcase unless raw_key.match(/^VK_/)
|
71
120
|
"KeyCode::#{raw_key}"
|
72
121
|
end
|
73
122
|
end
|
74
123
|
|
124
|
+
def normalize_key_combination(raw_combination)
|
125
|
+
self.class.normalize_input(raw_combination)
|
126
|
+
end
|
127
|
+
|
75
128
|
def split_key_combination(raw_combination)
|
76
129
|
prefixes = []
|
77
130
|
key = raw_combination.dup
|
data/lib/karabiner/version.rb
CHANGED
@@ -1,34 +1,14 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Karabiner::Key do
|
4
|
+
describe ".normalize_input" do
|
5
|
+
it { expect(described_class.normalize_input('Cmd+Volume Up')).to eq('CMD-VOLUME_UP') }
|
6
|
+
end
|
7
|
+
|
4
8
|
describe "#to_s" do
|
5
9
|
EXPECTED_RESULTS = {
|
6
|
-
"
|
7
|
-
"
|
8
|
-
"c" => "KeyCode::C",
|
9
|
-
"d" => "KeyCode::D",
|
10
|
-
"e" => "KeyCode::E",
|
11
|
-
"f" => "KeyCode::F",
|
12
|
-
"g" => "KeyCode::G",
|
13
|
-
"h" => "KeyCode::H",
|
14
|
-
"i" => "KeyCode::I",
|
15
|
-
"j" => "KeyCode::J",
|
16
|
-
"k" => "KeyCode::K",
|
17
|
-
"l" => "KeyCode::L",
|
18
|
-
"m" => "KeyCode::M",
|
19
|
-
"n" => "KeyCode::N",
|
20
|
-
"o" => "KeyCode::O",
|
21
|
-
"p" => "KeyCode::P",
|
22
|
-
"q" => "KeyCode::Q",
|
23
|
-
"r" => "KeyCode::R",
|
24
|
-
"s" => "KeyCode::S",
|
25
|
-
"t" => "KeyCode::T",
|
26
|
-
"u" => "KeyCode::U",
|
27
|
-
"v" => "KeyCode::V",
|
28
|
-
"w" => "KeyCode::W",
|
29
|
-
"x" => "KeyCode::X",
|
30
|
-
"y" => "KeyCode::Y",
|
31
|
-
"z" => "KeyCode::Z",
|
10
|
+
"nil" => "KeyCode::VK_NONE",
|
11
|
+
"none" => "KeyCode::VK_NONE",
|
32
12
|
"A" => "KeyCode::A",
|
33
13
|
"B" => "KeyCode::B",
|
34
14
|
"C" => "KeyCode::C",
|
@@ -90,6 +70,31 @@ describe Karabiner::Key do
|
|
90
70
|
"Cmd_L" => "KeyCode::COMMAND_L",
|
91
71
|
"Shift_R" => "KeyCode::SHIFT_R",
|
92
72
|
"Shift_L" => "KeyCode::SHIFT_L",
|
73
|
+
"Esc" => "KeyCode::ESCAPE",
|
74
|
+
|
75
|
+
"Brightness Down" => "ConsumerKeyCode::BRIGHTNESS_DOWN",
|
76
|
+
"Brightness Up" => "ConsumerKeyCode::BRIGHTNESS_UP",
|
77
|
+
"Keyboardlight Off" => "ConsumerKeyCode::KEYBOARDLIGHT_OFF",
|
78
|
+
"Keyboardlight Low" => "ConsumerKeyCode::KEYBOARDLIGHT_LOW",
|
79
|
+
"Keyboardlight High" => "ConsumerKeyCode::KEYBOARDLIGHT_HIGH",
|
80
|
+
"Keyboard Light Off" => "ConsumerKeyCode::KEYBOARDLIGHT_OFF",
|
81
|
+
"Keyboard Light Low" => "ConsumerKeyCode::KEYBOARDLIGHT_LOW",
|
82
|
+
"Keyboard Light High" => "ConsumerKeyCode::KEYBOARDLIGHT_HIGH",
|
83
|
+
"Music Prev" => "ConsumerKeyCode::MUSIC_PREV",
|
84
|
+
"Music Play" => "ConsumerKeyCode::MUSIC_PLAY",
|
85
|
+
"Music Next" => "ConsumerKeyCode::MUSIC_NEXT",
|
86
|
+
"Prev" => "ConsumerKeyCode::MUSIC_PREV",
|
87
|
+
"Play" => "ConsumerKeyCode::MUSIC_PLAY",
|
88
|
+
"Next" => "ConsumerKeyCode::MUSIC_NEXT",
|
89
|
+
"Volume Mute" => "ConsumerKeyCode::VOLUME_MUTE",
|
90
|
+
"Volume Down" => "ConsumerKeyCode::VOLUME_DOWN",
|
91
|
+
"Volume Up" => "ConsumerKeyCode::VOLUME_UP",
|
92
|
+
"Mute" => "ConsumerKeyCode::VOLUME_MUTE",
|
93
|
+
"Eject" => "ConsumerKeyCode::EJECT",
|
94
|
+
"Power" => "ConsumerKeyCode::POWER",
|
95
|
+
"Numlock" => "ConsumerKeyCode::NUMLOCK",
|
96
|
+
"Num Lock" => "ConsumerKeyCode::NUMLOCK",
|
97
|
+
"Video Mirror" => "ConsumerKeyCode::VIDEO_MIRROR",
|
93
98
|
}.freeze
|
94
99
|
|
95
100
|
it "converts single key expression as expected" do
|
@@ -112,5 +117,15 @@ describe Karabiner::Key do
|
|
112
117
|
expect(described_class.new("#{prefix1}-#{prefix2}-#{key}").to_s).to eq("#{keycode}, #{vk1} | #{vk2}")
|
113
118
|
end
|
114
119
|
end
|
120
|
+
|
121
|
+
it "converts key expression in case-insensitive manner" do
|
122
|
+
EXPECTED_RESULTS.each do |expression, result|
|
123
|
+
expect(described_class.new(expression.swapcase).to_s).to eq(result)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
it "accepts nil class as key expression" do
|
128
|
+
expect(described_class.new(nil).to_s).to eq("KeyCode::VK_NONE")
|
129
|
+
end
|
115
130
|
end
|
116
131
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: karabiner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takashi Kokubun
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -92,6 +92,7 @@ files:
|
|
92
92
|
- ".gitignore"
|
93
93
|
- ".rspec"
|
94
94
|
- ".travis.yml"
|
95
|
+
- CHANGELOG.md
|
95
96
|
- Gemfile
|
96
97
|
- LICENSE.txt
|
97
98
|
- README.md
|