确定终端中的行数

3

我想写一个简短的D程序,用井号填充屏幕。以下是我的代码:

import std.stdio;
import std.process;
import std.conv;

void main(string[] args){
  auto lines =  environment.get("LINES");
  int line_count = to!int(lines); 
  for(int a = 1; a <= line_count; a++){
    writeln("######################################################################");
  }
}

我原本希望这会起作用,因为当我从终端执行"echo $LINES"时,它会打印出"47"。但是,当我通过rdmd在同一个会话中运行程序时,LINES为空。这是在Ubuntu Raring上的情况。有什么想法吗?

1
你能调用 stty size 吗? - Keith Thompson
是的,那个可以。将其添加为答案,我会选择它。 - RedMage
2个回答

7
如果您能够获取命令“stty size”的输出,那么比检查$LINES和$COLUMNS环境变量更可靠。
或者,您可以调用TIOCGWINSZ ioctl,如此答案中所述。

4
如果你只想要一个简单的解决方法,你可以将export LINES COLUMNS放在你的~/.bashrc中,使这些变量在你的程序中可用。
对于一个适当的解决方案,你可以尝试调用ioctl TIOCGWINSZ,或者找到一个支持查询终端的D库(如ncurses包装器)。

2
有两个这样的库,ycurses和dcruses。然而,最简单的解决方案是https://dev59.com/x3NA5IYBdhLWcg3wS7sm。 - DejanLekic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接