diff options
author | bptato <nincsnevem662@gmail.com> | 2025-02-20 20:13:10 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-02-20 20:13:10 +0100 |
commit | 1c7c03c718bdb5d93329a5e4c1b8b4fad159b406 (patch) | |
tree | 069f8fc85c24058e90e6f6d8a99b45c496b33d76 /src/local | |
parent | 377e85f29cbcd251c97882c271530396c7a9fbd8 (diff) | |
download | chawan-1c7c03c718bdb5d93329a5e4c1b8b4fad159b406.tar.gz |
pager: add API to set search regex
Diffstat (limited to 'src/local')
-rw-r--r-- | src/local/pager.nim | 22 |
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) |