Rêveberiya pencereyê ya alternatîf di Linux de

Ez yek ji wan im ku Caps Lock destnîşan kiriye ku sêwiranan biguhezîne ji ber ku ez pir tembel im ku gava ku ez bikaribim yek bişkojkê bixim 2 bişkokan. Tewra ez 2 bişkokên nehewce jî dixwazim: Ez ê yekê bikar bînim da ku sêwirana Englishngilîzî vekim, ya duyemîn jî ji bo rûsî. Lê mifteya duyemîn a nehewce ev e ku meriv menuya kontekstê bang bike, ku ew qas nepêwist e ku ji hêla gelek hilberînerên laptopê ve tê qut kirin. Ji ber vê yekê divê hûn bi tiştên ku we hene razî bibin.

Di heman demê de ez naxwazim dema ku pencereyan diguhezînin li îkonên wan li ser bara peywirê bigerim, an dema ku digerim navan bigirim Alt + Tab, di sermaseyan de bigerim, û hwd. Ez dixwazim bişkojek bişkojkê (bi îdeal tenê yek, lê êdî bişkokên nehewce yên belaş tune) û tavilê biçim pencereya ku ez hewce dikim. Mînak bi vî rengî:

  • Alt + F: Firefox
  • Alt+D: Firefox (Gotina Taybet)
  • Alt + T: Termînalê
  • Alt+M: Hesibkar
  • Alt + E: IntelliJ Idea
  • etc.

Wekî din, ji bo nimûne, bi zextê Alt+M Ez dixwazim hesabkerê bibînim bêyî ku ev bername niha dimeşe. Ger ew dimeşe, wê hingê pêdivî ye ku pencereya wê balê bikişîne, û heke na, bernameya xwestî bimeşîne û dema ku ew bar dike balê veguhezîne.

Ji bo dozên ku ji hêla skrîpta berê ve nehatine nixumandin, ez dixwazim bi hev re bişkojkên gerdûnî hebin ku dikarin bi hêsanî li yek ji pencereyên vekirî werin veqetandin. Mînakî, ji min re 10 kombînasyona hatine destnîşankirin Alt + 1 ber Alt + 0, ku bi tu bernameyan ve girêdayî ne. Ez dikarim tenê bikirim Alt + 1 û pencereya ku niha balê dikişîne dê dema ku were tikandin balê dikişîne Alt + 1.

Li jêr qutkirinê danasîna çend taybetmendiyên din û bersivek heye ka meriv çawa ev dikare were kirin. Lê ez ê tavilê hişyarî bidim we ku xwerûkirinek wusa "ji bo xwe" dikare bibe sedema girêdanek giran û tewra vekişînek heke hûn hewce ne ku Windows, Mac OS an jî komputera kesek din bi Linux re bikar bînin.

Bi rastî, heke hûn li ser wê bifikirin, em rojane ew çend bernameyan bikar naynin. Gerokek, termînalek, IDE, celebek peyamber, rêveberek pelê, hesabkerek û, dibe ku, hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hema hebe. Ji bo vegirtina 95% ji karên rojane hewce ne gelek berhevokên sereke hene.

Ji bo bernameyên ku gelek pencereyên vekirî ne, yek ji wan dikare wekî ya sereke were destnîşan kirin. Mînakî, we gelek pencereyên IntelliJ Idea vekirî ne û ji wan re hatine veqetandin Alt + E. Di bin şert û mercên normal de, gava ku hûn çap dikin Alt + E hin pencereyên vê bernameyê dê vebe, bi îhtîmaleke mezin ya ku pêşî hat vekirin. Lêbelê, heke hûn li ser bikirtînin Alt + E gava yek ji pencereyên vê bernameyê jixwe balê dikişîne, wê hingê ev pencereya taybetî dê wekî ya sereke were destnîşan kirin û ew ê be ku dema ku lihevhatinên paşîn têne pêl kirin bal were kişandin.

