Linux жүйесінде терезені балама басқару

Мен Caps Lock пернесін макеттерді ауыстыру үшін орнатқандардың бірімін, себебі біреуін баса алатын кезде 2 пернені басуға тым жалқаумын. Мен тіпті 2 қажетсіз кілтті алғым келеді: біреуін ағылшын тілін, екіншісін орыс тілін қосу үшін қолданар едім. Бірақ екінші қажетсіз кілт - контекстік мәзірді шақыру, ол соншалықты қажет емес, сондықтан оны көптеген ноутбук өндірушілері кесіп тастайды. Сондықтан сізде бар нәрсеге қанағаттану керек.

Сондай-ақ мен терезелерді ауыстырған кезде тапсырмалар тақтасында олардың белгішелерін іздегім келмейді немесе жылжу кезінде атауларды ұстағым келмейді. Alt + қойындысы, жұмыс үстелдері бойынша айналдыру және т.б. Мен пернелер тіркесімін басқым келеді (ең дұрысы тек біреуі, бірақ енді бос қажет емес пернелер жоқ) және дереу маған қажет терезеге өткім келеді. Мысалы, келесідей:

  • 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 және т.б). Мұнда бізге терезе идентификаторы (1-баған), сынып атауы (3-баған) және терезе атауы (соңғы баған) қажет.

Опцияны пайдаланып кейбір терезені белсендіруге болады -a:

$ wmctrl -a skype.Skype -x

Егер бәрі жоспарға сәйкес болса, экранда Skype терезесі пайда болуы керек. Егер опцияның орнына -x пайдалану опциясы -i, содан кейін сынып атауының орнына терезе идентификаторын көрсетуге болады. Идентификаторға қатысты мәселе терезе идентификаторы қолданба іске қосылған сайын өзгереді және біз оны алдын ала біле алмаймыз. Екінші жағынан, бұл төлсипат терезені бірегей түрде анықтайды, ол қолданба бірнеше терезені ашқанда маңызды болуы мүмкін. Бұл туралы аздап толығырақ.

Бұл кезеңде біз қажетті терезені шығыс бойынша regex көмегімен іздейтінімізді есте сақтауымыз керек wmctrl -lx. Бірақ бұл біз күрделі нәрсені пайдалануымыз керек дегенді білдірмейді. Әдетте сынып атауы немесе терезе атауы жеткілікті.

Негізінде, негізгі ой қазірдің өзінде анық болуы керек. Терезе менеджеріне арналған ғаламдық жылдам пернелер/төте жолдар параметрлерінде сценарийді орындау үшін қажетті комбинацияны конфигурациялаңыз.

Сценарийлерді қалай пайдалану керек

Алдымен консольдік утилиталарды орнату керек wmctrl и xdotool:

$ sudo apt-get install wmctrl xdotool

Содан кейін сценарийлерді жүктеп алып, оларды қосу керек $ PATH. Мен оларды әдетте қоямын ~/bin:

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

Егер каталог ~/bin жоқ болса, оны жасап, қайта жүктеу керек (немесе қайта кіру), әйтпесе ~/bin соқпайды $ PATH. Егер бәрі дұрыс орындалса, сценарийлер консольден қолжетімді болуы керек және қойындыны аяқтау жұмыс істеуі керек.

Негізгі сценарий showwin 2 параметрді қабылдайды: біріншісі - regex, ол арқылы біз қажетті терезені іздейміз, ал екінші параметр - қажетті терезе табылмаған жағдайда орындалуы керек команда.

Сценарийді іске қосып көруге болады, мысалы:

$ showwin "Mozilla Firefox$" firefox

Firefox орнатылған болса, оның терезесіне назар аудару керек. Firefox іске қосылмаса да, ол іске қосылуы керек еді.

Егер ол жұмыс істесе, комбинациялардағы пәрмендердің орындалуын конфигурациялауға болады. Жаһандық жылдам пернелер/жарлықтар параметрлеріне мыналарды қосыңыз:

  • Alt+F: showwin «Mozilla Firefox$» firefox
  • Alt+D: showwin "Mozilla Firefox (Жеке шолу)$" "firefox -жеке терезе"
  • Alt+C: showwin "chromium-browser. Chromium-browser N*" хром браузері
  • Alt+X: showwin "chromium-browser.Chromium-browser I*" "chrom-browser -incognito"
  • Alt+S: showwin “skype.Skype” skypeforlinux
  • Alt+E: showwin “jetbrains-idea” idea.sh

Әркім пернелер тіркесімін және бағдарламалық құралды өз қалауынша конфигурациялай алады.
Егер бәрі дұрыс орындалса, жоғарыдағы комбинацияларды пайдаланып, біз жай пернелерді басу арқылы терезелер арасында ауыса аламыз.

