Pangaturan jandela alternatif dina Linux

Abdi salah sahiji jalma anu nyetél Caps Lock pikeun pindah layouts sabab Puguh teuing pencét 2 kenop lamun kuring bisa mencet hiji. Abdi malah hoyong 2 kenop perlu: Abdi nganggo hiji ngahurungkeun perenah Inggris, sarta kadua pikeun Rusia. Tapi konci anu teu dipikabutuh kadua nyaéta nyauran ménu kontéks, anu henteu diperyogikeun ku seueur pabrik laptop. Janten anjeun kedah puas ku naon anu anjeun gaduh.

Sareng kuring ogé henteu hoyong milarian ikonna dina taskbar nalika gentos windows, atanapi nyekel nami nalika ngagulung. Alt + Tab, Ngagulung ngaliwatan desktops, jsb Abdi hoyong mencet kombinasi konci (ideally ngan hiji, tapi euweuh bebas kenop perlu deui) jeung geura meunang ka jandela Abdi peryogi. Contona saperti kieu:

  • Alt + F: Firefox
  • Alt+D: Firefox (Panyungsi Pribadi)
  • Alt + T: Terminal
  • Alt + M: Kalkulator
  • Alt + E: Gagasan IntelliJ
  • jsb.

Leuwih ti éta, ku mencét, contona, dina Alt+M Abdi hoyong ningali kalkulator paduli naha program ieu ayeuna jalan. Upami éta jalan, teras jandelana kedah dipasihkeun fokus, sareng upami henteu, jalankeun program anu dipikahoyong sareng transfer fokus nalika beban.

Pikeun kasus nu teu katutupan ku Aksara saméméhna, Abdi hoyong gaduh kombinasi konci universal nu bisa gampang ditugaskeun ka salah sahiji jandéla muka. Contona, kuring boga 10 kombinasi ditugaskeun ti Alt + 1 ka Alt + 0, anu henteu kabeungkeut kana program naon waé. Kuring ngan bisa klik Alt + 1 jeung jandela nu ayeuna keur fokus bakal meunang fokus lamun diklik Alt + 1.

Di handap potongan aya katerangan ngeunaan sababaraha langkung fitur sareng jawaban kumaha ieu tiasa dilakukeun. Tapi kuring bakal langsung ngingetkeun yén kustomisasi sapertos "kanggo diri anjeun" tiasa nyababkeun kecanduan parah sareng ditarikna upami anjeun kedah nganggo Windows, Mac OS atanapi komputer batur sareng Linux.

Nyatana, upami anjeun mikirkeun éta, kami henteu nganggo seueur program unggal dinten. Browser, terminal, IDE, sababaraha jinis utusan, manajer file, kalkulator sareng, sigana, éta ampir sadayana. Henteu seueur kombinasi konci anu diperyogikeun pikeun nutupan 95% tugas sapopoé.

Pikeun program anu ngagaduhan sababaraha windows muka, salah sahijina tiasa ditunjuk salaku anu utama. Salaku conto, anjeun gaduh sababaraha IntelliJ Idea windows kabuka sareng ditugaskeun Alt + E.. Dina kaayaan normal, sawaktos Anjeun mencet Alt + E. sababaraha jandela program ieu bakal muka, paling dipikaresep salah sahiji anu dibuka munggaran. Sanajan kitu, lamun klik dina Alt + E. lamun salah sahiji jandela program ieu geus di fokus, mangka jandela husus ieu bakal ditugaskeun salaku utama jeung eta bakal jadi hiji nu bakal dibikeun fokus lamun kombinasi saterusna dipencet.

Jandéla utama tiasa dialihkeun deui. Jang ngalampahkeun ieu, Anjeun mimitina kudu ngareset kombinasi, lajeng napelkeun jandela sejen ka dinya salaku jandela utama. Pikeun ngareset kombinasi, Anjeun kudu mencet kombinasi sorangan, lajeng kombinasi reset husus, Kuring boga eta ditugaskeun ka Alt + Backspace. Ieu bakal nelepon hiji Aksara nu bakal unassign jandela utama pikeun kombinasi saméméhna. Teras anjeun tiasa napelkeun jandela utama anyar sapertos anu dijelaskeun dina paragraf sateuacana. Ngareset jandela numbu ka kombinasi universal lumangsung dina cara nu sarua.

Bubukana tétéla panjang, tapi kuring hoyong terangkeun heula naon anu bakal urang laksanakeun, teras ngajelaskeun kumaha ngalakukeunana.

Pikeun anu bosen maca

Pondokna, tautan kana naskah aya dina tungtung tulisan.

