Translate common key names in `key' RC keyword

This commit is contained in:
Thibault Jouan 2015-04-14 22:14:10 +00:00
parent f53ad53806
commit 56197c85f8
3 changed files with 31 additions and 3 deletions

View File

@ -8,3 +8,12 @@ Feature: `key' run control keyword
And uhwm is running And uhwm is running
When I press the alt+f keys When I press the alt+f keys
Then the output must contain "trigger f key code" Then the output must contain "trigger f key code"
Scenario: translates common key names to their X equivalent
Given a run control file with:
"""
key(:enter) { puts 'trigger return key code' }
"""
And uhwm is running
When I press the alt+Return keys
Then the output must contain "trigger return key code"

View File

@ -1,6 +1,13 @@
module Uh module Uh
module WM module WM
class RunControl class RunControl
KEYSYM_TRANSLATIONS = {
backspace: :BackSpace,
enter: :Return,
return: :Return,
tab: :Tab
}.freeze
class << self class << self
def evaluate env def evaluate env
rc_path = File.expand_path(env.rc_path) rc_path = File.expand_path(env.rc_path)
@ -18,7 +25,14 @@ module Uh
end end
def key keysym, &block def key keysym, &block
@env.keybinds[keysym] = block @env.keybinds[translate_keysym keysym] = block
end
private
def translate_keysym keysym
KEYSYM_TRANSLATIONS.key?(keysym) ? KEYSYM_TRANSLATIONS[keysym] : keysym
end end
end end
end end

View File

@ -52,15 +52,20 @@ module Uh
describe '#key' do describe '#key' do
let(:code) { -> { :keybind_code } } let(:code) { -> { :keybind_code } }
before { rc.key :f, &code }
it 'registers a key binding in the env' do it 'registers a key binding in the env' do
rc.key :f, &code
expect(env.keybinds.keys).to include :f expect(env.keybinds.keys).to include :f
end end
it 'registers given block with the key binding' do it 'registers given block with the key binding' do
rc.key :f, &code
expect(env.keybinds[:f].call).to eq :keybind_code expect(env.keybinds[:f].call).to eq :keybind_code
end end
it 'translates common key names to equivalent X keysym' do
rc.key :enter, &code
expect(env.keybinds.keys).to include :Return
end
end end
end end
end end