Այլընտրանքային պատուհանների կառավարում 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-ում այն ​​գտնվում է System Settings → Shortcuts → Custom Shortcuts: Սա պետք է լինի նաև այլ պատուհանների կառավարիչների դեպքում:

Ներկայացնում ենք 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- ը. Ես դրանք սովորաբար դնում եմ ~/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- ը. Եթե ​​ամեն ինչ ճիշտ է արված, ապա սկրիպտները պետք է հասանելի լինեն վահանակից, և Tab-ի լրացումը պետք է աշխատի:

Հիմնական սցենար շոուին վերցնում է 2 պարամետր՝ առաջինը ռեգեքս է, որով մենք կփնտրենք անհրաժեշտ պատուհանը, իսկ երկրորդ պարամետրը հրաման է, որը պետք է կատարվի, եթե անհրաժեշտ պատուհանը չգտնվի։

Կարող եք փորձել գործարկել սցենար, օրինակ՝

$ showwin "Mozilla Firefox$" firefox

Եթե ​​Firefox-ը տեղադրված է, ապա դրա պատուհանին պետք է ուշադրություն դարձնել: Նույնիսկ եթե Firefox-ը չաշխատեր, այն պետք է սկսվեր:

Եթե ​​այն աշխատում է, ապա կարող եք փորձել կարգավորել հրամանների կատարումը կոմբինացիաների վրա: Համաշխարհային թեժ ստեղների/դյուրանցումների կարգավորումներում ավելացրեք՝

  • Alt+F: showwin «Mozilla Firefox$» firefox
  • Alt+D: showwin «Mozilla Firefox (Անձնական զննարկում)$» «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» գաղափարը.շ

և այլն: Յուրաքանչյուր ոք կարող է կարգավորել բանալիների համակցությունները և ծրագրակազմը, ինչպես հարմար է գտնում:
Եթե ​​ամեն ինչ ճիշտ է ստացվել, ապա օգտագործելով վերը նշված համակցությունները մենք կկարողանանք անցնել պատուհանների միջև՝ պարզապես սեղմելով ստեղները:

Ես կհիասթափեցնեմ քրոմի սիրահարներին. այն կարող է ինկոգնիտո տարբերակել սովորական պատուհանն իր ելքով wmctrl Դուք չեք կարող, նրանք ունեն նույն դասի անունները և պատուհանների անվանումները: Առաջարկվող ռեգեքսում N* և I* նիշերն անհրաժեշտ են միայն այն բանի համար, որ այս կանոնավոր արտահայտությունները տարբերվեն միմյանցից և դրանք վերագրվեն որպես հիմնական պատուհաններ։

Նախորդ համակցության հիմնական պատուհանը վերականգնելու համար (իրականում ռեգեքսի համար, որը շոուին վերջին անգամ զանգահարել է) պետք է զանգահարել սցենարը showwinԱնջատել. Ես այս սցենարը վերագրված եմ ստեղների համակցությանը Alt + Backspace.

Սցենարում շոուին կա ևս մեկ գործառույթ. Երբ այն կանչվում է մեկ պարամետրով (այս դեպքում պարամետրը պարզապես նույնացուցիչ է), այն ընդհանրապես չի ստուգում ռեգեքսը, այլ հարմար է համարում բոլոր պատուհանները։ Սա ինքնին անօգուտ է թվում, բայց այս կերպ մենք կարող ենք ցանկացած պատուհան նշանակել որպես հիմնական և արագ անցնել տվյալ պատուհանին:

Ես կազմաձևված եմ հետևյալ համակցությունները.

  • 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 ռեգեքսի միջոցով, վերցրեք առաջին տողը գլխավոր, ստացեք առաջին սյունակը (սա կլինի պատուհանի ID-ն)՝ օգտագործելով կտրել, միացրեք պատուհանը ըստ ID-ի:

Կանոնավոր արտահայտությունների և երկու խնդիրների մասին կատակ պետք է լինի, բայց իրականում ես ոչ մի բարդ բան չեմ օգտագործում։ Ինձ կանոնավոր արտահայտություններ են պետք, որպեսզի կարողանամ նշել տողի վերջը («$» նշանը) և տարբերել «Mozilla Firefox$»-ը «Mozilla Firefox (Անձնական զննարկում)$»-ից:

Հրամանն այսպիսի տեսք ունի.

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

Այստեղ արդեն կարող եք կռահել սկրիպտի երկրորդ հատկանիշի մասին՝ եթե grep-ը ոչինչ չի վերադարձնում, ապա ցանկալի հավելվածը բաց չէ և պետք է այն սկսել՝ կատարելով հրամանը երկրորդ պարամետրից։ Եվ այնուհետև պարբերաբար ստուգեք, թե արդյոք բացվել է անհրաժեշտ պատուհանը, որպեսզի դրա վրա կենտրոնացնեք: Ես չեմ կենտրոնանա սրա վրա, յուրաքանչյուր ոք, ով դրա կարիքն ունի, նա կնայի աղբյուրներին:

Երբ հավելվածի պատուհանները չեն տարբերվում

Այսպիսով, մենք սովորեցինք, թե ինչպես փոխանցել կենտրոնացումը ցանկալի հավելվածի պատուհանին: Բայց ի՞նչ անել, եթե հավելվածում բաց են մեկից ավելի պատուհաններ: Որի՞ վրա պետք է կենտրոնացնեմ: Վերևի սցենարը, ամենայն հավանականությամբ, կտեղափոխվի առաջին բաց պատուհան: Այնուամենայնիվ, մենք կցանկանայինք ավելի շատ ճկունություն: Ես կցանկանայի, որ կարողանայի հիշել, թե որ պատուհանն է մեզ անհրաժեշտ և անցնել այդ պատուհանին:

