Class: SublimeDSL::SublimeText::MouseMap::DSLReader

Inherits:
Tools::BlankSlate show all
Defined in:
lib/sublime_dsl/sublime_text/mousemap.rb

Constant Summary

Constants inherited from Tools::BlankSlate

Tools::BlankSlate::KEPT_METHODS

Instance Method Summary collapse

Constructor Details

#initialize(file = nil) ⇒ DSLReader



121
122
123
124
125
126
# File 'lib/sublime_dsl/sublime_text/mousemap.rb', line 121

def initialize(file = nil)
  @mousemaps = []
  @current_map = nil
  @mouse = Mouse.sublime
  instance_eval File.read(file, encoding: 'utf-8'), file if file
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(sym, *args, &block) ⇒ Object



175
176
177
178
# File 'lib/sublime_dsl/sublime_text/mousemap.rb', line 175

def method_missing(sym, *args, &block)
  @current_map or raise Error, "'#{sym}' is invalid outside of a 'mousemap' block"
  Command.from_method_missing(sym, args)
end

Instance Method Details

#_mousemapsObject



128
129
130
# File 'lib/sublime_dsl/sublime_text/mousemap.rb', line 128

def _mousemaps
  @mousemaps
end

#button_names(maps = {}) ⇒ Object



140
141
142
143
144
145
146
147
148
# File 'lib/sublime_dsl/sublime_text/mousemap.rb', line 140

def button_names(maps={})
  # create a copy of the Sublime mouse
  @mouse = Mouse.sublime.clone('Custom Names')
  maps.each_pair do |name, st_name|
    b = @mouse.modifier(st_name) or
      raise Error, "no button nor modifier named '#{st_name}'"
    b.name = name
  end
end

#click(spec, options = {}) ⇒ Object



162
163
164
165
166
167
168
169
170
171
172
173
# File 'lib/sublime_dsl/sublime_text/mousemap.rb', line 162

def click(spec, options={})
  @current_map or raise Error, "'click' is invalid outside of a 'mousemap' block"
  click = @mouse.ensure_click(spec)
  count = options.delete(:count)
  press_cmd = options.delete(:down)
  press_cmd && press_cmd.error and raise Error, "click '#{spec}':#{press_cmd.error}"
  cmd = options.delete(:up)
  cmd && cmd.error and raise Error, "click '#{spec}':#{cmd.error}"
  press_cmd || cmd or
    raise Error, "click '#{spec}': no 'up' nor 'down' command"
  @current_map.bindings << MouseBinding.new(click, count, press_cmd, cmd)
end

#click1(spec, options = {}) ⇒ Object



150
151
152
# File 'lib/sublime_dsl/sublime_text/mousemap.rb', line 150

def click1(spec, options={})
  click spec, options.merge({ count: 1 })
end

#click2(spec, options = {}) ⇒ Object



154
155
156
# File 'lib/sublime_dsl/sublime_text/mousemap.rb', line 154

def click2(spec, options={})
  click spec, options.merge({ count: 2 })
end

#click3(spec, options = {}) ⇒ Object



158
159
160
# File 'lib/sublime_dsl/sublime_text/mousemap.rb', line 158

def click3(spec, options={})
  click spec, options.merge({ count: 3 })
end

#mousemap(name, &block) ⇒ Object



132
133
134
135
136
137
138
# File 'lib/sublime_dsl/sublime_text/mousemap.rb', line 132

def mousemap(name, &block)
  @current_map and raise Error, "'mousemap' blocks cannot be nested"
  @current_map = MouseMap.new(name)
  instance_eval(&block)
  @mousemaps << @current_map
  @current_map = nil
end