防止箭头键输出原始字符,如^ [[A在C中制作shell时

时间:2011-12-26 13:20:00

标签: c shell

我正在实现一个类似shell的程序,其中user types命令(由我定义)。就像这样。

>cmd
result blah blah blah
>

当我使用箭头键时,它输出原始字符,如^[[A

>^[[A

我还注意到sqlite3至少在我在计算机上编译的版本中表现得像这样。

如何防止这种情况,让<-->键左右移动光标?

4 个答案:

答案 0 :(得分:4)

GNU Readline是专门为此任务设计的库(即允许用户编辑在交互式命令驱动程序中键入的命令)。请注意,此库是在GPL下分发的(不是 LGPL);如果这对您不起作用,editline是一个具有BSD风格许可证的类似库。

我注意到你说这是家庭作业,所以你可能想问你的老师你是否应该自己实施光标动作和行编辑。如果是这样,ncurses(如jDourlens所述)是抽象方面的下一步,如果你真的希望自己做所有事情,请阅读termios和{{3 (几乎现在使用的所有终端仿真器都模拟VT220或其后代之一)。

答案 1 :(得分:2)

要让用户使用键盘箭头在cmd中导航,您可能必须使用termcaps

http://www.gnu.org/software/termutils/manual/termcap-1.3/html_chapter/termcap_2.html

如果你想更容易处理有点复杂的termcaps,你应该使用Ncurses

http://www.gnu.org/software/ncurses/ncurses.html

如果你选择这个解决方案,那么处理termcaps会好运,屁股有些痛苦!

答案 2 :(得分:2)

我发现了一种稍微简单的方法。运行rlwrap [your program]而不是[your program]

例如,sqlite3作为rlwrap sqlite3

,它可以正常工作

答案 3 :(得分:0)

您可以查看Ncurses。它是一个图书馆,让您可以控制终端中的几乎所有内容。您想要的具体功能是noecho(),它会阻止终端显示用户的输入。