1
votes

I can't find any method of changing the cursor color in ncurses forms library from green to anything else. Googling and searching the manpage for cursor or color hasn't helped. Anyone know how this is done?

1
It looks like there is no functionality to control the cursor color, You could use printf("\e]12;blue\a"); do this do the job? - user1129665
Totally does! Put it in an answer (with some explanation if you don't mind) and I will accept it. - evenex_code

1 Answers

2
votes

You can change the color by writing \e]12;COLOR\a or \033]12;COLOR\007, they all the same, here a simple example:

#include <stdio.h>
#include <unistd.h>

void cursor_set_color_string(const char *color) {
    printf("\e]12;%s\a", color);
    fflush(stdout);
}

int main(int argc, char **argv) {

    cursor_set_color_string("yellow"); sleep(1);
    cursor_set_color_string("gray"); sleep(1); 
    cursor_set_color_string("blue"); sleep(1);
    cursor_set_color_string("red"); sleep(1);
    cursor_set_color_string("brown"); sleep(1);

    return 0;
}

Here is a list of the color names: Xterm Colors.

It looks like you can also use RGB color in the form \e]12;#XXXXXX\a:

#include <stdio.h>
#include <unistd.h>

void cursor_set_color_rgb(unsigned char red,
                          unsigned char green,
                          unsigned char blue) {
    printf("\e]12;#%.2x%.2x%.2x\a", red, green, blue);
    fflush(stdout);
}

int main(int argc, char **argv) {

    cursor_set_color_rgb(0xff, 0xff, 0xff); sleep(1);
    cursor_set_color_rgb(0xff, 0xff, 0x00); sleep(1);
    cursor_set_color_rgb(0xff, 0x00, 0xff); sleep(1);
    cursor_set_color_rgb(0x00, 0xff, 0xff); sleep(1);

    return 0;
}