Pencereya sereke dikare ji nû ve were veqetandin. Ji bo kirina vê yekê, divê hûn pêşî berhevokê ji nû ve saz bikin, û dûv re pencereyek din jê re wekî pencereya sereke destnîşan bikin. Ji bo ji nû ve veavakirina berhevokê, hûn hewce ne ku hevberdanê bixwe bixin, û dûv re jî kombînasyonek vesazkirina taybetî, min ew ji bo Alt+Backspace. Ev ê skrîptek bang bike ku dê pencereya sereke ji bo kombînasyona berê betal bike. Û dûv re hûn dikarin pencereyek sereke ya nû wekî ku di paragrafa berê de hatî diyar kirin destnîşan bikin. Veguheztina pencereyek girêdayî bi hevberdanên gerdûnî bi heman rengî pêk tê.

Pêşgotin dirêj bû, lê min dixwest pêşî bêjim ka em ê çi bikin, û paşê rave bikim ka meriv wê çawa bike.

Ji bo kesên ku ji xwendinê bêzar bûne

Bi kurtasî, girêdana skrîptan di dawiya gotarê de ye.

Lê dîsa jî hûn ê nikaribin wê di cih de saz bikin û bikar bînin. Pêşî hûn ê hewce bikin ku fêr bibin ka skrîpt çawa pencereya xwestî dibîne. Bêyî vê yekê, ne gengaz e ku meriv ji senaryoyê bêje ku tam pêdivî ye ku bal were veguheztin. Û hûn hewce ne ku hûn fêm bikin ka çi bikin ger ji nişkê ve pencereyek maqûl neyê dîtin.

Û ez ê bala xwe nekim ka meriv çawa bi tikandina berhevokên kilîtan ve pêkanîna senaryoyan mîheng dike. Mînakî, di KDE de ew di Mîhengên Sîstemê → Kurtebir → Kurtenivîsên Xwestî de ye. Divê ev di rêveberên pencereyên din de jî wisa be.

Nasandina wmctrl

Wmctrl - Alîkariya konsolê ji bo danûstendina bi Rêvebirê Pencere X. Ev bernameya sereke ya skrîptê ye. Werin em bi lez nihêrîn ka hûn çawa dikarin wê bikar bînin.

Pêşîn, em navnîşek pencereyên vekirî nîşan bidin:

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

Dibe -l navnîşek hemî pencereyên vekirî nîşan dide, û -NNS navê polê li dergehê zêde dike (skype.Skype, Navigator.Firefox hwd). Li vir pêdiviya me bi nasnameya pencereyê (stûna 1), navê polê (stûna 3) û navê pencereyê (stûna paşîn) heye.

Hûn dikarin bi karanîna vebijarkê hewl bidin ku hin pencereyan çalak bikin -a:

$ wmctrl -a skype.Skype -x

Ger her tişt li gorî planê çû, pencereya Skype divê li ser ekranê xuya bibe. Ger li şûna vebijêrkê -x vebijêrk bikar bînin -i, paşê li şûna navê polê hûn dikarin id-ya paceyê diyar bikin. Pirsgirêka id-ê ev e ku her carê ku serîlêdan dest pê dike nasnameya pencereyê diguhere û em nikanin wê pêşwext nas bikin. Ji hêla din ve, ev taybetmendî bi rengek yekta pencereyek nas dike, ku gava serîlêdan ji yek pencereyê zêdetir vedike dikare girîng be. Zêdetir li ser vê hinekî din.

Di vê qonaxê de divê em ji bîr mekin ku em ê pencereya xwestinê bi karanîna regex-ê ji hêla derketinê ve bigerin wmctrl -lx. Lê ev nayê wê wateyê ku divê em tiştek tevlihev bikar bînin. Bi gelemperî navê polê an navê pencereyê bes e.

Di bingeh de, ramana sereke divê jixwe zelal be. Di mîhengên bişkojkên germ/kurteyên gerdûnî yên ji bo rêvebirê pencereya xwe de, ji bo cîbicîkirina skrîptê kombînasyona pêwîst mîheng bikin.

Meriv çawa nivîsan bikar tîne

Pêşî hûn hewce ne ku karûbarên konsolê saz bikin wmctrl и xdotool:

$ sudo apt-get install wmctrl xdotool

Dûv re hûn hewce ne ku skrîptan dakêşin û wan lê zêde bikin $ PATH. Ez bi gelemperî wan dixim hundur ~/bin:

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

Ger pelrêça ~/bin ne li wir bû, wê hingê hûn hewce ne ku wê biafirînin û ji nû ve bidin destpêkirin (an ji nû ve têkevin), wekî din ~/bin dê nexe $ PATH. Ger her tişt rast were kirin, wê hingê divê nivîsar ji konsolê bigihîjin û temamkirina Tabê bixebite.

