Ncurses curs_set(0) tty

问题描述 投票:0回答:2

我的问题可能有一个简单的答案(或根本没有答案),但是什么可能导致 curs_set(0) (使光标不可见)在 tty 上失败,但在终端模拟器上失败?

我的测试代码是最简单的:

#include <ncurses.h>
#include <stdio.h>

int main()
{
    initscr(); curs_set(0);
    getch();
    endwin();
    return 0;
}
c ncurses tty
2个回答
1
投票

要么 tty 缺乏禁用光标的能力, 要么 ,用于 tty 的 terminfo 描述中错误定义(或丢失)了禁用光标的代码。具体来说,ncurses 尝试使用“civis”功能。您可以通过“infocmp”命令检查如何以及是否为您的 tty 定义了它。

这个问题的答案包含许多相关细节。


0
投票

curs_set
手册页说:

curs_set 例程将光标状态设置为 invisiblenormal非常明显 可见度分别等于 0、1 或 2。如果 终端支持请求的可见性、先前的光标状态 被退回;否则,返回ERR。

所需的终端功能在

terminfo
手册页中提到:

          cursor_invisible            civis     vi     make cursor
                                                       invisible
...
          cursor_normal               cnorm     ve     make cursor appear
                                                       normal (undo
                                                       civis/cvvis)
...
          cursor_visible              cvvis     vs     make cursor very
                                                       visible

linux
终端描述通常是 Linux 虚拟控制台的默认设置,包含必要的字符串:

$ infocmp -1 linux | grep 'c.*vis.*='
        civis=\E[?25l\E[?1c,
        cvvis=\E[?25h\E[?8c,

如果您将

TERM
设置为其他内容,则这些功能可能不存在。例如:

$ infocmp -1 vt100 | grep 'c.*vis.*='

什么也没找到。

© www.soinside.com 2019 - 2024. All rights reserved.