Manajemen jendela alternatif di Linux

Saya adalah salah satu dari mereka yang memakai tata letak switching Caps Lock karena saya terlalu malas untuk menekan 2 tombol ketika Anda dapat menekan satu. Saya bahkan ingin 2 kunci yang tidak perlu: Saya akan menggunakan satu untuk mengaktifkan tata letak bahasa Inggris, dan yang kedua untuk bahasa Rusia. Tetapi kunci kedua yang tidak perlu adalah panggilan ke menu konteks, yang sangat tidak perlu sehingga dipotong oleh banyak produsen laptop. Jadi, Anda harus puas dengan apa yang Anda miliki.


Dan ketika saya beralih windows, saya tidak ingin mencari ikon mereka di taskbar, untuk melihat nama-nama ketika menggulir melalui Alt + Tab , untuk menggulir melalui desktop, dll. Saya ingin menekan kombinasi tombol (idealnya, ada satu, tetapi tidak ada kunci yang tidak perlu gratis) ) dan segera masuk ke jendela yang saya butuhkan. Misalnya, seperti ini:


  • Alt + F: Firefox
  • Alt + D: Firefox (Penjelajahan Pribadi)
  • Alt + T: Terminal
  • Alt + M: Kalkulator
  • Alt + E: Ide IntelliJ
  • dll.

Selain itu, dengan menekan, misalnya, Alt + M, saya ingin melihat kalkulator, terlepas dari apakah program ini sedang berjalan. Jika sedang berjalan, maka jendelanya perlu diberikan fokus, dan jika tidak, mulai program yang diinginkan dan transfer fokus saat dimuat.


Untuk kasus-kasus yang tidak dicakup oleh skenario sebelumnya, saya ingin memiliki pintasan keyboard universal yang Anda dapat dengan mudah menetapkan jendela yang terbuka. Misalnya, saya memiliki 10 kombinasi yang ditetapkan dari Alt + 1 ke Alt + 0 yang tidak terikat ke program apa pun. Saya cukup menekan Alt + 1 dan jendela yang saat ini dalam fokus akan menerima fokus ketika Alt + 1 ditekan.


Di bawah potongan, deskripsi pasangan lebih banyak fitur dan jawaban untuk melakukan ini. Tetapi saya akan segera memperingatkan Anda bahwa penyesuaian seperti itu "untuk diri sendiri" dapat menyebabkan kecanduan yang kuat dan bahkan melanggar jika perlu, gunakan Windows, Mac OS atau bahkan komputer orang lain dengan Linux.


Bahkan, jika Anda memikirkannya, maka kami tidak menggunakan banyak program setiap hari. Peramban, terminal, IDE, semacam messenger, pengelola file, kalkulator dan, mungkin, itu hampir semuanya. Tidak banyak kombinasi tombol yang diperlukan untuk mencakup 95% tugas sehari-hari.


Untuk program yang memiliki banyak jendela terbuka, salah satunya dapat ditetapkan sebagai yang utama. Misalnya, beberapa jendela IntelliJ Idea terbuka, ditugaskan untuk Alt + E. Dalam kondisi normal, menekan Alt + E akan membuka beberapa jendela program ini, kemungkinan besar yang dibuka terlebih dahulu. Namun, jika Anda menekan Alt + E ketika salah satu jendela program ini sudah dalam fokus, maka jendela ini akan ditetapkan sebagai jendela utama dan fokus akan ditransfer ke sana setelah menekan kombinasi berikutnya.


Jendela utama dapat dipindahkan. Untuk melakukan ini, pertama-tama Anda perlu mengatur ulang kombinasi, dan kemudian menetapkan jendela lain untuk itu sebagai yang utama. Untuk mengatur ulang kombinasi, Anda perlu menekan kombinasi itu sendiri, dan kemudian kombinasi reset khusus, saya telah menetapkannya untuk Alt + Backspace . Ini akan memunculkan skrip yang akan membatalkan penetapan jendela utama untuk kombinasi sebelumnya. Dan kemudian Anda dapat menetapkan jendela utama baru seperti yang dijelaskan dalam paragraf sebelumnya. Menyetel ulang jendela terikat ke kombinasi universal serupa.


