Clozure CL中文版025:问题与解答

  • 0

Clozure CL中文版025:问题与解答

Category:帮助手册 Tags : 

问题与解答

如何进行非阻塞(又称“无缓冲”和“原始”)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

Leave a Reply

搜索

分类目录

公 告

本网站学习论坛:

www.zhlisp.com

lisp中文学习源码:

https://github.com/zhlisp/

欢迎大家来到本站,请积极评论发言;

加QQ群学习交流。