uh-wm/lib/uh/wm/run_control.rb
2015-04-19 01:12:35 +00:00

53 lines
1.2 KiB
Ruby

module Uh
module WM
class RunControl
KEYSYM_TRANSLATIONS = {
backspace: :BackSpace,
enter: :Return,
return: :Return,
tab: :Tab
}.freeze
class << self
def evaluate env
rc_path = File.expand_path(env.rc_path)
rc = new env
rc.evaluate File.read(rc_path), rc_path if File.exist?(rc_path)
end
end
def initialize env
@env = env
end
def evaluate code, path
instance_eval code, path
end
def modifier mod
@env.modifier = mod
end
def key *keysyms, &block
@env.keybinds[translate_keysym *keysyms] = block
end
def worker type, **options
@env.worker = [type, options]
end
private
def translate_keysym keysym, modifier = nil
return [translate_keysym(keysym)[0].to_sym, modifier] if modifier
translate_key = keysym.to_s.downcase.to_sym
translated_keysym = KEYSYM_TRANSLATIONS.key?(translate_key) ?
KEYSYM_TRANSLATIONS[translate_key] :
translate_key
keysym =~ /[A-Z]/ ? [translated_keysym, :shift] : translated_keysym
end
end
end
end