Pengantar itu ternyata panjang, tetapi saya ingin terlebih dahulu memberi tahu apa yang akan kami lakukan, dan kemudian menjelaskan bagaimana melakukannya.


Bagi yang bosan membaca


Singkatnya, tautan ke skrip di akhir artikel.


Namun tetap saja, itu tidak akan berfungsi dan segera menginstal dan menggunakan. Pertama, Anda harus mencari tahu bagaimana skrip menemukan jendela yang tepat. Tanpa ini, tidak akan bekerja untuk memberi tahu skrip di mana harus fokus. Dan Anda perlu memahami apa yang harus dilakukan jika tiba-tiba jendela yang cocok tidak ditemukan.


Dan saya tidak akan fokus pada cara mengkonfigurasi eksekusi skrip dengan menekan kombinasi tombol. Misalnya, di KDE, ini ada di Pengaturan Sistem → Pintasan → Pintasan Khusus. Di window manager lain, ini juga harus.


Memperkenalkan wmctrl


Wmctrl adalah utilitas konsol untuk berinteraksi dengan X Window Manager. Ini adalah program skrip kunci. Mari kita lihat sekilas bagaimana Anda bisa menggunakannya.


Pertama, daftarkan jendela yang terbuka:


$ wmctrl -lx 0x01e0000e -1 plasmashell.plasmashell N/A Desktop — Plasma 0x01e0001e -1 plasmashell.plasmashell N/A Plasma 0x03a00001 0 skype.Skype N/A Skype 0x04400003 0 Navigator.Firefox N/A Google  - Mozilla Firefox 0x04400218 0 Navigator.Firefox N/A     /  - Mozilla Firefox (Private Browsing) ... 

Opsi -l menampilkan daftar semua jendela yang terbuka, dan -x menambahkan nama kelas ( skype.Skype , Navigator.Firefox , dll.) Ke output. Kita akan membutuhkan id jendela (kolom 1), nama kelas (kolom 3) dan nama jendela (kolom terakhir).


Anda dapat mencoba mengaktifkan beberapa jendela menggunakan opsi -a :


 $ wmctrl -a skype.Skype -x 

Jika semuanya berjalan sesuai rencana, maka jendela Skype akan muncul di layar. Jika Anda menggunakan opsi -i alih-alih opsi -x , Anda dapat menentukan id jendela alih-alih nama kelas. Dengan id, masalahnya adalah id jendela berubah setiap kali aplikasi dimulai dan kita tidak bisa mengetahuinya terlebih dahulu. Di sisi lain, atribut ini secara unik menunjukkan jendela, yang mungkin penting ketika aplikasi membuka lebih dari satu jendela. Tentang ini sedikit lebih jauh.


Pada tahap ini, kita harus ingat bahwa kita akan mencari jendela yang diinginkan menggunakan regex sesuai dengan output dari wmctrl -lx . Tetapi ini tidak berarti bahwa kita harus menggunakan sesuatu yang rumit. Biasanya nama kelas atau nama jendela sudah cukup.


Pada prinsipnya, ide dasarnya seharusnya sudah jelas. Dalam pengaturan hotkey / pintasan global untuk window manager Anda, kami mengonfigurasi kombinasi yang diinginkan untuk menjalankan skrip.


Cara menggunakan skrip


Pertama, Anda perlu menginstal utilitas konsol wmctrl dan xdotool :


 $ sudo apt-get install wmctrl xdotool 

Selanjutnya Anda perlu mengunduh skrip dan menambahkannya ke $ PATH . Saya biasanya meletakkannya di ~ / bin :


 $ cd ~/bin $ git clone https://github.com/masyamandev/Showwin-script.git $ ln -s ./Showwin-script/showwin showwin $ ln -s ./Showwin-script/showwinDetach showwinDetach 

