Berikut adalah solusi lain yang mengikuti cara UNIX!
Pada pandangan pertama, itu tidak seindah milikmu, @ 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'
Tapi bersabarlah! Ada beberapa keindahan tersembunyi di dalamnya.
Singkatnya, itu
- memiliki struktur linier , bukan struktur pohon, seperti satu bukan dua dimensi
- menggunakan sintaksis shell yang lebih terkenal .
- benar-benar menjawab pertanyaan Anda: Ini menempatkan jendela.
(Apakah poin-poin ini merupakan keuntungan tergantung pada konteks - mari kita abaikan aspek ini * .)
Saya akan menunjukkan kode yang sama dalam tata letak yang lebih terstruktur di bawah ini, untuk membuatnya lebih mudah untuk memahami langkah demi langkah.
Tetapi perhatikan indentasi adalah untuk menjelaskan perintah - itu tidak menunjukkan bersarang atau lebih, semua masih merupakan pipa UNIX linier.
Perintah yang sama, cukup bagi setelah pipa ( |
):
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'
Perintah penuh, seperti yang ditunjukkan di atas, memberikan lokasi piksel gvim
jendela, mengembalikan koordinat piksel relatif ke sudut kiri atas layar saat ini (mungkin virtual) sebagai x,y
, seperti 42,433
, atau mungkin -5375,-3809
ketika itu pada yang pertama dari empat oleh empat layar virtual , dan yang sekarang ada di suatu tempat di sisi kanan.
Untuk saat ini, saya akan mempersingkat perintah untuk hanya menemukan jendela ID X11 - mungkin hanya itu yang sebenarnya dibutuhkan oleh OP, tidak yakin:
Pipa perintah yang dipersingkat, perintah shell yang terpisah di setiap baris:
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ |
xargs -I{} xdotool search --all --pid {} --name 'TODO'
Sekarang, itu mulai dapat dibaca:
xdotool \
search --onlyvisible --class 'gvim' \
getwindowpid %@ |
xargs -I{} \
xdotool search --all --pid {} --name 'TODO'
The xdotool
Perintah search
ini digunakan untuk menemukan jendela dengan " kelas " gvim
, meninggalkan beberapa "internal" jendela. Hasilnya terdaftar sebagai PID
(pengidentifikasi proses).
Untuk masing-masing PID
, xargs
jalankan yang lain xdotool search
, periksa "nama" untuk pola contoh kita TODO
- setelah memeriksa PID
.
(Untuk berjaga-jaga: Baris yang berakhiran \
- disebut garis kelanjutan - harus benar-benar berakhir dengan \
dan tidak ada spasi sebelum baris baru.)
Sekarang kembali ke perintah aslinya:
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'
Bagian yang tersisa mencantumkan beberapa detail tentang jendela, termasuk posisinya. The sed
pertandingan perintah dan kembali hanya x,y
nilai posisi.
Sebagai contoh, menjalankan perintah di atas pada layar virtual ke-16 saya (dari 4 oleh 4), dengan "TODO" gvim
di layar 1:
$ 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
*) Penafian: Saya lebih suka kode @ t7ko. Banyak!
xdotool
Menyebalkan ... ini adalah operasi yang sederhana dan tidak ada cara untuk melakukannya dengan elegan.