Manajemen jendhela alternatif ing Linux

Aku salah siji sing nyetel Caps Lock kanggo ngalih tata letak amarga aku kesed kanggo mencet 2 tombol nalika aku bisa mencet siji. Aku malah kaya 2 tombol rasah: Aku bakal nggunakake siji kanggo nguripake tata letak Inggris, lan kaloro kanggo Russian. Nanging kunci sing ora perlu nomer loro yaiku nelpon menu konteks, sing ora perlu banget sing dipotong dening akeh produsen laptop. Dadi sampeyan kudu puas karo apa sing sampeyan duwe.

Lan aku uga ora pengin nggoleki lambang kasebut ing taskbar nalika ngoper windows, utawa nyekel jeneng nalika nggulung. Alt + Tab, gulung liwat desktop, etc.. Aku pengin mencet kombinasi tombol (saenipun mung siji, nanging ora ana free tombol rasah maneh) lan langsung njaluk menyang jendhela aku kudu. Contone kaya iki:

  • Alt + F: Firefox
  • Alt+D: Firefox (Private Browsing)
  • Alt + T: Terminal
  • Alt+M: Kalkulator
  • Alt + E: IntelliJ Idea
  • lsp.

Menapa malih, kanthi mencet, contone, ing Alt+M Aku pengin ndeleng kalkulator preduli saka program iki lagi mlaku. Yen lagi mlaku, banjur jendhela sawijining kudu diwenehi fokus, lan yen ora, mbukak program sing dipengini lan transfer fokus nalika mbukak.

Kanggo kasus sing ora dijamin dening script sadurungé, Aku pengin duwe kombinasi tombol universal sing bisa gampang diutus kanggo samubarang windows mbukak. Contone, aku duwe 10 kombinasi diutus saka Alt + 1 kanggo Alt + 0, sing ora ana gandhengane karo program apa wae. Aku mung bisa klik Alt + 1 lan jendhela sing lagi fokus bakal entuk fokus nalika diklik Alt + 1.

Ing ngisor potong ana katrangan babagan sawetara fitur liyane lan jawaban babagan carane bisa ditindakake. Nanging aku bakal langsung ngelingake yen kustomisasi kasebut "kanggo sampeyan dhewe" bisa nyebabake kecanduan sing abot lan malah mundur yen sampeyan kudu nggunakake Windows, Mac OS utawa malah komputer wong liya nganggo Linux.

Nyatane, yen sampeyan mikir babagan iki, kita ora nggunakake akeh program saben dinane. Browser, terminal, IDE, sawetara jinis utusan, manajer file, kalkulator lan, mbok menawa, meh kabeh. Ora akeh kombinasi tombol sing dibutuhake kanggo nutupi 95% tugas saben dina.

Kanggo program sing mbukak sawetara windows, salah sijine bisa ditunjuk minangka sing utama. Contone, sampeyan duwe sawetara IntelliJ Idea windows mbukak lan diutus kanggo Alt + E. Ing kahanan normal, nalika sampeyan menet Alt + E sawetara jendhela program iki bakal mbukak, paling kamungkinan sing dibukak pisanan. Nanging, yen sampeyan klik ing Alt + E nalika salah sawijining jendhela program iki wis fokus, banjur jendhela tartamtu iki bakal ditugasake minangka sing utama lan bakal dadi siji sing bakal diwenehi fokus nalika kombinasi sakteruse ditekan.

Jendhela utama bisa diganti maneh. Kanggo nindakake iki, sampeyan kudu ngreset kombinasi, banjur nemtokake jendhela liyane minangka jendela utama. Kanggo ngreset kombinasi, sampeyan kudu mencet kombinasi dhewe, lan banjur kombinasi reset khusus, Aku wis diutus kanggo Alt + Backspace. Iki bakal nelpon script sing bakal unassign jendhela utama kanggo kombinasi sadurungé. Banjur sampeyan bisa nemtokake jendhela utama anyar kaya sing diterangake ing paragraf sadurunge. Ngreset jendhela sing disambung menyang kombinasi universal kedadeyan kanthi cara sing padha.

Introduksi dadi dawa, nanging aku pengin ngomong dhisik apa sing bakal ditindakake, banjur nerangake carane nindakake.

Kanggo sing kesel maca

Ing cendhak, pranala menyang skrip ana ing pungkasan artikel.

