about summary refs log tree commit diff stats
path: root/src/local/container.nim
diff options
context:
space:
mode:
Diffstat (limited to 'src/local/container.nim')
-rw-r--r--src/local/container.nim42
1 files changed, 26 insertions, 16 deletions
diff --git a/src/local/container.nim b/src/local/container.nim
index 9667d84b..34d4d181 100644
--- a/src/local/container.nim
+++ b/src/local/container.nim
@@ -624,32 +624,42 @@ proc cursorPrevWord(container: Container) {.jsfunc.} =
     else:
       container.cursorLineBegin()
 
-proc pageDown(container: Container) {.jsfunc.} =
-  container.setFromY(container.fromy + container.height)
-  container.setCursorY(container.cursory + container.height)
+proc pageDown(container: Container, n = 1) {.jsfunc.} =
+  container.setFromY(container.fromy + container.height * n)
+  container.setCursorY(container.cursory + container.height * n)
   container.restoreCursorX()
 
-proc pageUp(container: Container) {.jsfunc.} =
-  container.setFromY(container.fromy - container.height)
-  container.setCursorY(container.cursory - container.height)
+proc pageUp(container: Container, n = 1) {.jsfunc.} =
+  container.setFromY(container.fromy - container.height * n)
+  container.setCursorY(container.cursory - container.height * n)
   container.restoreCursorX()
 
-proc pageLeft(container: Container) {.jsfunc.} =
-  container.setFromX(container.fromx - container.width)
+proc pageLeft(container: Container, n = 1) {.jsfunc.} =
+  container.setFromX(container.fromx - container.width * n)
 
-proc pageRight(container: Container) {.jsfunc.} =
-  container.setFromX(container.fromx + container.width)
+proc pageRight(container: Container, n = 1) {.jsfunc.} =
+  container.setFromX(container.fromx + container.width * n)
 
-proc halfPageUp(container: Container) {.jsfunc.} =
-  container.setFromY(container.fromy - container.height div 2 + 1)
-  container.setCursorY(container.cursory - container.height div 2 + 1)
+# I am not cloning the vi behavior here because it is counter-intuitive
+# and annoying.
+# Users who disagree are free to implement it themselves. (It is about
+# 5 lines of JS.)
+proc halfPageUp(container: Container, n = 1) {.jsfunc.} =
+  container.setFromY(container.fromy - (container.height div 2 + 1) * n)
+  container.setCursorY(container.cursory - (container.height div 2 + 1) * n)
   container.restoreCursorX()
 
-proc halfPageDown(container: Container) {.jsfunc.} =
-  container.setFromY(container.fromy + container.height div 2 - 1)
-  container.setCursorY(container.cursory + container.height div 2 - 1)
+proc halfPageDown(container: Container, n = 1) {.jsfunc.} =
+  container.setFromY(container.fromy + (container.height div 2 - 1) * n)
+  container.setCursorY(container.cursory + (container.height div 2 - 1) * n)
   container.restoreCursorX()
 
+proc halfPageLeft(container: Container, n = 1) {.jsfunc.} =
+  container.setFromX(container.fromx - (container.width div 2 + 1) * n)
+
+proc halfPageRight(container: Container, n = 1) {.jsfunc.} =
+  container.setFromX(container.fromx + (container.width div 2 - 1) * n)
+
 proc cursorFirstLine(container: Container) {.jsfunc.} =
   if container.select.open:
     container.select.cursorFirstLine()