about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2023-07-07 18:51:29 -0700
committerKartik K. Agaram <vc@akkartik.com>2023-07-07 18:51:29 -0700
commit24b21b9cfcd71cc683901d617ac39e8017b2f84b (patch)
treec1b56ee926a75b0d61136479b7302e20b947edfd
parent3d3039c4f851304095f0a0c637dced6b01197a02 (diff)
parenta995471ebc95411c45c2b6d656be4c9091c8b1a0 (diff)
downloadview.love-24b21b9cfcd71cc683901d617ac39e8017b2f84b.tar.gz
Merge text.love
-rw-r--r--keychord.lua37
1 files changed, 37 insertions, 0 deletions
diff --git a/keychord.lua b/keychord.lua
index 16fa48d..f1b6a59 100644
--- a/keychord.lua
+++ b/keychord.lua
@@ -12,6 +12,11 @@ function App.keypressed(key, scancode, isrepeat)
 end
 
 function App.combine_modifiers(key)
+  if love.keyboard.isModifierActive then  -- waiting for LÖVE v12
+    if key:match('^kp') then
+      key = App.translate_numlock(key)
+    end
+  end
   local result = ''
   if App.ctrl_down() then
     result = result..'C-'
@@ -53,6 +58,38 @@ function App.is_cursor_movement(key)
   return array.find({'left', 'right', 'up', 'down', 'home', 'end', 'pageup', 'pagedown'}, key)
 end
 
+-- mappings only to non-printable keys; leave out mappings that textinput will handle
+Numlock_off = {
+  kp0='insert',
+  kp1='end',
+  kp2='down',
+  kp3='pagedown',
+  kp4='left',
+  -- numpad 5 translates to nothing
+  kp6='right',
+  kp7='home',
+  kp8='up',
+  kp9='pageup',
+  ['kp.']='delete',
+  -- LÖVE handles keypad operators in textinput
+  -- what's with the `kp=` and `kp,` keys? None of my keyboards have one.
+  -- Hopefully LÖVE handles them as well in textinput.
+  kpenter='enter',
+  kpdel='delete',
+}
+Numlock_on = {
+  kpenter='enter',
+  kpdel='delete',
+}
+function App.translate_numlock(key)
+  if love.keyboard.isModifierActive('numlock') then
+    return Numlock_on[key] or key
+  else
+    return Numlock_off[key] or key
+  end
+  return key
+end
+
 array = {}
 
 function array.find(arr, elem)