about summary refs log tree commit diff stats
path: root/src/server
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2023-09-30 19:42:41 +0200
committerbptato <nincsnevem662@gmail.com>2023-09-30 19:42:41 +0200
commite26ea3aca2c0c5eb4a2678440dbec77105ee8dd4 (patch)
treedc48e835b9c39efd35486db785cda95206d0871d /src/server
parent83857c03a64312770e0ba0f46b5917dceb23c0ad (diff)
downloadchawan-e26ea3aca2c0c5eb4a2678440dbec77105ee8dd4.tar.gz
buffer: fix cursor unnecessarily jumping to y=0
then() is called even if a nil Promise is returned, so an Opt is
needed here.
Diffstat (limited to 'src/server')
-rw-r--r--src/server/buffer.nim12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/server/buffer.nim b/src/server/buffer.nim
index 24dc7d3d..49ee97aa 100644
--- a/src/server/buffer.nim
+++ b/src/server/buffer.nim
@@ -536,17 +536,19 @@ proc findNextMatch*(buffer: Buffer, regex: Regex, cursorx, cursory: int,
       break
     inc y
 
-proc gotoAnchor*(buffer: Buffer): tuple[x, y: int] {.proxy.} =
-  if buffer.document == nil: return (-1, -1)
+proc gotoAnchor*(buffer: Buffer): Opt[tuple[x, y: int]] {.proxy.} =
+  if buffer.document == nil:
+    return err()
   let anchor = buffer.document.findAnchor(buffer.url.anchor)
-  if anchor == nil: return (-1, -1)
+  if anchor == nil:
+    return err()
   for y in 0 ..< buffer.lines.len:
     let line = buffer.lines[y]
     for i in 0 ..< line.formats.len:
       let format = line.formats[i]
       if format.node != nil and anchor in format.node.node:
-        return (format.pos, y)
-  return (-1, -1)
+        return ok((format.pos, y))
+  return err()
 
 proc do_reshape(buffer: Buffer) =
   if buffer.ishtml: