about summary refs log tree commit diff stats
path: root/src/local
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2024-08-11 14:05:15 +0200
committerbptato <nincsnevem662@gmail.com>2024-08-11 14:05:15 +0200
commita0c6f80f76d60bc2bb36942d4162b90e6b5aa2a2 (patch)
treedbf93dc3b168c4a9e135f0fa4e1300892645ba68 /src/local
parentd0910f85adfec4a2cddfe2297be821841f4dd671 (diff)
downloadchawan-a0c6f80f76d60bc2bb36942d4162b90e6b5aa2a2.tar.gz
dom: remove generic JS bindings
Dispatch manually with fromJS instead.
Diffstat (limited to 'src/local')
-rw-r--r--src/local/client.nim2
-rw-r--r--src/local/container.nim38
-rw-r--r--src/local/pager.nim17
3 files changed, 31 insertions, 26 deletions
diff --git a/src/local/client.nim b/src/local/client.nim
index d3fd9ebe..3d3e1bb0 100644
--- a/src/local/client.nim
+++ b/src/local/client.nim
@@ -821,7 +821,7 @@ proc newClient*(config: Config; forkserver: ForkServer; loaderPid: int;
     factory: newCAtomFactory(),
     loader: loader
   )
-  jsrt.setInterruptHandler(interruptHandler, cast[pointer](client))
+  JS_SetInterruptHandler(jsrt, interruptHandler, cast[pointer](client))
   let global = JS_GetGlobalObject(jsctx)
   jsctx.setGlobal(client)
   jsctx.definePropertyE(global, "cmd", config.cmd.jsObj)
diff --git a/src/local/container.nim b/src/local/container.nim
index de4a78ff..a01d5e3b 100644
--- a/src/local/container.nim
+++ b/src/local/container.nim
@@ -1340,26 +1340,26 @@ proc updateCursor(container: Container) =
     container.setCursorY(container.lastVisibleLine)
     container.alert("Last line is #" & $container.numLines)
 
-proc gotoLine*[T: string|int](container: Container; s: T) =
-  when s is string:
-    if s == "":
-      container.redraw = true
-    elif s[0] == '^':
-      container.cursorFirstLine()
-    elif s[0] == '$':
-      container.cursorLastLine()
-    else:
-      let i = parseUInt32(s, allowSign = true)
-      if i.isSome and i.get > 0:
-        container.markPos0()
-        container.setCursorY(int(i.get - 1))
-        container.markPos()
-      else:
-        container.alert("First line is #1") # :)
+proc gotoLine*(container: Container; s: string) =
+  if s == "":
+    container.redraw = true
+  elif s[0] == '^':
+    container.cursorFirstLine()
+  elif s[0] == '$':
+    container.cursorLastLine()
   else:
-    container.markPos0()
-    container.setCursorY(s - 1)
-    container.markPos()
+    let i = parseUInt32(s, allowSign = true)
+    if i.isSome and i.get > 0:
+      container.markPos0()
+      container.setCursorY(int(i.get - 1))
+      container.markPos()
+    else:
+      container.alert("First line is #1") # :)
+
+proc gotoLine*(container: Container; n: int) =
+  container.markPos0()
+  container.setCursorY(n - 1)
+  container.markPos()
 
 proc pushCursorPos*(container: Container) =
   if container.select != nil:
diff --git a/src/local/pager.nim b/src/local/pager.nim
index 592db0c6..354b1dc5 100644
--- a/src/local/pager.nim
+++ b/src/local/pager.nim
@@ -312,12 +312,17 @@ proc isearchBackward(pager: Pager) {.jsfunc.} =
   pager.container.markPos0()
   pager.setLineEdit(lmISearchB)
 
-proc gotoLine[T: string|int](pager: Pager; s: T = "") {.jsfunc.} =
-  when s is string:
-    if s == "":
-      pager.setLineEdit(lmGotoLine)
-      return
-  pager.container.gotoLine(s)
+proc gotoLine(ctx: JSContext; pager: Pager; val = JS_UNDEFINED): Opt[void]
+    {.jsfunc.} =
+  var n: int
+  if ctx.fromJS(val, n).isSome:
+    pager.container.gotoLine(n)
+  elif JS_IsUndefined(val):
+    pager.setLineEdit(lmGotoLine)
+  else:
+    var s: string
+    ?ctx.fromJS(val, s)
+    pager.container.gotoLine(s)
 
 proc dumpAlerts*(pager: Pager) =
   for msg in pager.alerts: