Linux下怎么获取光标位置

qt或者x11都可以。获取相对于屏幕的位置。对所有程序都有效。获取光标位置。更新输入法窗口位置

代码参照如下:


#include <termios.h>
#include <unistd.h>
int console_try_to_get_cursor_position(int* x, int *y)
{
    fd_set readset;
    int success = 0;
    struct timeval time;
    struct termios term, initial_term;
#define STDIN_FILENO 0

    tcgetattr(STDIN_FILENO, &initial_term);
    term = initial_term;
    term.c_lflag &=~ICANON;
    term.c_lflag &=~ECHO;
    tcsetattr(STDIN_FILENO, TCSANOW, &term);

    //request position 获取光标命令
    printf("\33[6n");
    fflush(stdout);

    //wait 100ms for a terminal answer 等待100ms
    FD_ZERO(&readset);
    FD_SET(STDIN_FILENO, &readset);
    time.tv_sec = 0;
    time.tv_usec = 100000;

    if (select(STDIN_FILENO + 1, &readset, NULL, NULL, &time) == 1)
    if (scanf("\033[%d;%dR", x, y) == 2) //读取结果
        success = 1;

    //We set back the properties of the terminal
    tcsetattr(STDIN_FILENO, TCSADRAIN, &initial_term);

    return success;
}