about summary refs log tree commit diff stats
path: root/src/display
diff options
context:
space:
mode:
Diffstat (limited to 'src/display')
-rw-r--r--src/display/client.nim16
-rw-r--r--src/display/pager.nim13
2 files changed, 19 insertions, 10 deletions
diff --git a/src/display/client.nim b/src/display/client.nim
index ecc01260..50d7383c 100644
--- a/src/display/client.nim
+++ b/src/display/client.nim
@@ -272,6 +272,9 @@ proc hide(console: Console) {.jsfunc.} =
   if console.pager.container == console.container:
     console.pager.setContainer(console.prev)
 
+proc buffer(console: Console): Container {.jsfget.} =
+  return console.container
+
 proc acceptBuffers(client: Client) =
   while client.pager.unreg.len > 0:
     let (pid, stream) = client.pager.unreg.pop()
@@ -307,17 +310,22 @@ proc handleRead(client: Client, fd: int) =
     client.input()
     client.handlePagerEvents()
   elif fd == client.dispatcher.forkserver.estream.fd:
-    var nl = true
+    var nl = false
+    const prefix = "STDERR: "
+    var s = prefix
     while true:
       try:
         let c = client.dispatcher.forkserver.estream.readChar()
-        if nl:
-          client.console.err.write("STDERR: ")
+        if nl and s.len > prefix.len:
+          client.console.err.write(s)
+          s = prefix
           nl = false
-        client.console.err.write(c)
+        s &= c
         nl = c == '\n'
       except IOError:
         break
+    if s.len > prefix.len:
+      client.console.err.write(s)
     client.console.err.flush()
   else:
     let container = client.fdmap[fd]
diff --git a/src/display/pager.nim b/src/display/pager.nim
index 0f5a683b..08cfca41 100644
--- a/src/display/pager.nim
+++ b/src/display/pager.nim
@@ -42,7 +42,7 @@ type
     numload*: int
     alerts: seq[string]
     alerton: bool
-    commandMode*: bool
+    commandMode* {.jsget.}: bool
     container*: Container
     dispatcher*: Dispatcher
     lineedit*: Option[LineEdit]
@@ -656,9 +656,10 @@ proc readPipe*(pager: Pager, ctype: Option[string], fd: FileHandle) =
 proc command(pager: Pager) {.jsfunc.} =
   pager.setLineEdit("COMMAND: ", COMMAND)
 
-proc commandMode(pager: Pager) {.jsfunc.} =
-  pager.commandmode = true
-  pager.command()
+proc commandMode(pager: Pager, val: bool) {.jsfset.} =
+  pager.commandMode = val
+  if val:
+    pager.command()
 
 proc updateReadLineISearch(pager: Pager, linemode: LineMode) =
   let lineedit = pager.lineedit.get
@@ -707,7 +708,7 @@ proc updateReadLine*(pager: Pager) =
         pager.gotoURL(newRequest(url), some(pager.container.source.location), replace = pager.container, referrer = pager.container)
       of COMMAND:
         pager.scommand = s
-        if pager.commandmode:
+        if pager.commandMode:
           pager.command()
       of BUFFER: pager.container.readSuccess(s)
       of SEARCH_F:
@@ -730,7 +731,7 @@ proc updateReadLine*(pager: Pager) =
         pager.username = ""
         pager.discardBuffer()
       of BUFFER: pager.container.readCanceled()
-      of COMMAND: pager.commandmode = false
+      of COMMAND: pager.commandMode = false
       else: discard
   if lineedit.state in {CANCEL, FINISH}:
     if pager.lineedit.get == lineedit: