about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2023-01-06 20:16:18 +0100
committerbptato <nincsnevem662@gmail.com>2023-01-06 22:24:01 +0100
commit8323cf214819297cae0ce0908e339a78a289434a (patch)
treea861b10713ae244ae593e8988087a8aa449a3375
parent85ec984f948623662a76a3fbfe50354f6be9612e (diff)
downloadchawan-8323cf214819297cae0ce0908e339a78a289434a.tar.gz
Slightly refactor commandMode
-rw-r--r--res/config.toml8
-rw-r--r--src/buffer/container.nim2
-rw-r--r--src/display/client.nim16
-rw-r--r--src/display/pager.nim13
4 files changed, 27 insertions, 12 deletions
diff --git a/res/config.toml b/res/config.toml
index ae0d4d8d..968e4626 100644
--- a/res/config.toml
+++ b/res/config.toml
@@ -89,7 +89,6 @@ M-d = 'pager.discardTree()'
 'M-.' = 'pager.nextSiblingBuffer()'
 'M-/' = 'pager.parentBuffer()'
 M-c = 'pager.command()'
-C = 'pager.commandMode();console.show()'
 '/' = 'pager.isearchForward()'
 '?' = 'pager.isearchBackward()'
 n = 'pager.searchNext()'
@@ -122,3 +121,10 @@ C-e = 'line.end()'
 C-v = 'line.escape()'
 C-p = 'line.prevHist()'
 C-n = 'line.nextHist()'
+M-c = '''
+pager.commandMode = !(console.buffer == pager.buffer);
+if (pager.commandMode)
+	console.hide();
+else
+	console.show();
+'''
diff --git a/src/buffer/container.nim b/src/buffer/container.nim
index d5c6becf..3315b79c 100644
--- a/src/buffer/container.nim
+++ b/src/buffer/container.nim
@@ -672,7 +672,7 @@ proc onload(container: Container, res: LoadResult) =
           container.setCursorXY(res.x, res.y))
 
 proc load(container: Container) =
-  container.setLoadInfo("Connecting to " & $container.source.location)
+  container.setLoadInfo("Connecting to " & container.location.host & "...")
   container.iface.connect().then(proc(res: ConnectResult): auto =
     let info = container.loadinfo
     if res.code != -2:
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: