Как получить ширину границы окна X из командной строки?

perl -l -a -F, -n -e 'print join ("," , reverse  @F)'  input.csv
2
18.12.2016, 23:30
2 ответа

В зависимости от вашего оконного менеджера, вы можете использовать xwininfo -tree -root , чтобы перечислить всю иерархию окон, а затем обработать дерево от вашего целевого окна до окна, обрамляющего оконный менеджер. цель.

Следующий скрипт делает это итеративно, выполняя xwininfo -tree только в целевом окне, чтобы найти родительское окно, затем повторяя процесс, шаг за шагом двигаясь вверх по дереву, пока родителем не станет корень. ( Идентификатор родительского окна: ... (корневое окно) ). Предполагается, что окно, имеющее корень в качестве родителя, является желаемым фреймом.

Добавляя -stats , вы легко получаете доступ к ширине и высоте окна. Например, в xterm , который составляет 724 на 1069 пикселей, мы получаем кадр размером 742 на 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

Вот сценарий, принимающий номер окна в качестве аргумента:

#!/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"

Он печатает общих границ w и h 18 18 , и вам нужно разделить их на 2, чтобы ширина границы предполагала симметрию. Если это не так, например с большой строкой заголовка вам также необходимо использовать разницу в смещениях x и y для вычисления верхней, нижней, левой и правой отдельных границ.

3
27.01.2020, 22:10

Метод обхода - это выгрузить содержимое с помощью xwd и затем измерить полученное изображение.

xwd -frame | xwdtopnm | head -2

xwdtppnm взят из пакета netpbm

0
27.01.2020, 22:10

Теги

Похожие вопросы