Nanging sampeyan isih ora bisa nginstal lan nggunakake langsung. Pisanan sampeyan kudu ngerti carane skrip nemokake jendhela sing dikarepake. Tanpa iki, ora bakal bisa ngandhani skrip ing ngendi persis fokus kudu ditransfer. Lan sampeyan kudu ngerti apa sing kudu ditindakake yen dumadakan jendhela sing cocog ora ditemokake.

Lan aku ora bakal fokus carane ngatur eksekusi skrip kanthi mencet kombinasi tombol. Contone, ing KDE ana ing Setelan Sistem → Trabasan → Trabasan Kustom. Iki uga kudu kedadeyan ing manajer jendhela liyane.

Ngenalke wmctrl

Wmctrl - sarana console kanggo sesambungan karo X Window Manager. Iki minangka program kunci kanggo skrip. Ayo dipikir cepet carane sampeyan bisa nggunakake.

Pisanan, ayo nampilake dhaptar jendhela sing mbukak:

$ 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)
...

Pilihan -l nampilake dhaptar kabeh jendhela mbukak, lan -NS nambahake jeneng kelas menyang output (skype.Skype, Navigator.Firefox lsp). Ing kene kita butuh id jendhela (kolom 1), jeneng kelas (kolom 3) lan jeneng jendhela (kolom pungkasan).

Sampeyan bisa nyoba kanggo ngaktifake sawetara jendhela nggunakake pilihan -a:

$ wmctrl -a skype.Skype -x

Yen kabeh mlaku miturut rencana, jendhela Skype bakal katon ing layar. Yen tinimbang pilihan -x nggunakake pilihan -i, banjur tinimbang jeneng kelas sampeyan bisa nemtokake id jendhela. Masalah karo id yaiku id jendhela ganti saben aplikasi diluncurake lan kita ora bisa ngerti sadurunge. Ing sisih liya, atribut iki kanthi unik ngenali jendhela, sing bisa dadi penting nalika aplikasi mbukak luwih saka siji jendhela. Liyane babagan iki rada luwih.

Ing tahap iki kita kudu ngelingi yen kita bakal nggoleki jendhela sing dikarepake nggunakake regex kanthi output wmctrl -lx. Nanging iki ora ateges kita kudu nggunakake sing rumit. Biasane jeneng kelas utawa jeneng jendhela cukup.

Sejatine, gagasan utama kudu jelas. Ing setelan hotkeys / trabasan global kanggo manager jendhela, ngatur kombinasi sing dibutuhake kanggo nglakokaké script.

Cara nggunakake skrip

Pisanan sampeyan kudu nginstal utilitas console wmctrl и xdotool:

$ sudo apt-get install wmctrl xdotool

Sabanjure sampeyan kudu ngundhuh skrip lan ditambahake menyang $ PATH. Aku biasane sijine wong ing ~/bin:

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

Yen direktori ~/bin ora ana, sampeyan kudu nggawe lan urip maneh (utawa login maneh), yen ora ~/bin ora bakal kenek $ PATH. Yen kabeh wis rampung kanthi bener, skrip kudu bisa diakses saka konsol lan rampung Tab kudu bisa digunakake.

Skrip utama showwin njupuk 2 paramèter: pisanan regex, kang kita bakal nelusuri jendhela sing dibutuhake, lan parameter kapindho prentah sing kudu kaleksanan yen jendhela dibutuhake ora ketemu.

Sampeyan bisa nyoba mbukak skrip, contone:

$ showwin "Mozilla Firefox$" firefox

Yen Firefox wis diinstal, jendhela kudu diwenehi fokus. Sanajan Firefox ora mlaku, mesthine wis diwiwiti.

Yen bisa, sampeyan bisa nyoba kanggo ngatur eksekusi printah ing kombinasi. Ing setelan hotkey / trabasan global tambahake:

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

Etc. Saben uwong bisa ngatur kombinasi tombol lan piranti lunak sing cocog.
Yen kabeh wis rampung kanthi bener, banjur nggunakake kombinasi ing ndhuwur kita bakal bisa ngalih ing antarane windows kanthi mung mencet tombol.

Aku bakal nguciwani para penyayang krom: bisa incognito mbedakake jendhela biasa kanthi output wmctrl Sampeyan ora bisa, padha duwe jeneng kelas lan judhul jendhela. Ing regex sing diusulake, karakter N * lan I * mung dibutuhake supaya ekspresi reguler iki beda-beda lan bisa ditugasake minangka jendela utama.

Kanggo ngreset jendhela utama kombinasi sadurunge (nyatane kanggo regex, sing showwin disebut pungkasan wektu) sampeyan kudu nelpon script showwinDetach. Aku duwe script iki diutus kanggo kombinasi tombol Alt + Backspace.

