c-如何在控制台中拥有正确的arow行为



我正试图在裸金属环境中重新创建一个行编辑器:在UART中接收和发送数据的芯片。

UART在输入时与键盘相连,在输出时与屏幕相连。

为了模拟左箭头,我发送字符\b。我不知道该怎么走。

关于内存解决方案

目前,我们的系统只将字符发回UART,以便在屏幕上显示。没有内存使用
我想到了一些需要记住所有输入文本的解决方案,例如@ikegami答案中提出的第二部分。

我的问题可能是:
屏幕可以将\b理解为光标的向后移动。有没有类似的方法可以向前推进?还是我被迫在芯片中计算它

b最初可能用于打印机。可以使用它将两个字符叠加打印(例如,A_创建带下划线的A,或者AA创建粗体A(。

要在打印机上向前移动,只需打印一个空格即可。当然,在终端上,这通常会擦除现有的字符。

输入ANSI转义序列。也许这些对你有用。例如,在某些终端上,打印"e[C"会将光标向前移动一个(直到终端的极限(。

$ perl -e'
print "abcd";
print "e[De[De[D";  # Go back
print "e";             # Edit
print "e[Ce[C";      # Move forward
print "f";             # Add more to the end
print "e[C";          # Move forward
print "gn";           # Add more to the end
'
aecdf g

(语言的选择并不相关。只是使用Perl进行演示更紧凑。(

或者,打印一个空格。如果这会覆盖您不想覆盖的字符,请记住该字符是什么,并打印该字符而不是空格。

$ perl -e'
print "abcd";
print "bbb";        # Go back
print "e";             # Edit
print "cd";            # Move forward
print "f";             # Add more to the end
print " ";             # Move forward
print "gn";
'
aecdf g

相关内容

  • 没有找到相关文章

最新更新