Jika tidak ada direktori ~ / bin , maka ia harus dibuat dan di-boot ulang (atau login), jika tidak ~ / bin tidak akan masuk ke $ PATH . Jika semuanya dilakukan dengan benar, maka skrip harus dapat diakses dari konsol dan penyelesaian Tab harus bekerja.


Script showwin utama mengambil 2 parameter: yang pertama adalah regex, dimana kita akan mencari jendela yang diinginkan, dan parameter kedua adalah perintah yang harus dieksekusi jika jendela yang diinginkan tidak ditemukan.


Anda dapat mencoba menjalankan skrip, misalnya:


 $ showwin "Mozilla Firefox$" firefox 

Jika Firefox diinstal, fokus harus diberikan ke jendelanya. Bahkan jika Firefox tidak berjalan, itu seharusnya sudah dimulai.


Jika ternyata, maka Anda dapat mencoba mengkonfigurasi eksekusi perintah ke kombinasi. Dalam pengaturan tombol pintas / pintasan global, tambahkan:


  • Alt + F: showwin firefox "Mozilla Firefox $"
  • Alt + D: showwin "Mozilla Firefox (Penjelajahan Pribadi) $" "firefox -private-window"
  • Alt + C: browser kromium showwin "kromium. Browser kromium N *"
  • Alt + X: showwin "chromium-browser.Chromium-browser I *" "chromium-browser -incognito"
  • Alt + S: showwin "skype.Skype" skypeforlinux
  • Alt + E: showwin "jetbrains-idea" idea.sh

Dan seterusnya. Kombinasi kunci dan perangkat lunak yang dapat dikonfigurasikan oleh semua orang sesuai dengan kebutuhannya.
Jika semuanya ternyata benar, maka menurut kombinasi di atas, kita dapat beralih di antara windows dengan keystroke sederhana.


Saya akan mengecewakan pecinta chrome: itu adalah penyamaran untuk membedakan jendela biasa dari keluaran wmctrl , mereka memiliki nama kelas dan header jendela yang sama. Dalam regex yang diusulkan, karakter N * dan I * hanya diperlukan agar pelanggan tetap ini berbeda satu sama lain dan mereka dapat diberi jendela yang berbeda sebagai yang utama.


Untuk mengatur ulang jendela utama dari kombinasi sebelumnya (sebenarnya untuk regex, yang showwin dipanggil terakhir kali), Anda perlu memanggil skrip showwinDetach . Saya memiliki skrip ini ditugaskan untuk kombinasi tombol Alt + Backspace .


Script showwin memiliki fitur lain. Ketika dipanggil dengan satu parameter (dalam hal ini, parameter hanyalah pengidentifikasi), itu tidak memeriksa regex sama sekali, dan menganggap semua jendela cocok. Dalam dirinya sendiri, ini tampaknya tidak berguna, bagaimanapun, dengan cara ini kita dapat menetapkan jendela apa saja sebagai jendela utama dan dengan cepat beralih ke jendela khusus ini.


Saya telah mengkonfigurasi kombinasi tersebut:


  • Alt + 1: showwin "CustomKey1"
  • Alt + 2: showwin "CustomKey2"
  • ...
  • Alt + 0: showwin "CustomKey0"
  • Alt + Backspace: showwinDetach

Dengan cara ini saya dapat mengikat semua windows ke Alt + 1 ... Alt + 0 kombinasi. Hanya dengan menekan Alt + 1 saya mengikat jendela saat ini ke kombinasi ini. Saya dapat melepas ikatan dengan menekan Alt + 1 , dan kemudian Alt + Backspace . Atau tutup jendelanya, ini juga berfungsi.


Selanjutnya saya akan memberi tahu beberapa detail teknis. Anda tidak dapat membacanya, tetapi coba konfigurasikan dan lihat. Tetapi saya masih merekomendasikan untuk memahami skrip orang lain sebelum menjalankannya di komputer Anda :).


Bagaimana membedakan windows yang berbeda dari satu aplikasi