Tapi anjeun tetep moal tiasa masang sareng nganggo éta langsung. Anjeun mimitina kedah terang kumaha naskah mendakan jandela anu dipikahoyong. Tanpa ieu, moal mungkin pikeun ngabejaan naskah dimana persis fokus kudu ditransfer. Sareng anjeun kedah ngartos naon anu kedah dilakukeun upami ujug-ujug jandela anu cocog henteu kapendak.

Sareng kuring moal difokuskeun kumaha ngonpigurasikeun palaksanaan naskah ku mencét kombinasi konci. Contona, dina KDE aya dina Setélan Sistem → Potong kompas → Potong kompas Kustom. Ieu ogé kedah janten kasus dina manajer jandela anu sanés.

Nepangkeun wmctrl

Wmctrl - Utilitas konsol pikeun berinteraksi sareng X Window Manager. Ieu mangrupikeun program konci pikeun naskah. Hayu urang tingali gancang kumaha anjeun tiasa nganggo éta.

Mimiti, hayu urang nunjukkeun daptar windows anu kabuka:

$ 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 mintonkeun daptar sadaya jandéla muka, jeung -NS nambahkeun ngaran kelas kana kaluaran (skype.Skype, Navigator.Firefox jsb). Di dieu urang peryogi id jandela (kolom 1), nami kelas (kolom 3) sareng nami jandela (kolom terakhir).

Anjeun tiasa nyobian ngaktipkeun sababaraha jandela nganggo pilihan -a:

$ wmctrl -a skype.Skype -x

Upami sadayana saluyu sareng rencana, jandela Skype kedah muncul dina layar. Lamun tinimbang pilihan -x pilihan pamakéan -i, lajeng tinimbang ngaran kelas anjeun bisa nangtukeun jandela id. Masalah sareng id nyaéta id jandela robih unggal waktos aplikasi diluncurkeun sareng urang henteu tiasa terang sateuacanna. Di sisi séjén, atribut ieu uniquely ngaidentipikasi jandela, nu bisa jadi penting lamun hiji aplikasi muka leuwih ti hiji jandela. Langkung lengkep ihwal ieu saeutik salajengna.

Dina tahap ieu urang kedah émut yén urang bakal milarian jandela anu dipikahoyong nganggo regex ku kaluaran wmctrl -lx. Tapi sanés hartosna urang kedah nganggo anu rumit. Biasana nami kelas atanapi nami jandela cekap.

Dasarna, gagasan utama kudu geus jelas. Dina hotkeys global / setélan potong kompas pikeun manajer jandela Anjeun, ngonpigurasikeun kombinasi diperlukeun pikeun ngaéksekusi naskah.

Kumaha ngagunakeun skrip

Kahiji maneh kudu install utiliti konsol wmctrl и xdotool:

$ sudo apt-get install wmctrl xdotool

Teras anjeun kedah ngaunduh naskah sareng nambihanana $ PATH. Kuring biasana nempatkeun aranjeunna ~/bin:

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

Lamun diréktori ~/bin teu aya, mangka anjeun kudu nyieun na reboot (atawa re-login), disebutkeun ~/bin moal pencét $ PATH. Upami sadayana dilakukeun leres, maka skrip kedah diaksés tina konsol sareng parantosan Tab kedah jalan.

naskah utama showwin nyokot 2 parameter: kahiji nyaeta regex a, ku nu urang bakal neangan jandela diperlukeun, jeung parameter kadua paréntah nu kudu dieksekusi lamun jandela diperlukeun teu kapanggih.

Anjeun tiasa nyobian ngajalankeun skrip, contona:

$ showwin "Mozilla Firefox$" firefox

Upami Firefox dipasang, jandelana kedah dipasihan fokus. Sanaos Firefox henteu jalan, éta kedahna ngamimitian.

Upami éta jalan, teras anjeun tiasa nyobian ngonpigurasikeun palaksanaan paréntah dina kombinasi. Dina hotkeys / potong kompas global setelan tambahkeun:

  • 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

Jsb. Sadayana tiasa ngonpigurasikeun kombinasi konci sareng parangkat lunak sakumaha anu dipikahoyong.
Upami sadayana parantos leres, teras nganggo kombinasi di luhur urang tiasa ngalih antara windows ku ngan saukur mencét kenop.

Kuring bakal nguciwakeun pencinta Chrome: eta tiasa incognito ngabedakeun jandela biasa ku kaluaran na wmctrl Anjeun teu tiasa, aranjeunna gaduh ngaran kelas sarua jeung judul jandela. Dina regex anu diusulkeun, karakter N * sareng I * ngan ukur diperyogikeun supados ekspresi biasa ieu béda-béda sareng aranjeunna tiasa ditugaskeun salaku jandela utama.

Pikeun ngareset jandela utama tina kombinasi saméméhna (kanyataanna pikeun regex, nu showwin disebut panungtungan waktu) anjeun kudu nelepon naskah showwinDetach. Kuring geus Aksara ieu ditugaskeun ka kombinasi konci Alt + Backspace.

