Идоракунии тирезаҳои алтернативӣ дар Linux

Ман яке аз онҳое ҳастам, ки Caps Lock-ро барои иваз кардани тарҳҳо муқаррар кардааст, зеро ман хеле танбалам, ки 2 тугмаро пахш кунам, вақте ки якеро пахш карда метавонам. Ман ҳатто 2 калиди нолозим мехоҳам: ман якеро барои фаъол кардани тарҳбандии англисӣ ва дуюмро барои забони русӣ истифода мебарам. Аммо калиди дуюми нолозим даъват кардани менюи контекстӣ аст, ки он қадар нолозим аст, ки онро бисёре аз истеҳсолкунандагони ноутбукҳо буридаанд. Пас шумо бояд бо он чизе ки доред, қаноат кунед.

Ва ман инчунин намехоҳам ҳангоми иваз кардани тирезаҳо нишонаҳои онҳоро дар панели супоришҳо ҷустуҷӯ кунам ё ҳангоми ҳаракат кардан номҳоро бигирам Alt + Tab, дар байни мизи корӣ ва ғайра ҳаракат кунед. Ман мехоҳам як комбинатсияи калидҳоро пахш кунам (идеалӣ танҳо як, аммо дигар калидҳои нолозими ройгон вуҷуд надоранд) ва фавран ба равзанаи лозима ворид шавам. Масалан, чунин:

  • Alt+F: Firefox
  • Alt+D: Firefox (Баррасии хусусӣ)
  • Alt+T: Терминал
  • Alt+M: Ҳисобкунак
  • Alt+E: Идеяи IntelliJ
  • ва гайра.

Гузашта аз ин, бо пахшкунии, масалан, дар Alt+M Ман мехоҳам ҳисобкунакро бубинам, новобаста аз он ки ин барнома ҳоло кор мекунад ё не. Агар он кор кунад, пас равзанаи он бояд фокус дода шавад ва агар не, барномаи дилхоҳро иҷро кунед ва ҳангоми боркунӣ фокусро интиқол диҳед.

Барои ҳолатҳое, ки бо скрипти қаблӣ фаро гирифта нашудаанд, ман мехоҳам комбинатсияи калидҳои универсалӣ дошта бошам, ки онҳоро ба ҳама гуна тирезаҳои кушода ба осонӣ таъин кардан мумкин аст. Масалан, ман 10 комбинатсияи таъин аз Alt + 1 ба Alt + 0, ки ба ягон барнома вобаста нестанд. Ман метавонам танҳо клик кунам Alt + 1 ва тирезае, ки ҳоло дар фокус қарор дорад, ҳангоми пахш кардан фокус мегирад Alt + 1.

Дар зер буриш тавсифи якчанд хусусияти дигар ва ҷавоб ба он ки чӣ тавр ин корро кардан мумкин аст. Аммо ман фавран шуморо огоҳ мекунам, ки чунин мутобиқсозӣ "барои худ" метавонад боиси нашъамандии шадид ва ҳатто хуруҷ шавад, агар ба шумо лозим ояд, ки Windows, Mac OS ё ҳатто компютери ягон каси дигарро бо Linux истифода баред.

Дарвоқеъ, агар шумо дар ин бора фикр кунед, мо ҳамарӯза ин қадар барномаҳоро истифода намебарем. Браузер, терминал, IDE, як намуди паёмнавис, менеҷери файл, ҳисобкунак ва шояд ин қариб ҳама бошад. Барои пӯшонидани 95% вазифаҳои ҳаррӯза чанд комбинатсияи калидӣ лозим нест.