Nivîsara sereke showwin 2 parameteran digire: ya yekem regexek e, ku em ê pê ve li pencereya pêwîst bigerin, û parametreya duyemîn fermanek e ku ger pencereya pêwîst neyê dîtin divê were bicîh kirin.

Hûn dikarin skrîptekê biceribînin, mînakî:

$ showwin "Mozilla Firefox$" firefox

Heke Firefox-ê hatî saz kirin, divê paceya wê balê bikişîne. Ger Firefox nexebitî jî, divê dest pê bikira.

Ger ew kar dike, wê hingê hûn dikarin biceribînin ku pêkanîna fermanan li ser kombînasyonan mîheng bikin. Di mîhengên bişkokên germ/kurteyên gerdûnî de lê zêde bikin:

  • Alt + F: "Mozilla Firefox$" firefox nîşan bide
  • Alt+D: nîşan bide "Mozilla Firefox (Gotina Taybet)$" "firefox -pencereya taybet"
  • Alt+C: geroka "chromium-browser.Chromium-browser N*" chromium-browser nîşan bide
  • Alt+X: nîşan bide "chromium-browser.Chromium-browser I*" "chromium-browser -incognito"
  • Alt+S: skypeforlinux "skype.Skype" nîşan bide
  • Alt+E: ramana "jetbrains-idea" nîşan bide.sh

Uwd.. Her kes dikare li gorî ku dibîne berhevok û nermalava sereke mîheng bike.
Ger her tişt rast bi rê ve çû, wê hingê em ê bi karanîna hevbendên jorîn bikar bînin ku bi tenê bi tikandina bişkokan ve di navbera pencereyan de biguhezînin.

Ez ê evîndarên kromê bêhêvî bikim: ew dikare pencereyek birêkûpêk ji hêla hilberîna xwe ve nenas cuda bike wmctrl Hûn nekarin, wan navên polê û sernavên pencereyê heman hene. Di regeksa pêşniyarkirî de, tîpên N* û I* tenê hewce ne ku ev bêjeyên birêkûpêk ji hev cûda bibin û ew wekî pencereyên sereke bêne destnîşan kirin.

Ji bo vesazkirina pencereya sereke ya berhevoka berê (bi rastî ji bo regex, ku showwin cara paşîn tê gotin) hûn hewce ne ku hûn li senaryoyê telefon bikin showwinDetach. Min ev skrîpt ji kombînasyona mifteyê re hatî veqetandin Alt+Backspace.

Li senaryoyê showwin fonksiyonek din heye. Dema ku ew bi yek parametreyê tê gazî kirin (di vê rewşê de parametre tenê nasnameyek e), ew bi tevahî regexê kontrol nake, lê hemî pencereyan guncan dibîne. Bi serê xwe, ev bêkêr xuya dike, lê bi vî rengî em dikarin her pencereyê wekî ya sereke destnîşan bikin û zû veguhezînin wê pencereya taybetî.

Min berhevokên jêrîn mîheng kirin:

  • Alt + 1: nîşan bide "CustomKey1"
  • Alt + 2: nîşan bide "CustomKey2"
  • ...
  • Alt + 0: nîşan bide "CustomKey0"
  • Alt+Backspace: showwinDetach

Bi vî rengî ez dikarim her pencereyan bi hevbendan ve girêbidim Alt + 1...Alt + 0. Tenê bi tikandina Alt + 1 Ez pencereya heyî bi vê tevliheviyê ve girêdidim. Ez dikarim bi tikandina girêdanê betal bikim Alt + 1, and then Alt+Backspace. An jî pencereyê bigire, ew jî dixebite.

Piştre ez ê hin hûrguliyên teknîkî ji we re vebêjim. Hûn ne hewce ne ku wan bixwînin, lê tenê hewl bidin ku wan saz bikin û bibînin. Lê dîsa jî ez ê pêşniyar bikim ku berî ku wan li ser komputera xwe bimeşînin, nivîsarên kesên din fam bikin :).

Meriv çawa di navbera paceyên cihêreng ên heman serîlêdanê de cûda dike

