我希望在同一进程下运行多个控制台。我想要做:
(format console1 "foo") ;prints to iterm tab1
(format console2 "bar") ;prints to iterm tab2
(format t "baz") ;prints to slime repl
Run Code Online (Sandbox Code Playgroud)
我还希望能够从所有 3 个流中读取。Slime 将保留标准 REPL,但我想为 2 个术语构建自定义 REPL
使用MAKE-BROADCAST-STREAM. 例如:
(setf *standard-output*
(make-broadcast-stream *standard-output*
(open #P"/tmp/log.out" :direction :output)))
Run Code Online (Sandbox Code Playgroud)
这会将所有标准输出重定向到由当前流*standard-output*和新流组成的广播流,写入文件。如果您在此重定向后编写命令,您应该能够观察到正在写入的文件。另请注意,没有任何参数(make-broadcast-stream)是您通常构建接收器流的方式,有点像/dev/null.
从多个流读取是不同的。如果它们都同时发出输入,你如何决定哪个应该获得优先级?您是否需要单独的线程来并行读取输入并以同步方式推送到单个流中?