Барои барномаҳое, ки якчанд равзанаи кушода доранд, яке аз онҳоро метавон ҳамчун барномаи асосӣ таъин кард. Масалан, шумо якчанд тирезаҳои IntelliJ Idea доред ва ба онҳо таъин кардаед Alt + E. Дар шароити муқаррарӣ, вақте ки шумо пахш мекунед Alt + E баъзе равзанаи ин барнома кушода мешавад, эҳтимоли он, ки аввал кушода шудааст. Аммо, агар шумо клик кунед Alt + E вақте ки яке аз тирезаҳои ин барнома аллакай дар фокус қарор дорад, он гоҳ ин равзанаи мушаххас ҳамчун тирезаи асосӣ таъин карда мешавад ва он ҳамонест, ки ҳангоми пахш кардани комбинатсияҳои минбаъда диққати махсус дода мешавад.

Равзанаи асосӣ метавонад аз нав таъин карда шавад. Барои ин шумо бояд аввал комбинатсияро аз нав танзим кунед ва баъд ба он равзанаи дигарро ҳамчун равзанаи асосӣ таъин кунед. Барои аз нав барқарор кардани комбинатсия, шумо бояд худи комбинатсияро пахш кунед, ва он гоҳ комбинатсияи аз нав танзимкунии махсус, ман онро таъин кардам Alt+Backspace. Ин скриптро даъват мекунад, ки равзанаи асосиро барои комбинатсияи қаблӣ бекор мекунад. Ва он гоҳ шумо метавонед равзанаи нави асосиро тавре ки дар сархати қаблӣ тавсиф шудааст таъин кунед. Аз нав танзимкунии равзанаи пайвастшуда ба комбинатсияи универсалӣ ҳамин тавр сурат мегирад.

Муқаддима тӯлонӣ шуд, аммо ман мехостам аввал бигӯям, ки мо чӣ кор мекунем ва баъд чӣ гуна бояд онро фаҳмонам.

Барои онхое, ки аз хондан хаста шудаанд

Хулоса, истиноди скриптҳо дар охири мақола аст.

Аммо шумо ба ҳар ҳол наметавонед онро фавран насб кунед ва истифода баред. Шумо аввал бояд бифаҳмед, ки скрипт равзанаи дилхоҳро чӣ гуна пайдо мекунад. Бе ин, ба скрипт гуфтан имконнопазир аст, ки фокусро ба куҷо интиқол додан лозим аст. Ва шумо бояд бифаҳмед, ки чӣ бояд кард, агар ногаҳон равзанаи мувофиқ пайдо нашавад.

Ва ман дар бораи чӣ гуна танзим кардани иҷрои скриптҳо бо пахшкунии комбинатсияи калидҳо тамаркуз намекунам. Масалан, дар KDE он дар Танзимоти система → Миёнабурҳо → Миёнабурҳои фармоишӣ ҷойгир аст. Ин бояд дар дигар менеҷерҳои тиреза низ бошад.

Муаррифии wmctrl

Wmctrl — утилитаи консол барои ҳамкорӣ бо X Window Manager. Ин барномаи калидӣ барои скрипт аст. Биёед зуд дида бароем, ки чӣ тавр шумо метавонед онро истифода баред.

Аввалан, биёед рӯйхати тирезаҳои кушодаро нишон диҳем:

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

Интихоб -l рӯйхати ҳамаи тирезаҳои кушодаро намоиш медиҳад ва -НС номи синфро ба баромад илова мекунад (skype.Skype, Navigator.Firefox ғайра). Дар ин ҷо ба мо ID тиреза (сутуни 1), номи синф (сутуни 3) ва номи тиреза (сутуни охирин) лозим аст.

Шумо метавонед кӯшиш кунед, ки баъзе тирезаҳоро бо истифода аз ин интихоб фаъол созед -a:

$ wmctrl -a skype.Skype -x

