如何以编程方式确定终端窗口的字符尺寸?

时间:2011-04-22 19:52:09

标签: perl bash scripting terminal terminal-emulator

我正在编写一个脚本,它将在终端仿真器窗口中显示一个股票图表作为ASCII艺术品。我通常使用OSX / Terminal.app,但基于Linux的解决方案是可接受的替代方案。

我的脚本目前有屏幕宽度和高度的命令行参数(同样,在CHARACTERS中测量,而不是像素),默认值由我自己发明的环境变量决定。我希望这些脚本确定当前窗口的大小(IN CHARACTERS),并使用THAT作为默认值。我的17英寸Macbook Pro上的大窗口的典型尺寸可能是200 x 68。

这是一个perl脚本,但如果你知道其他语言的解决方案,请告诉我们!

TIA。

3 个答案:

答案 0 :(得分:7)

执行此操作的常用方法是tput linestput cols;这个查询按顺序:

  • $LINES$COLUMNS环境变量;
  • termios设置,当您调整窗口大小时由终端模拟器设置;
  • terminfo标识的$TERM说明。

答案 1 :(得分:2)

从C,您可以使用TIOCGWINSZ选项在ioctl上进行/dev/tty系统调用。

这由Term::ReadKey模块公开 - 来自man perlfaq8

  

如何获取屏幕尺寸?

     

如果您从CPAN安装了Term::ReadKey模块,则可以使用它来获取字符和像素的宽度和高度:

use Term::ReadKey;
($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();

答案 2 :(得分:1)

以交互方式运行时,bash定义$LINES$COLUMNS。否则,使用curses / ncurses检索终端维度。