我正在实现一个类似shell的程序,其中user types命令(由我定义)。就像这样。
>cmd
result blah blah blah
>
当我使用箭头键时,它输出原始字符,如^[[A
。
>^[[A
我还注意到sqlite3至少在我在计算机上编译的版本中表现得像这样。
如何防止这种情况,让<-
和->
键左右移动光标?
答案 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()
,它会阻止终端显示用户的输入。