about summary refs log tree commit diff stats
path: root/src/local
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2025-02-20 20:13:10 +0100
committerbptato <nincsnevem662@gmail.com>2025-02-20 20:13:10 +0100
commit1c7c03c718bdb5d93329a5e4c1b8b4fad159b406 (patch)
tree069f8fc85c24058e90e6f6d8a99b45c496b33d76 /src/local
parent377e85f29cbcd251c97882c271530396c7a9fbd8 (diff)
downloadchawan-1c7c03c718bdb5d93329a5e4c1b8b4fad159b406.tar.gz
pager: add API to set search regex
Diffstat (limited to 'src/local')
-rw-r--r--src/local/pager.nim22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/local/pager.nim b/src/local/pager.nim
index 22dbc5ef..061b811e 100644
--- a/src/local/pager.nim
+++ b/src/local/pager.nim
@@ -164,7 +164,7 @@ type
     precnum*: int32 # current number prefix (when vi-numeric-prefix is true)
     pressed: tuple[col, row: int]
     refreshAllowed: HashSet[string]
-    regex: Opt[Regex]
+    regex: Option[Regex]
     reverseSearch: bool
     scommand: string
     status: Surface
@@ -336,6 +336,20 @@ proc searchPrev(pager: Pager; n = 1) {.jsfunc.} =
   else:
     pager.alert("No previous regular expression")
 
+proc setSearchRegex(pager: Pager; s: string; flags0 = ""; reverse = false):
+    JSResult[void] {.jsfunc.} =
+  var flags = {LRE_FLAG_GLOBAL}
+  for c in flags0:
+    let x = strictParseEnum[LREFlag]($c)
+    if x.isNone:
+      return errTypeError("invalid flag " & c)
+  let re = compileRegex(s, flags)
+  if re.isNone:
+    return errTypeError(re.error)
+  pager.regex = some(re.get)
+  pager.reverseSearch = reverse
+  return ok()
+
 proc getHist(pager: Pager; mode: LineMode): History =
   if pager.lineHist[mode] == nil:
     pager.lineHist[mode] = newHistory(100)
@@ -2086,11 +2100,11 @@ proc commandMode(pager: Pager; val: bool) {.jsfset.} =
   if val:
     pager.command()
 
-proc checkRegex(pager: Pager; regex: Result[Regex, string]): Opt[Regex] =
+proc checkRegex(pager: Pager; regex: Result[Regex, string]): Option[Regex] =
   if regex.isNone:
     pager.alert("Invalid regex: " & regex.error)
-    return err()
-  return ok(regex.get)
+    return none(Regex)
+  return some(regex.get)
 
 proc compileSearchRegex(pager: Pager; s: string): Result[Regex, string] =
   return compileSearchRegex(s, pager.config.search.ignoreCase)