diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/local/container.nim | 55 | ||||
-rw-r--r-- | src/server/buffer.nim | 6 |
2 files changed, 60 insertions, 1 deletions
diff --git a/src/local/container.nim b/src/local/container.nim index 0c592ee4..bee93e73 100644 --- a/src/local/container.nim +++ b/src/local/container.nim @@ -1128,6 +1128,61 @@ proc cursorPrevLink*(container: Container; n = 1) {.jsfunc.} = container.markPos() ) +proc cursorLinkNavDown*(container: Container; n = 1) {.jsfunc.} = + if container.iface == nil: + return + container.markPos0() + container.iface + .findNextLink(container.cursorx, container.cursory, n) + .then(proc(res: tuple[x, y: int]) = + if res.x == -1 and res.y == -1: + if container.numLines <= container.height: + container.iface + .findNextLink(-1, 0, n = 1).then(proc(res2: tuple[x, y: int]) = + container.setCursorXYCenter(res2.x, res2.y) + container.markPos() + ) + else: + container.pageDown() + container.markPos() + elif res.y < container.fromy + container.height: + container.setCursorXYCenter(res.x, res.y) + container.markPos() + else: + container.pageDown() + if res.y < container.fromy + container.height: + container.setCursorXYCenter(res.x, res.y) + container.markPos() + ) + +proc cursorLinkNavUp*(container: Container; n = 1) {.jsfunc.} = + if container.iface == nil: + return + container.markPos0() + container.iface + .findPrevLink(container.cursorx, container.cursory, n) + .then(proc(res: tuple[x, y: int]) = + if res.x == -1 and res.y == -1: + if container.numLines <= container.height: + container.iface + .findPrevLink(int.high, container.numLines - 1, n = 1) + .then(proc(res2: tuple[x, y: int]) = + container.setCursorXYCenter(res2.x, res2.y) + container.markPos() + ) + else: + container.pageUp() + container.markPos() + elif res.y >= container.fromy: + container.setCursorXYCenter(res.x, res.y) + container.markPos() + else: + container.pageUp() + if res.y >= container.fromy: + container.setCursorXYCenter(res.x, res.y) + container.markPos() + ) + proc cursorNextParagraph*(container: Container; n = 1) {.jsfunc.} = if container.iface == nil: return diff --git a/src/server/buffer.nim b/src/server/buffer.nim index cdffcc7f..120fd748 100644 --- a/src/server/buffer.nim +++ b/src/server/buffer.nim @@ -451,7 +451,11 @@ proc findPrevLink*(buffer: Buffer; cursorx, cursory, n: int): var found = 0 var i = buffer.lines[cursory].findFormatN(cursorx) - 1 var link: Element = nil - if i >= 0: + if cursorx == int.high: + # Special case for when we want to jump to the last link on this + # line (for cursorLinkNavUp). + i = buffer.lines[cursory].formats.len + elif i >= 0: link = buffer.lines[cursory].formats[i].node.getClickable() dec i var ly = 0 # last y |