Mokėjimo būdai Abuse

"Linux" terminalo spalvos

26.09.2021, 22:47

"Linux" privalumas yra tas, kad galite pritaikyti bet ką, jei norite. Tai projektinių sistemų pranašumas prieš procedūrines sistemas. Tai tam tikras konstruktorius, sudarytas iš atskirų blokų, kurių kiekvieną galima pritaikyti savo nuožiūra.

Tai ypač įdomu, jei ne tik kopijuojate paruoštus sprendimus, bet ir bandote suprasti, kas ir kaip veikia. Ir net spręsdami nereikšmingą uždavinį, sužinosite kažką naujo.

Išvesties spalvų nuspalvinimas

Pavyzdžiui, norite pakoreguoti linux terminalo ls komandos ls išvesties spalvas.

ls dokumentacijos galite suprasti, kad išvesties spalvų nustatymas atliekamas naudojant pagalbinę programą dircolors, kuri spalvų parametrus nustato iš savo duomenų bazės arba paima juos iš ~/.dircolors failo. Taip pat minėta, kad spalvų naudojimo inicializacija atliekama per ~/.bashrc, apvalkalo nustatymų failą, o patys parametrai apibrėžiami per kintamąjį LC_COLORS.

Toliau pateiktas scenarijus buvo rastas .bashrc:

Jo esmė - patikrinti, ar sistemoje yra dircolors įrankis, priskirti kintamajam reikšmę ir, jei pavyksta, kiekvieną kartą iškvietus ls naudoti parametrą --color=auto.

Jei paleidžiate dircolors programą, ji išveda LC_COLOR kintamojo vertę.

LC_COLORS kintamojo vertę taip pat galima išvesti struktūrizuotu pavidalu, nurodžius raktą:

$ dircolors -p

Kadangi išvestis yra ilga, jos čia nepateiksiu.

Jei išvestį dircolors -p > ~/.dircolors nukreipsite į kitą vietą, bus sukurtas struktūrizuotas failas, iš kurio bus paimti spalvų nustatymai. Redaguodami šį failą ir nustatykite ls išvesties spalvų nustatymus.

Sukurtame .dircolors faile yra užuomina:

Nustatydami seką per kabliataškį, linux konsolėje gausime reikiamą spalvą pagal išvardytas. Linux terminalo spalvos yra nuo 30 iki 37 šrifto spalvos ir nuo 40 iki 47 fono spalvos. Pavyzdžiui:

DIR 01;34 reiškia, kad katalogų pavadinimai bus paryškinti ir mėlyni.

Tačiau taip gausite tik aštuonias spalvas, o šiuolaikiniai terminalo emuliatoriai gali rodyti bent 256 spalvas.

Yra ir kitų spalvų nustatymo būdų. Pavyzdžiui, EXEC 38;5;208;1 suteikia oranžinį storą šriftą vykdomiesiems failams.

Kad nereikėtų rankiniu būdu peržiūrėti linux spalvų, yra paruošta spalvų lentelė

Pakeitę spalvos reikšmę 38;5;x - kur x yra spalva iš lentelės, gausime reikiamą rezultatą. Gauname kažką panašaus:

Kaip tai veikia? Esmė ta, kad terminalo emuliatoriuje išvedamos informacijos spalvos nustatymas atliekamas naudojant ANSI escape kodus. Tai tam tikra simbolių seka, kuri nėra spausdinama ekrane, bet daro įtaką išvedimui. Ji taip vadinama todėl, kad prasideda [ - kodu "Esc". Kadangi yra daug terminalų ir terminalų emuliatorių, šie valdymo kodai yra standartizuoti. Spalvų valdymas per seką nuo 30 iki 37 yra ECMA-48 standartas. Informacijos apie jį rasite skyriuje konsolės_kodai.

Kvietimo eilutės nuspalvinimas

Supratus, kaip nustatyti linux spalvas per esc kodus, nesunku pertvarkyti ir nuspalvinti kvietimo eilutę. Už jos išvedimą atsakingas kintamasis PS1, apibrėžtas ~/.bashrc faile

Linux Mint sistemoje jo inicializavimo scenarijus atrodo taip:

Tai reiškia, kad pirmiausia nustatoma, ar scenarijų paleido root, ar paprastas naudotojas. Kadangi daugeliu atvejų tai būna antrasis variantas, reikia redaguoti eilutę, einančią po pirmojo 'else'. Šios eilutės formatas iššifruotas bash dokumentacijoje, skyriuje "Promting". Iš jo matyti, kad "esc" seka turėtų prasidėti "[" ir baigtis "]". Taigi:

  • [[01;32m]] - nustato žalią spalvą;
  • u - išveda vartotojo vardą;
  • h - išvedamas kompiuterio pavadinimas;
  • [[00m] - ištrina nustatytus atributus;
  • [[01;34m] - nustato mėlyną spalvą;
  • w - išveda darbinio katalogo pavadinimą;
  • Hi - pavyzdys, kad galima išvesti bet kokį išvestinį tekstą.

Ką dar galima išvesti užklausoje:

  • d - data formatu "Wed Dec 28";
  • A - laikas 24 valandų formatu;
  • ! - dabartinės komandos numeris istorijoje;
  • - išvesties perkėlimas į kitą eilutę;

Įveskime kai ką įdomesnio:

PS1='${debian_chroot:+($debian_chroot)}[[01;32m]Matrix has you,u![[00m] [[01;34m]Blue pill[[00m] or [[31m]red?[[00m]--->$ '

Ir užklausos eilutė atrodys taip: