回答:
xdotoolのヘルプで、2つのスイッチが同じであることがわかります(xdotoolバージョン3.20150503.1)。
--name check regexp_pattern agains the window name
--title DEPRECATED. Same as --name.
そのため、何もしません。私のxdotoolはウィンドウスタックを置き換えることであなたと同じことをするので、シェルスクリプトでそれを行いました。あなたが望むことをするシェルスクリプトは以下に提供されます:
pids=$(xdotool search --class "gvim")
for pid in $pids; do
name=$(xdotool getwindowname $pid)
if [[ $name == *"TODO"* ]]; then
#Do what you want, $pid is your sought for PID,
#matching both class gvim and TODO in title
fi
done
ifステートメントのアスタリスクは、の部分文字列照合を行うためにありTODO
、タイトルのどこにでも出現することができます。
これは、UNIXの方法に準拠した別のソリューションです。
一見すると、あなたのものほど美しくありません、@ t7ko:
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ | xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry | sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
でも我慢して!その中にいくつかの隠された美しさがあります。
つまり、それ
(これらの点が利点であるかどうかは状況に依存します-この側面を無視しましょう*)。
ステップごとに理解しやすくするために、同じコードをより構造化されたレイアウトで以下に示します。
ただし、インデントはコマンドを説明するためのものであることに注意してください。これはネストなどを示すものではなく、すべて線形のUNIXパイプラインです。
同じコマンド、パイプの後に分割する(|
):
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ |
xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry |
sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
完全なコマンドは、上記のように、画素の位置が得られるgvim
電流(おそらく仮想)画面の左上隅のように相対画素座標戻り、ウィンドウx,y
など42,433
、または多分を-5375,-3809
、それが4×4の仮想画面の最初の上にある場合、そして現在のものは右側のどこか下にあります。
とりあえず、コマンドを短くしてX11ウィンドウIDのみを見つけるようにします-多分それがOPに実際に必要なもののすべてです。
短縮されたコマンドパイプライン、各行に個別のシェルコマンド:
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ |
xargs -I{} xdotool search --all --pid {} --name 'TODO'
これで、読みやすくなりました。
xdotool \
search --onlyvisible --class 'gvim' \
getwindowpid %@ |
xargs -I{} \
xdotool search --all --pid {} --name 'TODO'
このxdotool
コマンドsearch
は、「class」を持つウィンドウを検索するために使用されgvim
、一部の「内部」ウィンドウは除外されます。結果はPID
の(プロセスID)としてリストされます。
それぞれについてPID
、xargs
別のを実行xdotool search
し、サンプルパターンの「名前」をTODO
確認しますPID
。
(念のため:で終わる\
行-継続行と呼ばれる-は実際にはで終わり\
、改行の前に空白がない必要があります。)
元のコマンドに戻ります。
xdotool \
search --onlyvisible --class 'gvim' \
getwindowpid %@ |
xargs -I{} \
xdotool \
search --all --pid {} --name 'TODO' \
getwindowgeometry |
sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
残りの部分には、位置を含むウィンドウに関するいくつかの詳細がリストされています。sed
コマンドのみが一致し、リターンx,y
位置の値。
例として、16番目の仮想画面(4 x 4)の上部でコマンドを実行し、gvim
画面1に"TODO"を指定します。
$ xdotool search --onlyvisible --class 'gvim' getwindowpid %@ | xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry | sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
-7653,-4732
*)免責事項:私は@ t7koのコードを好みます。たくさん!
--onlyvisible
はいいです。同様の問題で私を助けました。Thunderbirdは14のウィンドウで開始でき、デスクトップには1つまたは2つしかありません。他の目的は何なのかわかりません。ちなみに、現在のデスクトップにすぐに表示されるだけでなく、表示可能な手段のみを表示できます。
短くてエレガントな答え(これはを使用しますwmctrl
):
result=$(wmctrl -l | grep 'TODO - gvim' | grep -Eo '0x[0-9a-f]+')
結果のウィンドウIDは16進数であるため、10進数に変換する必要があります(で使用xdotool
)。
printf "%d\n" $result
その後、で何でもできますxdotool
。
wmctrl
マニュアルは-l
ウィンドウクラスを印刷せず、タイトルのみを印刷すると言っています。したがって、コードスニペットでは、「タイトルとクラスによる検索」という私の問題は解決されません。
wmctrl -lx
クラスを提供します。
xdotool
これはとても簡単な操作であり、エレガントに行う方法はありません。