Jesyon fenèt altènatif nan Linux

Mwen se youn nan moun ki mete Caps Lock pou chanje layout paske mwen twò parese pou peze 2 kle lè mwen ka peze youn. Mwen ta menm renmen 2 kle ki pa nesesè: mwen ta sèvi ak youn pou vire sou Layout angle a, ak dezyèm lan pou Ris. Men, dezyèm kle ki pa nesesè se rele meni kontèks la, ki tèlman pa nesesè ke anpil manifaktirè laptop koupe li. Se konsa, ou dwe kontante w ak sa ou genyen.

Apre sa, mwen pa vle gade pou ikon yo sou ba tach la lè chanje fenèt yo, oswa trape non yo lè w ap defile nan. Alt + Tab, woule nan biwo, elatriye Mwen vle peze yon konbinezon kle (depreferans jis youn, men pa gen okenn kle gratis ki pa nesesè ankò) epi imedyatman jwenn nan fenèt mwen bezwen an. Pou egzanp tankou sa a:

  • Alt+F: Firefox
  • Alt+D: Firefox (Navigasyon prive)
  • Alt+T: Tèminal
  • Alt+M: Kalkilatè
  • Alt+E: Lide IntelliJ
  • elatriye.

Anplis, pa peze, pou egzanp, sou Alt+M Mwen vle wè kalkilatris la kèlkeswa si pwogram sa a ap kouri kounye a. Si li ap kouri, Lè sa a, fenèt li yo bezwen yo dwe bay konsantre, epi si se pa, kouri pwogram nan vle ak transfere konsantre lè li chaje.

Pou ka ki pa kouvri pa script anvan an, mwen vle gen konbinezon kle inivèsèl ki ka fasilman asiyen nan nenpòt nan fenèt yo louvri. Pou egzanp, mwen gen 10 konbinezon asiyen nan Alt 1 до Alt 0, ki pa mare nan okenn pwogram. Mwen ka jis klike sou Alt 1 ak fenèt la ki se kounye a nan konsantre pral jwenn konsantre lè klike sou Alt 1.

Anba koupe a gen yon deskripsyon yon koup plis karakteristik ak yon repons sou ki jan sa ka fè. Men, mwen pral imedyatman avèti ou ke pèsonalizasyon sa yo "pou tèt ou" ka lakòz gwo dejwe e menm retrè si ou bezwen sèvi ak Windows, Mac OS oswa menm òdinatè yon lòt moun ak Linux.

Anfèt, si ou panse osijè de sa, nou pa sèvi ak anpil pwogram sou yon baz chak jou. Yon navigatè, yon tèminal, yon IDE, kèk kalite mesaje, yon manadjè dosye, yon kalkilatris e, petèt, se prèske tout. Ou pa bezwen anpil rakoursi klavye pou kouvri 95% nan travay ou chak jou.

Pou pwogram ki gen plizyè fenèt louvri, youn nan yo ka deziyen kòm youn prensipal la. Pou egzanp, ou gen plizyè fenèt IntelliJ Idea louvri epi yo asiyen Alt + E. Nan kondisyon nòmal, lè ou peze Alt + E kèk fenèt nan pwogram sa a ap louvri, gen plis chans youn nan ki te louvri an premye. Sepandan, si ou klike sou Alt + E lè youn nan fenèt yo nan pwogram sa a deja konsantre, Lè sa a, fenèt patikilye sa a pral asiyen kòm youn nan prensipal epi li pral youn nan yo pral bay konsantre lè konbinezon ki vin apre yo ap peze.

Fenèt prensipal la ka reyaji. Pou fè sa, ou dwe premye Reyajiste konbinezon an, ak Lè sa a, bay yon lòt fenèt kòm fenèt prensipal la. Pou Reyajiste yon konbinezon, ou bezwen peze konbinezon an tèt li, ak Lè sa a, yon konbinezon espesyal Reyajiste, mwen gen li asiyen nan Alt + Backspace. Sa a pral rele yon script ki pral retire fenèt prensipal la pou konbinezon anvan an. Lè sa a, ou ka bay yon nouvo fenèt prensipal jan sa dekri nan paragraf anvan an. Reyajiste yon fenèt ki lye nan konbinezon inivèsèl fèt nan menm fason an.

Entwodiksyon an te vin long, men mwen te vle premye di sa nou pral fè, epi answit eksplike kijan pou fè li.

Pou moun ki bouke ak lekti

Nan ti bout tan, lyen ki mennen nan scripts yo se nan fen atik la.

Men, ou toujou pa yo pral kapab enstale epi sèvi ak li touswit. Ou pral premye bezwen konnen ki jan script la jwenn fenèt la vle. San sa a, li pa pral posib yo di script la ki kote egzakteman konsantre a bezwen transfere. Epi ou bezwen konprann sa pou w fè si toudenkou yon fenèt apwopriye pa jwenn.

