Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux终端中获取光标位置和终端大小 我在控制台的Linux C++应用程序中,我想得到终端(行+列)的大小和当前的光标位置。对于后者,我想我可以使用ANSI代码,但我不确定如何正确解析它。我也不知道如何得到窗口的大小_C++_Linux_Terminal - Fatal编程技术网

在linux终端中获取光标位置和终端大小 我在控制台的Linux C++应用程序中,我想得到终端(行+列)的大小和当前的光标位置。对于后者,我想我可以使用ANSI代码,但我不确定如何正确解析它。我也不知道如何得到窗口的大小

在linux终端中获取光标位置和终端大小 我在控制台的Linux C++应用程序中,我想得到终端(行+列)的大小和当前的光标位置。对于后者,我想我可以使用ANSI代码,但我不确定如何正确解析它。我也不知道如何得到窗口的大小,c++,linux,terminal,C++,Linux,Terminal,出于其他原因,目前不能选择切换到ncurses。获取大小的旧方法是使用libtermcap的termcap。新的是terminfo(+lib)。 我建议使用一个库来抽象这个(和所有其他终端相关的东西),并使用一个终端输出库,比如(n)curses 此外,这也适用于其他Unix系统。要获取大小,正确的方法是调用TIOCGWINSZioctl()。我的代码中的一个示例: struct winsize ws = { 0, 0, 0, 0 }; if(ioctl(tt->outfd, TIOCGW

出于其他原因,目前不能选择切换到ncurses。

获取大小的旧方法是使用libtermcap的termcap。新的是terminfo(+lib)。 我建议使用一个库来抽象这个(和所有其他终端相关的东西),并使用一个终端输出库,比如(n)curses


此外,这也适用于其他Unix系统。

要获取大小,正确的方法是调用
TIOCGWINSZ
ioctl()
。我的代码中的一个示例:

struct winsize ws = { 0, 0, 0, 0 };
if(ioctl(tt->outfd, TIOCGWINSZ, &ws) == -1)
  return;

/* ws.ws_row and ws.ws_col now give the size */
您首先需要执行此操作,然后在收到通知窗口更改的
SIGWINCH
信号后再次执行此操作

至于获取光标位置,这有点困难。某些终端允许通过DSR 6(设备状态报告)进行查询

DSR的回复来自CSI R,这里告诉我(基于1的)第62行第1列


但是,由于并非所有终端都支持DSR 6,因此最简单的方法可能是不依赖于能够查询光标位置,而是以绝对方式执行初始终端寻址,将光标准确地放置在您想要的位置。

您看过此解决方案吗?还有这个。它们很好地解决了终端行和列的问题;可能的STDOUT
$ echo -ne "\e[6n"; cat -v
^[[62;1R