设置cygwin终端窗口的大小

che*_*ino 6 terminal perl cygwin ansi-escape mintty

我有一个小的perl脚本,它在cygwin终端中执行并打印出格式化的表.在默认窗口大小,如果文本太长,cygwin将插入一个换行符,从而破坏我的表的格式.有没有办法从我的perl脚本将cygwin窗口设置为更大的尺寸以避免这种问题?

Bru*_*sky 8

如果您碰巧在可以向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.
Run Code Online (Sandbox Code Playgroud)


not*_*bit 6

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

echo -en "\e[8;35;100t";
Run Code Online (Sandbox Code Playgroud)

或者为什么不写一个脚本:

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

请注意,在其他 *nix 上也ttysize可用。


Ant*_*ica 5

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

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

# If terminal supports ANSI escape sequences
$lines = 80;
$columns = 100;
print "\e[8;$lines;${columns}t";
Run Code Online (Sandbox Code Playgroud)

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

解释

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

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

以 结尾的特定序列t来自这个xterm 控制序列列表

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.
Run Code Online (Sandbox Code Playgroud)