Clozure CL中文版025:问题与解答
Category:帮助手册问题与解答
如何进行非阻塞(又称“无缓冲”和“原始”)IO?
在“ccl:library; pty.lisp”中有一些用于操作TTY模式的代码。
? (require “PTY”)
? (ccl::disable-tty-local-modes 0 #$ICANON)
T
将关闭文件描述符0上的“输入规范化”,这至少是您需要在此处执行的操作的一部分。这会禁用#$ ICANON模式,该模式告诉操作系统不要进行任何行缓冲或行编辑。当然,这只会在OS执行此操作的情况下产生任何影响,这意味着当stdin是TTY或PTY时。
如果禁用#$ ICANON模式,您可以执行以下操作:
? (progn (read-char) (read-char))a#\a
(第一个READ-CHAR消耗换行符,这对于让读者不再满意是不必要的。)所以,你可以这样做:
? (read-char)#\Space
(在密切关注之后有一个空格),而不必输入换行符。
我正在使用图形演示。为什么菜单栏不会改变?
当您与纯文本Clozure CL交互时,您可以在终端或Emacs中运行Clozure CL作为子进程。当你加载Cocoa或图形环境时,就操作系统而言,子进程会做一些棘手的事情,把它变成一个成熟的应用程序。
因此,它在Dock中有自己的图标,以及它自己的菜单栏,依此类推。它可能会令人困惑,因为标准输入和输出仍将连接到终端或Emacs,因此您仍然可以从那里键入命令到Clozure CL。要查看您加载的菜单栏或打开的窗口,只需单击停靠栏中的Clozure CL图标即可。
我正在使用Slime和Cocoa。为什么*标准输出*似乎不起作用?
如果您使用Slime界面在Emacs下运行Clozure CL,并且您正在进行涉及打印到* standard-output *的Cocoa编程,则会出现这种情况。似乎输出无处可去; 没有报告错误,但它没有出现在* slime-repl *缓冲区中。
在大多数情况下,这仅在您尝试将调试代码插入事件处理程序时才有意义。SLIME侦听器在一个标准流变量的线程中运行(类似于*STANDARD-OUTPUT* and并且 *TERMINAL-IO*绑定到用于与Emacs通信的流; Cocoa事件线程有自己的这些标准流变量的绑定,输出到这些流到* inferior -lisp *缓冲区。在那里寻找它。
http://mip.i3geek.com