【问题标题】:How to get current current cursor position of terminal in Linux?如何在 Linux 中获取终端的当前当前光标位置?
【发布时间】:2018-06-03 08:20:40
【问题描述】:

我正在用 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;

非常感谢您的帮助!

【问题讨论】:

  • 请解释您为什么不想使用ncurses。如果您仍然不这样做,请仔细研究其源代码以模仿它(恕我直言,这可能会浪费您的开发时间)。
  • 顺便说一句,您是否考虑过制作一些GUI 应用程序,在实践中使用诸如GTKQt 之类的工具包?
  • 另请阅读the tty demystified
  • @BasileStarynkevitch 那是因为老师不想使用它。遗憾的是,我没有使用 GTK 和 Qt 的经验。我刚开始学习 Linux,一切都很混乱。
  • @BasileStarynkevitch BTW,谢谢你的链接!

标签: linux gcc console


【解决方案1】:

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

"\e[6n"

到终端,它会以类似的顺序回复:

"\e[12;34R"

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

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

【讨论】:

  • 感谢您的评论。我可以分别获得 x 和 y 位置吗?我想在这个函数中设置 struct curPoint 像 curPoint.x = x 和 curPoint.y = y。
  • 可能比这更复杂,例如使用termcap,因为不确定每个终端是否都兼容 VT100(即使在实践中很有可能)
  • 能否得到最大允许位置,即终端的分辨率?
猜你喜欢
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 2022-10-05
相关资源
最近更新 更多