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
         |