Translate common key names in `key' RC keyword
This commit is contained in:
		@@ -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"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user