私は現在、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行を消去するために使用します (これは実際には機能しません) が、主な問題は、リターン キーを使用できないことです (表示のみ^?) これを修正するにはどうすればよいですか?