Ing naskah showwin ana siji fungsi liyane. Nalika diarani karo siji parameter (ing kasus iki parameter mung pengenal), ora mriksa regex ing kabeh, nanging nganggep kabeh windows cocok. Ing dhewe, iki katon ora ana gunane, nanging kanthi cara iki kita bisa nemtokake jendhela apa wae minangka sing utama lan kanthi cepet ngalih menyang jendela kasebut.

Aku duwe kombinasi ing ngisor iki diatur:

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

Kanthi cara iki aku bisa ngiket windows menyang kombinasi Alt + 1...Alt + 0. Mung kanthi ngeklik Alt + 1 Aku ikatan jendhela saiki kanggo kombinasi iki. Aku bisa mbatalake naleni kanthi ngeklik Alt + 1, lan banjur Alt + Backspace. Utawa nutup jendhela, sing uga bisa.

Sabanjure aku bakal ngandhani sawetara rincian teknis. Sampeyan ora kudu maca wong-wong mau, nanging mung nyoba kanggo nyetel munggah lan ndeleng. Nanging aku isih menehi saran supaya ngerti skrip wong liya sadurunge mbukak ing komputer :).

Carane mbedakake antarane windows beda saka aplikasi padha

Ing asas, conto pisanan "wmctrl -a skype.Skype -x" bisa digunakake lan bisa digunakake. Nanging ayo goleki maneh conto karo Firefox, ing ngendi 2 windows mbukak:

0x04400003  0 Navigator.Firefox                   N/A Google Переводчик - Mozilla Firefox
0x04400218  0 Navigator.Firefox                   N/A Лучшие публикации за сутки / Хабр - Mozilla Firefox (Private Browsing)

Jendhela pisanan yaiku mode normal, lan sing kapindho yaiku Private Browsing. Aku pengin nganggep windows iki minangka aplikasi sing beda lan ngalih menyang nggunakake kombinasi tombol sing beda.

Sampeyan perlu kanggo complicate skrip sing ngalih windows. Aku nggunakake solusi iki: nampilake dhaptar kabeh windows, apa grep dening regex, njupuk baris pisanan karo sirah, entuk kolom pisanan (iki bakal dadi id jendhela) nggunakake Cut, ngalih menyang jendhela kanthi id.

Mesthine ana guyon babagan ekspresi reguler lan rong masalah, nanging nyatane aku ora nggunakake apa-apa sing rumit. Aku butuh ekspresi reguler supaya bisa nuduhake pungkasan baris (simbol "$") lan mbedakake "Mozilla Firefox $" saka "Mozilla Firefox (Private Browsing) $".

Printah katon kaya iki:

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

Ing kene sampeyan wis bisa ngira babagan fitur kapindho skrip: yen grep ora ngasilake apa-apa, mula aplikasi sing dikarepake ora mbukak lan sampeyan kudu miwiti kanthi nglakokake perintah saka parameter kapindho. Banjur priksa manawa jendhela sing dibutuhake wis dibukak supaya bisa mindhah fokus kasebut. Aku ora bakal fokus ing iki; sapa wae sing mbutuhake bakal ndeleng sumber.

Nalika jendhela aplikasi ora bisa dibedakake

Dadi, kita wis sinau carane nransfer fokus menyang jendela aplikasi sing dikarepake. Nanging kepiye yen aplikasi mbukak luwih saka siji jendhela? Kang siji kudu menehi fokus kanggo? Skrip ing ndhuwur kemungkinan bakal ditransfer menyang jendhela sing mbukak pisanan. Nanging, kita pengin luwih fleksibel. Aku kaya kanggo bisa ngelingi kang jendhela kita kudu lan ngalih menyang jendhela tartamtu.

Ide iki: Yen kita pengin ngelingi jendhela tartamtu kanggo kombinasi tombol, banjur kita kudu mencet kombinasi iki nalika jendhela sing dikarepake ing fokus. Ing mangsa ngarep, nalika sampeyan mencet kombinasi iki, fokus bakal diwenehi kanggo jendhela iki. Nganti jendhela nutup utawa kita nindakake reset kanggo kombinasi script iki showwinDetach.

