about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2022-05-25 15:47:11 -0700
committerKartik K. Agaram <vc@akkartik.com>2022-05-25 15:47:11 -0700
commitd1f893a98e80b3baf25aa9d30f8305c586569e66 (patch)
tree5e500df3120c2ee2a824b31f3be6d7705eec07f5
parent9892bc5d7c924ce284003a35c00914352713eb42 (diff)
downloadtext.love-d1f893a98e80b3baf25aa9d30f8305c586569e66.tar.gz
M-left/M-right for word-based motions
-rw-r--r--keychord.lua1
-rw-r--r--text.lua22
2 files changed, 23 insertions, 0 deletions
diff --git a/keychord.lua b/keychord.lua
index 12feef7..1e319dd 100644
--- a/keychord.lua
+++ b/keychord.lua
@@ -13,6 +13,7 @@ function App.combine_modifiers(key)
   local down = love.keyboard.isDown
   if down('lctrl') or down('rctrl') then
     result = result..'C-'
+    print(result)
   end
   if down('lalt') or down('ralt') then
     result = result..'M-'
diff --git a/text.lua b/text.lua
index 7ff7baf..0668d17 100644
--- a/text.lua
+++ b/text.lua
@@ -772,6 +772,28 @@ function Text.keychord_pressed(chord)
     Text.left()
   elseif chord == 'right' then
     Text.right()
+  -- left/right by one word
+  -- C- hotkeys reserved for drawings, so we'll use M-
+  elseif chord == 'M-left' then
+    while true do
+      Text.left()
+      if Cursor1.pos == 1 then break end
+      assert(Cursor1.pos > 1)
+      local offset = utf8.offset(Lines[Cursor1.line].data, Cursor1.pos)
+      assert(offset > 1)
+      if Lines[Cursor1.line].data:sub(offset-1,offset-1) == ' ' then
+        break
+      end
+    end
+  elseif chord == 'M-right' then
+    while true do
+      Text.right()
+      if Cursor1.pos > utf8.len(Lines[Cursor1.line].data) then break end
+      local offset = utf8.offset(Lines[Cursor1.line].data, Cursor1.pos)
+      if Lines[Cursor1.line].data:sub(offset,offset) == ' ' then
+        break
+      end
+    end
   elseif chord == 'home' then
     Cursor1.pos = 1
   elseif chord == 'end' then