diff options
Diffstat (limited to 'src/display')
-rw-r--r-- | src/display/client.nim | 16 | ||||
-rw-r--r-- | src/display/pager.nim | 13 |
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: |