首页 > 解决方案 > 如何在 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;

我真的很感谢你的帮助!

标签: linuxgccconsole

解决方案


如果您真的不想使用 (n)curses,那么您将无法直接与终端交互。您可以使用 VT100 DSR 序列来请求光标位置报告——写入字符

"\e[6n"

到终端,它将以类似于以下的顺序回复:

"\e[12;34R"

表示光标位于第 12 行第 34 列(例如)。该序列与用户输入内联发送,因此您可能需要采取特殊预防措施以避免在尝试获取光标位置时消耗用户输入...</p>

不用说,这是一个笨拙的界面,你最好一开始就避免使用它。在代码中跟踪光标的位置,您无需询问终端它在哪里。


推荐阅读