about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/local/client.nim6
-rw-r--r--src/local/container.nim14
-rw-r--r--src/local/pager.nim7
-rw-r--r--src/main.nim3
-rw-r--r--src/server/forkserver.nim24
5 files changed, 24 insertions, 30 deletions
diff --git a/src/local/client.nim b/src/local/client.nim
index efc838f4..ae838360 100644
--- a/src/local/client.nim
+++ b/src/local/client.nim
@@ -65,7 +65,6 @@ type
     jsctx: JSContext
     jsrt: JSRuntime
     loader: FileLoader
-    mainproc: Pid
     pager {.jsget.}: Pager
     selector: Selector[int]
     timeouts: TimeoutState
@@ -676,17 +675,16 @@ proc addJSModules(client: Client, ctx: JSContext) =
 func getClient(client: Client): Client {.jsfget: "client".} =
   return client
 
-proc newClient*(config: Config, forkserver: ForkServer, mainproc: Pid): Client =
+proc newClient*(config: Config, forkserver: ForkServer): Client =
   setControlCHook(proc() {.noconv.} = quit(1))
   let jsrt = newJSRuntime()
   JS_SetModuleLoaderFunc(jsrt, normalizeModuleName, clientLoadJSModule, nil)
   let jsctx = jsrt.newJSContext()
   let attrs = getWindowAttributes(stdout)
-  let pager = newPager(config, attrs, forkserver, mainproc, jsctx)
+  let pager = newPager(config, attrs, forkserver, jsctx)
   let client = Client(
     config: config,
     forkserver: forkserver,
-    mainproc: mainproc,
     loader: forkserver.newFileLoader(
       defaultHeaders = config.getDefaultHeaders(),
       proxy = config.getProxy(),
diff --git a/src/local/container.nim b/src/local/container.nim
index 1c91a41e..73dfba49 100644
--- a/src/local/container.nim
+++ b/src/local/container.nim
@@ -127,28 +127,18 @@ type
 jsDestructor(Highlight)
 jsDestructor(Container)
 
-proc newBuffer*(forkserver: ForkServer, mainproc: Pid, config: BufferConfig,
+proc newBuffer*(forkserver: ForkServer, config: BufferConfig,
     source: BufferSource, title = "", redirectdepth = 0,
     canreinterpret = true): Container =
   let attrs = getWindowAttributes(stdout)
-  let ostream = forkserver.ostream
-  let istream = forkserver.istream
-  ostream.swrite(FORK_BUFFER)
-  ostream.swrite(source)
-  ostream.swrite(config)
-  ostream.swrite(attrs)
-  ostream.swrite(mainproc)
-  ostream.flush()
-  var process: Pid
-  istream.sread(process)
   return Container(
+    process: forkserver.forkBuffer(source, config, attrs),
     source: source,
     width: attrs.width,
     height: attrs.height - 1,
     title: title,
     config: config,
     redirectdepth: redirectdepth,
-    process: process,
     pos: CursorPosition(
       setx: -1
     ),
diff --git a/src/local/pager.nim b/src/local/pager.nim
index 9275a5d3..61614eef 100644
--- a/src/local/pager.nim
+++ b/src/local/pager.nim
@@ -69,7 +69,6 @@ type
     linehist: array[LineMode, LineHistory]
     linemode: LineMode
     mailcap: Mailcap
-    mainproc: Pid
     mimeTypes: MimeTypes
     notnum*: bool # has a non-numeric character been input already?
     numload*: int
@@ -230,15 +229,14 @@ proc setPaths(pager: Pager): Err[string] =
   pager.cgiDir = cgiDir
   return ok()
 
-proc newPager*(config: Config, attrs: WindowAttributes,
-    forkserver: ForkServer, mainproc: Pid, ctx: JSContext): Pager =
+proc newPager*(config: Config, attrs: WindowAttributes, forkserver: ForkServer,
+    ctx: JSContext): Pager =
   let (mailcap, errs) = config.getMailcap()
   let pager = Pager(
     config: config,
     display: newFixedGrid(attrs.width, attrs.height - 1),
     forkserver: forkserver,
     mailcap: mailcap,
-    mainproc: mainproc,
     mimeTypes: config.getMimeTypes(),
     omnirules: config.getOmniRules(ctx),
     proxy: config.getProxy(),
@@ -451,7 +449,6 @@ proc newBuffer(pager: Pager, bufferConfig: BufferConfig, source: BufferSource,
     title = "", redirectdepth = 0, canreinterpret = true): Container =
   return newBuffer(
     pager.forkserver,
-    pager.mainproc,
     bufferConfig,
     source,
     title,
diff --git a/src/main.nim b/src/main.nim
index 49501d66..d6a9abce 100644
--- a/src/main.nim
+++ b/src/main.nim
@@ -5,7 +5,6 @@ let forks = newForkServer()
 
 import std/options
 import std/os
-import std/posix
 
 import config/chapath
 import config/config
@@ -208,7 +207,7 @@ Options:
     quit(1)
   SocketDirectory = tmpdir0.get
 
-  let c = newClient(config, forks, getpid())
+  let c = newClient(config, forks)
   try:
     c.launchClient(pages, ctype, cs, dump)
   except CatchableError:
diff --git a/src/server/forkserver.nim b/src/server/forkserver.nim
index ea811955..9ad9c8a9 100644
--- a/src/server/forkserver.nim
+++ b/src/server/forkserver.nim
@@ -24,8 +24,8 @@ type
 
   ForkServer* = ref object
     process*: Pid
-    istream*: Stream
-    ostream*: Stream
+    istream: Stream
+    ostream: Stream
     estream*: PosixStream
 
   ForkServerContext = object
@@ -62,6 +62,17 @@ proc removeChild*(forkserver: ForkServer, pid: Pid) =
   forkserver.ostream.swrite(pid)
   forkserver.ostream.flush()
 
+proc forkBuffer*(forkserver: ForkServer, source: BufferSource,
+    config: BufferConfig, attrs: WindowAttributes): Pid =
+  forkserver.ostream.swrite(FORK_BUFFER)
+  forkserver.ostream.swrite(source)
+  forkserver.ostream.swrite(config)
+  forkserver.ostream.swrite(attrs)
+  forkserver.ostream.flush()
+  var process: Pid
+  forkserver.istream.sread(process)
+  return process
+
 proc trapSIGINT() =
   # trap SIGINT, so e.g. an external editor receiving an interrupt in the
   # same process group can't just kill the process
@@ -107,11 +118,9 @@ proc forkBuffer(ctx: var ForkServerContext): Pid =
   var source: BufferSource
   var config: BufferConfig
   var attrs: WindowAttributes
-  var mainproc: Pid
   ctx.istream.sread(source)
   ctx.istream.sread(config)
   ctx.istream.sread(attrs)
-  ctx.istream.sread(mainproc)
   let loaderPid = ctx.forkLoader(config.loaderConfig)
   var pipefd: array[2, cint]
   if pipe(pipefd) == -1:
@@ -158,9 +167,10 @@ proc forkBuffer(ctx: var ForkServerContext): Pid =
   return pid
 
 proc runForkServer() =
-  var ctx: ForkServerContext
-  ctx.istream = newPosixStream(stdin.getFileHandle())
-  ctx.ostream = newPosixStream(stdout.getFileHandle())
+  var ctx = ForkServerContext(
+    istream: newPosixStream(stdin.getFileHandle()),
+    ostream: newPosixStream(stdout.getFileHandle())
+  )
   while true:
     try:
       var cmd: ForkCommand