Alternatibong pagdumala sa bintana sa Linux

Usa ko sa nagbutang ug Caps Lock para mag switch ug layout kay tapolan ko mupindot ug 2 keys kung makapindot ug usa. Gusto pa nako ang 2 nga wala kinahanglana nga mga yawe: Akong gamiton ang usa aron ma-on ang layout sa English, ug ang ikaduha alang sa Russian. Apan ang ikaduha nga wala kinahanglana nga yawe mao ang pagtawag sa menu sa konteksto, nga wala kinahanglana nga kini giputol sa daghang mga tiggama sa laptop. Busa kinahanglang kontento ka sa unsay naa nimo.

Ug dili ko usab gusto nga pangitaon ang ilang mga icon sa taskbar kung magbalhin mga bintana, o dakpon ang mga ngalan kung mag-scroll Alt + tab, pag-scroll sa mga desktop, ug uban pa. Gusto nako nga pug-on ang usa ka kombinasyon sa yawe (mas maayo nga usa ra, apan wala nay libre nga wala kinahanglana nga mga yawe) ug dayon moadto sa bintana nga akong gikinahanglan. Pananglitan sama niini:

  • Alt+F: Firefox
  • Alt+D: Firefox (Pribado nga Pag-browse)
  • Alt+T: Terminal
  • Alt+M: Calculator
  • Alt+E: Ideya sa IntelliJ
  • ug uban pa.

Dugang pa, pinaagi sa pagpadayon, pananglitan, sa Alt+M Gusto nako nga makita ang calculator bisan kung kini nga programa nagdagan karon. Kung kini nagdagan, nan ang bintana niini kinahanglan nga hatagan og focus, ug kung dili, padagana ang gitinguha nga programa ug ibalhin ang focus kung kini nagkarga.

Alang sa mga kaso nga wala nasakup sa miaging script, gusto nako nga adunay unibersal nga yawe nga mga kombinasyon nga dali nga ma-assign sa bisan unsang bukas nga bintana. Pananglitan, ako adunay 10 ka kombinasyon nga gi-assign gikan sa Alt + 1 sa Alt + 0, nga wala mahigot sa bisan unsang mga programa. ma click ra nako Alt + 1 ug ang bintana nga anaa karon sa focus makakuha og focus kon i-klik Alt + 1.

Ubos sa pagputol adunay usa ka paghulagway sa usa ka magtiayon nga dugang nga mga bahin ug usa ka tubag kung giunsa kini mahimo. Apan pasidan-an ko dayon ka nga ang ingon nga pag-customize "para sa imong kaugalingon" mahimong hinungdan sa grabe nga pagkaadik ug bisan ang pag-atras kung kinahanglan nimo gamiton ang Windows, Mac OS o bisan ang kompyuter sa uban nga adunay Linux.

Sa tinuud, kung hunahunaon nimo kini, wala kami mogamit sa daghang mga programa matag adlaw. Usa ka browser, usa ka terminal, usa ka IDE, usa ka matang sa messenger, usa ka file manager, usa ka calculator ug, tingali, hapit tanan. Wala’y daghang yawe nga kombinasyon nga gikinahanglan aron masakop ang 95% sa adlaw-adlaw nga mga buluhaton.

Alang sa mga programa nga adunay daghang mga bintana nga bukas, ang usa niini mahimong itudlo nga panguna. Pananglitan, ikaw adunay daghang IntelliJ Idea windows nga bukas ug gi-assign sa Alt + E. Ubos sa normal nga mga kahimtang, kung imong gipugos Alt + E ang pipila ka bintana niini nga programa moabli, lagmit ang usa nga unang giablihan. Bisan pa, kung nag-klik ka sa Alt + E sa diha nga ang usa sa mga bintana niini nga programa anaa na sa focus, nan kini nga partikular nga bintana itudlo ingon nga ang nag-unang usa ug kini mao ang usa nga gihatag focus sa diha nga ang sunod-sunod nga mga kombinasyon gipugos.

