curses 中的多个游标

Multiple cursors in curses

我在 C/C++ 中使用 ncurses。我试图获得多个闪烁的光标,但到目前为止我一直没有成功。在 ncurses 中有可能吗?也欢迎对支持此功能的类似库(C/C++ 或 Python)提出建议。

更新:"cursor" 我的意思是闪烁的 block/line 字符,而不是从键盘接收输入的东西。

简短:不,你不能那样做

long: curses 只能要求终端做事(而终端不会那样做)。

curses 显示中的每个 window 都可以有自己的光标 位置 ,但终端一次只会显示一个光标。如果您要求输入,例如,使用 getch,curses 会将终端的 光标 放在您移动它的 window 的最后位置。

如已接受的答案中所述,您不能实际上在您的终端中有多个光标,但您可以模拟它。

使用 ncurses,您可以隐藏实际的光标并使用 chgat(3) 系列函数来更改您希望显示为光标的字符的属性。通过在多个位置执行此操作,您的程序似乎使用了多个游标。

这个程序高亮显示了 "Hello" 中的 "H" 和世界中的 "w" 反向高亮,看起来就像光标悬停在每个字符上一样。然后它会休眠 5 秒并退出。

#include <ncurses.h>
#include <unistd.h>

int main() {
    initscr();
    noecho();
    curs_set(FALSE);

    mvprintw(0, 0, "Hello, world!");
    mvchgat(0, 0, 1, A_REVERSE, 0, NULL);
    mvchgat(0, 7, 1, A_REVERSE, 0, NULL);
    refresh();

    sleep(5);

    endwin();
}