如何在控制台中有右箭头行为

How to have right arow behavior in a console

我正在尝试在裸机环境中重新创建行编辑器: 芯片在UART中接收和发送数据。

UART 在输入时链接到键盘,在输出时链接到屏幕。

为了模拟左箭头,我发送字符 \b。 我找不到正确的方法。

关于内存解决方案

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

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

\b 可能最初用于打印机。可以用它来打印两个字符在彼此之上(例如 A_ 来创建带下划线的 A,或者 AA 来创建粗体 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