Linuxda muqobil oyna boshqaruvi

Men Caps Lock-ni maketlarni o'zgartirish uchun o'rnatganlardan biriman, chunki bitta bosilganda 2 tugmani bosishga dangasaman. Men hatto ikkita keraksiz kalitni xohlayman: bittasini ingliz tilini yoqish uchun, ikkinchisini esa rus tili uchun ishlatardim. Ammo ikkinchi keraksiz kalit kontekst menyusini chaqirishdir, bu juda keraksiz bo'lib, u ko'plab noutbuk ishlab chiqaruvchilari tomonidan kesiladi. Demak, bor narsangiz bilan qanoatlanishingiz kerak.

Va men oynalarni almashtirishda vazifalar panelida ularning piktogrammalarini qidirishni yoki varaqlashda ismlarni qo'lga olishni xohlamayman. Alt + Tab, ish stollari bo'ylab aylantiring va hokazo. Men tugmalar birikmasini bosmoqchiman (ideal holda faqat bitta, lekin endi bepul keraksiz kalitlar yo'q) va darhol menga kerak bo'lgan oynaga o'ting. Masalan, shunday:

  • Alt+F: Firefox
  • Alt+D: Firefox (Shaxsiy ko'rish)
  • Alt+T: Terminal
  • Alt+M: Kalkulyator
  • Alt+E: IntelliJ Idea
  • va hokazo.

Bundan tashqari, masalan, yoqish orqali Alt+M Ushbu dastur hozirda ishlayotgan yoki yo'qligidan qat'i nazar, kalkulyatorni ko'rishni xohlayman. Agar u ishlayotgan bo'lsa, unda uning oynasiga e'tibor berilishi kerak, agar bo'lmasa, kerakli dasturni ishga tushiring va u yuklanganda diqqatni uzating.

Oldingi skript bilan qamrab olinmagan holatlar uchun men ochiq oynalarning har qandayiga osongina tayinlanishi mumkin bo'lgan universal tugmalar birikmalariga ega bo'lishni xohlayman. Masalan, menda 10 ta kombinatsiya tayinlangan Alt + 1 uchun Alt + 0, ular hech qanday dasturlarga bog'lanmagan. Men shunchaki bosishim mumkin Alt + 1 va hozirda diqqat markazida bo'lgan oyna bosilganda diqqat markazida bo'ladi Alt + 1.

Kesish ostida yana bir nechta xususiyatlarning tavsifi va buni qanday qilish mumkinligiga javob mavjud. Ammo men sizni darhol ogohlantiraman, agar siz Windows, Mac OS yoki hatto Linux bilan boshqa birovning kompyuteridan foydalanishingiz kerak bo'lsa, "o'zingiz uchun" bunday sozlash jiddiy giyohvandlikka va hatto undan voz kechishga olib kelishi mumkin.

Haqiqatan ham, oβ€˜ylab koβ€˜rsangiz, biz har kuni u qadar koβ€˜p dasturlardan foydalanmaymiz. Brauzer, terminal, IDE, qandaydir messenjer, fayl boshqaruvchisi, kalkulyator va, ehtimol, bu deyarli hammasi. Kundalik vazifalarning 95 foizini qoplash uchun juda ko'p tugmalar birikmasi kerak emas.

Bir nechta oynalari ochiq bo'lgan dasturlar uchun ulardan biri asosiy sifatida belgilanishi mumkin. Masalan, sizda bir nechta IntelliJ Idea oynalari ochiq va ularga tayinlangan Alt + E. Oddiy sharoitlarda, siz bosganingizda Alt + E ushbu dasturning ba'zi oynasi ochiladi, ehtimol birinchi ochilgan. Biroq, agar siz bossangiz Alt + E agar ushbu dasturning oynalaridan biri allaqachon fokusda bo'lsa, u holda ushbu alohida oyna asosiy sifatida tayinlanadi va keyingi kombinatsiyalar bosilganda diqqat markazida bo'ladi.

Asosiy oynani qayta tayinlash mumkin. Buni amalga oshirish uchun siz birinchi navbatda kombinatsiyani tiklashingiz kerak, so'ngra unga asosiy oyna sifatida boshqa oynani belgilashingiz kerak. Kombinatsiyani tiklash uchun siz kombinatsiyaning o'zini bosishingiz kerak, so'ngra maxsus qayta o'rnatish kombinatsiyasini, men uni tayinladim. Alt + Backspace. Bu oldingi kombinatsiya uchun asosiy oynani tayinlashni bekor qiladigan skriptni chaqiradi. Va keyin oldingi xatboshida tasvirlanganidek, yangi asosiy oynani belgilashingiz mumkin. Bog'langan oynani universal kombinatsiyalarga qayta o'rnatish xuddi shu tarzda sodir bo'ladi.

Kirish uzoq bo'lib chiqdi, lekin men avval nima qilishimizni aytib bermoqchi edim, keyin buni qanday qilishni tushuntirdim.

O'qishdan charchaganlar uchun

Muxtasar qilib aytganda, skriptlarga havola maqolaning oxirida.

Ammo siz hali ham uni darhol o'rnatolmaysiz va foydalana olmaysiz. Avval siz skript kerakli oynani qanday topishini aniqlab olishingiz kerak bo'ladi. Busiz, skriptga diqqatni qaerga o'tkazish kerakligini aytib bo'lmaydi. Va agar to'satdan mos oyna topilmasa, nima qilish kerakligini tushunishingiz kerak.

Va men tugmalar birikmalarini bosish orqali skriptlarning bajarilishini qanday sozlash haqida o'ylamayman. Masalan, KDE-da u Tizim sozlamalari β†’ Yorliqlar β†’ Maxsus yorliqlar bo'limida. Bu boshqa oyna boshqaruvchilarida ham bo'lishi kerak.

wmctrl bilan tanishtirish

Wmctrl β€” X Window Manager bilan ishlash uchun konsol yordam dasturi. Bu skript uchun asosiy dastur. Keling, undan qanday foydalanishingiz mumkinligini tezda ko'rib chiqaylik.

Birinchidan, ochiq oynalar ro'yxatini ko'rsatamiz:

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

Variant -l barcha ochiq oynalar ro'yxatini ko'rsatadi va -Ρ… chiqishga sinf nomini qo'shadi (skype.Skype, Navigator.Firefox va hokazo). Bu erda bizga oyna identifikatori (1-ustun), sinf nomi (3-ustun) va oyna nomi (oxirgi ustun) kerak.

Variantdan foydalanib, ba'zi oynani faollashtirishga urinib ko'rishingiz mumkin -a:

$ wmctrl -a skype.Skype -x

Agar hamma narsa rejaga muvofiq bo'lsa, ekranda Skype oynasi paydo bo'lishi kerak. Agar variant o'rniga -x opsiyasidan foydalanish -i, keyin sinf nomi o'rniga siz oyna identifikatorini belgilashingiz mumkin. Id bilan bog'liq muammo shundaki, dastur har safar ishga tushirilganda oyna identifikatori o'zgaradi va biz buni oldindan bila olmaymiz. Boshqa tomondan, bu atribut oynani noyob tarzda aniqlaydi, bu dastur bir nechta oyna ochganda muhim bo'lishi mumkin. Bu haqida biroz ko'proq.

Ushbu bosqichda biz kerakli oynani chiqish orqali regex yordamida izlashimizni unutmasligimiz kerak wmctrl -lx. Ammo bu biz murakkab narsadan foydalanishimiz kerak degani emas. Odatda sinf nomi yoki oyna nomi etarli.

Asosan, asosiy g'oya allaqachon aniq bo'lishi kerak. Oyna boshqaruvchisi uchun global tezkor tugmalar/yorliqlar sozlamalarida skriptni bajarish uchun kerakli kombinatsiyani sozlang.

Skriptlardan qanday foydalanish kerak

Avval siz konsol yordam dasturlarini o'rnatishingiz kerak wmctrl ΠΈ xdotool:

$ sudo apt-get install wmctrl xdotool

Keyin skriptlarni yuklab olishingiz va ularni qo'shishingiz kerak $ PATH. Men ularni odatda qo'yaman ~/bin:

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

Agar katalog bo'lsa ~/bin u erda yo'q edi, keyin uni yaratishingiz va qayta ishga tushirishingiz kerak (yoki qayta kiring), aks holda ~/bin urmaydi $ PATH. Agar hamma narsa to'g'ri bajarilgan bo'lsa, u holda skriptlarga konsoldan kirish mumkin bo'lishi va Tabni yakunlash ishlashi kerak.

Asosiy skript showwin 2 ta parametrni oladi: birinchisi - regex, uning yordamida biz kerakli oynani qidiramiz, ikkinchi parametr esa kerakli oyna topilmasa, bajarilishi kerak bo'lgan buyruqdir.

Siz skriptni ishga tushirishga urinib ko'rishingiz mumkin, masalan:

$ showwin "Mozilla Firefox$" firefox

Agar Firefox o'rnatilgan bo'lsa, uning oynasiga e'tibor berilishi kerak. Firefox ishlamayotgan bo'lsa ham, u ishga tushishi kerak edi.

Agar u ishlayotgan bo'lsa, siz kombinatsiyalar bo'yicha buyruqlar bajarilishini sozlashga harakat qilishingiz mumkin. Global tezkor tugmalar/yorliqlar sozlamalarida quyidagilarni qo'shing:

  • Alt + F: "Mozilla Firefox$" firefox-ni ko'rsatish
  • Alt+D: showwin "Mozilla Firefox (Shaxsiy brauzer)$" "firefox - xususiy oyna"
  • Alt+C: showwin "cromium-brauzer. Chromium-brauzer N*" xrom-brauzer
  • Alt+X: showwin "chromium-brauzer. Chromium-brauzer I*" "chrom-brauzer -inkognito"
  • Alt+S: "Skype.Skype" skypeforlinux-ni ko'rsatish
  • Alt+E: showwin β€œjetbrains-idea” idea.sh

Va hokazo. Har kim o'zi xohlagancha tugmalar birikmasi va dasturiy ta'minotni sozlashi mumkin.
Agar hamma narsa to'g'ri bajarilgan bo'lsa, yuqoridagi kombinatsiyalardan foydalanib, biz oddiygina tugmachalarni bosish orqali oynalar o'rtasida almashishimiz mumkin.

Men xromni sevuvchilarni hafsalasi pir bo'laman: u inkognito rejimida oddiy oynani chiqishi bilan ajrata oladi wmctrl Siz qila olmaysiz, ular bir xil sinf nomlari va oyna sarlavhalariga ega. Taklif etilayotgan regexda N* va I* belgilar faqat bu muntazam iboralar bir-biridan farq qilishi va ular asosiy oyna sifatida belgilanishi uchun kerak.

Oldingi kombinatsiyaning asosiy oynasini tiklash uchun (aslida regex uchun, qaysi showwin oxirgi marta chaqirildi) skriptga qo'ng'iroq qilishingiz kerak showwinDetach. Menda bu skript tugmalar birikmasiga tayinlangan Alt + Backspace.

Ssenariyda showwin yana bitta funksiya mavjud. Bir parametr bilan chaqirilganda (bu holda parametr faqat identifikator), u regexni umuman tekshirmaydi, lekin barcha oynalarni mos deb hisoblaydi. O'z-o'zidan bu befoyda ko'rinadi, lekin shu tarzda biz har qanday oynani asosiy deb belgilashimiz va tezda o'sha oynaga o'tishimiz mumkin.

Menda quyidagi kombinatsiyalar sozlangan:

  • Alt + 1: "CustomKey1" ni ko'rsatish
  • Alt + 2: "CustomKey2" ni ko'rsatish
  • ...
  • Alt + 0: "CustomKey0" ni ko'rsatish
  • Alt + Backspace: showwinDetach

Shu tarzda men har qanday oynani kombinatsiyalarga bog'lashim mumkin Alt + 1...Alt + 0. Faqat bosish orqali Alt + 1 Men joriy oynani ushbu kombinatsiyaga bog'layman. Bosish orqali bog'lashni bekor qilishim mumkin Alt + 1va keyin Alt + Backspace. Yoki oynani yoping, bu ham ishlaydi.

Keyinchalik men sizga ba'zi texnik tafsilotlarni aytib beraman. Siz ularni o'qishingiz shart emas, lekin ularni o'rnatishga va ko'rishga harakat qiling. Ammo men boshqalarning skriptlarini kompyuteringizda ishga tushirishdan oldin tushunishni maslahat beraman :).

Xuddi shu dasturning turli oynalarini qanday ajratish mumkin

Aslida, "wmctrl -a skype.Skype -x" birinchi misoli ishlagan va undan foydalanish mumkin. Ammo keling, Firefox misolini yana bir bor ko'rib chiqaylik, unda ikkita oyna ochiq:

0x04400003  0 Navigator.Firefox                   N/A Google ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ - Mozilla Firefox
0x04400218  0 Navigator.Firefox                   N/A Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π·Π° сутки / Π₯Π°Π±Ρ€ - Mozilla Firefox (Private Browsing)

Birinchi oyna oddiy rejim, ikkinchisi esa Private Browsing. Men ushbu oynalarni turli xil ilovalar sifatida ko'rib chiqishni va turli tugmalar birikmalaridan foydalangan holda ularga o'tishni xohlayman.

Derazalarni almashtiradigan skriptni murakkablashtirish kerak. Men ushbu yechimdan foydalandim: barcha oynalar ro'yxatini ko'rsating, bajaring grep regex orqali birinchi qatorni oling Boshi, birinchi ustunni oling (bu oyna identifikatori bo'ladi) yordamida kesilgan, id bo'yicha oynaga o'ting.

Muntazam iboralar va ikkita muammo haqida hazil bo'lishi kerak, lekin aslida men hech qanday murakkab narsadan foydalanmayapman. Menga qator oxirini (β€œ$” belgisi) koβ€˜rsatish va β€œMozilla Firefox$”ni β€œMozilla Firefox (Private Browsing)$” dan farqlash uchun oddiy iboralar kerak.

Buyruq shunday ko'rinadi:

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

Bu erda siz skriptning ikkinchi xususiyati haqida allaqachon taxmin qilishingiz mumkin: agar grep hech narsa qaytarmasa, kerakli dastur ochiq emas va uni ikkinchi parametrdan buyruqni bajarish orqali boshlashingiz kerak. Va keyin vaqti-vaqti bilan diqqatni unga o'tkazish uchun kerakli oyna ochilganligini tekshiring. Men bunga e'tibor bermayman; kimga kerak bo'lsa, manbalarga qaraydi.

Ilova oynalarini ajratib bo'lmaganda

Shunday qilib, biz diqqatni kerakli dastur oynasiga qanday o'tkazishni o'rgandik. Ammo ilovada bir nechta oyna ochiq bo'lsa-chi? Qaysi biriga e'tibor qaratishim kerak? Yuqoridagi skript katta ehtimol bilan birinchi ochiq oynaga o'tadi. Biroq, biz ko'proq moslashuvchanlikni xohlaymiz. Bizga qaysi oyna kerakligini eslab, o'sha oynaga o'tishni xohlayman.

G'oya shunday edi: Agar biz tugmalar birikmasi uchun ma'lum bir oynani eslab qolishni istasak, u holda kerakli oyna fokusda bo'lganda ushbu kombinatsiyani bosishimiz kerak. Kelajakda ushbu kombinatsiyani bosganingizda, diqqat ushbu oynaga beriladi. Oyna yopilmaguncha yoki biz ushbu skript kombinatsiyasini qayta o'rnatmaguncha showwinDetach.

Skript algoritmi showwin shunga o'xshash narsa:

  • Fokus o'tkazilishi kerak bo'lgan oynaning identifikatorini oldindan eslab qolganligini tekshiring.
    Esingizda bo'lsa va bunday oyna hali ham mavjud bo'lsa, biz diqqatni unga o'tkazamiz va chiqamiz.
  • Biz qaysi oyna hozirda diqqat markazida ekanligini ko'rib chiqamiz va agar u bizning so'rovimizga mos kelsa, kelajakda unga o'tish va chiqish uchun uning identifikatorini eslab qoling.
  • Agar mavjud bo'lsa, biz hech bo'lmaganda mos keladigan oynaga o'tamiz yoki kerakli dasturni ochamiz.

Xdotool konsol yordam dasturidan foydalanib, qaysi oyna hozirda diqqat markazida ekanligini uning chiqishini o'n oltilik formatga o'tkazish orqali bilib olishingiz mumkin:

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

Bash-da biror narsani eslab qolishning eng oson usuli bu xotirada joylashgan virtual fayl tizimida fayllarni yaratishdir. Ubuntu'da bu sukut bo'yicha yoqilgan /dev/shm/. Boshqa tarqatishlar haqida hech narsa deya olmayman, umid qilamanki, shunga o'xshash narsa ham bor. Siz buyruq bilan qarashingiz mumkin:

$ mount -l | grep tmpfs

Skript ushbu papkada bo'sh kataloglarni yaratadi, masalan: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Bundan tashqari, u har safar chaqirilganda simli bog'lanish hosil qiladi /dev/shm/$USER/showwin/showwin_last haqida /dev/shm/$USER/showwin/$SEARCH_REGEX. Bu, agar kerak bo'lsa, skript yordamida ma'lum bir kombinatsiya uchun oyna identifikatorini olib tashlash uchun kerak bo'ladi showwinDetach.

Nimani yaxshilash mumkin

Birinchidan, skriptlarni qo'lda sozlash kerak. Shubhasiz, o'z qo'llaringiz bilan ko'p narsalarni o'rganish va qilish zarurati tufayli ko'pchiligingiz tizimni sozlashga harakat ham qilmaysiz. Agar paketni oddiygina o'rnatish va hamma narsani osonroq sozlash mumkin bo'lsa, ehtimol u mashhurlikka erishgan bo'lar edi. Va keyin qarang, dastur standart tarqatishlarga chiqariladi.

Va, ehtimol, buni osonroq qilish mumkin. Agar oynaning identifikatori orqali uni yaratgan jarayonning identifikatorini va jarayon identifikatori orqali uni qaysi buyruq yaratganligini bilib olsangiz, u holda sozlashni avtomatlashtirish mumkin bo'ladi. Aslida, men ushbu paragrafda yozganlarim mumkinmi yoki yo'qligini tushunmadim. Gap shundaki, hozir uning ish uslubidan shaxsan men mamnunman. Ammo mendan boshqa kimdir butun yondashuvni qulay deb topsa va kimdir uni yaxshilasa, men yaxshiroq yechimdan foydalanishdan xursand bo'laman.

Yana bir muammo, men allaqachon yozganimdek, ba'zi hollarda derazalarni bir-biridan ajratib bo'lmaydi. Hozirgacha men buni faqat xrom/xromda inkognito bilan kuzatdim, lekin boshqa joyda shunga o'xshash narsa bordir. Oxirgi chora sifatida har doim universal kombinatsiyalar varianti mavjud Alt + 1...Alt + 0. Shunga qaramay, men Firefox-dan foydalanaman va shaxsan men uchun bu muammo muhim emas.

Ammo men uchun muhim muammo shundaki, men ish uchun Mac OS dan foydalanaman va u erda shunga o'xshash narsani sozlay olmadim. qulaylik wmctrl O'ylaymanki, men uni o'rnatishga muvaffaq bo'ldim, lekin u Mac OS da ishlamaydi. Ilova bilan biror narsa qilish mumkin Automator, lekin u shunchalik sekinki, u ishlayotgan paytda ham foydalanish uchun qulay emas. Men shuningdek, barcha dasturlarda ishlashi uchun tugmalar birikmalarini o'rnatolmadim. Agar kimdir to'satdan yechim topsa, men uni ishlatishdan xursand bo'laman.

Xulosa o'rniga

Bu oddiy ko'rinadigan funksionallik uchun kutilmagan darajada ko'p sonli so'zlar bo'lib chiqdi. Men fikrni etkazishni va matnni ortiqcha yuklamaslikni xohlardim, lekin uni qanday qilib soddaroq aytishni hali tushunmadim. Ehtimol, bu video formatida yaxshiroq bo'lar edi, lekin bu erda odamlarga yoqmaydi.

Men skript ostida nima borligi va uni qanday sozlash haqida bir oz gaplashdim. Men skriptning o'zi tafsilotlariga kirmadim, lekin u atigi 50 satr, shuning uchun tushunish qiyin emas.

Umid qilamanki, kimdir bu g'oyani sinab ko'radi va ehtimol buni qadrlaydi. O'zim haqimda aytishim mumkinki, ssenariy taxminan 3 yil oldin yozilgan va bu men uchun JUDA qulay. Shu qadar qulayki, u boshqa odamlarning kompyuterlari bilan ishlashda jiddiy noqulaylik tug'diradi. Va ishlaydigan MacBook bilan.

Skriptlarga havola

Manba: www.habr.com

a Izoh qo'shish