NCURSES-在tty模式下打印新行时打印错误
我有这个计划:NCURSES-在tty模式下打印新行时打印错误,c,ncurses,C,Ncurses,我有这个计划: #include <ncurses.h> SCREEN * sstderr; SCREEN * sstdout; int main() { sstderr = newterm(NULL, stderr, NULL); noecho(); sstdout = newterm(NULL, stdout, stdin); set_term(sstdout); addstr("PRESS A KEY"); getch();
#include <ncurses.h>
SCREEN * sstderr;
SCREEN * sstdout;
int main() {
sstderr = newterm(NULL, stderr, NULL);
noecho();
sstdout = newterm(NULL, stdout, stdin);
set_term(sstdout);
addstr("PRESS A KEY");
getch();
def_prog_mode();
endwin();
system("ls -l");
getchar();
reset_prog_mode();
refresh();
addstr("Press another key");
getch();
set_term(sstdout);
endwin();
set_term(sstderr);
endwin();
}
我尝试在initscr()
行之前使用def_shell_mode()(在我的例子中是newterm()),并在系统(“ls-l”)之前重置_shell_mode()代码>但问题仍然存在。
我唯一能解决这个问题的方法就是使用
system("reset");
就在系统(“ls-l”)之前代码>行
有人知道真正的问题是什么,我如何在没有“重置”呼叫的情况下修复它吗
谢谢 您的程序将同一终端初始化为curses模式两次。但它第一次将终端设置为原始模式,从烹调模式开始。第二次它已经处于原始模式。这些是独立的流并不重要,但它们连接到同一个终端驱动程序
初始化第二个屏幕(用于标准输出),然后执行“还原”,由于还原到原始模式,因此不会发生任何事情
在执行endwin
之前,您可以通过切换回标准错误屏幕来“修复”它。顺便说一句,将shell模式终端设置从一个屏幕复制到另一个屏幕时会遇到问题。除了注意到您正在使用getchar(不是curses函数)之外,包含该片段的简单程序会按预期工作。也许一个更完整的例子会有所帮助。此外,如果您使用Cygwin,它因楼梯问题而臭名昭著。是的,我确实在那里使用getchar,因为我假设我脱离了curses模式(在tty模式下,直到reset_prog_mode()指令)…将程序源代码更新为一个完整的程序,显示了所描述的行为..我不熟悉挂起/恢复ncurses,但是我怀疑ls
的输出大小是针对ncurses字符和终端宽度的,这会导致行的长度超过终端在“tty”模式下显示的长度,并且随后会将每行的末端包裹起来,这被视为与后续每行的水平位移。(这只是一个有根据的猜测,我怀疑这与正在发生的事情很接近)
system("reset");