Bashでタイトルバーの高さを取得する方法

Bashでタイトルバーの高さを取得する方法

私はさまざまなLinux Mint PCのタイトルバーの高さを理解することに関連するペットプロジェクトを進めています。私は答えを探していましたが、それを正確に見つけることができないようです。見つけるのは簡単だと確信していますが、どこですか!

現在、Mint 21.3を実行しており、xdotoolがインストールされています。私は初めてBashスクリプトに遭遇し、いくつかの問題があり、私には簡単なことはありませんでしたが、わずかな調査と約8時間の試行錯誤の後にこれを見つけました...


sleep .05
id=$(xdotool getactivewindow)
xdotool windowmove $id 0 0
sleep .05
y=$(xprop -root '_NET_WORKAREA')
y=$(($(xwininfo -id $id|grep -oP "(?<=Absolute upper-left Y:).*") - $(echo ${y#=}|cut -d, -f2)))

read -n1 -p "Title Bar = $y"

これはうまくいきますsleep .05。 xdotool、xprop、およびwininfoが速すぎて実行され、ウィンドウの移動が失敗したり、「0」が発生しないようにするために、これら2つを追加する必要がありました。これは追加する前に時々起こりました。それらを。おそらくより簡単な方法があります。教えてくださいecho $TITLEBAR

id=$(xdotool getactivewindow)この時点でまだアクティブなウィンドウである前のウィンドウのIDを提供しているため、スクリプトの起動時に眠りに落ち、端末がアクティブなウィンドウになるのを待つ必要があります。 。 Bashは私にとってとても新しいものなので、どんなヒントやコツでも大歓迎です。変数に引用符を追加します。${y#=}変数「y」から「=」の前のすべての項目を削除する必要があります。おそらく "="の後ろの値を取得するより良い方法がたくさんあります。しかし、これが私が知っている唯一の方法です。私のスクリプトの読みやすさについては、すべてを圧縮する傾向があります。 (申し訳ありません!)結果を表示するために最後に読んだのは、結果を表示するために数週間前にスクリプトを一時停止したことと同じです。初心者に「Hello World」が動作するようにしてください。動作しますが、ウィンドウが起動し、黒い点滅で閉じます。何が問題なのかわかりません。

提案どおりに変更し、今回が2回目の試みです。

#!/bin/bash

id=$(xdotool getactivewindow)
echo "Id = "$id" Wrong One!!"

sleep .08 # .05 was not quite enough, it occasionally failed.
id=$(xdotool getactivewindow)
echo -e "Id = "$id"\n"

xdotool windowmove $id 0 0

sleep .05 # Prevent xprop from giving pre-move results.
workarea=$(xprop -root "_NET_WORKAREA")

# Strip everything before the values.
workarea=${workarea#*=}

top_panel=$(echo "$workarea" | cut -d, -f2)
echo "Top Panel = "$top_panel

# Get height of top panel + header bar
y=$(xwininfo -id "$id" | grep -oP "(?<=Absolute upper-left Y:).*")
echo -e "Top panel + Header Bar ="$y"\n"

headerbar=$(( y - top_panel ))
echo "Title Bar = "$headerbar"px"

read -n1 -p "Any key to exit"

結果:
ID = 46137366エラー! !
Id = 83886086
トップパネル = 32
トップパネル + タイトルバー = 82
タイトルバー = 50px

終了するには任意のキーを使用してください

小さな数字を見つけるには多くの機器が必要なようです! 「簡単な」方法は何ですか?

これは私の元のスクリプトの更新版です。

#!/bin/bash

sleep .08 # Allow time for the active window to become this window.
id=$(xdotool getactivewindow)

# Move the window to the top of the screen so that xprop gives
# the exact size of the window header bar including top panel.
xdotool windowmove "$id" "0" "0"

sleep .05 # Allow time for xdotool to move this window.
xprop=$(xprop -root "_NET_WORKAREA")

# Cut out the desired value and trim the space before the value.
top_panel=$(echo "$xprop" | cut -d, -f2 | xargs)

# Get the size between the top of screen and the start of this window.
xwininfo=$(xwininfo -id "$id" | grep -oP "(?<=Absolute upper-left Y:).*")
headerbar=$(( xwininfo - top_panel ))

echo -e "Top panel  = $top_panel""px""\nHeader Bar = $headerbar""px""\n"

# Remove the variables from memory.
unset id xprop top_panel xwininfo headerbar
read -n1 -p "Any key to exit."

さて、スクリプトの内容に近づくでしょう!それでも私は難読症があり、行を読みにくいので、以下のようにスクリプトに引用符がなく、空白のない変数を使用します echo -e "Top panel = $top_panel""px""\nHeader Bar = $headerbar""px""\n"

bashスクリプトで誤って使用されたが、難読症の人に役立つ引用

ベストアンサー1

おすすめ記事