Pada prinsipnya, contoh pertama dari "wmctrl -a skype.Skype -x" bekerja dan dapat digunakan. Tetapi mari kita lihat kembali contoh dengan Firefox, di mana 2 jendela terbuka:


 0x04400003 0 Navigator.Firefox N/A Google  - Mozilla Firefox 0x04400218 0 Navigator.Firefox N/A     /  - Mozilla Firefox (Private Browsing) 

Jendela pertama adalah mode normal, dan yang kedua adalah Penjelajahan Pribadi. Saya ingin mempertimbangkan windows ini sebagai aplikasi yang berbeda dan beralih ke mereka menggunakan kombinasi tombol yang berbeda.


Anda perlu menyulitkan skrip yang mengaktifkan windows. Saya menggunakan solusi ini: menampilkan daftar semua jendela, buat grep dengan regex, ambil baris pertama dengan kepala , dapatkan kolom pertama (ini akan menjadi id jendela) dengan cut , beralih ke jendela dengan id.


Seharusnya ada lelucon tentang ekspresi reguler dan dua masalah, tetapi sebenarnya saya tidak menggunakan sesuatu yang rumit. Saya perlu pelanggan tetap sehingga saya dapat menunjukkan akhir dari garis (karakter "$") dan membedakan antara "Mozilla Firefox $" dan "Mozilla Firefox (Penjelajahan Pribadi) $".


Perintahnya terlihat seperti ini:


 $ wmctrl -i -a `wmctrl -lx | grep -i "Mozilla Firefox$" | head -1 | cut -d" " -f1` 

Di sini Anda sudah dapat menebak tentang fitur kedua skrip: jika grep tidak mengembalikan apa pun, maka aplikasi yang diinginkan tidak terbuka dan Anda harus memulainya dengan menjalankan perintah dari parameter kedua. Dan kemudian secara berkala memeriksa apakah jendela kanan telah dibuka untuk memberikan fokus. Saya tidak akan fokus pada ini, mereka yang membutuhkannya akan melihat sumbernya.


Ketika jendela aplikasi tidak dapat dibedakan


Jadi, kami telah belajar mentransfer fokus ke jendela aplikasi yang diinginkan. Tetapi bagaimana jika lebih dari satu jendela aplikasi terbuka? Mana yang harus saya fokuskan? Skrip di atas akan diteruskan, kemungkinan besar, ke jendela pertama yang terbuka. Namun, kami menginginkan lebih banyak fleksibilitas. Saya ingin dapat mengingat jendela mana yang kami butuhkan dan beralih ke jendela ini.


Idenya adalah ini: Jika kita ingin mengingat jendela tertentu untuk kombinasi tombol, maka kita perlu menekan kombinasi ini ketika jendela yang diinginkan dalam fokus. Di masa mendatang, ketika Anda mengklik kombinasi ini, fokus akan diberikan ke jendela khusus ini. Sampai jendela ditutup atau kita melakukan reset untuk kombinasi script showwinDetach ini.


Algoritma script showwin adalah sesuatu seperti ini:


  • Periksa untuk melihat apakah kita sebelumnya ingat id dari jendela yang fokusnya harus dilewati.
    Jika Anda ingat dan jendela seperti itu masih ada, maka kami mentransfer fokus ke sana dan keluar.
  • Kami melihat jendela mana yang saat ini dalam fokus, dan jika itu sesuai dengan permintaan kami, maka kami akan ingat id untuk pergi ke sana di masa depan dan keluar.
  • Kami melewati setidaknya beberapa jendela yang sesuai jika ada atau membuka aplikasi yang diinginkan.

Anda dapat mengetahui jendela mana yang saat ini dalam fokus menggunakan utilitas konsol xdotool, mengubah outputnya ke format heksadesimal:


 $ printf "0x%08x" `xdotool getwindowfocus` 

Mengingat sesuatu dalam bash adalah cara termudah untuk membuat file dalam sistem file virtual di memori. Di Ubuntu, ini terhubung secara default di / dev / shm / . Saya tidak bisa mengatakan apa-apa tentang distribusi lain, saya harap ini juga ada. Anda dapat melihat perintah:


 $ mount -l | grep tmpfs 