Мен хромды ұнататындардың көңілін қалдырамын: ол кәдімгі терезені шығуы бойынша инкогнито режимінде ажырата алады wmctrl Сіз жасай алмайсыз, олардың сынып атаулары мен терезе тақырыптары бірдей. Ұсынылған регексте N* және I* таңбалары осы тұрақты өрнектер бір-бірінен ерекшеленуі және оларды негізгі терезелер ретінде тағайындау үшін ғана қажет.

Алдыңғы комбинацияның негізгі терезесін қалпына келтіру үшін (шын мәнінде regex үшін, ол showwin соңғы рет шақырылды) сценарийге қоңырау шалу керек showwinDetach. Менде бұл сценарий пернелер тіркесіміне тағайындалған Alt+Backspace.

Сценарийде showwin тағы бір функция бар. Ол бір параметрмен шақырылғанда (бұл жағдайда параметр тек идентификатор болып табылады), ол регексті мүлде тексермейді, бірақ барлық терезелерді қолайлы деп санайды. Бұл өздігінен пайдасыз болып көрінеді, бірақ осылайша біз кез келген терезені негізгі деп белгілей аламыз және сол терезеге тез ауыса аламыз.

Менде келесі комбинациялар конфигурацияланған:

  • Alt+1: көрсетуwin "CustomKey1"
  • Alt+2: көрсетуwin "CustomKey2"
  • ...
  • Alt+0: көрсетуwin "CustomKey0"
  • Alt+Backspace: showwinDetach

Осылайша мен кез келген терезелерді комбинацияларға байланыстыра аламын Alt + 1...Alt + 0. Тек басу арқылы Alt + 1 Мен ағымдағы терезені осы комбинацияға байланыстырамын. Мен басу арқылы байланыстырудан бас тарта аламын Alt + 1, сосын Alt+Backspace. Немесе терезені жабыңыз, бұл да жұмыс істейді.

Әрі қарай мен сізге кейбір техникалық мәліметтерді айтамын. Оларды оқудың қажеті жоқ, жай ғана орнатуға және көруге тырысыңыз. Бірақ мен басқа адамдардың сценарийлерін компьютерде іске қоспас бұрын түсінуді ұсынар едім :).

Бір қолданбаның әртүрлі терезелерін қалай ажыратуға болады

Негізінде, ең бірінші мысал «wmctrl -a skype.Skype -x» жұмыс істеді және пайдалануға болады. Бірақ 2 терезе ашық болатын Firefox мысалын қайта қарастырайық:

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

Бірінші терезе қалыпты режим, ал екіншісі - Жеке шолу. Мен бұл терезелерді әртүрлі қолданбалар ретінде қарастырып, әртүрлі пернелер тіркесімін пайдаланып оларға ауысқым келеді.

Терезелерді ауыстыратын сценарийді қиындату керек. Мен бұл шешімді қолдандым: барлық терезелердің тізімін көрсетіңіз, жасаңыз grep regex арқылы бірінші жолды алыңыз бас, көмегімен бірінші бағанды ​​алыңыз (бұл терезе идентификаторы болады). кесу, идентификатор бойынша терезеге ауысыңыз.

Тұрақты сөз тіркестері мен екі мәселе туралы әзіл болуы керек, бірақ іс жүзінде мен күрделі ештеңе қолданбаймын. Маған жолдың соңын («$» белгісі) көрсету және «Mozilla Firefox$» мен «Mozilla Firefox (Жеке шолу)$» айырмашылығын көрсету үшін тұрақты өрнектер қажет.

Пәрмен келесідей көрінеді:

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

Мұнда сценарийдің екінші мүмкіндігі туралы қазірдің өзінде болжауға болады: егер grep ештеңе қайтармаса, онда қалаған қолданба ашық емес және оны екінші параметрден пәрменді орындау арқылы бастау керек. Содан кейін фокусты аудару үшін қажетті терезенің ашылғанын мезгіл-мезгіл тексеріңіз. Мен бұған тоқталмаймын; кімге керек болса, дереккөздерге қарайды.

Қолданба терезелері ерекшеленбеген кезде

Сонымен, біз фокусты қажетті қолданбаның терезесіне қалай аудару керектігін білдік. Бірақ қолданбада бірнеше терезе ашылған болса ше? Мен қайсысына көңіл бөлуім керек? Жоғарыдағы сценарий бірінші ашық терезеге ауысады. Дегенмен, біз көбірек икемділікті қалаймыз. Бізге қай терезе керек екенін есте сақтап, сол терезеге ауысуды қалаймын.

