我正试图在裸金属环境中重新创建一个行编辑器:在UART中接收和发送数据的芯片。
UART在输入时与键盘相连,在输出时与屏幕相连。
为了模拟左箭头,我发送字符\b。我不知道该怎么走。
关于内存解决方案
目前,我们的系统只将字符发回UART,以便在屏幕上显示。没有内存使用
我想到了一些需要记住所有输入文本的解决方案,例如@ikegami答案中提出的第二部分。
我的问题可能是:
屏幕可以将\b理解为光标的向后移动。有没有类似的方法可以向前推进?还是我被迫在芯片中计算它
b
最初可能用于打印机。可以使用它将两个字符叠加打印(例如,A
和_
创建带下划线的A
,或者A
和A
创建粗体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