Di prensîbê de, mînaka yekem "wmctrl -a skype.Skype -x" dixebitî û dikare were bikar anîn. Lê em dîsa li mînaka Firefoxê binêrin, ku tê de 2 pace vekirî ne:

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

Paceya yekem moda normal e, û ya duyemîn Geroka Taybet e. Ez dixwazim van pencereyan wekî serîlêdanên cihêreng bihesibînim û bi karanîna hevbendên mifteyê yên cihêreng veguhezînim wan.

Pêdivî ye ku skrîpta ku pencereyan diguherîne tevlihev bike. Min ev çareserî bikar anî: navnîşek hemî pencereyan nîşan bide, bike grep bi regex, rêza yekem bi serê, stûna yekem bistînin (ev ê nasnameya pencereyê be) bikar bînin birrîn, veguherîne pencereyê bi id.

Divê henekek li ser bêjeyên birêkûpêk û du pirsgirêkan hebe, lê bi rastî ez tiştek tevlihev bikar naynim. Ji bo ku ez bikaribim dawiya rêzê (nîşana "$") nîşan bidim û "Mozilla Firefox$" ji "Mozilla Firefox (Govegera Taybet)$" cuda bikim ji min re bêjeyên rêkûpêk lazim in.

Ferman tiştek bi vî rengî xuya dike:

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

Li vir hûn dikarin jixwe taybetmendiya duyemîn a skrîptê texmîn bikin: heke grep tiştek venegerîne, wê hingê serîlêdana xwestî ne vekirî ye û hûn hewce ne ku wê bi pêkanîna fermanê ji pîvana duyemîn dest pê bikin. Û dûv re periyodîk kontrol bikin ka pencereya pêwîst vebûye da ku balê li ser veguhezîne. Ez ê li ser vê yekê nesekinim; kesê ku hewce bike dê li çavkaniyan binêre.

Dema ku paceyên serîlêdanê nayên cûda kirin

Ji ber vê yekê, me fêr kir ku meriv çawa balê dikişîne ser pencereya serîlêdana xwestî. Lê heke serîlêdanek ji yek pencereyê vekirî be, çi dibe? Divê ez bala xwe bidim kîjanê? Nivîsara li jor bi îhtîmalek mezin dê veguhezîne pencereya yekem a vekirî. Lêbelê, em bêtir nermbûn dixwazin. Ez dixwazim bikaribim bi bîr bînim ka kîjan pencereyê ji me re lazim e û biçim ser wê pencereya taybetî.

Fikir ev bû: Heke em dixwazin pencereyek taybetî ji bo berhevokek bişkojkê bi bîr bînin, wê hingê pêdivî ye ku em vê kombînasyonê bişkînin dema ku pencereya xwestî li ber çavan be. Di pêşerojê de, gava ku hûn vê kombînasyona pêl bikin, dê baldarî li vê pencereyê were dayîn. Heya ku pencereyê bigire an jî em ji bo vê kombînasyona skrîptê vesazkirinê bikin showwinDetach.

Algorîtmaya Skrîptê showwin tiştekî wiha:

  • Kontrol bikin ka me berê id-ya pencereya ku divê bal were veguheztin ji bîr kiriye.
    Ger tê bîra we û pencereyek wusa hîn jî heye, wê hingê em balê dikişînin ser wê û derdikevin.
  • Em li kîjan pencereyê naha di balê de ye dinêrin, û ger ew bi daxwaza me re têkildar be, wê hingê nasnameya wê bi bîr bînin ku di pêşerojê de biçin wê û derkevin.
  • Ger ku hebe em diçin bi kêmî ve pencereyek guncan an jî serîlêdana xwestinê vedikin.

Hûn dikarin fêr bibin ka kîjan pencereya naha di balê de ye bi karanîna kargêriya konsolê xdotool bi veguheztina hilberîna wê li forma hexadecimal:

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

Awayê herî hêsan ku meriv tiştek di bash de bi bîr bîne ev e ku meriv pelan di pergala pelê virtual ya ku di bîranînê de ye biafirîne. Di Ubuntu de ev ji hêla xwerû ve tê çalak kirin /dev/shm/. Ez nikarim di derbarê belavkirinên din de tiştek bibêjim, ez hêvî dikim ku tiştek wusa jî hebe. Hûn dikarin bi fermanê binêrin:

$ mount -l | grep tmpfs