Агар ҳама чиз мувофиқи нақша сурат гирад, равзанаи Skype бояд дар экран пайдо шавад. Агар ба чои вариант -x имконоти истифода баред -i, пас ба ҷои номи синф шумо метавонед id-и тирезаро муайян кунед. Мушкилот бо id дар он аст, ки ID тиреза ҳар дафъае, ки барнома оғоз мешавад, тағир меёбад ва мо онро пешакӣ дониста наметавонем. Аз тарафи дигар, ин атрибут тирезаро ба таври беназир муайян мекунад, ки он метавонад ҳангоми кушодани барнома зиёда аз як тиреза муҳим бошад. Муфассалтар дар ин бора каме бештар.

Дар ин марҳила мо бояд дар хотир дошта бошем, ки мо равзанаи дилхоҳро бо истифода аз regex аз рӯи натиҷа ҷустуҷӯ хоҳем кард wmctrl -lx. Аммо ин маънои онро надорад, ки мо бояд чизи мураккабро истифода барем. Одатан номи синф ё номи тиреза кифоя аст.

Асосан, фикри асосй бояд аллакай равшан бошад. Дар танзимоти глобалии зуд-клавиатура/миёнабурҳо барои мудири равзанаи худ комбинатсияи лозимиро барои иҷрои скрипт танзим кунед.

Чӣ тавр истифода бурдани скриптҳо

Аввал шумо бояд утилитаҳои консолро насб кунед wmctrl и xdotool:

$ sudo apt-get install wmctrl xdotool

Минбаъд шумо бояд скриптҳоро зеркашӣ кунед ва ба онҳо илова кунед $ PATH. Ман одатан онҳоро мегузорам ~/бин:

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

Агар директория ~/бин набуд, пас шумо бояд онро эҷод кунед ва аз нав оғоз кунед (ё аз нав ворид шавед), вагарна ~/бин намезанад $ PATH. Агар ҳама чиз дуруст анҷом дода шуда бошад, пас скриптҳо бояд аз консол дастрас бошанд ва анҷоми ҷадвал бояд кор кунад.

Скрипти асосӣ showwin 2 параметрро мегирад: якум regex аст, ки ба воситаи он равзанаи заруриро меҷӯем ва параметри дуюм фармонест, ки дар сурати пайдо нашудани равзанаи лозимӣ иҷро кардан лозим аст.

Шумо метавонед скриптро иҷро кунед, масалан:

$ showwin "Mozilla Firefox$" firefox

Агар Firefox насб карда шуда бошад, равзанаи он бояд диққати махсус дода шавад. Ҳатто агар Firefox кор намекард, он бояд оғоз мешуд.

Агар он кор кунад, шумо метавонед кӯшиш кунед, ки иҷрои фармонҳоро дар комбинатсия танзим кунед. Дар танзимоти hotkeys/миёнабурҳои глобалӣ илова кунед:

  • Alt+F: showwin "Mozilla Firefox$" Firefox
  • Alt+D: showwin "Mozilla Firefox (Баррасии хусусӣ)$" "firefox -равзанаи хусусӣ"
  • Alt+C: showwin "cromium-browser.Chromium-browser N*" браузери хром
  • Alt+X: showwin "cromium-browser.Chromium-browser I*" "chromium-browser -incognito"
  • Alt+S: нишон додани "skype.Skype" skypeforlinux
  • Alt+E: showwin "jetbrains-idea" idea.sh

Ва ғайра. Ҳар як шахс метавонад таркиби калидҳо ва нармафзорро мувофиқи мувофиқи худ танзим кунад.
Агар ҳама чиз дуруст анҷом дода шуда бошад, пас бо истифода аз комбинатсияҳои дар боло зикршуда мо метавонем бо пахш кардани тугмаҳо байни тирезаҳо гузарем.

Ман дӯстдорони хромро ноумед хоҳам кард: он метавонад новобаста аз равзанаи муқаррариро аз рӯи баромадаш фарқ кунад wmctrl Шумо наметавонед, онҳо як номҳои синф ва унвонҳои тиреза доранд. Дар регекси пешниҳодшуда аломатҳои N* ва I* танҳо барои он лозиманд, ки ин ибораҳои муқаррарӣ аз ҳамдигар фарқ кунанд ва онҳоро ҳамчун равзанаҳои асосӣ таъин кардан мумкин аст.

