在linux终端中获取光标位置和终端大小 我在控制台的Linux C++应用程序中,我想得到终端(行+列)的大小和当前的光标位置。对于后者,我想我可以使用ANSI代码,但我不确定如何正确解析它。我也不知道如何得到窗口的大小
出于其他原因,目前不能选择切换到ncurses。获取大小的旧方法是使用libtermcap的termcap。新的是terminfo(+lib)。 我建议使用一个库来抽象这个(和所有其他终端相关的东西),并使用一个终端输出库,比如(n)curses在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
此外,这也适用于其他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