Apre sa, mwen pa pral konsantre sou ki jan yo configured ekzekisyon an nan scripts pa peze konbinezon kle. Pou egzanp, nan KDE li se nan Anviwònman Sistèm → Rakoursi → Rakoursi Custom. Sa a ta dwe tou nan lòt manadjè fenèt yo.

Prezante wmctrl

Wmctrl — sèvis piblik konsole pou kominike avèk X Window Manager. Sa a se pwogram kle pou script la. Ann pran yon gade rapid nan ki jan ou ka itilize li.

Premyèman, ann montre yon lis fenèt ki louvri:

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

Opsyon -l montre yon lis tout fenèt ki louvri, epi -x ajoute non klas la nan pwodiksyon an (skype.Skype, Navigator.Firefox elatriye). Isit la nou bezwen id fenèt (kolòn 1), non klas (kolòn 3) ak non fenèt (dènye kolòn).

Ou ka eseye aktive kèk fenèt lè l sèvi avèk opsyon an -a:

$ wmctrl -a skype.Skype -x

Si tout bagay te ale selon plan an, fenèt Skype a ta dwe parèt sou ekran an. Si olye pou yo opsyon a -x itilize opsyon -i, Lè sa a, olye pou yo non klas la ou ka presize id fenèt la. Pwoblèm nan ak id se ke id fenèt la chanje chak fwa aplikasyon an te lanse epi nou pa ka konnen li davans. Nan lòt men an, atribi sa a inikman idantifye yon fenèt, ki ka enpòtan lè yon aplikasyon ouvè plis pase yon fenèt. Plis sou sa a yon ti kras pi lwen.

Nan etap sa a nou bezwen sonje ke nou pral chèche fenèt la vle lè l sèvi avèk regex pa pwodiksyon wmctrl -lx. Men, sa pa vle di nou dwe sèvi ak yon bagay konplike. Anjeneral non klas la oswa non fenèt la ase.

Fondamantalman, lide prensipal la ta dwe deja klè. Nan paramèt rakoursi/rakoursi mondyal yo pou manadjè fenèt ou a, configured konbinezon ki nesesè pou egzekite script la.

Ki jan yo sèvi ak scripts

Premye ou bezwen enstale sèvis piblik konsole wmctrl и xdotool:

$ sudo apt-get install wmctrl xdotool

Apre sa, ou bezwen telechaje scripts yo epi ajoute yo nan $ CHEMEN. Mwen anjeneral mete yo nan ~/bin:

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

Si anyè a ~/bin pa t 'la, Lè sa a, ou bezwen kreye li ak rdemare (oswa re-konekte), otreman ~/bin pa pral frape $ CHEMEN. Si tout bagay fèt kòrèkteman, Lè sa a, scripts yo ta dwe aksesib nan konsole a ak fini Tab ta dwe travay.

Script prensipal montrew pran 2 paramèt: premye a se yon regex, pa ki nou pral chèche fenèt ki nesesè yo, ak dezyèm paramèt la se yon lòd ki bezwen egzekite si yo pa jwenn fenèt ki nesesè yo.

Ou ka eseye kouri yon script, pou egzanp:

$ showwin "Mozilla Firefox$" firefox

Si Firefox enstale, yo ta dwe konsantre sou fenèt li a. Menm si Firefox pa t ap kouri, li ta dwe kòmanse.

Si li travay, Lè sa a, ou ka eseye configured ekzekisyon an nan kòmandman sou konbinezon. Nan rakoursi mondyal yo ajoute:

  • Alt + F: montre "Mozilla Firefox$" Firefox
  • Alt+D: montre "Mozilla Firefox (Navigasyon Prive)$" "firefox -private-window"
  • Alt+C: montre "chromium-browser.Chromium-browser N*" chromium-browser
  • Alt+X: montre "chromium-browser.Chromium-browser I*" "chromium-browser -incognito"
  • Alt + S: montre "skype.Skype" skypeforlinux
  • Alt+E: montre "jetbrains-idea" lide.sh

Elatriye Tout moun ka configured konbinezon kle ak lojisyèl jan yo wè anfòm.
Si tout bagay te travay kòrèkteman, Lè sa a, lè l sèvi avèk konbinezon ki anwo yo nou yo pral kapab chanje ant fenèt pa senpleman peze kle.

Mwen pral desevwa rayisab chrome: li ka enkoyito distenge yon fenèt regilye pa pwodiksyon li yo wmctrl Ou pa kapab, yo gen menm non klas yo ak tit fenèt yo. Nan regex yo pwopoze a, karaktè N* ak I* yo nesesè sèlman pou ekspresyon regilye sa yo diferan youn ak lòt epi yo ka asiyen yo kòm fenèt prensipal yo.