Dina naskah showwin aya hiji deui fungsi. Lamun disebut kalawan hiji parameter (dina hal ieu parameter ngan hiji identifier), teu pariksa regex pisan, tapi ngemutan sadayana jandéla cocog. Dina sorangan, ieu sigana teu aya gunana, tapi ku cara kieu urang bisa nunjuk jandela nu mana wae nu utama jeung gancang pindah ka jandela nu tangtu.

Kuring gaduh kombinasi di handap ieu ngonpigurasi:

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

Ku cara ieu kuring tiasa ngabeungkeut windows naon waé kana kombinasi Alt + 1...Alt + 0. Ngan ku ngaklik Alt + 1 Kuring ngabeungkeut jandela ayeuna kana kombinasi ieu. Abdi tiasa ngabatalkeun beungkeutan ku ngaklik Alt + 1, teras salajengna Alt + Backspace. Atawa nutup jandela, éta ogé jalan.

Salajengna, abdi bakal ngabejaan Anjeun sababaraha rinci teknis. Anjeun teu kudu maca aranjeunna, tapi ngan coba pikeun nyetél tur tingal. Tapi kuring tetep nyarankeun ngartos skrip jalma sanés sateuacan ngajalankeunana dina komputer anjeun :).

Kumaha ngabédakeun antara windows anu béda tina aplikasi anu sami

Sacara prinsip, conto anu pangheulana "wmctrl -a skype.Skype -x" tiasa dianggo sareng tiasa dianggo. Tapi hayu urang tingali deui conto sareng Firefox, dimana 2 windows dibuka:

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

Jandéla kahiji nyaéta mode normal, sareng anu kadua nyaéta Browsing Pribadi. Abdi hoyong nganggap windows ieu salaku aplikasi anu béda sareng pindah ka aranjeunna nganggo kombinasi konci anu béda.

Perlu ngahesekeun naskah anu ngalih windows. I dipaké solusi ieu: mintonkeun daptar sadaya jandéla, ngalakukeun grep ku regex, nyandak garis kahiji kalawan sirah, meunang kolom kahiji (ieu bakal jandela id) ngagunakeun motong, pindah ka jandela ku id.

Kedah aya lulucon ngeunaan ungkapan biasa na dua masalah, tapi dina kanyataanana Kuring teu make nanaon pajeulit. Abdi peryogi ekspresi biasa supados abdi tiasa nunjukkeun tungtung garis (simbol "$") sareng ngabédakeun "Mozilla Firefox $" tina "Mozilla Firefox (Private Browsing) $".

Paréntah sigana sapertos kieu:

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

Di dieu anjeun parantos tiasa nebak ngeunaan fitur kadua naskah: upami grep henteu ngabalikeun nanaon, maka aplikasi anu dipikahoyong henteu dibuka sareng anjeun kedah ngamimitian ku ngalaksanakeun paréntah tina parameter kadua. Teras pariksa périodik naha jandela anu diperyogikeun parantos dibuka pikeun mindahkeun fokus kana éta. Kuring moal difokuskeun ieu; saha waé anu peryogi éta bakal ningali sumberna.

Nalika jandéla aplikasi teu bisa dibédakeun

Janten, kami parantos diajar kumaha nransfer fokus kana jandela aplikasi anu dipikahoyong. Tapi kumaha upami hiji aplikasi ngagaduhan langkung ti hiji jandela muka? Anu mana anu kuring kedah difokuskeun? Skrip di luhur paling dipikaresep bakal mindahkeun ka jandela muka munggaran. Nanging, urang hoyong langkung kalenturan. Abdi hoyong tiasa nginget jandela mana anu urang peryogikeun sareng pindah ka jandela anu khusus.

Gagasan ieu: Upami urang hoyong nginget jandela khusus pikeun kombinasi konci, maka urang kedah mencét kombinasi ieu nalika jandela anu dipikahoyong dina fokus. Dina mangsa nu bakal datang, mun anjeun mencet kombinasi ieu, fokus bakal dibikeun ka jandela ieu. Dugi jandela nutup atanapi urang ngalakukeun reset pikeun kombinasi Aksara ieu showwinDetach.

Algoritma skrip showwin siga kieu:

  • Pariksa lamun urang geus apal saméméhna id tina jandela nu fokus kudu ditransfer.
    Upami anjeun émut sareng jandela sapertos kitu masih aya, teras urang mindahkeun fokus ka dinya sareng kaluar.
  • Urang nempo jandela nu ayeuna keur fokus, sarta lamun eta cocog pamundut urang, teras inget id na pikeun muka eta dina mangsa nu bakal datang tur kaluar.
  • Urang buka sahenteuna sababaraha jandela cocok lamun aya atawa buka aplikasi nu dipikahoyong.

