diff --git a/keychord.lua b/keychord.lua new file mode 100644 index 0000000..d9b89f5 --- /dev/null +++ b/keychord.lua @@ -0,0 +1,25 @@ +-- Keyboard driver + +function love.keypressed(key, scancode, isrepeat) + if key == 'lctrl' or key == 'rctrl' or key == 'lalt' or key == 'ralt' or key == 'lshift' or key == 'rshift' or key == 'lgui' or key == 'rgui' then + -- do nothing when the modifier is pressed + end + -- include the modifier(s) when the non-modifer is pressed + keychord_pressed(combine_modifiers(key)) +end + +function 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('lgui') or down('rgui') then + result = result..'S-' + end + result = result..key + return result +end diff --git a/main.lua b/main.lua index eafcdd3..e9bccf5 100644 --- a/main.lua +++ b/main.lua @@ -1,3 +1,5 @@ +require 'keychord' + lines = {} width, height, flags = 0, 0, nil @@ -25,27 +27,29 @@ end function love.update(dt) end -function love.keypressed(key, scancode, isrepeat) - if key == 'return' then +function love.textinput(t) + lines[#lines] = lines[#lines]..t +end + +function keychord_pressed(chord) + -- Don't handle any keys here that would trigger love.textinput above. + if chord == 'return' then table.insert(lines, '') - elseif key == 'space' then - lines[#lines] = lines[#lines]..' ' - elseif key == 'lctrl' or key == 'rctrl' then - -- do nothing - elseif key == 'lalt' or key == 'ralt' then - -- do nothing - elseif key == 'lshift' or key == 'rshift' then - -- do nothing - elseif love.keyboard.isDown('lctrl') or love.keyboard.isDown('rctrl') then - if key == 'r' then - lines[#lines+1] = eval(lines[#lines])[1] - lines[#lines+1] = '' - end - else - lines[#lines] = lines[#lines]..key + elseif chord == 'C-r' then + lines[#lines+1] = eval(lines[#lines])[1] + lines[#lines+1] = '' end end +function love.keyreleased(key, scancode) +end + +function love.mousepressed(x, y, button) +end + +function love.mousereleased(x, y, button) +end + function eval(buf) local f = load('return '..buf, 'REPL') if f then @@ -69,12 +73,3 @@ function gather_results(success, ...) local n = select('#', ...) return success, { n = n, ... } end - -function love.keyreleased(key, scancode) -end - -function love.mousepressed(x, y, button) -end - -function love.mousereleased(x, y, button) -end