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
When I press the alt+f keys
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 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)
@ -18,7 +25,14 @@ module Uh
end
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

View File

@ -52,15 +52,20 @@ module Uh
describe '#key' do
let(:code) { -> { :keybind_code } }
before { rc.key :f, &code }
it 'registers a key binding in the env' do
rc.key :f, &code
expect(env.keybinds.keys).to include :f
end
it 'registers given block with the key binding' do
rc.key :f, &code
expect(env.keybinds[:f].call).to eq :keybind_code
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