Ang main window mahimong i-reassign. Aron mahimo kini, kinahanglan nimo nga i-reset una ang kombinasyon, ug dayon i-assign ang lain nga bintana niini ingon nga panguna nga bintana. Aron ma-reset ang usa ka kombinasyon, kinahanglan nimo nga ipadayon ang kombinasyon mismo, ug dayon usa ka espesyal nga kombinasyon sa pag-reset, gi-assign ko kini sa Alt + Backspace. Magtawag kini og script nga mag-unassign sa main window para sa miaging kombinasyon. Ug unya mahimo nimong i-assign ang usa ka bag-ong panguna nga bintana sama sa gihulagway sa miaging parapo. Ang pag-reset sa usa ka nalambigit nga bintana sa unibersal nga mga kombinasyon mahitabo sa parehas nga paagi.

Ang pasiuna nahimo nga taas, apan gusto nako nga isulti una kung unsa ang among buhaton, ug dayon ipasabut kung giunsa kini buhaton.

Para sa mga gikapoy sa pagbasa

Sa laktud, ang link sa mga script naa sa katapusan sa artikulo.

Apan dili gihapon nimo ma-install ug magamit kini dayon. Kinahanglan nimo una nga mahibal-an kung giunsa pagpangita sa script ang gusto nga bintana. Kung wala kini, dili posible nga isulti ang script kung diin kinahanglan nga ibalhin ang pokus. Ug kinahanglan nimo nga masabtan kung unsa ang buhaton kung kalit nga wala makit-an ang usa ka angay nga bintana.

Ug dili ko mag-focus kung giunsa ang pag-configure sa pagpatuman sa mga script pinaagi sa pagpindot sa mga yawe nga kombinasyon. Pananglitan, sa KDE kini anaa sa System Settings β†’ Shortcuts β†’ Custom Shortcuts. Kini kinahanglan usab nga mahitabo sa ubang mga tagdumala sa bintana.

Gipaila ang wmctrl

Wmctrl - console utility alang sa pakigsulti sa X Window Manager. Kini ang yawe nga programa alang sa script. Atong tan-awon dayon kung giunsa nimo kini magamit.

Una, ipakita nato ang usa ka lista sa bukas nga mga bintana:

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

Kapilian -l nagpakita sa usa ka lista sa tanang bukas nga bintana, ug -Ρ… idugang ang ngalan sa klase sa output (skype.Skype, Navigator.Firefox ug uban pa). Dinhi kinahanglan naton ang window id (kolum 1), ngalan sa klase (kolum 3) ug ngalan sa bintana (katapusan nga kolum).

Mahimo nimong sulayan ang pagpaaktibo sa pipila ka bintana gamit ang kapilian -a:

$ wmctrl -a skype.Skype -x

Kung ang tanan nahiuyon sa plano, ang bintana sa Skype kinahanglan nga makita sa screen. Kung imbes nga kapilian -x opsyon sa paggamit -i, unya imbes sa ngalan sa klase mahimo nimong ipiho ang window id. Ang problema sa id mao nga ang window id mausab sa matag higayon nga ang aplikasyon gilansad ug dili nato kini mahibal-an daan. Sa laing bahin, kini nga hiyas talagsaon nga nagpaila sa usa ka bintana, nga mahimong importante kung ang usa ka aplikasyon magbukas sa labaw sa usa ka bintana. Dugang pa bahin niini.

Niini nga yugto kinahanglan natong hinumdoman nga pangitaon nato ang gusto nga bintana gamit ang regex pinaagi sa output wmctrl -lx. Apan wala kana magpasabot nga kinahanglan namong gamiton ang usa ka butang nga komplikado. Kasagaran ang ngalan sa klase o ngalan sa bintana igo na.

Sa panguna, ang panguna nga ideya kinahanglan nga klaro na. Sa pangkalibutanon nga mga hotkey/shortcut nga mga setting para sa imong window manager, i-configure ang gikinahanglan nga kombinasyon aron mapatuman ang script.

Giunsa paggamit ang mga script

Una kinahanglan nimo nga i-install ang mga gamit sa console wmctrl ΠΈ xdotool:

$ sudo apt-get install wmctrl xdotool

Sunod kinahanglan nimo nga i-download ang mga script ug idugang kini $ PATH. Kasagaran akong ibutang kini ~/bin:

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

