NCurses:从其他终端读取输入未命中键
NCurses: reading input from other terminal misses keys
我正在将 ncurses hmi 重定向到另一个已经存在的终端。虽然输出部分工作正常(因此未在此处显示),但输入丢失了随后出现在终端中的键,就好像它们是在没有 ncurses 的情况下输入的一样。
#include <stdio.h>
#include <curses.h>
int main(int argc, char *argv[])
{
FILE *fd = fopen(argv[1], "r+");
SCREEN *scr = newterm(nullptr, fd, fd);
set_term(scr);
noecho();
keypad(stdscr, TRUE);
while (true) {
int ch = wgetch(stdscr);
printf("In %d\r\n", ch);
}
return 0;
}
我在 Ubuntu 上创建了两个终端,并使用 'tty' 获取其中一个的名称(我们称之为 'curses-terminal')。当在另一个终端中启动上述内容时,此名称将用作参数。
在 curses 终端中键入时,我希望键的代码出现在另一个终端中,而在 curses 终端中看不到任何内容。
相反,我看到一些字符扩散到 curses 终端中,而它们的代码没有显示在另一个终端中。当输入速度更快时,普通字符会发生这种情况,但尤其是使用箭头键和 ALT- 组合时,错误率是 >> 50%。
有没有我忘记的设置?
使用 G.M. 的提示,我能够可靠地获得所有输入。
运行
tail -f /dev/null
在 curses-terminal 中附加 ncurses 应用程序之前。
如果您(像我一样)想在 fopen
之后从您的应用程序中发送此命令,您可能会感到沮丧。
我正在将 ncurses hmi 重定向到另一个已经存在的终端。虽然输出部分工作正常(因此未在此处显示),但输入丢失了随后出现在终端中的键,就好像它们是在没有 ncurses 的情况下输入的一样。
#include <stdio.h>
#include <curses.h>
int main(int argc, char *argv[])
{
FILE *fd = fopen(argv[1], "r+");
SCREEN *scr = newterm(nullptr, fd, fd);
set_term(scr);
noecho();
keypad(stdscr, TRUE);
while (true) {
int ch = wgetch(stdscr);
printf("In %d\r\n", ch);
}
return 0;
}
我在 Ubuntu 上创建了两个终端,并使用 'tty' 获取其中一个的名称(我们称之为 'curses-terminal')。当在另一个终端中启动上述内容时,此名称将用作参数。
在 curses 终端中键入时,我希望键的代码出现在另一个终端中,而在 curses 终端中看不到任何内容。
相反,我看到一些字符扩散到 curses 终端中,而它们的代码没有显示在另一个终端中。当输入速度更快时,普通字符会发生这种情况,但尤其是使用箭头键和 ALT- 组合时,错误率是 >> 50%。
有没有我忘记的设置?
使用 G.M. 的提示,我能够可靠地获得所有输入。 运行
tail -f /dev/null
在 curses-terminal 中附加 ncurses 应用程序之前。
如果您(像我一样)想在 fopen
之后从您的应用程序中发送此命令,您可能会感到沮丧。