我想为我的CLI应用程序实现自动完成功能。getc()的默认行为仅在输入以下字符列表时返回:NEW_LINE或EOF。我想把TAB添加到这个列表中,这样我就可以触发自动完成算法了。
例如,有没有办法使用termios?editline库(http://www.thrysoee.dk/editline/)可以做到,但我不知道它是如何做到的?
最佳答案
在第二版“UNIX环境中的高级编程”中,处理终端IO大约需要40页。。。快速地,您可以将eol和eol2(termios.c_cc[eol]和termios.c_cc[eol2])字符设置为具有类似的其他字符。
你甚至可以试试这个
$ cat -
abc\tdef
abc\tdef
^d
$stty eol ^i
abc\tabc\tdef
def
^d
如何在程序中执行此操作的示例(在实践中,不要忘记错误处理和在结束时、挂起时、发出信号时恢复原始状态,等等。。。这就是为什么使用打包库做得更好的原因,对于一个健壮的应用程序,有很多细节要做得很好)。
struct termios term;
tcgetattr(STDIN_FILENO, &term);
term.c_cc[EOL] = '\t';
tcsetattr(STDION_FILENO, TCSAFLUSH, &term);
关于c - 如何更改termios配置,以便当用户按下<tab>键时getc()立即返回?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4163405/