设置 cygwin 终端的大小 window

Set size of a cygwin terminal window

我有一个小的 perl 脚本,它在 cygwin 终端中执行并打印出格式化的 table。 在默认 window 大小下,如果文本太长,cygwin 将插入一个换行符,从而破坏我的 table 的格式。 有没有办法从我的 perl 脚本中将 cygwin window 设置为更大的大小以避免此类问题?

如果您使用 mintty 作为您的终端仿真器(它一直是默认的 过去几年用于 Cygwin 的终端仿真器),您可以使用 ANSI 转义码 来操纵终端。

您可以通过 运行 执行以下 Perl 代码片段来更改终端仿真器的大小来对此进行测试 window:

# If terminal supports ANSI escape sequences
$lines = 80;
$columns = 100;
print "\e[8;$lines;${columns}t";

注意:如果 运行 在 screen window 中,这将不起作用,我不知道为什么。根据 screen 手册页,应该支持此转义序列。

说明

ANSI 转义序列的语法不是最容易阅读的,但这是 提供上述序列基础的文档。

\e 打印一个 Escape 字符,该字符开始 ANSI 转义序列。 这也称为 控制序列引入器 (CSI)

t结尾的具体序列来自这个list of xterm control 序列

CSI Ps ; Ps ; Ps t
          Window manipulation (from dtterm, as well as extensions).
          These controls may be disabled using the allowWindowOps
          resource.  Valid values for the first (and any additional
          parameters) are:
…
Ps = 8  ;  height ;  width -> Resize the text area to given
          height and width in characters.  Omitted parameters reuse the
          current height or width.  Zero parameters use the display's
          height or width.

你甚至不需要 Perl,你可以在 Bash 中做同样的事情:

echo -en "\e[8;35;100t";

或者为什么不用脚本:

#!/bin/bash
# minsize - A TTY re-size escape sequence for use with mintty Cygwin
# Usage: minsize <width> <height>
WIDTH=
HEIGHT=
echo -en "\e[8;${HEIGHT};${WIDTH}t";

请注意,在其他 *nixes 上有 ttysize 可用。

如果您碰巧是 运行 从快捷方式中可以向 mintty 命令添加标志的快捷方式,则可以设置大小。好处是它看起来更平滑,没有抽搐的调整大小。

$ /cygdrive/c/tools/cygwin/bin/mintty.exe --help
Usage: mintty [OPTION]... [ PROGRAM [ARG]... | - ]

Start a new terminal session running the specified program or the user's shell.
If a dash is given instead of a program, invoke the shell as a login shell.

Options:
  -c, --config FILE     Load specified config file (cf. -C or -o ThemeFile)
  -e, --exec ...        Treat remaining arguments as the command to execute
  -h, --hold never|start|error|always  Keep window open after command finishes
  -p, --position X,Y    Open window at specified coordinates
  -p, --position center|left|right|top|bottom  Open window at special position
  -p, --position @N     Open window on monitor N
  -s, --size COLS,ROWS  Set screen size in characters (also COLSxROWS)
  -s, --size maxwidth|maxheight  Set max screen size in given dimension
  -t, --title TITLE     Set window title (default: the invoked command) (cf. -T)
  -w, --window normal|min|max|full|hide  Set initial window state
  -i, --icon FILE[,IX]  Load window icon from file, optionally with index
  -l, --log FILE|-      Log output to file or stdout
      --nobidi|--nortl  Disable bidi (right-to-left support)
  -o, --option OPT=VAL  Set/Override config file option with given value
  -B, --Border frame|void  Use thin/no window border
  -R, --Reportpos s|o   Report window position (short/long) after exit
      --nopin           Make this instance not pinnable to taskbar
  -D, --daemon          Start new instance with Windows shortcut key
  -H, --help            Display help and exit
  -V, --version         Print version information and exit
See manual page for further command line options and configuration.