Configure upcased key as combination with shift mod
This commit is contained in:
parent
56197c85f8
commit
9c9aa1dabb
@ -17,3 +17,12 @@ Feature: `key' run control keyword
|
|||||||
And uhwm is running
|
And uhwm is running
|
||||||
When I press the alt+Return keys
|
When I press the alt+Return keys
|
||||||
Then the output must contain "trigger return key code"
|
Then the output must contain "trigger return key code"
|
||||||
|
|
||||||
|
Scenario: translates upcased key names to combination with shift key
|
||||||
|
Given a run control file with:
|
||||||
|
"""
|
||||||
|
key(:F) { puts 'trigger shift+f key code' }
|
||||||
|
"""
|
||||||
|
And uhwm is running
|
||||||
|
When I press the alt+shift+f keys
|
||||||
|
Then the output must contain "trigger shift+f key code"
|
||||||
|
@ -21,8 +21,10 @@ module Uh
|
|||||||
@events.emit :connected, args: @display
|
@events.emit :connected, args: @display
|
||||||
end
|
end
|
||||||
|
|
||||||
def grab_key keysym
|
def grab_key keysym, mod = nil
|
||||||
@display.grab_key keysym.to_s, KEY_MODIFIERS[:mod1]
|
mod_mask = KEY_MODIFIERS[:mod1]
|
||||||
|
mod_mask |= KEY_MODIFIERS[mod] if mod
|
||||||
|
@display.grab_key keysym.to_s, mod_mask
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_pending_events
|
def handle_pending_events
|
||||||
@ -31,7 +33,11 @@ module Uh
|
|||||||
|
|
||||||
def handle event
|
def handle event
|
||||||
case event.type
|
case event.type
|
||||||
when :key_press then @events.emit :key, event.key.to_sym
|
when :key_press
|
||||||
|
key_selector = event.modifier_mask & KEY_MODIFIERS[:shift] == 1 ?
|
||||||
|
[event.key.to_sym, :shift] :
|
||||||
|
event.key.to_sym
|
||||||
|
@events.emit :key, *key_selector
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -32,7 +32,11 @@ module Uh
|
|||||||
private
|
private
|
||||||
|
|
||||||
def translate_keysym keysym
|
def translate_keysym keysym
|
||||||
KEYSYM_TRANSLATIONS.key?(keysym) ? KEYSYM_TRANSLATIONS[keysym] : keysym
|
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
|
||||||
end
|
end
|
||||||
|
@ -74,7 +74,7 @@ module Uh
|
|||||||
def register_key_bindings_hooks
|
def register_key_bindings_hooks
|
||||||
@events.on(:key, :q) { stop! }
|
@events.on(:key, :q) { stop! }
|
||||||
@env.keybinds.each do |keysym, code|
|
@env.keybinds.each do |keysym, code|
|
||||||
@events.on :key, keysym, &code
|
@events.on :key, *keysym, &code
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -49,8 +49,17 @@ module Uh
|
|||||||
describe '#grab_key' do
|
describe '#grab_key' do
|
||||||
it 'grabs given key on the display' do
|
it 'grabs given key on the display' do
|
||||||
expect(manager.display)
|
expect(manager.display)
|
||||||
.to receive(:grab_key).with('q', KEY_MODIFIERS[:mod1])
|
.to receive(:grab_key).with('f', KEY_MODIFIERS[:mod1])
|
||||||
manager.grab_key :q
|
manager.grab_key :f
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when a modifier is given' do
|
||||||
|
it 'grabs the key with given modifier' do
|
||||||
|
expect(manager.display)
|
||||||
|
.to receive(:grab_key)
|
||||||
|
.with('f', KEY_MODIFIERS[:mod1] | KEY_MODIFIERS[:shift])
|
||||||
|
manager.grab_key :f, :shift
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -84,12 +93,27 @@ module Uh
|
|||||||
|
|
||||||
describe '#handle' do
|
describe '#handle' do
|
||||||
context 'when key_press event is given' do
|
context 'when key_press event is given' do
|
||||||
let(:event) { double 'event', type: :key_press, key: 'q' }
|
let(:mod_mask) { KEY_MODIFIERS[:mod1] }
|
||||||
|
let(:event) do
|
||||||
|
double 'event',
|
||||||
|
type: :key_press,
|
||||||
|
key: 'f',
|
||||||
|
modifier_mask: mod_mask
|
||||||
|
end
|
||||||
|
|
||||||
it 'emits :key event with the corresponding key' do
|
it 'emits :key event with the corresponding key' do
|
||||||
events.on(:key, :q) { throw :key_press_code }
|
events.on(:key, :f) { throw :key_press_code }
|
||||||
expect { manager.handle event }.to throw_symbol :key_press_code
|
expect { manager.handle event }.to throw_symbol :key_press_code
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'whith shift key modifier' do
|
||||||
|
let(:mod_mask) { KEY_MODIFIERS[:mod1] | KEY_MODIFIERS[:shift] }
|
||||||
|
|
||||||
|
it 'emits :key event with the corresponding key and :shift' do
|
||||||
|
events.on(:key, :f, :shift) { throw :key_press_code }
|
||||||
|
expect { manager.handle event }.to throw_symbol :key_press_code
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -66,6 +66,11 @@ module Uh
|
|||||||
rc.key :enter, &code
|
rc.key :enter, &code
|
||||||
expect(env.keybinds.keys).to include :Return
|
expect(env.keybinds.keys).to include :Return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'translates upcased key name to a combination with shift' do
|
||||||
|
rc.key :F, &code
|
||||||
|
expect(env.keybinds.keys).to include %i[f shift]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -80,6 +80,12 @@ module Uh
|
|||||||
runner.register_event_hooks
|
runner.register_event_hooks
|
||||||
expect(runner.events[:key, :f]).not_to be_empty
|
expect(runner.events[:key, :f]).not_to be_empty
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'registers combined key bindings event hooks' do
|
||||||
|
env.keybinds[[:f, :shift]] = -> { }
|
||||||
|
runner.register_event_hooks
|
||||||
|
expect(runner.events[:key, :f, :shift]).not_to be_empty
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#connect_manager' do
|
describe '#connect_manager' do
|
||||||
|
Loading…
x
Reference in New Issue
Block a user