Барои барқарор кардани равзанаи асосии комбинатсияи қаблӣ (дар асл барои regex, ки showwin дафъаи охир занг зад) шумо бояд скриптро занг занед showwinDetach. Ман ин скриптро ба комбинатсияи калидӣ таъин кардам Alt+Backspace.

Дар скрипт showwin боз як вазифаи дигар вуҷуд дорад. Вақте ки он бо як параметр даъват карда мешавад (дар ин ҳолат параметр танҳо идентификатор аст), вай регексро тамоман тафтиш намекунад, балки ҳама тирезаҳоро мувофиқ мешуморад. Худ аз худ, ин бефоида ба назар мерасад, аммо бо ин роҳ мо метавонем ягон тирезаро ҳамчун тирезаи асосӣ таъин кунем ва зуд ба он равзанаи мушаххас гузарем.

Ман комбинатсияи зеринро танзим кардаам:

  • Alt+1: нишон додани "CustomKey1"
  • Alt+2: нишон додани "CustomKey2"
  • ...
  • Alt+0: нишон додани "CustomKey0"
  • Alt+Backspace: showwinDetach

Бо ин роҳ ман метавонам ҳама гуна тирезаҳоро ба комбинатсия пайваст кунам Alt + 1...Alt + 0. Танҳо бо клик Alt + 1 Ман равзанаи ҷорӣро ба ин комбинатсия мепайвандам. Ман метавонам пайвасткуниро тавассути клик бекор кунам Alt + 1ва баъд Alt+Backspace. Ё тирезаро пӯшед, ин ҳам кор мекунад.

Минбаъд ман ба шумо баъзе тафсилоти техникиро мегӯям. Ба шумо лозим нест, ки онҳоро хонед, аммо танҳо кӯшиш кунед, ки онҳоро танзим кунед ва бубинед. Аммо ман ба ҳар ҳол тавсия медиҳам, ки скриптҳои одамони дигарро пеш аз кор дар компютери худ фаҳмед :).

Чӣ тавр байни тирезаҳои гуногуни як барнома фарқ кардан мумкин аст

Аслан, намунаи аввалини "wmctrl -a skype.Skype -x" кор мекард ва метавонад истифода шавад. Аммо биёед бори дигар ба мисоли Firefox назар андозем, ки дар он 2 тиреза кушода аст:

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

Равзанаи аввал ҳолати муқаррарӣ аст ва дуюмаш браузери хусусӣ аст. Ман мехоҳам ин тирезаҳоро ҳамчун замимаҳои гуногун ҳисоб кунам ва бо истифода аз таркиби калидҳои гуногун ба онҳо гузарам.

Скриптро, ки тирезаҳоро иваз мекунад, мураккаб кардан лозим аст. Ман ин ҳалли худро истифода кардам: рӯйхати ҳамаи тирезаҳоро нишон диҳед, иҷро кунед grep бо regex, сатри аввалро бо сарлавҳа, сутуни аввалро гиред (ин идентификатсияи тиреза хоҳад буд) бо истифода аз набуред,, гузариш ба тиреза аз рӯи ID.

Дар бораи ибораҳои муқаррарӣ ва ду мушкилот бояд шӯхӣ бошад, аммо дар асл ман ҳеҷ чизи мураккабро истифода намебарам. Ба ман ибораҳои муқаррарӣ лозим аст, то ман метавонам охири сатрро (рамзи “$”) нишон диҳам ва “Mozilla Firefox$”-ро аз “Mozilla Firefox (Private Browsing)$” фарқ кунам.

Фармон чунин менамояд:

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