Kung ang direktoryo ~/bin wala didto, nan kinahanglan nimo nga buhaton kini ug i-reboot (o pag-login pag-usab), kung dili ~/bin dili maigo $ PATH. Kung ang tanan nahimo sa husto, nan ang mga script kinahanglan nga ma-access gikan sa console ug ang pagkompleto sa Tab kinahanglan molihok.

Panguna nga script showwin nagkinahanglan og 2 nga mga parameter: ang una usa ka regex, diin atong pangitaon ang gikinahanglan nga bintana, ug ang ikaduha nga parameter usa ka sugo nga kinahanglan nga ipatuman kung ang gikinahanglan nga bintana dili makita.

Mahimo nimong sulayan ang pagpadagan sa usa ka script, pananglitan:

$ showwin "Mozilla Firefox$" firefox

Kung na-install ang Firefox, ang bintana niini kinahanglan hatagan og focus. Bisan kung wala nagdagan ang Firefox, kinahanglan nga nagsugod na kini.

Kung kini molihok, nan mahimo nimong sulayan nga i-configure ang pagpatuman sa mga mando sa mga kombinasyon. Sa pangkalibutanon nga mga hotkey/shortcut setting idugang:

  • 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

Ug uban pa. Ang tanan makahimo sa pag-configure sa yawe nga mga kombinasyon ug software sumala sa ilang nakita nga angay.
Kung ang tanan nagtrabaho sa husto, unya gamit ang mga kombinasyon sa ibabaw makahimo kami sa pagbalhin tali sa mga bintana pinaagi lamang sa pagpindot sa mga yawe.

Akong mahigawad ang mga mahigugmaon sa chrome: mahimo kini nga incognito nga mailhan ang usa ka regular nga bintana pinaagi sa output niini wmctrl Dili nimo mahimo, parehas sila nga mga ngalan sa klase ug mga titulo sa bintana. Sa gisugyot nga regex, ang mga simbolo nga N* ug I* gikinahanglan lamang aron kini nga mga regular nga ekspresyon magkalahi gikan sa usag usa ug sila mahimong itudlo isip mga nag-unang bintana.

Aron i-reset ang main window sa miaging kombinasyon (sa tinuud alang sa regex, nga showwin gitawag sa miaging higayon) kinahanglan nimo nga tawagan ang script showwinDetach. Ako adunay kini nga script nga gi-assign sa usa ka yawe nga kombinasyon Alt + Backspace.

Sa script showwin adunay usa pa ka function. Kung kini gitawag nga adunay usa ka parameter (sa kini nga kaso ang parameter usa ra ka identifier), wala kini gisusi ang regex, apan gikonsiderar ang tanan nga mga bintana nga angay. Sa iyang kaugalingon, kini daw walay kapuslanan, apan niining paagiha mahimo natong itudlo ang bisan unsang bintana ingon nga nag-unang usa ug dali nga mobalhin sa partikular nga bintana.

Gi-configure nako ang mosunod nga mga kombinasyon:

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

Niining paagiha mabugkos nako ang bisan unsang mga bintana sa mga kombinasyon Alt + 1...Alt + 0. Pinaagi lang sa pag-klik Alt + 1 Gibugkos nako ang kasamtangan nga bintana niini nga kombinasyon. Mahimo nakong kanselahon ang pagbugkos pinaagi sa pag-klik Alt + 1ug unya Alt + Backspace. O isira ang bintana, kana usab molihok.

Sunod isulti ko kanimo ang pipila ka mga teknikal nga detalye. Dili nimo kinahanglan nga basahon kini, apan sulayi lang nga ipahimutang kini ug tan-awa. Apan irekomendar gihapon nako nga masabtan ang mga script sa ubang mga tawo sa dili pa kini ipadagan sa imong kompyuter :).

Giunsa ang pag-ila tali sa lainlaing mga bintana sa parehas nga aplikasyon

Sa prinsipyo, ang labing una nga pananglitan nga "wmctrl -a skype.Skype -x" nagtrabaho ug mahimong magamit. Apan atong tan-awon pag-usab ang pananglitan sa Firefox, diin ang 2 windows bukas:

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

