about summary refs log blame commit diff stats
path: root/keychord.lua
blob: 0ec4143a30f019365329291af37b28a50b5f9682 (plain) (tree)
1
2
3
4
5
6
7
8
9

                  

                                                                                  
                                                
                                    


                                                            
                                                  

   
                                   







                                        


                                                                       
                                      
                         



                      

                            


                                                   















                                                                         


















                              
   
-- Keyboard driver

Modifiers = {'lctrl', 'rctrl', 'lalt', 'ralt', 'lshift', 'rshift', 'lgui', 'rgui'}

function App.keypressed(key, scancode, isrepeat)
  if array.find(Modifiers, key) then
    -- do nothing when the modifier is pressed
  end
  -- include the modifier(s) when the non-modifer is pressed
  App.keychord_pressed(App.combine_modifiers(key))
end

function App.combine_modifiers(key)
  local result = ''
  local down = love.keyboard.isDown
  if down('lctrl') or down('rctrl') then
    result = result..'C-'
  end
  if down('lalt') or down('ralt') then
    result = result..'M-'
  end
  if down('lshift') or down('rshift') then
    result = result..'S-'  -- don't try to use this with letters/digits
  end
  if down('lgui') or down('rgui') then
    result = result..'s-'
  end
  result = result..key
  return result
end

function App.modifier_down()
  return array.any(Modifiers, love.keyboard.isDown)
end

function App.ctrl_down()
  return love.keyboard.isDown('lctrl') or love.keyboard.isDown('rctrl')
end

function App.alt_down()
  return love.keyboard.isDown('lalt') or love.keyboard.isDown('ralt')
end

function App.shift_down()
  return love.keyboard.isDown('lshift') or love.keyboard.isDown('rshift')
end

function App.gui_down()
  return love.keyboard.isDown('lgui') or love.keyboard.isDown('rgui')
end

array = {}

function array.find(arr, elem)
  for i,x in ipairs(arr) do
    if x == elem then
      return i
    end
  end
  return nil
end

function array.any(arr, f)
  for i,x in ipairs(arr) do
    local result = f(x)
    if result then
      return result
    end
  end
  return false
end