2014-04-01 50 views
4

我見過一些關於如何以列和行數獲得終端大小的文章和答案。我可以以像素爲單位獲取終端大小,或者等同於終端中使用的字體大小嗎?如何以像素爲單位獲取終端大小或字體大小?

(我寫等效因爲終端寬度[像素] =字體寬度[像素] *的列數。或者說是我的意思由終端寬度。)

我正在尋找一個這種方式可以在linux上與python 2一起工作,但我確實很感謝只適用於python 3的答案。謝謝!

回答

3

也許吧。如果您的終端軟件支持XTerm Control Sequences,那麼序列號\e[14t將以像素爲單位給出尺寸寬*高。

相關:

  • xtermctl - 放入外殼參數標準的xterm/dtterm的窗口控制代碼,方便使用。請注意,有些終端不支持所有組合。
1

因此,您已經知道如何獲取字符中的終端大小(here)。

恐怕這是不可能的。 TTY是一個文本終端,不能控制它在哪裏運行。 因此,如果您的控制檯程序在終端中執行,您無法知道它在哪裏顯示。

但是,您可以使用圖形模式來控制字體,顯示等。 但爲什麼終端?你可以使用GUI。

1

在linux中存儲終端信息的數據結構是terminfo。這是任何通用終端查詢將從中讀取的結構。它不包含像素信息,因爲這與它設計用於指定的純文本終端不相關。

如果您在X兼容終端中運行代碼,則可能使用控制代碼,但這很可能不是便攜式的。

2

另一種可能的方法是有限的支持,檢查ws_xpixel and ws_ypixel values of struct terminfo

一個Python代碼片段來查詢這些值:

import array, fcntl, termios 
buf = array.array('H', [0, 0, 0, 0]) 
fcntl.ioctl(1, termios.TIOCGWINSZ, buf) 
print(buf[2], buf[3]) 

在某些終端仿真程序這隻作品,別人總是報告0 0。見例如支持矩陣爲VTE feature request to set these fields

+0

任何想法爲什麼它不適用於標準輸出重定向? (即,與'read'一起使用時) – skrat

+0

「ioctl」的第一個參數是文件描述符。使用未重定向的號碼,例如如果您從終端讀取但寫入文件,則爲0。 – egmont

+0

請參閱https://asciinema.org/a/52IHAqeSgUDhiCgFgcusXJmjr – skrat

相關問題