Pou Reyajiste fenèt prensipal la nan konbinezon anvan an (an reyalite pou regex, ki montrew rele dènye fwa) ou bezwen rele script la showwinDetach. Mwen gen script sa a asiyen nan yon konbinezon kle Alt + Backspace.

Nan script la montrew gen yon lòt fonksyon. Lè yo rele li ak yon paramèt (nan ka sa a paramèt la se jis yon idantifyan), li pa tcheke regex la ditou, men li konsidere tout fenèt yo apwopriye. Nan tèt li, sa a sanble initil, men nan fason sa a nou ka deziyen nenpòt fenèt kòm youn nan prensipal epi byen vit chanje nan fenèt patikilye sa a.

Mwen gen konbinezon sa yo configuré:

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

Nan fason sa a mwen ka mare nenpòt fenèt nan konbinezon Alt 1...Alt 0. Jis pa klike Alt 1 Mwen mare fenèt aktyèl la ak konbinezon sa a. Mwen ka anile obligatwa a lè mwen klike sou Alt 1ak lè sa a Alt + Backspace. Oswa fèmen fenèt la, ki travay tou.

Apre sa, mwen pral di w kèk detay teknik. Ou pa bezwen li yo, men jis eseye mete yo kanpe epi wè. Men, mwen ta toujou rekòmande konprann scripts lòt moun anvan ou kouri yo sou òdinatè ou :).

Ki jan yo fè distenksyon ant diferan fenèt nan menm aplikasyon an

Nan prensip, premye egzanp "wmctrl -a skype.Skype -x" t ap travay epi yo ka itilize. Men, ann gade ankò nan egzanp lan ak Firefox, nan ki 2 fenèt yo louvri:

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

Premye fenèt la se mòd nòmal, ak dezyèm lan se Navigasyon Prive. Mwen ta renmen konsidere fenèt sa yo kòm aplikasyon diferan epi chanje nan yo lè l sèvi avèk konbinezon kle diferan.

Li nesesè konplike script la ki chanje fenèt yo. Mwen te itilize solisyon sa a: montre yon lis tout fennèt, fè grep pa regex, pran premye liy lan ak tèt, jwenn premye kolòn (sa a pral id fenèt la) lè l sèvi avèk koupe, chanje nan fenèt pa id.

Ta dwe gen yon blag sou ekspresyon regilye ak de pwoblèm, men an reyalite mwen pa sèvi ak anyen konplike. Mwen bezwen ekspresyon regilye pou mwen ka endike fen liy lan (senbòl "$") epi distenge "Mozilla Firefox$" ak "Mozilla Firefox (Navigasyon Prive)$".

Kòmandman an sanble yon bagay tankou sa a:

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

Isit la ou ka deja devine sou dezyèm karakteristik nan script la: si grep pa retounen anyen, Lè sa a, aplikasyon an vle a pa louvri epi ou bezwen kòmanse li pa egzekite lòd ki soti nan dezyèm paramèt la. Lè sa a, detanzantan tcheke si fenèt ki nesesè a louvri yo nan lòd yo transfere konsantre sou li. Mwen pa pral konsantre sou sa a; nenpòt moun ki bezwen li pral gade sous yo.

Lè aplikasyon fenèt yo pa distenge

Se konsa, nou te aprann ki jan yo transfere konsantre nan fenèt la nan aplikasyon an vle. Men, e si yon aplikasyon gen plis pase yon fenèt louvri? Kiyès mwen ta dwe konsantre sou? Script ki anwo a pral gen plis chans transfere nan premye fenèt la louvri. Sepandan, nou ta renmen plis fleksibilite. Mwen ta renmen kapab sonje ki fenèt nou bezwen epi chanje nan fenèt patikilye sa a.

Lide a te sa a: Si nou vle sonje yon fenèt espesifik pou yon konbinezon kle, Lè sa a, nou bezwen peze konbinezon sa a lè fenèt la vle konsantre. Nan tan kap vini an, lè ou peze konbinezon sa a, yo pral konsantre sou fenèt sa a. Jiskaske fenèt la fèmen oswa nou fè yon reset pou konbinezon script sa a showwinDetach.

Algorithm script montrew yon bagay tankou sa a:

  • Tcheke si nou te deja sonje idantite fenèt la kote konsantre yo ta dwe transfere.
    Si ou sonje ak yon fenèt konsa toujou egziste, Lè sa a, nou transfere konsantre sou li epi sòti.
  • Nou gade nan ki fenèt ki konsantre kounye a, epi si li matche ak demann nou an, Lè sa a, sonje id li yo ale nan li nan lavni an epi sòti.
  • Nou ale nan omwen kèk fenèt apwopriye si li egziste oswa louvri aplikasyon an vle.

