为什么退格键打印出^?在 crystal 中调用 gets() 时?
Why does the backspace key print ^? when calling gets() in crystal?
当我尝试更正我的 crystal 程序的输入时(在我的 Mac 上的 zsh 终端中),^?每按一次退格键,字符就会打印到屏幕上。它让人迷失方向并且不会从屏幕上删除任何字符,但它在技术上运行得很好,因为我发现玩这个小测试片段。
a = gets.as(String).chomp
puts a
a = gets # alright then^?^?^?^?^?
puts a # alright
这是怎么回事?我怎样才能让我的输入表现得像用户期望的那样,我可以用 STDIN 做一些特别的事情吗?
我认为,这将取决于您使用的终端,并且它在很大程度上独立于编程语言(例如,它一直是 reported in Python)。
有些终端会在您键入反斜杠时发送 ^H
或 ^?
。我也可以在调用 cat
时在 xterm
(在 Linux 上)重现它,这大致类似于获取一行并打印它(在循环中):
$ echo $TERM
xterm
$ cat
abc^H^H^Hdef
def
... 当它与其他终端一起工作时(同样的测试:输入 abc
,删除三个字符,然后输入 def
):
$ echo $TERM
xterm-256color
$ cat
def
def
您可以使用像 readline 这样的库来解决这个问题。我自己没有尝试过,但是这个库实现了 Crystal 的绑定:crystal-readline
当我尝试更正我的 crystal 程序的输入时(在我的 Mac 上的 zsh 终端中),^?每按一次退格键,字符就会打印到屏幕上。它让人迷失方向并且不会从屏幕上删除任何字符,但它在技术上运行得很好,因为我发现玩这个小测试片段。
a = gets.as(String).chomp
puts a
a = gets # alright then^?^?^?^?^?
puts a # alright
这是怎么回事?我怎样才能让我的输入表现得像用户期望的那样,我可以用 STDIN 做一些特别的事情吗?
我认为,这将取决于您使用的终端,并且它在很大程度上独立于编程语言(例如,它一直是 reported in Python)。
有些终端会在您键入反斜杠时发送 ^H
或 ^?
。我也可以在调用 cat
时在 xterm
(在 Linux 上)重现它,这大致类似于获取一行并打印它(在循环中):
$ echo $TERM
xterm
$ cat
abc^H^H^Hdef
def
... 当它与其他终端一起工作时(同样的测试:输入 abc
,删除三个字符,然后输入 def
):
$ echo $TERM
xterm-256color
$ cat
def
def
您可以使用像 readline 这样的库来解决这个问题。我自己没有尝试过,但是这个库实现了 Crystal 的绑定:crystal-readline