【发布时间】:2017-04-17 07:41:30
【问题描述】:
像resize 这样的程序会询问终端的大小。最终他们会将一些 (ANSI) 转义序列发送到标准输出,并期望终端自己对这些转义序列做出反应,返回一些字节。
通过这个交互式 Python sn-p 可以看到机制的效果:
>>> print('\x1b[21;t')
Gnome-terminal 将在标准输入上明显插入与窗口标题相关的内容。
哪个脚本 sn-p 会触发终端写入它的大小(以字符为单位)? 如果大小返回不可见,则应进行一些简单的转换以查看某些内容。 Shell、Python、Perl,任何语言都可以。由于这将是特定于终端的,因此任何常见的终端仿真器都可以(例如 xterm、gnome-terminal、终结器...)。
澄清:我不关心告诉我大小的程序。我知道 TIOCGWINSZ,它不能通过串行线路工作。我想看看使用转义序列的代码,它实际上在串行线路上工作。
【问题讨论】:
-
stty程序报告列数和行数,您可以查看 GNU 源代码code.metager.de/source/xref/gnu/coreutils/src/…。它使用ioctl。 -
所以你对os.get_terminal_size不感兴趣?
标签: python terminal ansi ansi-escape terminal-emulator