我想在C程序中前后移动光标。我正在读取一个循环中的整行,但是我希望如果按下光标键,屏幕上的光标会改变位置,而不会阻塞循环。我试过了,getwch()
但它阻止了呼叫者,直到按下它为止。我正在寻找的是一种类似于bash提示的行为。我正在阅读与此类似的代码:
while (TRUE) {
printf("%s", PROMPT);
fgets(input, 1024, stdin);
do_something(input);
}
我正在尝试上面的功能像readline(PROMPT)
在readline.h
库上一样
使用termios
和控制台代码(兼容VT100-非便携式):
#include <stdio.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#define cursorforward(x) printf("\033[%dC", (x))
#define cursorbackward(x) printf("\033[%dD", (x))
#define KEY_ESCAPE 0x001b
#define KEY_ENTER 0x000a
#define KEY_UP 0x0105
#define KEY_DOWN 0x0106
#define KEY_LEFT 0x0107
#define KEY_RIGHT 0x0108
static struct termios term, oterm;
static int getch(void);
static int kbhit(void);
static int kbesc(void);
static int kbget(void);
static int getch(void)
{
int c = 0;
tcgetattr(0, &oterm);
memcpy(&term, &oterm, sizeof(term));
term.c_lflag &= ~(ICANON | ECHO);
term.c_cc[VMIN] = 1;
term.c_cc[VTIME] = 0;
tcsetattr(0, TCSANOW, &term);
c = getchar();
tcsetattr(0, TCSANOW, &oterm);
return c;
}
static int kbhit(void)
{
int c = 0;
tcgetattr(0, &oterm);
memcpy(&term, &oterm, sizeof(term));
term.c_lflag &= ~(ICANON | ECHO);
term.c_cc[VMIN] = 0;
term.c_cc[VTIME] = 1;
tcsetattr(0, TCSANOW, &term);
c = getchar();
tcsetattr(0, TCSANOW, &oterm);
if (c != -1) ungetc(c, stdin);
return ((c != -1) ? 1 : 0);
}
static int kbesc(void)
{
int c;
if (!kbhit()) return KEY_ESCAPE;
c = getch();
if (c == '[') {
switch (getch()) {
case 'A':
c = KEY_UP;
break;
case 'B':
c = KEY_DOWN;
break;
case 'C':
c = KEY_LEFT;
break;
case 'D':
c = KEY_RIGHT;
break;
default:
c = 0;
break;
}
} else {
c = 0;
}
if (c == 0) while (kbhit()) getch();
return c;
}
static int kbget(void)
{
int c;
c = getch();
return (c == KEY_ESCAPE) ? kbesc() : c;
}
int main(void)
{
int c;
while (1) {
c = kbget();
if (c == KEY_ENTER || c == KEY_ESCAPE || c == KEY_UP || c == KEY_DOWN) {
break;
} else
if (c == KEY_RIGHT) {
cursorbackward(1);
} else
if (c == KEY_LEFT) {
cursorforward(1);
} else {
putchar(c);
}
}
printf("\n");
return 0;
}
问题内容: 我想制作一个可以测量光标到组件中心的距离,然后将光标移回中心的应用程序(就像大多数PC视频游戏一样)。有没有人有什么建议? 问题答案: 机器人课可以帮您解决问题。以下是用于移动鼠标光标的示例代码:
我有一个特别的问题。用例是在搜索元素后转到搜索结果。但是,单击搜索按钮后,鼠标指针会无限旋转,直到有人移动鼠标指针。问题是,即使我应用了偏移移动,鼠标指针仍处于旋转位置。整个页面嵌套在一个框架中。移动偏移在以前的方法中是有效的,但不是为了这个,我附加了屏幕截图和代码,在屏幕截图中无法捕获鼠标指针 截图
欢迎进入第一章,这一章将学习简单的光标移动操作。 如果你已经有了一定基础,这部分可以略过,直接 G 到文档尾部按照操作进入下一章。 移动光标 单位级 h 向左一字符 j 下一行 k 上一行 l 向右一字符 单词级 w or W 向右移动到下一单词开头 e or E 向右移动到单词结尾 b or B 向左移动到单词开头 注意:所有小写单词都是以分词符作为单词界限,大写字母以空格作为界限 在下面字符块
我使用的是打开软包装的Atom。在gedit这样的大多数简单编辑器中,Ctrl-Down将用于跳到真正的下一行,忽略下面的任何换行(与Vim中的j和k相同)。 然而,在Atom中,这个捷径产生了移动线本身的结果,这对我来说不太有用。我想重新映射Ctrl-Up和Ctrl-Down,以将光标向上或向下移动到下一个真实行,如上所述。 我对编辑我的keymap文件很熟悉,但我找不到任何相当于向前移动一整行
我正在尝试在Docker容器中安装mongocxx驱动程序,第一步是使用package Manager安装mongo-c驱动程序。我精简的DockerFile: 完成此步骤后,我应该可以按照以下说明安装cxx驱动程序:https://mongodb.github.io/mongo-cxx-driver/mongocxx-v3/installation/ 有人有过在Docker实例中安装的经验吗?你
问题内容: 是否有任何网络浏览器支持动画光标? 我一直在网上搜索以将自定义光标添加到我的Web应用程序中。我发现很多非动画(.cur)和动画(.ani)游标,并使用正确的CSS,以便我的应用程序具有自定义游标!我尝试过的Web浏览器似乎不支持动画光标,我想知道是否有任何方法可以将动画光标放入我的Web应用程序中。 问题答案: 经过更多研究后,我认为目前尚不可能。截至2012年2月8日,似乎没有任何