Գաղափարը հետևյալն էր. Եթե մենք ուզում ենք հիշել հատուկ պատուհան ստեղների համակցության համար, ապա մենք պետք է սեղմենք այս համակցությունը, երբ ցանկալի պատուհանը ուշադրության կենտրոնում է: Հետագայում, երբ սեղմեք այս համադրությունը, ուշադրությունը կտրվի այս պատուհանին: Մինչև պատուհանը փակվի կամ մենք զրոյականացնենք այս սկրիպտի համակցության համար 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. Սա անհրաժեշտ կլինի, որպեսզի, անհրաժեշտության դեպքում, հեռացնել պատուհանի ID-ն որոշակի համակցության համար՝ օգտագործելով սկրիպտը showwinԱնջատել.

Ինչ կարելի է բարելավել

Նախ, սցենարները պետք է կարգավորվեն ձեռքով: Անշուշտ, ձեր ձեռքերով շատ բան խորանալու և անելու անհրաժեշտության պատճառով ձեզնից շատերը նույնիսկ չեն փորձի կարգավորել համակարգը: Եթե ​​հնարավոր լիներ պարզապես տեղադրել փաթեթը և ամեն ինչ ավելի հեշտ կարգավորել, ապա միգուցե այն որոշ ժողովրդականություն ձեռք բերեր: Եվ հետո տեսեք, հավելվածը կթողարկվի ստանդարտ բաշխումների:

Եվ գուցե դա կարելի է ավելի հեշտ անել: Եթե ​​պատուհանի id-ով կարող եք պարզել այն ստեղծած պրոցեսի id-ն, իսկ պրոցեսի id-ով կարող եք պարզել, թե որ հրամանն է ստեղծել այն, ապա հնարավոր կլինի ավտոմատացնել կարգավորումը: Իրականում ես չհասկացա, թե արդյոք հնարավոր է այն, ինչ գրեցի այս պարբերությունում։ Փաստն այն է, որ ես անձամբ գոհ եմ, թե ինչպես է այն աշխատում հիմա։ Բայց եթե ինձնից բացի որևէ մեկը հարմար գտնի ողջ մոտեցումը, և ինչ-որ մեկը բարելավի այն, ապա ես ուրախ կլինեմ օգտագործել ավելի լավ լուծում:

Մեկ այլ խնդիր, ինչպես արդեն գրել եմ, այն է, որ որոշ դեպքերում պատուհանները չեն կարող տարբերվել միմյանցից։ Առայժմ ես սա միայն ինկոգնիտոյով եմ նկատել քրոմ/քրոմում, բայց երևի այլ տեղ նման բան կա: Որպես վերջին միջոց, միշտ կա ունիվերսալ համակցությունների տարբերակը Alt + 1...Alt + 0. Կրկին ես օգտագործում եմ Firefox-ը և անձամբ ինձ համար այս խնդիրը էական չէ:

Բայց ինձ համար էական խնդիրն այն է, որ ես օգտագործում եմ Mac OS-ն աշխատանքի համար, և ես չկարողացա նման բան կարգավորել այնտեղ: օգտակար wmctrl Կարծում եմ, ես կարողացա տեղադրել այն, բայց այն իրականում չի աշխատում Mac OS-ում: Ինչ-որ բան կարելի է անել հավելվածի հետ Ավտոմատ, բայց այնքան դանդաղ է, որ հարմար չէ օգտագործել նույնիսկ այն ժամանակ, երբ այն աշխատում է։ Ես նաև չկարողացա ստեղծել ստեղների համակցություններ, որպեսզի նրանք աշխատեին բոլոր ծրագրերում: Եթե ​​հանկարծ ինչ-որ մեկը լուծում գտնի, ես ուրախ կլինեմ օգտագործել այն:

Փոխարենը մի եզրակացության

Պարզվեց, որ բառերի անսպասելի մեծ քանակություն է նման թվացող պարզ ֆունկցիոնալության համար: Ես ուզում էի փոխանցել միտքը և չծանրաբեռնել տեքստը, բայց դեռ չեմ հասկացել, թե ինչպես այն ավելի պարզ պատմել: Թերևս ավելի լավ կլիներ վիդեո ձևաչափով, բայց այստեղ մարդիկ այդպես չեն սիրում:

Ես մի փոքր խոսեցի այն մասին, թե ինչ կա սցենարի գլխարկի տակ և ինչպես կարգավորել այն: Ես չխորացա սցենարի մանրամասների մեջ, բայց դա ընդամենը 50 տող է, ուստի դժվար չէ հասկանալ:

Հուսով եմ, որ մեկ ուրիշը կփորձի այս գաղափարը և գուցե նույնիսկ կգնահատի այն: Իմ մասին կարող եմ ասել, որ սցենարը գրվել է մոտ 3 տարի առաջ, և այն ինձ ՇԱՏ հարմար է։ Այնքան հարմար, որ լուրջ անհանգստություն է պատճառում ուրիշների համակարգիչների հետ աշխատելիս։ Եվ աշխատող MacBook-ով:

Հղում դեպի սցենարներ

Source: www.habr.com

Добавить комментарий