Script akan membuat direktori kosong di folder ini, seperti ini: / dev / shm / $ USER / showwin / $ SEARCH_REGEX / $ WINDOW_ID . Selain itu, dengan setiap panggilan, itu akan membuat symlink / dev / shm / $ USER / showwin / showwin_last on / dev / shm / $ USER / showwin / $ SEARCH_REGEX . Ini akan diperlukan untuk menghapus id jendela untuk kombinasi tertentu jika perlu menggunakan skrip showwinDetach .


Apa yang bisa diperbaiki


Pertama, skrip harus dikonfigurasi dengan tangan. Tentunya, karena kebutuhan untuk mempelajari dan melakukan banyak hal dengan tangan Anda, banyak dari Anda bahkan tidak akan mencoba untuk mengkonfigurasi sistem. Jika mungkin untuk hanya meletakkan paket dan mengkonfigurasi semuanya lebih mudah, maka mungkin itu akan mendapatkan popularitas. Dan di sana, lihat distribusi standar, mereka akan merusak aplikasi.


Dan mungkin lebih mudah bisa dilakukan. Jika id jendela memungkinkan Anda menemukan id proses yang membuatnya, dan id proses untuk mengetahui tim mana yang membuatnya, maka Anda dapat mengotomatiskan konfigurasi. Bahkan, saya tidak mengerti jika apa yang saya tulis dalam paragraf ini dimungkinkan. Faktanya adalah bagi saya pribadi itu cocok dengan cara kerjanya sekarang. Tetapi jika bagi orang lain selain saya, seluruh pendekatan tampak nyaman dan seseorang memperbaikinya, maka saya akan dengan senang hati menggunakan solusi terbaik.


Masalah lain, seperti yang sudah saya tulis, adalah bahwa dalam beberapa kasus windows tidak dapat dibedakan satu sama lain. Sejauh ini saya hanya melihat ini dengan penyamaran di chrome / chromium, tapi mungkin di tempat lain ada yang serupa. Dalam kasus ekstrim, selalu ada varian kombinasi universal Alt + 1 ... Alt + 0 . Sekali lagi, saya menggunakan Firefox dan bagi saya pribadi masalah ini tidak signifikan.


Tetapi masalah yang signifikan bagi saya adalah saya menggunakan Mac OS untuk pekerjaan dan saya tidak bisa mengonfigurasi hal seperti itu di sana. Tampaknya dapat memberikan utilitas wmctrl , tetapi tidak benar-benar berfungsi pada Mac OS. Sesuatu dapat dilakukan dengan aplikasi Automator , tetapi sangat lambat sehingga tidak nyaman untuk menggunakannya bahkan ketika itu berfungsi. Saya juga tidak bisa mengonfigurasi kombinasi tombol sehingga mereka berfungsi di semua program. Jika tiba-tiba seseorang menemukan solusi - saya akan senang menggunakannya.


Alih-alih sebuah kesimpulan


Ternyata secara tak terduga banyak kata untuk fungsi yang tampaknya sederhana. Saya ingin menyampaikan ide dan tidak membebani teks, tetapi saya belum menemukan cara untuk mengatakannya dengan lebih mudah. Mungkin akan lebih baik dalam format video, tetapi mereka tidak menyukainya seperti itu.


Saya berbicara sedikit tentang apa yang ada di balik tudung skrip dan cara mengkonfigurasinya. Saya tidak masuk ke rincian naskah itu sendiri, tetapi hanya 50 baris, tidak sulit untuk dipahami.


Saya berharap orang lain akan mencoba ide ini dan mungkin bahkan menghargainya. Saya dapat mengatakan pada diri saya bahwa skrip ini ditulis sekitar 3 tahun yang lalu dan itu SANGAT nyaman bagi saya. Sangat nyaman sehingga menyebabkan ketidaknyamanan serius ketika bekerja dengan komputer orang lain. Dan dengan macbook yang berfungsi.


Tautan Skrip

Source: https://habr.com/ru/post/id483846/


All Articles