X11
如何從命令行獲取 X 視窗邊框寬度?
我試過
xdotool
,xwininfo
和xprop
,但它們似乎都返回了視窗的內容大小,不包括邊框寬度。有沒有可以找到這個邊框寬度的命令行工具?並且希望該工具可以在不同的 EWMH 兼容視窗管理器上執行。
根據您的視窗管理器,您可以使用
xwininfo -tree -root
列出所有視窗層次結構,然後將樹從目標視窗向上處理到視窗管理器放置在目標周圍的視窗框架。以下腳本迭代地執行此操作,
xwininfo -tree
僅在目標視窗上執行以查找父視窗,然後重複該過程逐步向上移動樹,直到父視窗成為根視窗 (Parent window id: ...(the root window)
)。它假定以根為父的視窗是想要的框架。通過添加
-stats
,您可以輕鬆訪問視窗的寬度和高度。例如,在xterm
724 x 1069 像素的幀中,我們得到一個 742 x 1087 像素的幀:$ xwininfo -tree -stats -id $WINDOWID Parent window id: 0x8002ff (has no name) ... Width: 724 Height: 1069 $ xwininfo -tree -stats -id 0x8002ff Parent window id: 0x8002fe (has no name) ... Width: 724 Height: 1069 $ xwininfo -tree -stats -id 0x8002fe Parent window id: 0xc1 (the root window) (has no name) ... Width: 742 Height: 1087
這是腳本,以視窗 ID 號作為參數:
#!/bin/bash # http://unix.stackexchange.com/a/331516/119298 getwh(){ xwininfo -tree -stats -id "$id" | awk '/Parent window id:/{ parent = ($0~/the root window/)?0:$4; } / Width:/ { w = $2 } / Height:/ { h = $2 } END { printf "%s %d %d\n",parent,w,h }' } id=${1:-${WINDOWID?}} set -- $(getwh "$id") w=$2 h=$3 while id=$1 [ "$id" != 0 ] do set -- $(getwh "$id") done let bw=$2-w bh=$3-h echo "total border w and h $bw $bh"
它列印
total border w and h 18 18
,您需要將它們除以 2 以使邊框寬度假設對稱。如果不是這種情況,例如使用大標題欄,您還需要使用 x 和 y 偏移的差異來計算上、下、左、右各個邊框。