Anjeun tiasa mendakan jandela mana anu ayeuna difokuskeun nganggo utilitas konsol xdotool ku jalan ngarobah kaluaranna kana format héksadesimal:

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

Cara panggampangna pikeun nginget hiji hal dina bash nyaéta nyieun file dina sistem file virtual anu aya dina mémori. Dina Ubuntu ieu diaktipkeun sacara standar di /dev/shm/. Abdi teu bisa ngomong nanaon ngeunaan sebaran séjén, Kuring miharep éta aya hal sarupa teuing. Anjeun tiasa ningali kalayan paréntah:

$ mount -l | grep tmpfs

Skrip bakal nyiptakeun diréktori kosong dina folder ieu, sapertos kieu: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Salaku tambahan, unggal waktos disebut bakal nyiptakeun symlink /dev/shm/$USER/showwin/showwin_last dina /dev/shm/$USER/showwin/$SEARCH_REGEX. Ieu bakal diperlukeun guna, upami diperlukeun, miceun jandela id pikeun kombinasi tangtu ngagunakeun skrip showwinDetach.

Naon bisa ningkat

Anu mimiti, skrip kedah dikonpigurasi sacara manual. Tangtosna, kusabab kabutuhan pikeun ngalenyepan sareng ngalakukeun seueur ku panangan anjeun, seueur anjeun moal nyobian ngonpigurasikeun sistem. Upami éta mungkin ngan saukur masang pakét sareng ngonpigurasikeun sadayana langkung gampang, maka sigana bakal kéngingkeun popularitas. Teras tingali, aplikasina bakal dileupaskeun kana distribusi standar.

Jeung sugan eta bisa dipigawé leuwih gampang. Upami ku id tina jandela anjeun tiasa terang id prosés anu nyiptakeunana, sareng ku id prosés anjeun tiasa terang anu paréntah anu nyiptakeunana, maka éta bakal tiasa ngajadikeun otomatis setup. Nyatana, kuring henteu ngartos naha naon anu kuring nyerat dina paragraf ieu mungkin. Kanyataan yén kuring pribadi wareg jeung cara gawéna ayeuna. Tapi lamun batur salian ti kuring manggihan sakabeh pendekatan merenah tur batur ngaronjatkeun eta, teras kuring bakal senang ngagunakeun solusi hadé.

Masalah anu sanés, sakumaha anu kuring parantos nyerat, nyaéta dina sababaraha kasus windows teu tiasa dibédakeun tina anu sanés. Sajauh Kuring geus ngan observasi ieu kalawan incognito di Chrome / kromium, tapi sugan aya hal sarupa tempat sejenna. Salaku pilihan terakhir, sok aya pilihan kombinasi universal Alt + 1...Alt + 0. Sakali deui, kuring nganggo Firefox sareng pikeun kuring pribadi masalah ieu henteu signifikan.

Tapi masalah anu penting pikeun kuring nyaéta kuring nganggo Mac OS pikeun digawé sareng kuring henteu tiasa ngonpigurasikeun anu sapertos kitu di dinya. utilitas wmctrl Jigana mah bisa install deui, tapi teu bener dianggo dina Mac OS. Aya anu tiasa dilakukeun ku aplikasi Automator, Tapi éta jadi slow yén éta téh teu merenah ngagunakeun sanajan eta berpungsi. Kuring ogé teu bisa nyetél kombinasi konci ambéh maranéhanana digawé di sakabéh program. Upami aya anu ujug-ujug mendakan solusi, kuring bakal resep ngagunakeunana.

Gantina kacindekan

Tétéla sajumlah ageung kecap anu teu disangka-sangka pikeun fungsionalitas anu katingalina saderhana. Kuring hayang nepikeun gagasan jeung teu overload téks, tapi kuring teu acan ilahar kaluar kumaha carana ngabejaan eta leuwih basajan. Panginten éta langkung saé dina format pidéo, tapi jalma-jalma henteu resep éta di dieu.

Kuring ngobrol sakedik ngeunaan naon anu aya dina tiung naskah sareng kumaha ngonpigurasikeunana. Kuring teu balik kana detil tina naskah sorangan, tapi ngan 50 garis, jadi teu hese ngarti.

Kuring miharep yén batur bakal nyobian gagasan ieu malah meureun ngahargaan eta. Abdi tiasa nyarios ngeunaan diri kuring yén naskahna ditulis sakitar 3 taun ka pengker sareng éta pisan merenah pikeun kuring. Jadi merenah nu ngabalukarkeun ngarareunah serius nalika gawé bareng komputer jalma séjén. Sareng sareng MacBook anu tiasa dianggo.

Tumbu ka naskah

sumber: www.habr.com

Tambahkeun komentar