gpt4 book ai didi

c - 在 Xterm Tektronix 4014 模式下隐藏光标

转载 作者:太空狗 更新时间:2023-10-29 11:36:16 25 4
gpt4 key购买 nike

我编写了以下程序来测试 Xterm Tektronix 4014 模式:

#define _BSD_SOURCE
#include <stdio.h>
#include <assert.h>
#include <unistd.h>

#define GS ((char)0x1D)
#define ESC ((char)0x1B)
#define FF ((char)0x0C)

static void xy (int x, int y, char* restrict xy) {
xy[3] = (x % 32) + 64; // x low
xy[2] = (x >> 5) + 32; // x high
xy[1] = (y % 32) + 96; // y low
xy[0] = (y >> 5) + 32; // y high
assert (x == 32 * (xy[2] - 32) + xy[3] - 64);
assert (y == 32 * (xy[0] - 32) + xy[1] - 96);
}

static void enter_graphic () {
printf("%c", GS);
}

static void leave_graphic () {
printf("\n");
}


static char pt[] = { ESC, 0, 0, 0, 0, 0, 0 };

/* This function is NOT threadsafe! (but why should it be ...) */
static void line_to (int x, int y, char pattern) {
pt[1] = pattern ? pattern : '`';
xy(x, y, pt + 2);
printf("%s", pt);
}

static void clear () {
printf("%c%c", ESC, FF);
}

static void randgrph (int dx, int dy) {
int x, y;
enter_graphic ();

for (int i = 0; i < 10; ++i) {
for (int j = 0; j < 10; ++j) {
x = (x + 7) % 200;
y = (y + 39) % 200;
line_to(x + dx, y + dy, 'b');
}
}

leave_graphic();
}

int main (void) {
int i, j;
for (i = 0; i < 200; ++i) {
for (j = 0; j < 200; ++j) {
clear();
randgrph(i, j);
usleep(1000000/25);
}
}
}

这似乎工作正常。 xy 创建一个坐标对,line_to 绘制一条线。这将清除屏幕,循环绘制一些虚线。至少在 Xterm 上,它看起来是“动画的”(我猜真正的 Tektronix 速度不够快,但这只是为了测试)。

但是:它始终显示文本光标。我怎样才能阻止它这样做?我找不到隐藏文本光标的 Tek 控制序列,只能隐藏图形光标,无论如何 xterm 中都不会显示它。

最佳答案

解决方法是控制终端需要设置为不回显输入。这可以通过 libncurses 中的 noecho() 来完成。

关于c - 在 Xterm Tektronix 4014 模式下隐藏光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35242335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com