Skrîpt dê di vê peldankê de pelrêçekên vala biafirîne, mîna vê: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Wekî din, her carê ku jê re tê gotin ew ê sîmlinkek çêbike /dev/shm/$USER/showwin/showwin_last li ser /dev/shm/$USER/showwin/$SEARCH_REGEX. Ev ê hewce bike ku, ger hewce bike, nasnameya pencereyê ji bo berhevokek bi karanîna skrîptê were rakirin showwinDetach.

Çi dikare çêtir bibe

Pêşîn, divê nivîsar bi destan werin mîheng kirin. Bê guman, ji ber ku hewce ye ku meriv bi destên xwe ve mijûl bibe û gelek tiştan bike, pir ji we jî dê hewl nedin ku pergalê mîheng bikin. Ger gengaz bû ku meriv bi tenê pakêtê saz bike û her tiştî bi hêsanî mîheng bike, wê hingê dibe ku ew ê hin populerbûnê bidest bixe. Û dûv re binihêrin, serîlêdan dê di belavkirinên standard de were berdan.

Û dibe ku ew hêsantir be. Ger bi nasnameya pencereyê hûn dikarin nasnameya pêvajoya ku ew afirandiye fêr bibin, û bi nasnameya pêvajoyê hûn dikarin fêr bibin ka kîjan ferman ew afirandiye, wê hingê dê gengaz be ku sazkirinê bixweber bike. Bi rastî, min fêm nekir ka tiştê ku min di vê paragrafê de nivîsand gengaz e. Rastî ev e ku ez bi xwe ji awayê ku niha dixebite razî me. Lê heke kesek ji bilî min tevahiya nêzîkatiyê hêsan dibîne û kesek wê çêtir dike, wê hingê ez ê kêfxweş bibim ku çareseriyek çêtir bikar bînim.

Pirsgirêkek din, wekî ku min berê jî nivîsî, ev e ku di hin rewşan de pencere ji hev nayên cûda kirin. Heya nuha min tenê ev bi nenaskirî di chrome/chromium de dîtiye, lê dibe ku li cîhek din tiştek wusa hebe. Wekî çareya paşîn, her gav vebijarka hevbendiyên gerdûnî heye Alt + 1...Alt + 0. Dîsa, ez Firefox bikar tînim û ji bo min bixwe ev pirsgirêk ne girîng e.

Lê pirsgirêka girîng ji bo min ev e ku ez Mac OS-ê ji bo xebatê bikar tînim û min nekarî li wir tiştek wusa mîheng bikim. bikêrhatî wmctrl Ez difikirim ku min karîbû wê saz bikim, lê ew bi rastî li ser Mac OS-ê naxebite. Tiştek bi serîlêdanê dikare were kirin Automator, lê ew qas hêdî ye ku karanîna wê ne rehet e jî dema ku dixebite. Di heman demê de min nekarî berhevokên sereke saz bikim da ku ew di hemî bernameyan de bixebitin. Ger kesek ji nişka ve çareseriyek peyda bike, ez ê kêfxweş bibim ku wê bikar bînim.

Şûna encamê

Ji bo fonksiyonek wusa hêsan xuya bû ku hejmareke neçaverê ya peyvan e. Min xwest ku ez ramanê ragihînim û nivîsê zêde negirim, lê min hîna fêhm nekiriye ku meriv wê çawa bi hêsanî vebêjim. Dibe ku ew ê di forma vîdyoyê de çêtir be, lê mirov li vir bi vî rengî jê hez nakin.

Min hinekî li ser tiştê ku di bin kavilê senaryoyê de ye û meriv wê çawa mîheng bike axivî. Ez neçûm nav hûrguliyên senaryoyê bixwe, lê ew tenê 50 rêz e, ji ber vê yekê ne dijwar e ku meriv fêm bike.

Ez hêvî dikim ku kesek din dê vê ramanê biceribîne û belkî jî wê binirxîne. Ez dikarim li ser xwe bibêjim ku senaryo 3 sal berê hatiye nivîsandin û ji bo min PIR guncan e. Ew qas hêsan e ku dema ku bi komputerên kesên din re dixebitin dibe sedema nerehetiyek cidî. Û bi MacBookek xebitîn.

Girêdana skrîptan

Source: www.habr.com

Add a comment