Идея мынадай болды: пернелер тіркесімі үшін белгілі бір терезені есте сақтағымыз келсе, қалаған терезе фокуста болғанда осы комбинацияны басу керек. Болашақта осы комбинацияны басқан кезде фокус осы терезеге беріледі. Терезе жабылғанша немесе біз осы сценарий тіркесімін қалпына келтірмейінше showwinDetach.

Сценарий алгоритмі showwin сол сияқты бірнәрсе:

  • Фокусты аудару керек терезенің идентификаторын бұрын есте сақтағанымызды тексеріңіз.
    Есіңізде болса және мұндай терезе әлі бар болса, біз фокусты оған аударып, шығамыз.
  • Біз қазір қай терезенің фокуста екенін қарастырамыз және ол біздің сұрауымызға сәйкес келсе, болашақта оған өтіп, шығу үшін оның идентификаторын есте сақтаңыз.
  • Егер ол бар болса, кем дегенде кейбір қолайлы терезеге барамыз немесе қажетті қолданбаны ашамыз.

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.

Нені жақсартуға болады

Біріншіден, сценарийлерді қолмен конфигурациялау керек. Әрине, өзіңіздің қолыңызбен көп нәрсені зерттеп, істеу қажеттілігіне байланысты сіздердің көпшілігіңіз жүйені конфигурациялауға тырыспайсыз. Егер пакетті жай ғана орнату және барлығын оңай конфигурациялау мүмкін болса, онда ол белгілі бір танымалдылыққа ие болар еді. Содан кейін қараңыз, қолданба стандартты дистрибутивтерге шығарылады.

Және, мүмкін, мұны оңайырақ жасауға болады. Терезенің идентификаторы арқылы оны жасаған процестің идентификаторын, ал процестің идентификаторы арқылы оны қай команда жасағанын білуге ​​болатын болса, онда орнатуды автоматтандыруға болады. Шындығында, мен бұл абзацта жазғандарымның мүмкін бе екенін түсінбедім. Шындығында, мен оның қазіргі жұмысына ризамын. Бірақ егер менен басқа біреу бүкіл тәсілді ыңғайлы деп тапса және біреу оны жақсартса, мен жақсырақ шешімді пайдалануға қуаныштымын.

Тағы бір мәселе, мен жазғанымдай, кейбір жағдайларда терезелерді бір-бірінен ажырату мүмкін емес. Осы уақытқа дейін мен мұны тек хром/хромда инкогнито арқылы байқадым, бірақ басқа жерде ұқсас нәрсе бар шығар. Соңғы шара ретінде әрқашан әмбебап комбинациялардың нұсқасы бар Alt + 1...Alt + 0. Қайтадан, мен Firefox-ты қолданамын және жеке мен үшін бұл мәселе маңызды емес.

Бірақ мен үшін маңызды мәселе - мен Mac OS жүйесін жұмыс үшін қолданамын және мен ондай ештеңені конфигурациялай алмадым. утилита wmctrl Мен оны орната алдым деп ойлаймын, бірақ ол Mac OS жүйесінде жұмыс істемейді. Қолданбамен бірдеңе жасауға болады Automator, бірақ ол соншалықты баяу, ол жұмыс істеп тұрғанда да қолдануға ыңғайлы емес. Мен сондай-ақ пернелер тіркесімін барлық бағдарламаларда жұмыс істейтін етіп орната алмадым. Егер біреу кенеттен шешім тапса, мен оны пайдалануға қуаныштымын.

Орнына жасасу

Бұл қарапайым болып көрінетін функционалдылыққа арналған сөздердің күтпеген үлкен саны болып шықты. Мен идеяны жеткізгім келді және мәтінді шамадан тыс жүктемеймін, бірақ мен оны қалай оңай айту керектігін әлі түсінбедім. Мүмкін бұл бейне форматында жақсырақ болар еді, бірақ бұл жерде адамдарға ұнамайды.

Мен сценарийдің астында не бар және оны қалай конфигурациялау керектігі туралы аздап айттым. Мен сценарийдің егжей-тегжейіне кірген жоқпын, бірақ ол небәрі 50 жолды құрайды, сондықтан оны түсіну қиын емес.

Басқа біреу бұл идеяны сынап көреді және мүмкін оны бағалайды деп үміттенемін. Мен өзім туралы айта аламын, сценарий шамамен 3 жыл бұрын жазылған және бұл мен үшін өте ыңғайлы. Ыңғайлылығы сонша, ол басқа адамдардың компьютерлерімен жұмыс істегенде қатты ыңғайсыздық тудырады. Және жұмыс істейтін MacBook көмегімен.

Скрипттерге сілтеме

Ақпарат көзі: www.habr.com

пікір қалдыру