diff options
author | bptato <nincsnevem662@gmail.com> | 2024-02-14 01:43:59 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2024-02-14 01:44:26 +0100 |
commit | f0aac2ccd2d0a5c5f734d464bb003df09ec9a19d (patch) | |
tree | cb0df1fdbfad717bf95b880bfa20b580776d828e /src/local | |
parent | 43fa886a8a9fd414647e7557ed70a9d3b6103cae (diff) | |
download | chawan-f0aac2ccd2d0a5c5f734d464bb003df09ec9a19d.tar.gz |
pager: reduce boilerplate
also spawn less processes in some cases
Diffstat (limited to 'src/local')
-rw-r--r-- | src/local/container.nim | 4 | ||||
-rw-r--r-- | src/local/pager.nim | 53 |
2 files changed, 22 insertions, 35 deletions
diff --git a/src/local/container.nim b/src/local/container.nim index 85c6d842..9ad69cc4 100644 --- a/src/local/container.nim +++ b/src/local/container.nim @@ -43,8 +43,8 @@ type setxrefresh: bool ContainerEventType* = enum - NO_EVENT, FAIL, SUCCESS, NEEDS_AUTH, REDIRECT, ANCHOR, NO_ANCHOR, UPDATE, - READ_LINE, READ_AREA, OPEN, INVALID_COMMAND, STATUS, ALERT, LOADED, TITLE, + FAIL, SUCCESS, NEEDS_AUTH, REDIRECT, ANCHOR, NO_ANCHOR, UPDATE, READ_LINE, + READ_AREA, OPEN, INVALID_COMMAND, STATUS, ALERT, LOADED, TITLE, CHECK_MAILCAP, QUIT ContainerEvent* = object diff --git a/src/local/pager.nim b/src/local/pager.nim index c89a35fb..3cdd0226 100644 --- a/src/local/pager.nim +++ b/src/local/pager.nim @@ -19,6 +19,7 @@ import display/term import display/winattrs import extern/editor import extern/runproc +import extern/stdio import extern/tempfile import io/promise import io/socketstream @@ -954,15 +955,11 @@ proc runMailcapReadPipe(pager: Pager, container: Container, stdout.flushFile() discard dup2(pipefd_in[0], stdin.getFileHandle()) discard dup2(pipefd_out[1], stdout.getFileHandle()) - let devnull = open("/dev/null", O_WRONLY) - discard dup2(devnull, stderr.getFileHandle()) - discard close(devnull) + closeStderr() discard close(pipefd_in[0]) discard close(pipefd_out[1]) - discard execCmd(cmd) - discard close(stdin.getFileHandle()) - discard close(stdout.getFileHandle()) - quit(0) + myExec(cmd) + assert false # parent discard close(pipefd_in[0]) discard close(pipefd_out[1]) @@ -996,14 +993,11 @@ proc runMailcapWritePipe(pager: Pager, container: Container, discard close(pipefd[1]) discard dup2(pipefd[0], stdin.getFileHandle()) if not needsterminal: - let devnull = open("/dev/null", O_WRONLY) - discard dup2(devnull, stdout.getFileHandle()) - discard dup2(devnull, stderr.getFileHandle()) - discard close(devnull) + closeStdout() + closeStderr() discard close(pipefd[0]) - discard execCmd(cmd) - discard close(stdin.getFileHandle()) - quit(0) + myExec(cmd) + assert false else: # parent discard close(pipefd[0]) @@ -1035,12 +1029,10 @@ proc runMailcapReadFile(pager: Pager, container: Container, discard close(pipefd[0]) discard dup2(pipefd[1], stdout.getFileHandle()) discard close(pipefd[1]) - let devnull = open("/dev/null", O_WRONLY) - discard dup2(devnull, stderr.getFileHandle()) - discard close(devnull) - discard execCmd(cmd) + closeStderr() + let ret = execCmd(cmd) discard tryRemoveFile(outpath) - quit(0) + quit(ret) # parent discard close(pipefd[1]) let fdout = pipefd[0] @@ -1070,14 +1062,12 @@ proc runMailcapWriteFile(pager: Pager, container: Container, let pid = fork() if pid == 0: # child process - let devnull = open("/dev/null", O_WRONLY) - discard dup2(devnull, stdin.getFileHandle()) - discard dup2(devnull, stdout.getFileHandle()) - discard dup2(devnull, stderr.getFileHandle()) - discard close(devnull) - discard execCmd(cmd) + closeStdin() + closeStdout() + closeStderr() + let ret = execCmd(cmd) discard tryRemoveFile(outpath) - quit(0) + quit(ret) ) return (p, false) @@ -1100,13 +1090,11 @@ proc filterBuffer(pager: Pager, container: Container): CheckMailcapResult = stdout.flushFile() discard dup2(pipefd_in[0], stdin.getFileHandle()) discard dup2(pipefd_out[1], stdout.getFileHandle()) - let devnull = open("/dev/null", O_WRONLY) - discard dup2(devnull, stderr.getFileHandle()) - discard close(devnull) + closeStderr() discard close(pipefd_in[0]) discard close(pipefd_out[1]) - discard execCmd(cmd) - quit(0) + myExec(cmd) + assert false else: # parent discard close(pipefd_in[0]) @@ -1240,7 +1228,7 @@ proc handleEvent0(pager: Pager, container: Container, event: ContainerEvent): bo pager.deleteContainer(container) return false of ANCHOR: - var url2 = newURL(container.location) + let url2 = newURL(container.location) url2.setHash(event.anchor) pager.dupeBuffer(container, url2) of NO_ANCHOR: @@ -1296,7 +1284,6 @@ proc handleEvent0(pager: Pager, container: Container, event: ContainerEvent): bo dec pager.numload pager.deleteContainer(container) return false - of NO_EVENT: discard return true proc handleEvents*(pager: Pager, container: Container) = |