获取我正在写的终端列

时间:2013-03-16 17:24:18

标签: c terminal

在我的C程序中,我想知道光标在终端中的位置。例如,另一个程序可以在我之前编写一些东西,我想知道在终端的最后一列之前剩下多少空间,或者我不知道终端对某些特殊序列的反应(比如颜色:我可以写它但他们没有表现出来。)

有什么建议吗?

编辑:最好避免使用像ncurses这样的复杂解决方案(ncurses不知道光标直接在哪里:它计算它的位置)。

编辑2:我找到了一种方法,但它只适用于非图形终端:https://www.linuxquestions.org/questions/programming-9/get-cursor-position-in-c-947833/

编辑3:好的代码,它运行良好,但它使用/ dev / vcsaN(编辑2 的相同问题):http://dell9.ma.utexas.edu/cgi-bin/man-cgi?vcs+4

4 个答案:

答案 0 :(得分:1)

您可以尝试使用ncurses'getyx()

答案 1 :(得分:1)

Ncurses是一个强大的库,用于创建基于终端的文本界面。

tputs是一个简单的低级通用函数,用于操作终端功能。

任何一个都可以满足您的需求。

答案 2 :(得分:0)

此解决方案不是最佳的,因为它引用/ dev / vcsa *。希望这可以帮助别人。

#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
int main(void)
{
    int fd;
    char *device = "/dev/vcsa2";
    struct {unsigned char lines, cols, x, y;} scrn;
    fd = open(device, O_RDWR);
    if (fd < 0) {
        perror(device);
        exit(EXIT_FAILURE);
    }
    (void) read(fd, &scrn, 4);
    printf("%d %d\n", scrn.x, scrn.y);
    exit(EXIT_SUCCESS);
}

答案 3 :(得分:0)

一般来说,你应该记住你离开光标的位置。

但是,大多数终端都会回复DSR;设备状态请求。发送

CSI 6 n

您将收到CPR;光标位置报告,以

的形式
CSI Pl;Pc R

其中PlPc给出光标行和列号,索引为1。