class SublimeDSL::SublimeText::Keyboard::DSLReader
Attributes
_keyboard[R]
Public Class Methods
new(file)
click to toggle source
# File lib/sublime_dsl/sublime_text/keyboard.rb, line 543 def initialize(file) @_keyboard = nil @in_definition = false instance_eval ::File.read(file, encoding: 'utf-8'), file end
Public Instance Methods
add_keys(spec, options={})
click to toggle source
# File lib/sublime_dsl/sublime_text/keyboard.rb, line 581 def add_keys(spec, options={}) ensure_context __method__ keys = parse_key_list(spec) st_spec = options.delete(:st_keys) if st_spec st_keys = parse_key_list(st_spec) keys.length == st_keys.length or raise Error, "st_keys: got #{st_keys.length} keys, expected #{keys.length}" end options.empty? or warn "extraneous arguments ignored: #{options.inspect}" keys.each_with_index do |name, i| _keyboard.add_key name if st_spec _keyboard.map_key name, st_keys[i] # done automatically when registering key events of new keystrokes: # elsif Keyboard.sublime.key(name) # _keyboard.map_key name, name end end end
add_modifiers(spec)
click to toggle source
# File lib/sublime_dsl/sublime_text/keyboard.rb, line 567 def add_modifiers(spec) ensure_context __method__ spec.split(/\s/).each { |name| _keyboard.add_modifier name } end
keyboard(name) { |self| ... }
click to toggle source
# File lib/sublime_dsl/sublime_text/keyboard.rb, line 553 def keyboard(name) @_keyboard and raise Error, 'only one keyboard definition per file' @in_definition and raise Error, "'keyboard' blocks cannot be nested" @_keyboard = Keyboard.new(name) @in_definition = true yield self @in_definition = false end
map_char(options={})
click to toggle source
# File lib/sublime_dsl/sublime_text/keyboard.rb, line 614 def map_char(options={}) spec = options.keys.first spec or raise Error, 'missing argument' char = options.delete(spec) dead = options.delete(:dead) options.empty? or warn "extraneous arguments ignored: #{options.inspect}" char.length == 1 or raise Error, "map_dead: expected a character, got #{char.inspect}" ks = _keyboard.ensure_keystroke(spec) ks.chr_event = char ks.chr_dead = true if dead end
map_key(options={})
click to toggle source
# File lib/sublime_dsl/sublime_text/keyboard.rb, line 605 def map_key(options={}) ensure_context __method__ name = options.keys.first name or raise Error, 'missing argument' st_name = options.delete(name) options.empty? or warn "extraneous arguments ignored: #{options.inspect}" _keyboard.map_key name, st_name end
map_modifier(options={})
click to toggle source
# File lib/sublime_dsl/sublime_text/keyboard.rb, line 572 def map_modifier(options={}) ensure_context __method__ name = options.keys.first name or raise Error, 'missing argument' st_name = options.delete(name) options.empty? or warn "extraneous arguments ignored: #{options.inspect}" _keyboard.map_modifier name, st_name end
method_missing(sym, *args, &block)
click to toggle source
# File lib/sublime_dsl/sublime_text/keyboard.rb, line 549 def method_missing(sym, *args, &block) raise Error, "'#{sym}' is not a keyboard DSL statement" end
os(value)
click to toggle source
# File lib/sublime_dsl/sublime_text/keyboard.rb, line 562 def os(value) ensure_context __method__ _keyboard.os = value end
os_action(options={})
click to toggle source
# File lib/sublime_dsl/sublime_text/keyboard.rb, line 626 def os_action(options={}) spec = options.keys.first spec or raise Error, 'missing argument' action = options.delete(spec) key_event = options.delete(:key_event) options.empty? or warn "extraneous arguments ignored: #{options.inspect}" ks = _keyboard.ensure_keystroke(spec) ks.os_action = action ks.key_event = nil unless key_event end
Private Instance Methods
ensure_context(method)
click to toggle source
# File lib/sublime_dsl/sublime_text/keyboard.rb, line 639 def ensure_context(method) _keyboard or raise Error, "'#{method}' is invalid outside of a 'keyboard' block" end
parse_key_list(string)
click to toggle source
# File lib/sublime_dsl/sublime_text/keyboard.rb, line 643 def parse_key_list(string) specs = string.split(/\s/) specs.flat_map do |spec| if spec =~ /^([a-z]*)(\d+)-\1(\d+)$/ stem = $1 start = $2.to_i stop = $3.to_i (start..stop).map { |i| "#{stem}#{i}" } else spec end end end