about summary refs log tree commit diff stats
path: root/src/local
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2024-02-14 01:43:59 +0100
committerbptato <nincsnevem662@gmail.com>2024-02-14 01:44:26 +0100
commitf0aac2ccd2d0a5c5f734d464bb003df09ec9a19d (patch)
treecb0df1fdbfad717bf95b880bfa20b580776d828e /src/local
parent43fa886a8a9fd414647e7557ed70a9d3b6103cae (diff)
downloadchawan-f0aac2ccd2d0a5c5f734d464bb003df09ec9a19d.tar.gz
pager: reduce boilerplate
also spawn less processes in some cases
Diffstat (limited to 'src/local')
-rw-r--r--src/local/container.nim4
-rw-r--r--src/local/pager.nim53
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) =