Ang una nga bintana normal nga mode, ug ang ikaduha mao ang Private Browsing. Gusto nako nga isipon kini nga mga bintana ingon nga lainlaing mga aplikasyon ug ibalhin kini gamit ang lainlaing mga kombinasyon sa yawe.

Kinahanglan nga komplikado ang script nga nagbalhin sa mga bintana. Gigamit nako kini nga solusyon: ipakita ang usa ka lista sa tanan nga mga bintana, buhata grep pinaagi sa regex, kuhaa ang unang linya sa Ulo, kuhaa ang unang kolum (kini ang window id) gamit cut, switch sa bintana pinaagi sa id.

Kinahanglan adunay usa ka komedya bahin sa regular nga mga ekspresyon ug duha ka mga problema, apan sa tinuud wala ako mogamit bisan unsang komplikado. Kinahanglan nako ang regular nga mga ekspresyon aron akong mapakita ang katapusan sa linya (ang "$" nga simbolo) ug mailhan ang "Mozilla Firefox$" gikan sa "Mozilla Firefox (Private Browsing)$".

Ang sugo ingon niini:

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

Dinhi mahimo nimong tag-an ang bahin sa ikaduha nga bahin sa script: kung ang grep wala magbalik bisan unsa, nan ang gitinguha nga aplikasyon dili bukas ug kinahanglan nimo nga sugdan kini pinaagi sa pagpatuman sa mando gikan sa ikaduha nga parameter. Ug dayon susiha matag karon ug unya kung giablihan ang gikinahanglan nga bintana aron mabalhin ang pokus niini. Dili ko magpunting niini; bisan kinsa nga nanginahanglan niini motan-aw sa mga gigikanan.

Kung ang mga bintana sa aplikasyon dili mailhan

Mao nga, nahibal-an namon kung giunsa pagbalhin ang pokus sa bintana sa gusto nga aplikasyon. Apan unsa man kung ang usa ka aplikasyon adunay labaw sa usa ka bintana nga bukas? Asa man nako hatagan ug focus? Ang script sa ibabaw lagmit nga ibalhin sa una nga bukas nga bintana. Bisan pa, gusto namon ang dugang nga pagka-flexible. Gusto nako nga mahinumduman kung unsang bintana ang kinahanglan namon ug ibalhin kana nga partikular nga bintana.

Ang ideya mao kini: Kung gusto namong hinumdoman ang usa ka piho nga bintana alang sa usa ka yawe nga kombinasyon, nan kinahanglan namon nga ipadayon kini nga kombinasyon kung ang gitinguha nga bintana naa sa pokus. Sa umaabot, kung imong pug-on kini nga kombinasyon, ang focus ihatag sa kini nga bintana. Hangtud nga magsira ang bintana o maghimo kami usa ka pag-reset alang sa kini nga kombinasyon sa script showwinDetach.

Algoritmo sa script showwin sama niini:

  • Susiha kung nahinumduman na ba namo kaniadto ang id sa bintana diin kinahanglan ibalhin ang focus.
    Kung nahinumduman nimo ug ang ingon nga usa ka bintana naglungtad pa, nan gibalhin namon ang pokus niini ug paggawas.
  • Among gitan-aw kung unsang bintana ang kasamtangang gipunting, ug kung kini mohaum sa among hangyo, nan hinumdomi ang id niini nga moadto niini sa umaabot ug mogawas.
  • Moadto kami sa labing menos pipila ka angay nga bintana kung naa o ablihan ang gusto nga aplikasyon.

Mahibal-an nimo kung unsang bintana ang karon gipunting gamit ang xdotool console utility pinaagi sa pag-convert sa output niini sa hexadecimal format:

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

Ang labing kadali nga paagi sa paghinumdom sa usa ka butang sa bash mao ang paghimo og mga file sa usa ka virtual file system nga nahimutang sa memorya. Sa Ubuntu kini gipalihok pinaagi sa default sa /dev/shm/. Wala akoy masulti bahin sa ubang mga pag-apod-apod, nanghinaut ko nga adunay susama usab. Mahimo nimong tan-awon uban ang mando:

$ mount -l | grep tmpfs

