xdotool memungkinkan Anda mencari windows menggunakan sub-perintah pencariannya. Saya perlu mencari jendela, yang memiliki kelas 'gvim' dan judul yang mengandung kata 'TODO'. Bagaimana saya melakukan ini?
Apa yang saya coba:
- Anda dapat melakukannya
xdotool search --name --class
, tetapi hanya menerima satu pola untuk nama dan judul. - xdotool mendukung perintah chaining, tetapi saya tidak dapat menemukan cara untuk menghubungkan dua panggilan pencarian - yang kedua hanya mengabaikan yang pertama.
xdotool
Menyebalkan ... ini adalah operasi yang sederhana dan tidak ada cara untuk melakukannya dengan elegan.Jawaban:
Bantuan xdotool saya memberi tahu saya bahwa kedua sakelar Anda sama (xdotool versi 3.20150503.1),
dan karena itu tidak melakukan apa pun. Xdotool saya melakukan hal yang sama seperti milik Anda dengan mengganti tumpukan jendela, jadi saya melakukannya dengan skrip shell. Script shell melakukan apa yang Anda inginkan disampaikan di bawah ini:
Tanda bintang dalam pernyataan if ada untuk melakukan pencocokan substring
TODO
, sehingga hal itu dapat terjadi di mana pun dalam judul.sumber
Saya dapat mengidentifikasi solusi pendek dan unix-way:
sumber
Berikut adalah solusi lain yang mengikuti cara UNIX!
Pada pandangan pertama, itu tidak seindah milikmu, @ t7ko:
Tapi bersabarlah! Ada beberapa keindahan tersembunyi di dalamnya.
Singkatnya, itu
(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 (
|
):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) sebagaix,y
, seperti42,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:
Sekarang, itu mulai dapat dibaca:
The
xdotool
Perintahsearch
ini digunakan untuk menemukan jendela dengan " kelas "gvim
, meninggalkan beberapa "internal" jendela. Hasilnya terdaftar sebagaiPID
(pengidentifikasi proses).Untuk masing-masing
PID
,xargs
jalankan yang lainxdotool search
, periksa "nama" untuk pola contoh kitaTODO
- setelah memeriksaPID
.(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:
Bagian yang tersisa mencantumkan beberapa detail tentang jendela, termasuk posisinya. The
sed
pertandingan perintah dan kembali hanyax,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:*) Penafian: Saya lebih suka kode @ t7ko. Banyak!
sumber
--onlyvisible
itu bagus. Membantu saya dengan masalah serupa. Thunderbird dapat dimulai dengan 14 jendela dan hanya satu atau dua yang ada di desktop. Saya tidak tahu untuk apa yang lainnya. BTW hanya sarana yang terlihat yang dapat ditampilkan - tidak hanya segera ditampilkan di desktop saat ini.Jawaban singkat dan elegan (yang menggunakan
wmctrl
):ID jendela yang dihasilkan dalam hex, jadi Anda perlu mengubahnya menjadi desimal (digunakan oleh
xdotool
):Maka Anda dapat melakukan apa pun dengan
xdotool
.sumber
wmctrl
manual mengatakan bahwa-l
tidak mencetak kelas jendela, hanya judul; jadi cuplikan kode Anda tidak menyelesaikan masalah saya "cari berdasarkan judul DAN kelas".wmctrl -lx
memang menyediakan kelas.