c - 自定义输入,在命令行中的单词中间写入时覆盖文本
c - custom input, text overwrites when writing at the middle of a word in the command line
我正在用 C 编写自定义 shell。我目前正在尝试获取用户输入。
我已将终端设为原始模式:
term.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);
term.c_oflag &= ~OPOST;
term.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN);
term.c_cflag &= ~(CSIZE | PARENB);
term.c_cflag |= CS8;
term.c_cc[VMIN] = 1;
term.c_cc[VTIME] = 0;
以便我可以处理箭头键和其他特殊键。
我遇到的问题是,当我尝试在单词中间写一些东西时,文本会被覆盖。
我明白了:
但我需要这个:
注意:我最初有字符串 "abc",当光标位于 'b' 时,我按 'z'。在我的例子中,'z' 覆盖了 'b',但我需要将它插入到 'a' 和 'b' 之间,并将 "bc" 向右移动一列。
termios 中是否有我遗漏的标志,或者我必须以艰难的方式处理所有内容?
没有 termios 标志。相反,您可以咨询 termcap for im
capability string:
im
String of commands to enter insert mode. If the terminal has no special insert mode, but it can insert characters with a special command, im
should be defined with a null value, because the vi
editor assumes that insertion of a character is impossible if im
is not provided. New programs should not act like vi
. They should pay attention to im
only if it is defined.
我正在用 C 编写自定义 shell。我目前正在尝试获取用户输入。
我已将终端设为原始模式:
term.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);
term.c_oflag &= ~OPOST;
term.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN);
term.c_cflag &= ~(CSIZE | PARENB);
term.c_cflag |= CS8;
term.c_cc[VMIN] = 1;
term.c_cc[VTIME] = 0;
以便我可以处理箭头键和其他特殊键。
我遇到的问题是,当我尝试在单词中间写一些东西时,文本会被覆盖。
我明白了:
但我需要这个:
注意:我最初有字符串 "abc",当光标位于 'b' 时,我按 'z'。在我的例子中,'z' 覆盖了 'b',但我需要将它插入到 'a' 和 'b' 之间,并将 "bc" 向右移动一列。
termios 中是否有我遗漏的标志,或者我必须以艰难的方式处理所有内容?
没有 termios 标志。相反,您可以咨询 termcap for im
capability string:
im
String of commands to enter insert mode. If the terminal has no special insert mode, but it can insert characters with a special command,
im
should be defined with a null value, because thevi
editor assumes that insertion of a character is impossible ifim
is not provided. New programs should not act likevi
. They should pay attention toim
only if it is defined.