dotremap 0.0.6 → 0.0.7
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/README.md +4 -3
- data/lib/dotremap/appdef.rb +9 -14
- data/lib/dotremap/dsl/group.rb +10 -0
- data/lib/dotremap/dsl/item.rb +6 -6
- data/lib/dotremap/dsl/root.rb +10 -6
- data/lib/dotremap/group.rb +16 -0
- data/lib/dotremap/invoke_history.rb +16 -0
- data/lib/dotremap/item.rb +13 -13
- data/lib/dotremap/karabiner.rb +17 -1
- data/lib/dotremap/namespace.rb +5 -0
- data/lib/dotremap/property.rb +2 -2
- data/lib/dotremap/remap.rb +10 -16
- data/lib/dotremap/root.rb +9 -12
- data/lib/dotremap/version.rb +1 -1
- data/lib/dotremap/vkopenurldef.rb +11 -0
- data/lib/dotremap/xml_tree.rb +28 -0
- data/lib/dotremap.rb +1 -0
- data/spec/lib/dotremap/karabiner_spec.rb +29 -0
- data/spec/lib/dotremap/key_spec.rb +84 -82
- data/spec/lib/dotremap_spec.rb +31 -0
- metadata +10 -4
- data/lib/dotremap/dsl.rb +0 -4
- data/lib/dotremap/openurl.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2565edd99e70d87d291922f50fac172786cda851
|
4
|
+
data.tar.gz: 14c619762f9d4bb688c9b49339ca7253fd9fd638
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29bd9f928e56fa0f9362f8ec135e819f14bd5619a0cd2bd3c0b15a2d6fff3375ee240e1f497d2d83a13ba481543bac5b54981ca5ecc66230c9ea736f84951e25
|
7
|
+
data.tar.gz: a5385502fce80e93a251e5ea19f64966f0e2018f8d7b5b8bed2aecd74c5e002f7ca8ce730f83417378a6f1620487ba0fe163fa36be78c11e173a11462c6c9b31
|
data/README.md
CHANGED
@@ -104,9 +104,10 @@ F1 F2 ... F11 F12
|
|
104
104
|
Up Down Right Left
|
105
105
|
space tab delete forward_delete capslock
|
106
106
|
|
107
|
-
Ctrl_R
|
108
|
-
Opt_R
|
109
|
-
Cmd_R
|
107
|
+
Ctrl_R Ctrl_L
|
108
|
+
Opt_R Opt_L
|
109
|
+
Cmd_R Cmd_L
|
110
|
+
Shift_R Shift_L
|
110
111
|
```
|
111
112
|
|
112
113
|
### Advanced usage
|
data/lib/dotremap/appdef.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
+
require "dotremap/xml_tree"
|
2
|
+
|
1
3
|
class Dotremap::Appdef
|
4
|
+
include Dotremap::XmlTree
|
5
|
+
|
2
6
|
AVAILABLE_OPTIONS = %i(
|
3
7
|
equal
|
4
8
|
prefix
|
@@ -6,23 +10,14 @@ class Dotremap::Appdef
|
|
6
10
|
).freeze
|
7
11
|
|
8
12
|
def initialize(appname, options)
|
9
|
-
|
10
|
-
|
13
|
+
property = Dotremap::Property.new("appname", appname)
|
14
|
+
add_child(property)
|
11
15
|
|
12
16
|
options.each do |option, value|
|
13
17
|
raise "Unavailable option: #{property}" unless AVAILABLE_OPTIONS.include?(option)
|
14
|
-
@childs << Dotremap::Property.new(option, value)
|
15
|
-
end
|
16
|
-
end
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
[
|
22
|
-
"<appname>#{@appname}</appname>",
|
23
|
-
*@childs.map(&:to_xml),
|
24
|
-
].join("\n").gsub(/^/, " "),
|
25
|
-
"</appdef>",
|
26
|
-
].join("\n")
|
19
|
+
property = Dotremap::Property.new(option, value)
|
20
|
+
add_child(property)
|
21
|
+
end
|
27
22
|
end
|
28
23
|
end
|
data/lib/dotremap/dsl/item.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require "dotremap/
|
1
|
+
require "dotremap/namespace"
|
2
2
|
require "dotremap/property"
|
3
3
|
require "dotremap/remap"
|
4
|
-
require "dotremap/
|
4
|
+
require "dotremap/invoke_history"
|
5
5
|
|
6
6
|
module Dotremap::DSL::Item
|
7
7
|
AVAILABLE_PROPERTIES = %i(
|
@@ -12,16 +12,16 @@ module Dotremap::DSL::Item
|
|
12
12
|
|
13
13
|
def remap(target, options = {})
|
14
14
|
remap = Dotremap::Remap.new(target, options[:to])
|
15
|
-
|
15
|
+
add_child(remap)
|
16
16
|
end
|
17
17
|
|
18
18
|
def show_message(message)
|
19
19
|
property = Dotremap::Property.new("autogen", "__ShowStatusMessage__ #{message}")
|
20
|
-
|
20
|
+
add_child(property)
|
21
21
|
end
|
22
22
|
|
23
23
|
def invoke(application)
|
24
|
-
Dotremap::
|
24
|
+
Dotremap::InvokeHistory.register(application)
|
25
25
|
"VK_OPEN_URL_APP_#{application.gsub(/ /, '_')}"
|
26
26
|
end
|
27
27
|
|
@@ -30,7 +30,7 @@ module Dotremap::DSL::Item
|
|
30
30
|
def method_missing(property, value = '', options = {})
|
31
31
|
if AVAILABLE_PROPERTIES.include?(property)
|
32
32
|
property = Dotremap::Property.new(property, value, options)
|
33
|
-
|
33
|
+
add_child(property)
|
34
34
|
else
|
35
35
|
super
|
36
36
|
end
|
data/lib/dotremap/dsl/root.rb
CHANGED
@@ -1,16 +1,20 @@
|
|
1
|
+
require "dotremap/namespace"
|
1
2
|
require "dotremap/appdef"
|
2
|
-
require "dotremap/dsl"
|
3
3
|
require "dotremap/item"
|
4
|
+
require "dotremap/group"
|
5
|
+
require "dotremap/dsl/group"
|
4
6
|
|
5
7
|
module Dotremap::DSL::Root
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
include Dotremap::DSL::Group
|
9
|
+
|
10
|
+
def group(name, &block)
|
11
|
+
group = Dotremap::Group.new(name)
|
12
|
+
group.instance_exec(&block)
|
13
|
+
add_child(group)
|
10
14
|
end
|
11
15
|
|
12
16
|
def appdef(appname = '', options = {})
|
13
17
|
appdef = Dotremap::Appdef.new(appname, options)
|
14
|
-
|
18
|
+
add_child(appdef)
|
15
19
|
end
|
16
20
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "forwardable"
|
2
|
+
require "dotremap/namespace"
|
3
|
+
require "dotremap/dsl/group"
|
4
|
+
|
5
|
+
class Dotremap::Group
|
6
|
+
extend Forwardable
|
7
|
+
include Dotremap::XmlTree
|
8
|
+
include Dotremap::DSL::Group
|
9
|
+
|
10
|
+
def_delegator :@item, :to_xml
|
11
|
+
def_delegator :@item, :add_child
|
12
|
+
|
13
|
+
def initialize(name)
|
14
|
+
@item = Dotremap::Item.new(name, skip_identifier: true)
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "set"
|
2
|
+
require "dotremap/vkopenurldef"
|
3
|
+
|
4
|
+
module Dotremap::InvokeHistory
|
5
|
+
def self.clear_histroy
|
6
|
+
@@registered_applications = Set.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.register(application)
|
10
|
+
registered_applications.add(application)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.registered_applications
|
14
|
+
@@registered_applications ||= Set.new
|
15
|
+
end
|
16
|
+
end
|
data/lib/dotremap/item.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require "dotremap/dsl/item"
|
2
|
+
require "dotremap/xml_tree"
|
2
3
|
|
3
4
|
class Dotremap::Item
|
5
|
+
include Dotremap::XmlTree
|
4
6
|
include Dotremap::DSL::Item
|
5
7
|
|
6
8
|
AVAILABLE_OPTIONS = %i(
|
@@ -10,40 +12,38 @@ class Dotremap::Item
|
|
10
12
|
config_only
|
11
13
|
).freeze
|
12
14
|
|
13
|
-
def initialize(name, options)
|
14
|
-
@
|
15
|
+
def initialize(name, options = {})
|
16
|
+
@skip_identifier = options.delete(:skip_identifier)
|
15
17
|
|
16
18
|
if name
|
17
|
-
|
19
|
+
property = Dotremap::Property.new("name", name)
|
20
|
+
add_child(property)
|
18
21
|
end
|
19
22
|
|
20
23
|
options.each do |option, value|
|
21
24
|
raise "Unavailable option: #{option}" unless AVAILABLE_OPTIONS.include?(option)
|
22
|
-
|
25
|
+
|
26
|
+
property = Dotremap::Property.new(option, value)
|
27
|
+
add_child(property)
|
23
28
|
end
|
24
29
|
end
|
25
|
-
attr_accessor :childs
|
26
30
|
|
27
31
|
def to_xml
|
28
32
|
validate_name_existence
|
29
|
-
generate_identifier
|
33
|
+
generate_identifier unless @skip_identifier
|
30
34
|
|
31
|
-
|
32
|
-
"<item>",
|
33
|
-
childs.map(&:to_xml).join("\n").gsub(/^/, " "),
|
34
|
-
"</item>",
|
35
|
-
].join("\n")
|
35
|
+
super
|
36
36
|
end
|
37
37
|
|
38
38
|
private
|
39
39
|
|
40
40
|
def validate_name_existence
|
41
|
-
properties =
|
41
|
+
properties = search_childs(Dotremap::Property)
|
42
42
|
raise "Name property does not exist" unless properties.map(&:attr).include?("name")
|
43
43
|
end
|
44
44
|
|
45
45
|
def generate_identifier
|
46
|
-
properties =
|
46
|
+
properties = search_childs(Dotremap::Property)
|
47
47
|
return if properties.map(&:attr).include?("identifier")
|
48
48
|
|
49
49
|
name = properties.find { |p| p.attr == "name" }
|
data/lib/dotremap/karabiner.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require "dotremap/
|
1
|
+
require "dotremap/namespace"
|
2
2
|
|
3
3
|
module Dotremap::Karabiner
|
4
4
|
CLI_PATH = "/Applications/Karabiner.app/Contents/Library/bin/karabiner"
|
@@ -6,4 +6,20 @@ module Dotremap::Karabiner
|
|
6
6
|
def self.reload_xml
|
7
7
|
system("#{CLI_PATH} reloadxml")
|
8
8
|
end
|
9
|
+
|
10
|
+
def self.current_config
|
11
|
+
changed = `#{CLI_PATH} changed`
|
12
|
+
config_by_changed(changed)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def self.config_by_changed(changed)
|
18
|
+
config = {}
|
19
|
+
changed.each_line do |line|
|
20
|
+
property, value = line.strip.split("=")
|
21
|
+
config[property] = value
|
22
|
+
end
|
23
|
+
config
|
24
|
+
end
|
9
25
|
end
|
data/lib/dotremap/property.rb
CHANGED
@@ -4,10 +4,10 @@ class Dotremap::Property
|
|
4
4
|
@value = value
|
5
5
|
@options = options
|
6
6
|
end
|
7
|
-
attr_accessor :attr, :value
|
7
|
+
attr_accessor :attr, :value
|
8
8
|
|
9
9
|
def to_xml
|
10
|
-
open_tag = options.map { |a, v| "#{a}=\"#{v}\"" }.unshift(attr).join(" ")
|
10
|
+
open_tag = @options.map { |a, v| "#{a}=\"#{v}\"" }.unshift(attr).join(" ")
|
11
11
|
"<#{open_tag}>#{value}</#{attr}>"
|
12
12
|
end
|
13
13
|
end
|
data/lib/dotremap/remap.rb
CHANGED
@@ -1,22 +1,16 @@
|
|
1
1
|
require "dotremap/key"
|
2
|
+
require "dotremap/property"
|
2
3
|
|
3
|
-
class Dotremap::Remap
|
4
|
+
class Dotremap::Remap < Dotremap::Property
|
4
5
|
def initialize(from, to)
|
5
|
-
|
6
|
-
@to = to
|
7
|
-
end
|
8
|
-
|
9
|
-
def to_xml
|
10
|
-
"<autogen>__KeyToKey__ #{from}, #{to}</autogen>"
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def from
|
16
|
-
Dotremap::Key.new(@from)
|
17
|
-
end
|
6
|
+
tos = [to].flatten
|
18
7
|
|
19
|
-
|
20
|
-
|
8
|
+
super(
|
9
|
+
"autogen",
|
10
|
+
[
|
11
|
+
"__KeyToKey__ #{Dotremap::Key.new(from)}",
|
12
|
+
*tos.map { |to| Dotremap::Key.new(to) },
|
13
|
+
].join(", "),
|
14
|
+
)
|
21
15
|
end
|
22
16
|
end
|
data/lib/dotremap/root.rb
CHANGED
@@ -1,23 +1,20 @@
|
|
1
|
-
require "dotremap/
|
1
|
+
require "dotremap/invoke_history"
|
2
|
+
require "dotremap/vkopenurldef"
|
2
3
|
require "dotremap/dsl/root"
|
3
4
|
|
4
5
|
class Dotremap::Root
|
6
|
+
include Dotremap::XmlTree
|
5
7
|
include Dotremap::DSL::Root
|
6
8
|
|
7
|
-
def initialize
|
8
|
-
@childs = []
|
9
|
-
end
|
10
|
-
attr_accessor :childs
|
11
|
-
|
12
9
|
def to_xml
|
10
|
+
Dotremap::InvokeHistory.registered_applications.each do |application|
|
11
|
+
vkopenurldef = Dotremap::Vkopenurldef.new(application)
|
12
|
+
add_child(vkopenurldef)
|
13
|
+
end
|
14
|
+
|
13
15
|
[
|
14
16
|
"<?xml version=\"1.0\"?>",
|
15
|
-
|
16
|
-
[
|
17
|
-
childs.map(&:to_xml).join("\n\n"),
|
18
|
-
Dotremap::Openurl.registered_xml,
|
19
|
-
].compact.join("\n").gsub(/^/, " "),
|
20
|
-
"</root>",
|
17
|
+
super(1),
|
21
18
|
].join("\n")
|
22
19
|
end
|
23
20
|
end
|
data/lib/dotremap/version.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
require "dotremap/xml_tree"
|
2
|
+
|
3
|
+
class Dotremap::Vkopenurldef
|
4
|
+
include Dotremap::XmlTree
|
5
|
+
|
6
|
+
def initialize(application)
|
7
|
+
name = Dotremap::Property.new("name", "KeyCode::VK_OPEN_URL_APP_#{application.gsub(/ /, "_")}")
|
8
|
+
url = Dotremap::Property.new("url", "/Applications/#{application}.app", type: "file")
|
9
|
+
add_child(name, url)
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Dotremap::XmlTree
|
2
|
+
def add_child(*objects)
|
3
|
+
objects.each do |object|
|
4
|
+
childs << object
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
def search_childs(klass)
|
9
|
+
childs.select { |c| c.is_a?(klass) }
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_xml(distance_between_childs = 0)
|
13
|
+
tag_name = self.class.to_s.split("::").last.downcase
|
14
|
+
newline_count = distance_between_childs + 1
|
15
|
+
|
16
|
+
[
|
17
|
+
"<#{tag_name}>",
|
18
|
+
childs.map(&:to_xml).join("\n" * newline_count).gsub(/^/, " "),
|
19
|
+
"</#{tag_name}>",
|
20
|
+
].join("\n")
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def childs
|
26
|
+
@childs ||= []
|
27
|
+
end
|
28
|
+
end
|
data/lib/dotremap.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Dotremap::Karabiner do
|
4
|
+
describe ".current_config" do
|
5
|
+
subject { described_class.current_config }
|
6
|
+
|
7
|
+
let(:cli_path) { Dotremap::Karabiner::CLI_PATH }
|
8
|
+
|
9
|
+
before do
|
10
|
+
allow_any_instance_of(Kernel).to receive(:'`').with("#{cli_path} changed").and_return(<<-EOS.unindent)
|
11
|
+
remap.command_k_to_command_l=1
|
12
|
+
repeat.initial_wait=100
|
13
|
+
repeat.wait=20
|
14
|
+
option.terminal_command_option=1
|
15
|
+
notsave.automatically_enable_keyboard_device=1
|
16
|
+
EOS
|
17
|
+
end
|
18
|
+
|
19
|
+
it "returns config hash" do
|
20
|
+
expect(subject).to eq({
|
21
|
+
"option.terminal_command_option" => "1",
|
22
|
+
"remap.command_k_to_command_l" => "1",
|
23
|
+
"repeat.initial_wait" => "100",
|
24
|
+
"repeat.wait" => "20",
|
25
|
+
"notsave.automatically_enable_keyboard_device" => "1",
|
26
|
+
})
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -3,88 +3,90 @@ require "spec_helper"
|
|
3
3
|
describe Dotremap::Key do
|
4
4
|
describe "#to_s" do
|
5
5
|
EXPECTED_RESULTS = {
|
6
|
-
"a"
|
7
|
-
"b"
|
8
|
-
"c"
|
9
|
-
"d"
|
10
|
-
"e"
|
11
|
-
"f"
|
12
|
-
"g"
|
13
|
-
"h"
|
14
|
-
"i"
|
15
|
-
"j"
|
16
|
-
"k"
|
17
|
-
"l"
|
18
|
-
"m"
|
19
|
-
"n"
|
20
|
-
"o"
|
21
|
-
"p"
|
22
|
-
"q"
|
23
|
-
"r"
|
24
|
-
"s"
|
25
|
-
"t"
|
26
|
-
"u"
|
27
|
-
"v"
|
28
|
-
"w"
|
29
|
-
"x"
|
30
|
-
"y"
|
31
|
-
"z"
|
32
|
-
"A"
|
33
|
-
"B"
|
34
|
-
"C"
|
35
|
-
"D"
|
36
|
-
"E"
|
37
|
-
"F"
|
38
|
-
"G"
|
39
|
-
"H"
|
40
|
-
"I"
|
41
|
-
"J"
|
42
|
-
"K"
|
43
|
-
"L"
|
44
|
-
"M"
|
45
|
-
"N"
|
46
|
-
"O"
|
47
|
-
"P"
|
48
|
-
"Q"
|
49
|
-
"R"
|
50
|
-
"S"
|
51
|
-
"T"
|
52
|
-
"U"
|
53
|
-
"V"
|
54
|
-
"W"
|
55
|
-
"X"
|
56
|
-
"Y"
|
57
|
-
"Z"
|
58
|
-
"0"
|
59
|
-
"1"
|
60
|
-
"2"
|
61
|
-
"3"
|
62
|
-
"4"
|
63
|
-
"5"
|
64
|
-
"6"
|
65
|
-
"7"
|
66
|
-
"8"
|
67
|
-
"9"
|
68
|
-
"Up"
|
69
|
-
"Down"
|
70
|
-
"Right"
|
71
|
-
"Left"
|
72
|
-
"]"
|
73
|
-
"["
|
74
|
-
";"
|
75
|
-
"-"
|
76
|
-
","
|
77
|
-
"."
|
78
|
-
"\\"
|
79
|
-
"/"
|
80
|
-
"="
|
81
|
-
"'"
|
82
|
-
"Ctrl_R"
|
83
|
-
"Ctrl_L"
|
84
|
-
"Opt_R"
|
85
|
-
"Opt_L"
|
86
|
-
"Cmd_R"
|
87
|
-
"Cmd_L"
|
6
|
+
"a" => "KeyCode::A",
|
7
|
+
"b" => "KeyCode::B",
|
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",
|
32
|
+
"A" => "KeyCode::A",
|
33
|
+
"B" => "KeyCode::B",
|
34
|
+
"C" => "KeyCode::C",
|
35
|
+
"D" => "KeyCode::D",
|
36
|
+
"E" => "KeyCode::E",
|
37
|
+
"F" => "KeyCode::F",
|
38
|
+
"G" => "KeyCode::G",
|
39
|
+
"H" => "KeyCode::H",
|
40
|
+
"I" => "KeyCode::I",
|
41
|
+
"J" => "KeyCode::J",
|
42
|
+
"K" => "KeyCode::K",
|
43
|
+
"L" => "KeyCode::L",
|
44
|
+
"M" => "KeyCode::M",
|
45
|
+
"N" => "KeyCode::N",
|
46
|
+
"O" => "KeyCode::O",
|
47
|
+
"P" => "KeyCode::P",
|
48
|
+
"Q" => "KeyCode::Q",
|
49
|
+
"R" => "KeyCode::R",
|
50
|
+
"S" => "KeyCode::S",
|
51
|
+
"T" => "KeyCode::T",
|
52
|
+
"U" => "KeyCode::U",
|
53
|
+
"V" => "KeyCode::V",
|
54
|
+
"W" => "KeyCode::W",
|
55
|
+
"X" => "KeyCode::X",
|
56
|
+
"Y" => "KeyCode::Y",
|
57
|
+
"Z" => "KeyCode::Z",
|
58
|
+
"0" => "KeyCode::KEY_0",
|
59
|
+
"1" => "KeyCode::KEY_1",
|
60
|
+
"2" => "KeyCode::KEY_2",
|
61
|
+
"3" => "KeyCode::KEY_3",
|
62
|
+
"4" => "KeyCode::KEY_4",
|
63
|
+
"5" => "KeyCode::KEY_5",
|
64
|
+
"6" => "KeyCode::KEY_6",
|
65
|
+
"7" => "KeyCode::KEY_7",
|
66
|
+
"8" => "KeyCode::KEY_8",
|
67
|
+
"9" => "KeyCode::KEY_9",
|
68
|
+
"Up" => "KeyCode::CURSOR_UP",
|
69
|
+
"Down" => "KeyCode::CURSOR_DOWN",
|
70
|
+
"Right" => "KeyCode::CURSOR_RIGHT",
|
71
|
+
"Left" => "KeyCode::CURSOR_LEFT",
|
72
|
+
"]" => "KeyCode::BRACKET_RIGHT",
|
73
|
+
"[" => "KeyCode::BRACKET_LEFT",
|
74
|
+
";" => "KeyCode::SEMICOLON",
|
75
|
+
"-" => "KeyCode::MINUS",
|
76
|
+
"," => "KeyCode::COMMA",
|
77
|
+
"." => "KeyCode::DOT",
|
78
|
+
"\\" => "KeyCode::BACKSLASH",
|
79
|
+
"/" => "KeyCode::SLASH",
|
80
|
+
"=" => "KeyCode::EQUAL",
|
81
|
+
"'" => "KeyCode::QUOTE",
|
82
|
+
"Ctrl_R" => "KeyCode::CONTROL_R",
|
83
|
+
"Ctrl_L" => "KeyCode::CONTROL_L",
|
84
|
+
"Opt_R" => "KeyCode::OPTION_R",
|
85
|
+
"Opt_L" => "KeyCode::OPTION_L",
|
86
|
+
"Cmd_R" => "KeyCode::COMMAND_R",
|
87
|
+
"Cmd_L" => "KeyCode::COMMAND_L",
|
88
|
+
"Shift_R" => "KeyCode::SHIFT_R",
|
89
|
+
"Shift_L" => "KeyCode::SHIFT_L",
|
88
90
|
}.freeze
|
89
91
|
|
90
92
|
it "converts single key expression as expected" do
|
data/spec/lib/dotremap_spec.rb
CHANGED
@@ -245,4 +245,35 @@ describe Dotremap do
|
|
245
245
|
</root>
|
246
246
|
EOS
|
247
247
|
end
|
248
|
+
|
249
|
+
it "accepts nested items" do
|
250
|
+
prepare_dotremap(<<-EOS)
|
251
|
+
group "Option" do
|
252
|
+
item "First" do
|
253
|
+
identifier "option.option_first"
|
254
|
+
end
|
255
|
+
|
256
|
+
item "Second" do
|
257
|
+
identifier "option.option_second"
|
258
|
+
end
|
259
|
+
end
|
260
|
+
EOS
|
261
|
+
|
262
|
+
expect_result(<<-EOS.unindent)
|
263
|
+
<?xml version="1.0"?>
|
264
|
+
<root>
|
265
|
+
<item>
|
266
|
+
<name>Option</name>
|
267
|
+
<item>
|
268
|
+
<name>First</name>
|
269
|
+
<identifier>option.option_first</identifier>
|
270
|
+
</item>
|
271
|
+
<item>
|
272
|
+
<name>Second</name>
|
273
|
+
<identifier>option.option_second</identifier>
|
274
|
+
</item>
|
275
|
+
</item>
|
276
|
+
</root>
|
277
|
+
EOS
|
278
|
+
end
|
248
279
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dotremap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takashi Kokubun
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -101,18 +101,23 @@ files:
|
|
101
101
|
- img/enabled.png
|
102
102
|
- lib/dotremap.rb
|
103
103
|
- lib/dotremap/appdef.rb
|
104
|
-
- lib/dotremap/dsl.rb
|
104
|
+
- lib/dotremap/dsl/group.rb
|
105
105
|
- lib/dotremap/dsl/item.rb
|
106
106
|
- lib/dotremap/dsl/root.rb
|
107
|
+
- lib/dotremap/group.rb
|
108
|
+
- lib/dotremap/invoke_history.rb
|
107
109
|
- lib/dotremap/item.rb
|
108
110
|
- lib/dotremap/karabiner.rb
|
109
111
|
- lib/dotremap/key.rb
|
110
|
-
- lib/dotremap/
|
112
|
+
- lib/dotremap/namespace.rb
|
111
113
|
- lib/dotremap/property.rb
|
112
114
|
- lib/dotremap/remap.rb
|
113
115
|
- lib/dotremap/root.rb
|
114
116
|
- lib/dotremap/version.rb
|
117
|
+
- lib/dotremap/vkopenurldef.rb
|
118
|
+
- lib/dotremap/xml_tree.rb
|
115
119
|
- spec/lib/dotremap/appdef_spec.rb
|
120
|
+
- spec/lib/dotremap/karabiner_spec.rb
|
116
121
|
- spec/lib/dotremap/key_spec.rb
|
117
122
|
- spec/lib/dotremap/remap_spec.rb
|
118
123
|
- spec/lib/dotremap_spec.rb
|
@@ -143,6 +148,7 @@ specification_version: 4
|
|
143
148
|
summary: Lightweight keyremap configuration DSL
|
144
149
|
test_files:
|
145
150
|
- spec/lib/dotremap/appdef_spec.rb
|
151
|
+
- spec/lib/dotremap/karabiner_spec.rb
|
146
152
|
- spec/lib/dotremap/key_spec.rb
|
147
153
|
- spec/lib/dotremap/remap_spec.rb
|
148
154
|
- spec/lib/dotremap_spec.rb
|
data/lib/dotremap/dsl.rb
DELETED
data/lib/dotremap/openurl.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require "set"
|
2
|
-
|
3
|
-
module Dotremap::Openurl
|
4
|
-
def self.register(application)
|
5
|
-
@@registered_applications ||= Set.new
|
6
|
-
@@registered_applications.add(application)
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.registered_xml
|
10
|
-
return nil unless defined?(@@registered_applications)
|
11
|
-
|
12
|
-
@@registered_applications.map { |a| vkopenurl(a) }.join("\n\n").prepend("\n")
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.vkopenurl(application)
|
16
|
-
<<-EOS.unindent.gsub(/\n\Z/, "")
|
17
|
-
<vkopenurldef>
|
18
|
-
<name>KeyCode::VK_OPEN_URL_APP_#{application.gsub(/ /, "_")}</name>
|
19
|
-
<url type="file">/Applications/#{application}.app</url>
|
20
|
-
</vkopenurldef>
|
21
|
-
EOS
|
22
|
-
end
|
23
|
-
end
|