Input 如何在Scheme中录制单个按键?

Input 如何在Scheme中录制单个按键?,input,io,scheme,Input,Io,Scheme,我不知道如何录制单个按键,如单个字符或箭头,或修改键(如shift) 最接近的是readchar,但它会在发送输入之前等待您按enter键。我只想注册按键并立即通过 如果这是特定于实现的,我将使用Chez方案。任何与按键有关的内容都将是特定于实现的,因为方案标准中没有提到这一点。据我所知,在Chez方案中,并没有对按键的直接支持。但是,如果您安装了随Chez Scheme一起提供的SWL(Scheme小部件库),则会有一个读取按键的命令。我从未使用过它,也对它一无所知。与按键有关的任何内容都将是

我不知道如何录制单个按键,如单个字符或箭头,或修改键(如shift)

最接近的是
readchar
,但它会在发送输入之前等待您按enter键。我只想注册按键并立即通过


如果这是特定于实现的,我将使用Chez方案。

任何与按键有关的内容都将是特定于实现的,因为方案标准中没有提到这一点。据我所知,在Chez方案中,并没有对按键的直接支持。但是,如果您安装了随Chez Scheme一起提供的SWL(Scheme小部件库),则会有一个读取按键的命令。我从未使用过它,也对它一无所知。

与按键有关的任何内容都将是特定于实现的,因为在Scheme标准中没有提到。据我所知,在Chez方案中,并没有对按键的直接支持。但是,如果您安装了随Chez Scheme一起提供的SWL(Scheme小部件库),则会有一个读取按键的命令。我从未使用过它,对它一无所知。

如前所述,按键是特定于系统的,但在linux或BSD系统上,几乎肯定会安装stty,这将满足您对chez scheme的需求:

(system "stty --file=/dev/tty cbreak -echo")
(let ([keyboard (open-input-file "/dev/tty")])
  (format #t "The key press was ~A~%" (read-char keyboard)))
(system "stty --file=/dev/tty -cbreak echo")

如前所述,按键是特定于系统的,但在linux或BSD系统上,几乎肯定会安装stty,这将满足您对chez scheme的需求:

(system "stty --file=/dev/tty cbreak -echo")
(let ([keyboard (open-input-file "/dev/tty")])
  (format #t "The key press was ~A~%" (read-char keyboard)))
(system "stty --file=/dev/tty -cbreak echo")

嗯,太糟糕了。我想我得看看SWL了。ThanksIt R6RS似乎可以使用未缓冲的端口读写文件,但没有在已打开的端口上打开/关闭缓冲的功能。也许R7RSLarge会有它。@Silvester:端口缓冲不是问题,使其无缓冲也没有帮助。这是终端自身的线路缓冲问题。嗯,太糟糕了。我想我得看看SWL了。ThanksIt R6RS似乎可以使用未缓冲的端口读写文件,但没有在已打开的端口上打开/关闭缓冲的功能。也许R7RSLarge会有它。@Silvester:端口缓冲不是问题,使其无缓冲也没有帮助。这是终端自身的线路缓冲问题。谢谢,这是我一直在寻找的!谢谢,这就是我要找的!