【发布时间】:2020-04-24 10:57:57
【问题描述】:
我正在写一个密码输入函数,我会让它像 Unix/Linux 密码输入风格,输入但不打印任何东西在屏幕上。或者,在屏幕上打印“*”也可以。
我发现了这个问题“common lisp, how to mask keyboard input”,这是我想要的,但是当我在我的粘液中运行它们时,给出的函数答案给了echo-on 和 echo-off 让我感到恐慌。 (但是,他们通过了编译)。
我在 emacs/slime 中编码,而恐慌发生在 slime 中(错误消息如下)。在我的计划中,我将通过sbcl --load ./this-script.lisp 在终端中运行这个单一的脚本。
错误信息是:
#<TWO-WAY-STREAM
:INPUT-STREAM #<SB-SYS:FD-STREAM for "standard input" {1004AA8933}>
:OUTPUT-STREAM #<SB-SYS:FD-STREAM for "standard output" {1004AA8A63}>>
fell through ETYPECASE expression.
Wanted one of (FILE-STREAM FIXNUM).
[Condition of type SB-KERNEL:CASE-FAILURE]
现在有人知道怎么做吗?
谢谢。
sbcl 版本:SBCL 2.0.0 macOS:10.15.2
【问题讨论】:
-
您需要告诉我们您是如何使用它的吗?在终端中,在终端中的 emacs/slime 中,在某些 GUI 中,......其中每一个都可能使用不同的方法来显示内容。
-
对不起。我只是添加我运行它的方式。
-
错误消息说代码需要一个fixnum或一个文件流,但双向流不是文件流(Slime重新绑定输入/输出流,这就是为什么有双向流)。但是“sb-sys:*tty*”不应该受到影响,所以我想如果你把 Slime 从问题中删除,它也应该会失败?您是否尝试直接在终端中运行脚本(即
sbcl --load ...)? -
我刚试过,你是对的,
sbcl —load工作正常。那么我有什么方法可以在粘液中运行它吗?或者在 slime 中运行时不要运行 echo-off/on?谢谢。 -
我使用
#-swank来检测正在运行的环境。如果在粘液中,请不要运行 echo-on/off。有没有更好的办法。
标签: emacs lisp common-lisp sbcl slime