В настоящее время я работаю над полной оболочкой, построенной на C.
Я хочу реализовать историю 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
, чтобы стереть строку (что на самом деле не работает), но основная проблема в том, что я больше не могу использовать клавишу возврата (отображается только ^?
). Как я могу это исправить ?