如何在控制台中有右箭头行为
How to have right arow behavior in a console
我正在尝试在裸机环境中重新创建行编辑器:
芯片在UART中接收和发送数据。
UART 在输入时链接到键盘,在输出时链接到屏幕。
为了模拟左箭头,我发送字符 \b。
我找不到正确的方法。
关于内存解决方案
目前我们的系统仅将字符发回UART 以显示在屏幕上。没有内存占用。
我想到了一些解决方案,需要记住所有输入的文本,例如@ikegami 答案中提出的第二部分。
我的问题可能是:
屏幕可以理解\b为光标向后移动。有没有类似的方法来做到这一点?还是我被迫在芯片中计算它?
\b
可能最初用于打印机。可以用它来打印两个字符在彼此之上(例如 A
和 _
来创建带下划线的 A
,或者 A
和 A
来创建粗体 A
).
要在打印机上继续前进,只需打印 space。当然,在终端上,这通常会删除现有字符。
输入 ANSI 转义序列。也许 these 适合您。例如,打印 "\e[C"
会在某些终端上将光标向前移动一位(直到终端的限制)。
$ perl -e'
print "abcd";
print "\e[D\e[D\e[D"; # Go back
print "e"; # Edit
print "\e[C\e[C"; # Move forward
print "f"; # Add more to the end
print "\e[C"; # Move forward
print "g\n"; # Add more to the end
'
aecdf g
(语言的选择无关紧要,只是用Perl做demo比较简洁。)
或者,打印 space。如果这会覆盖您不想覆盖的字符,请记住该字符是什么并打印该字符而不是 space.
$ perl -e'
print "abcd";
print "\b\b\b"; # Go back
print "e"; # Edit
print "cd"; # Move forward
print "f"; # Add more to the end
print " "; # Move forward
print "g\n";
'
aecdf g
我正在尝试在裸机环境中重新创建行编辑器: 芯片在UART中接收和发送数据。
UART 在输入时链接到键盘,在输出时链接到屏幕。
为了模拟左箭头,我发送字符 \b。 我找不到正确的方法。
关于内存解决方案
目前我们的系统仅将字符发回UART 以显示在屏幕上。没有内存占用。
我想到了一些解决方案,需要记住所有输入的文本,例如@ikegami 答案中提出的第二部分。
我的问题可能是:
屏幕可以理解\b为光标向后移动。有没有类似的方法来做到这一点?还是我被迫在芯片中计算它?
\b
可能最初用于打印机。可以用它来打印两个字符在彼此之上(例如 A
和 _
来创建带下划线的 A
,或者 A
和 A
来创建粗体 A
).
要在打印机上继续前进,只需打印 space。当然,在终端上,这通常会删除现有字符。
输入 ANSI 转义序列。也许 these 适合您。例如,打印 "\e[C"
会在某些终端上将光标向前移动一位(直到终端的限制)。
$ perl -e'
print "abcd";
print "\e[D\e[D\e[D"; # Go back
print "e"; # Edit
print "\e[C\e[C"; # Move forward
print "f"; # Add more to the end
print "\e[C"; # Move forward
print "g\n"; # Add more to the end
'
aecdf g
(语言的选择无关紧要,只是用Perl做demo比较简洁。)
或者,打印 space。如果这会覆盖您不想覆盖的字符,请记住该字符是什么并打印该字符而不是 space.
$ perl -e'
print "abcd";
print "\b\b\b"; # Go back
print "e"; # Edit
print "cd"; # Move forward
print "f"; # Add more to the end
print " "; # Move forward
print "g\n";
'
aecdf g