我目前正在开发一个用 C 构建的完整 shell。
我想通过我的双链表使用箭头键实现 bash 历史记录和导航,但我在使用 TermCaps 和正确设置read()
功能时遇到了一些问题。
这是我设置终端的方式:
static int set_terminal_mode(t_shell *shell, const int mode)
{
char *term_name;
if (mode == 0)
{
if ((term_name = getenv("TERM")) == NULL)
return (-1);
ioctl(0, TCGETS, &shell->term);
shell->term.c_lflag &= ~ICANON;
shell->term.c_cc[VMIN] = 1;
shell->term.c_cc[VTIME] = 0;
ioctl(0, TCGETS, &shell->term_save);
ioctl(0, TCSETS, &shell->term);
}
if (mode == 1)
ioctl(0, TCSETS, &shell->term_save);
return (0);
}
当按下左键或右键时我可以捕捉到,然后我用它\r
来擦除线(这实际上不起作用)但主要问题是我不能再使用返回键(仅显示^?
)我该如何解决这个问题?