Ou ka chèche konnen ki fenèt ki konsantre kounye a lè w sèvi ak sèvis piblik konsole xdotool lè w konvèti pwodiksyon li an fòma egzadesimal:

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

Fason ki pi fasil yo sonje yon bagay nan bash se kreye dosye nan yon sistèm dosye vityèl ki sitiye nan memwa. Nan Ubuntu sa a se aktive pa default nan /dev/shm/. Mwen pa ka di anyen sou lòt distribisyon, mwen espere ke gen yon bagay ki sanble tou. Ou ka gade ak kòmandman an:

$ mount -l | grep tmpfs

Script la pral kreye repèrtwar vid nan katab sa a, tankou sa a: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Anplis de sa, chak fwa li rele li pral kreye yon lyen senbolik /dev/shm/$USER/showwin/showwin_last sou /dev/shm/$USER/showwin/$SEARCH_REGEX. Sa a pral nesesè yo nan lòd yo, si sa nesesè, retire id fenèt la pou yon konbinezon sèten lè l sèvi avèk yon script showwinDetach.

Ki sa ki ka amelyore

Premyèman, scripts yo dwe configuré manyèlman. Se vre wi, akòz bezwen nan fouye nan ak fè anpil ak men ou, anpil nan nou pa pral menm eseye konfigirasyon sistèm nan. Si li te posib tou senpleman enstale pake a ak konfigirasyon tout bagay pi fasil, Lè sa a, petèt li ta jwenn kèk popilarite. Apre sa, gade, aplikasyon an ta dwe lage nan distribisyon estanda.

E petèt li ka fè pi fasil. Si pa idantite yon fenèt ou ka jwenn idantite pwosesis la ki te kreye li, ak idantite pwosesis la ou ka chèche konnen ki kòmandman ki te kreye li, lè sa a li ta posib pou otomatize konfigirasyon an. An reyalite, mwen pa t konprann si sa mwen te ekri nan paragraf sa a te posib. Reyalite a se ke mwen pèsonèlman satisfè ak fason li travay kounye a. Men, si yon lòt moun pase m 'jwenn tout apwòch la pratik epi yon moun amelyore li, Lè sa a, mwen pral kontan sèvi ak yon solisyon pi bon.

Yon lòt pwoblèm, jan mwen te deja ekri, se ke nan kèk ka fenèt yo pa ka distenge youn ak lòt. Jiskaprezan mwen te sèlman obsève sa a ak enkoyito nan chrome / chromium, men petèt gen yon bagay ki sanble yon lòt kote. Kòm yon dènye rekou, toujou gen opsyon nan konbinezon inivèsèl Alt 1...Alt 0. Ankò, mwen sèvi ak Firefox e pou mwen pèsonèlman pwoblèm sa a pa enpòtan.

Men, pwoblèm nan enpòtan pou mwen se ke mwen itilize Mac OS pou travay epi mwen pa t 'kapab konfigirasyon anyen tankou sa la. sèvis piblik wmctrl Mwen panse ke mwen te kapab enstale li, men li pa reyèlman travay sou Mac OS. Yon bagay ka fè ak aplikasyon an Automator, men li tèlman dousman ke li pa pratik pou itilize menm lè li ap travay. Mwen menm mwen pa t 'kapab mete kanpe konbinezon kle pou yo te travay nan tout pwogram yo. Si yon moun toudenkou vini ak yon solisyon, mwen pral kontan sèvi ak li.

Olye pou yo yon konklizyon

Li te tounen yon nimewo sanzatann gwo nan mo pou tankou yon fonksyonalite w pèdi senp. Mwen te vle transmèt lide a epi yo pa twò chaje tèks la, men mwen poko kalkile ki jan yo di li plis tou senpleman. Petèt li ta pi bon nan fòma videyo, men moun pa renmen li konsa isit la.

Mwen te pale yon ti kras sou sa ki anba kapo a nan script la ak ki jan yo konfigirasyon li. Mwen pa t 'antre nan detay sou script nan tèt li, men li se sèlman 50 liy, kidonk li pa difisil a konprann.

Mwen espere ke yon lòt moun pral eseye lide sa a e petèt menm apresye li. Mwen ka di sou tèt mwen ke script la te ekri sou 3 ane de sa e li trè pratik pou mwen. Se konsa, pratik ke li lakòz gwo malèz lè w ap travay ak òdinatè lòt moun. Ak yon MacBook k ap travay.

Link nan scripts

Sous: www.habr.com

Add nouvo kòmantè