Дар ин ҷо шумо аллакай дар бораи хусусияти дуюми скрипт тахмин карда метавонед: агар grep чизе барнагардонад, он гоҳ барномаи дилхоҳ кушода нест ва шумо бояд онро бо иҷрои фармон аз параметри дуюм оғоз кунед. Ва он гоҳ мунтазам тафтиш кунед, ки оё тирезаи зарурӣ барои интиқоли фокус ба он кушода шудааст. Ман ба ин тамаркуз намекунам; ҳар касе, ки ба он ниёз дорад, ба манбаъҳо назар мекунад.

Вақте ки тирезаҳои барномаҳо фарқ намекунанд

Ҳамин тавр, мо фаҳмидем, ки чӣ гуна фокусро ба равзанаи барномаи дилхоҳ интиқол додан мумкин аст. Аммо чӣ мешавад, агар барнома зиёда аз як тиреза кушода бошад? Ман бояд ба кадоме диққат диҳам? Скрипти дар боло овардашуда эҳтимолан ба равзанаи кушодаи аввалин интиқол дода мешавад. Бо вуҷуди ин, мо мехоҳем, ки чандирии бештар дошта бошад. Ман мехостам дар хотир дошта бошам, ки кадом тиреза ба мо лозим аст ва ба он равзанаи мушаххас гузаред.

Идея чунин буд: Агар мо мехоҳем, ки равзанаи мушаххасро барои комбинатсияи калидҳо дар хотир нигоҳ дорем, пас мо бояд ин комбинатсияро ҳангоми дар фокус будани равзанаи дилхоҳ пахш кунем. Дар оянда, вақте ки шумо ин комбинатсияро пахш мекунед, диққат ба ин тиреза дода мешавад. То он даме, ки тиреза пӯшида шавад ё мо барои ин комбинатсияи скрипт аз нав танзим мекунем showwinDetach.

Алгоритми скрипт showwin чизе монанди ин:

  • Санҷед, ки оё мо қаблан ID-и равзанаро, ки фокус бояд ба он интиқол дода шавад, дар хотир доштем.
    Агар шумо дар хотир доред ва чунин равзана то ҳол вуҷуд дорад, мо фокусро ба он интиқол медиҳем ва мебароем.
  • Мо мебинем, ки кадом тиреза дар айни замон дар маркази таваҷҷӯҳ қарор дорад ва агар он ба дархости мо мувофиқат кунад, пас ID-и онро дар хотир доред, ки дар оянда ба он равед ва хориҷ шавед.
  • Мо ҳадди аққал ба равзанаи мувофиқ меравем, агар он мавҷуд бошад ё барномаи дилхоҳро кушоем.

Шумо метавонед тавассути табдил додани баромади он ба формати шонздаҳӣ бо истифода аз утилитаи консол xdotool фаҳмед, ки кадом равзана ҳоло дар фокус қарор дорад:

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

Роҳи осонтарини дар хотир нигоҳ доштани чизе дар bash ин сохтани файлҳо дар системаи файлии виртуалӣ дар хотира мебошад. Дар Ubuntu ин ба таври нобаёнӣ дар /dev/shm/. Ман дар бораи тақсимоти дигар чизе гуфта наметавонам, умедворам, ки чизе ба ин монанд вуҷуд дорад. Шумо метавонед бо фармони зерин назар кунед:

$ mount -l | grep tmpfs

Скрипт дар ин ҷузвдон директорияҳои холӣ эҷод мекунад, ба монанди: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Илова бар ин, ҳар дафъае, ки он даъват карда мешавад, он аломати рамзӣ эҷод мекунад /dev/shm/$USER/showwin/showwin_last ба /dev/shm/$USER/showwin/$SEARCH_REGEX. Ин барои он лозим мешавад, ки агар лозим бошад, идентификати тирезаро барои комбинатсияи муайян бо истифода аз скрипт нест кунед showwinDetach.

Чиро такмил додан мумкин аст

