NCURSES - 在 tty 模式下打印时错印新行
NCURSES - missprinting new lines when printing in tty mode
我有这个程序:
#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();
}
'ls -l' 命令输出中的每一行都会像这样打印错误:
drwxr-xr-x 2 root root 4096 Feb 11 09:22 bin
drwxr-xr-x 3 root root 4096 Mar 6 2016 boot
drwxr-xr-x 18 root root 3380 Feb 23 00:12 dev
drwxr-xr-x 113 root root 12288 Apr 25 10:45 etc
...
我尝试在 initscr()
行之前使用 def_shell_mode() (在我的例子中是 newterm() ),在 system("ls -l");
之前使用 reset_shell_mode() 但是问题仍然存在。
我可以解决这个问题的唯一方法是使用
system("reset");
就在 system("ls -l");
行之前。
有人知道真正的问题是什么吗?如果没有那个 "reset" 电话,我该如何解决?
谢谢!
您的程序两次将同一个终端初始化为 curses 模式。但是它第一次将终端设置为从熟模式开始的原始模式。第二次它已经处于原始模式。这些是独立的流并不重要(很多),但它们连接到同一个终端驱动程序。
初始化第二个屏幕(用于标准输出),然后执行 "restore",没有任何反应,因为它恢复到原始模式。
您可以 "fix" 在执行 endwin
之前切换回标准错误屏幕。副手,将 shell 模式终端设置从一个屏幕复制到另一个屏幕时会遇到问题。
我有这个程序:
#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();
}
'ls -l' 命令输出中的每一行都会像这样打印错误:
drwxr-xr-x 2 root root 4096 Feb 11 09:22 bin
drwxr-xr-x 3 root root 4096 Mar 6 2016 boot
drwxr-xr-x 18 root root 3380 Feb 23 00:12 dev
drwxr-xr-x 113 root root 12288 Apr 25 10:45 etc
...
我尝试在 initscr()
行之前使用 def_shell_mode() (在我的例子中是 newterm() ),在 system("ls -l");
之前使用 reset_shell_mode() 但是问题仍然存在。
我可以解决这个问题的唯一方法是使用
system("reset");
就在 system("ls -l");
行之前。
有人知道真正的问题是什么吗?如果没有那个 "reset" 电话,我该如何解决?
谢谢!
您的程序两次将同一个终端初始化为 curses 模式。但是它第一次将终端设置为从熟模式开始的原始模式。第二次它已经处于原始模式。这些是独立的流并不重要(很多),但它们连接到同一个终端驱动程序。
初始化第二个屏幕(用于标准输出),然后执行 "restore",没有任何反应,因为它恢复到原始模式。
您可以 "fix" 在执行 endwin
之前切换回标准错误屏幕。副手,将 shell 模式终端设置从一个屏幕复制到另一个屏幕时会遇到问题。