Ang script maghimo ug walay sulod nga mga direktoryo niini nga folder, sama niini: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Dugang pa, sa matag higayon nga kini gitawag kini maghimo usa ka symlink /dev/shm/$USER/showwin/showwin_last sa /dev/shm/$USER/showwin/$SEARCH_REGEX. Kinahanglan kini aron, kung gikinahanglan, tangtangon ang window id alang sa usa ka piho nga kombinasyon gamit ang usa ka script showwinDetach.

Unsa ang mapauswag

Una, ang mga script kinahanglan nga i-configure nga mano-mano. Sigurado, tungod sa panginahanglan sa pagsusi ug pagbuhat sa daghang mga gamit sa imong mga kamot, daghan kaninyo ang dili gani mosulay sa pag-configure sa sistema. Kung posible nga i-install lang ang package ug mas dali nga ma-configure ang tanan, nan tingali makakuha kini nga pagkapopular. Ug unya tan-awa, ang aplikasyon ipagawas sa mga sumbanan nga pag-apod-apod.

Ug tingali kini mahimo nga mas sayon. Kung pinaagi sa id sa usa ka bintana mahibal-an nimo ang id sa proseso nga nagmugna niini, ug pinaagi sa id sa proseso mahibal-an nimo kung unsang mando ang nagmugna niini, nan posible nga i-automate ang pag-setup. Sa pagkatinuod, wala ko makasabot kon posible ba ang akong gisulat niini nga parapo. Ang tinuod mao nga ako personal nga natagbaw sa paagi sa pagtrabaho niini karon. Apan kung ang usa ka tawo gawas kanako nakakaplag sa tibuuk nga pamaagi nga kombenyente ug adunay nagpauswag niini, nan malipay ako nga mogamit usa ka labi ka maayo nga solusyon.

Ang laing problema, sama sa akong gisulat na, mao nga sa pipila ka mga kaso ang mga bintana dili mailhan gikan sa usag usa. Sa pagkakaron naobserbahan ko lang kini nga adunay incognito sa chrome/chromium, apan tingali adunay susama sa ubang lugar. Ingon usa ka katapusan nga paagi, kanunay adunay kapilian sa mga unibersal nga kombinasyon Alt + 1...Alt + 0. Sa makausa pa, gigamit nako ang Firefox ug alang kanako sa personal kini nga problema dili hinungdanon.

Apan ang hinungdanon nga problema alang kanako mao nga gigamit nako ang Mac OS alang sa trabaho ug dili nako ma-configure ang bisan unsang butang nga ingon niana didto. utility wmctrl Sa akong hunahuna ako nakahimo sa pag-install niini, apan dili kini molihok sa Mac OS. Adunay mahimo sa aplikasyon Automator, apan kini hinay kaayo nga kini dili kombenyente nga gamiton bisan kung kini nagtrabaho. Dili usab nako ma-set up ang yawe nga mga kombinasyon aron kini molihok sa tanan nga mga programa. Kung adunay usa ka tawo nga kalit nga adunay solusyon, malipay ako nga gamiton kini.

Kay sa usa ka konklusyon

Kini nahimo nga usa ka wala damha nga daghang mga pulong alang sa ingon usa ka yano nga pagpaandar. Gusto nakong ipaabot ang ideya ug dili mabug-atan ang teksto, apan wala pa nako mahibal-an kung giunsa kini isulti nga mas yano. Tingali kini mas maayo sa video format, apan ang mga tawo dili ganahan niini nga paagi dinhi.

Naghisgot ako gamay bahin sa kung unsa ang naa sa ilawom sa script ug kung giunsa kini i-configure. Wala ako moadto sa mga detalye sa script mismo, apan kini 50 lamang ka linya, mao nga dili kini lisud sabton.

Nanghinaut ko nga adunay lain nga mosulay niini nga ideya ug tingali mapasalamatan pa kini. Makaingon ko bahin sa akong kaugalingon nga ang script gisulat mga 3 ka tuig na ang milabay ug kini sayon ​​​​kaayo alang kanako. Sayon kaayo nga kini hinungdan sa grabe nga kahasol kung nagtrabaho sa mga kompyuter sa ubang mga tawo. Ug sa usa ka nagtrabaho nga MacBook.

Link sa mga script

Source: www.habr.com

Idugang sa usa ka comment