Аввалан, скриптҳо бояд дастӣ танзим карда шаванд. Бешубҳа, аз сабаби зарурати омӯхтан ва анҷом додани корҳои зиёде бо дасти худ, бисёре аз шумо ҳатто кӯшиш намекунанд, ки системаро танзим кунед. Агар танҳо насб кардани баста ва ба осонӣ танзим кардани ҳама чиз имконпазир мебуд, пас шояд он маъруфият пайдо мекард. Ва он гоҳ бубинед, ки барнома ба тақсимоти стандартӣ бароварда мешавад.

Ва шояд ин корро осонтар кардан мумкин аст. Агар бо идентификатори равзана шумо метавонед идентификатсияи равандеро, ки онро офаридааст, ва аз рӯи id-и раванд фаҳмед, ки кадом фармон онро офаридааст, пас танзимро автоматӣ кардан мумкин аст. Дар асл, ман нафаҳмидам, ки оё он чизе, ки дар ин банд навиштаам имконпазир аст ё не. Гап дар сари он аст, ки шахсан ман аз тарзи кори он каноатмандам. Аммо агар касе ғайр аз ман тамоми равишро қулай ёбад ва касе онро такмил диҳад, ман бо хушнудӣ як роҳи беҳтареро истифода мебарам.

Мушкилоти дигар, чунон ки ман аллакай навишта будам, дар он аст, ки дар баъзе мавридҳо тирезаҳоро аз ҳамдигар фарқ кардан мумкин нест. То ба ҳол ман инро танҳо бо инкогнито дар хром/хром мушоҳида кардам, аммо шояд дар ҷои дигар чизе монанд бошад. Ҳамчун чораи охирин, ҳамеша варианти комбинатсияи универсалӣ вуҷуд дорад Alt + 1...Alt + 0. Боз, ман Firefox-ро истифода мебарам ва шахсан барои ман ин мушкилот муҳим нест.

Аммо мушкили муҳим барои ман дар он аст, ки ман Mac OS-ро барои кор истифода мебарам ва ман дар он ҷо чизеро танзим карда натавонистам. фоиданок wmctrl Ман фикр мекунам, ки ман тавонистам онро насб кунам, аммо он воқеан дар Mac OS кор намекунад. Бо ариза чизе кардан мумкин аст Автоматикӣ, аммо он чунон суст аст, ки ҳатто ҳангоми кор кардан қулай нест. Ман инчунин натавонистам комбинатсияи калидҳоро танзим кунам, то онҳо дар ҳама барномаҳо кор кунанд. Агар касе ногаҳон ҳалли худро пайдо кунад, ман аз он истифода мекунам.

Ба ҷои хулоса

Маълум шуд, ки миқдори зиёди калимаҳо барои чунин як функсияи ба назар содда. Ман мехостам ғояро расонам ва матнро аз ҳад зиёд пурбор накунам, аммо ман ҳанӯз нафаҳмидам, ки чӣ гуна онро соддатар баён кунам. Шояд дар формати видеоӣ беҳтар мебуд, аммо дар ин ҷо ба мардум маъқул нест.

Ман каме дар бораи он чӣ дар зери сарпӯши скрипт ва чӣ тавр ба танзим дароред он сӯҳбат. Ман ба ҷузъиёти худи скрипт нарафтам, аммо он ҳамагӣ 50 сатр аст, бинобар ин фаҳмидани он душвор нест.

Умедворам, ки ягон каси дигар ин идеяро санҷида, шояд ҳатто онро қадр кунад. Ман дар бораи худ гуфта метавонам, ки сценария тақрибан 3 сол пеш навишта шуда буд ва барои ман Хеле қулай аст. Он қадар қулай аст, ки ҳангоми кор бо компютерҳои одамони дигар боиси нороҳатии ҷиддӣ мегардад. Ва бо MacBook коркунанда.

Истинод ба скриптҳо

Манбаъ: will.com

Илова Эзоҳ