"curs_set ()" не удалось вернуть предыдущее состояние курсора - PullRequest
0 голосов
/ 03 мая 2018

Согласно справочной странице curs_set:

Процедура curs_set устанавливает состояние курсора на невидимый , нормальный или очень видимый для visibility, равный 0, 1 или 2 соответственно. Если терминал поддерживает запрашиваемая видимость, возвращается предыдущее состояние курсора; в противном случае возвращается ERR.

Но следующая простая программа не вернула предыдущее состояние:

[STEP 107] # cat curs_set.c
#include <stdio.h>
#include <curses.h>

int main()
{
    int ret;

    initscr();
    ret = curs_set(1);
    endwin();

    printf("curs_set() returned %d\n", ret);

    return 0;
}
[STEP 108] # gcc curs_set.c -lncurses
[STEP 109] # setterm -cursor off
[STEP 110] # ./a.out             <-- cursor invisible
curs_set() returned 1            <-- why not 0?
[STEP 111] # tput civis          <-- cursor visible
[STEP 112] # ./a.out             <-- cursor invisible
curs_set() returned 1            <-- why not 0?
[STEP 113] #                     <-- cursor visible

Я что-то пропустил?

1 Ответ

0 голосов
/ 03 мая 2018

Как напоминает @ vonaka в комментарии, на странице руководства также сказано (в отдельном разделе NOTES ):

И ncurses, и SVr4 будут вызывать curs_set() в endwin(), если curs_set() был вызван, чтобы сделать курсор отличным от normal , то есть либо invisible или очень хорошо видно . У ncurses нет возможности определить начальное состояние курсора для его восстановления.

...