Algoritma skrip showwin kaya iki:

  • Priksa manawa kita wis ngelingi id jendela sing kudu ditransfer fokus.
    Yen sampeyan ngelingi lan jendhela kuwi isih ana, banjur kita nransfer fokus menyang lan metu.
  • Kita ndeleng jendhela sing saiki lagi fokus, lan yen cocog karo panyuwunan kita, banjur elinga id kanggo pindhah menyang ing mangsa ngarep lan metu.
  • Kita pindhah menyang paling sethithik sawetara jendhela sing cocog yen ana utawa mbukak aplikasi sing dikarepake.

Sampeyan bisa ngerteni jendhela sing saiki fokus nggunakake utilitas konsol xdotool kanthi ngowahi output dadi format heksadesimal:

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

Cara paling gampang kanggo ngelingi soko ing bash yaiku nggawe file ing sistem file virtual sing ana ing memori. Ing Ubuntu iki diaktifake kanthi gawan ing /dev/shm/. Aku ora bisa ngomong apa-apa bab distribusi liyane, Mugi sing ana uga padha. Sampeyan bisa ndeleng kanthi printah:

$ mount -l | grep tmpfs

Skrip bakal nggawe direktori kosong ing folder iki, kaya iki: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Kajaba iku, saben-saben diarani bakal nggawe symlink /dev/shm/$USER/showwin/showwin_last ing /dev/shm/$USER/showwin/$SEARCH_REGEX. Iki bakal dibutuhake supaya, yen perlu, mbusak id jendhela kanggo kombinasi tartamtu nggunakake script showwinDetach.

Apa bisa nambah

Kaping pisanan, skrip kudu dikonfigurasi kanthi manual. Mesthi, amarga kudu nyelidiki lan nindakake akeh kanthi tangan, akeh sing ora bakal nyoba ngatur sistem kasebut. Yen sampeyan bisa nginstal paket kasebut lan ngatur kabeh kanthi luwih gampang, mula bisa uga entuk popularitas. Banjur deleng, aplikasi kasebut bakal diluncurake menyang distribusi standar.

Lan mbok menawa bisa ditindakake kanthi luwih gampang. Yen kanthi id saka jendhela sampeyan bisa ngerteni id proses sing nggawe, lan kanthi id proses sampeyan bisa ngerteni prentah sing digawe, mula sampeyan bisa ngotomatisasi persiyapan kasebut. Nyatane, aku ora ngerti apa sing daktulis ing paragraf iki bisa ditindakake. Kasunyatane, aku dhewe wis kepenak karo cara kerjane saiki. Nanging yen wong liya saka aku nemokake kabeh pendekatan sing trep lan ana sing nambah, mula aku bakal seneng nggunakake solusi sing luwih apik.

Masalah liyane, kaya sing wis daktulis, yaiku ing sawetara kasus windows ora bisa dibedakake saka siji liyane. Nganti saiki aku mung mirsani iki kanthi incognito ing krom / kromium, nanging bisa uga ana sing padha ing papan liya. Minangka pilihan pungkasan, mesthi ana pilihan kombinasi universal Alt + 1...Alt + 0. Maneh, aku nggunakake Firefox lan kanggo kula pribadi masalah iki ora penting.

Nanging masalah pinunjul kanggo kula iku aku nggunakake Mac OS kanggo karya lan aku ora bisa ngatur apa kaya sing ana. sarana wmctrl Aku bisa nginstal, nanging ora bisa digunakake ing Mac OS. Ana sing bisa ditindakake kanthi aplikasi kasebut Automator, nanging alon banget supaya ora trep kanggo nggunakake sanajan lagi digunakake. Aku uga ora bisa nyetel kombinasi tombol supaya padha bisa ing kabeh program. Yen wong tiba-tiba teka karo solusi, aku bakal seneng nggunakake.

Tinimbang kesimpulan

Ternyata akeh tembung sing ora dikarepke kanggo fungsi sing katon prasaja. Aku pengin ngirim gagasan lan ora kakehan teks, nanging aku durung ngerti carane ngomong luwih gampang. Mbok menawa bakal luwih apik ing format video, nanging wong ora seneng kaya ing kene.

Aku ngomong sethitik bab apa ing hood saka script lan carane ngatur. Aku ora pindhah menyang rincian script dhewe, nanging mung 50 baris, supaya iku ora angel mangertos.

Mugi sing wong liya bakal nyoba idea iki lan Mungkin malah appreciate iku. Aku bisa ngomong babagan aku yen naskah kasebut ditulis udakara 3 taun kepungkur lan trep banget kanggo aku. Dadi trep sing nyebabake rasa ora nyaman sacara serius nalika nggarap komputer wong liya. Lan karo MacBook sing bisa digunakake.

Link menyang skrip

Source: www.habr.com

Add a comment