linux - 如何在 Linux 中获取终端的当前当前光标位置?
问题描述
我正在用 C 语言制作俄罗斯方块游戏。这个游戏必须在 Linux 上运行。我需要获取当前光标位置才能返回它们。我不想使用curses和ncurses。
point GetCurrentCursorPos(void)
{
point curPoint;
CONSOLE_SCREEN_BUFFER_INFO curInfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &curInfo);
curPoint.x=curInfo.dwCursorPosition.X;
curPoint.y=curInfo.dwCursorPosition.Y;
return curPoint;
}
这是我要更改的代码。
点结构看起来像这样。
typedef struct __point
{
int x;
int y;
} point;
我真的很感谢你的帮助!
解决方案
如果您真的不想使用 (n)curses,那么您将无法直接与终端交互。您可以使用 VT100 DSR 序列来请求光标位置报告——写入字符
"\e[6n"
到终端,它将以类似于以下的顺序回复:
"\e[12;34R"
表示光标位于第 12 行第 34 列(例如)。该序列与用户输入内联发送,因此您可能需要采取特殊预防措施以避免在尝试获取光标位置时消耗用户输入...</p>
不用说,这是一个笨拙的界面,你最好一开始就避免使用它。在代码中跟踪光标的位置,您无需询问终端它在哪里。
推荐阅读
- powershell - 使用 .csv 中的文件夹名称进行复制
- angularjs - 过滤器在 AngularJs 中不起作用
- curl - 在 AIX 面临的问题上从源代码构建 Curl
- python - Python,从区间中删除子区间
- python-3.x - cx_Freeze 转换的 exe:窗口立即关闭
- angular - HashLocationStrategy 和 Location Strategy Import.Angular 2 & Typescript 后未检测到路径
- c# - “底层连接已关闭:发送时发生意外错误。”。邮递员可以使用相同的标题
- r - 如何获取“tidyverse”包之类的冲突信息?
- android - 在本地测试 firebase 函数:如何将 android 应用程序指向本地运行的可调用函数?
- python - 运行简单的 Python Flask Web 应用程序时出错