Puncte:1

Terminalul XFCE - schimbarea culorii promptului de intrare înșurubează linia de intrare

drapel de

Această întrebare este o continuare a răspunsului la această întrebare, cu privire la schimbarea culorii promptului de introducere a utilizatorului în terminalul XFCE: Terminal Ubuntu (Xfce): face comenzile de intrare diferite culori de font față de textul de ieșire

Din moment ce nu am voie să comentez acolo (min 50 de reputație), a trebuit să deschid o nouă întrebare.

După răspuns, am folosit următoarea comandă:

PS1='\e[1;36m\u@\h \W]\$\e[0m '

Acest lucru păstrează formatul la fel ca implicit, dar schimbă culoarea în cyan, așa cum era de așteptat.

Totuși, am un comportament foarte ciudat. Uneori, cursorul va sări înapoi pe linia de intrare și uneori va afișa text vechi care nu ar trebui să fie acolo. Uneori se împarte în două rânduri, astfel încât continui să scriu pe linia de mai sus. De exemplu:

Spune că vreau să fac:

$ cd /unele/cale/la/un/director

dar pe măsură ce scriu devine așa:

$ cd /some/pa/directoriath/to

daca tast enter, tot va citi corect comanda, doar display-ul este gresit. Când se întâmplă, dacă încerc să folosesc backspace, se va transforma în ceva de genul acesta:

$ cd /some/pa/directoriath/to
$ cd /some/pa/directo
$ cd /some/pa -------- în acest moment nu pot șterge nimic altceva,
                           pe afișaj unele dintre personaje sunt încă nemișcate 
                           persistă, dar dacă tast enter nu există nimic pe linia de intrare

Un alt exemplu, să spunem că am următoarele afișate:

$ ls
folder1 folder2 folder3 folder4

și acum vreau să tast o altă comandă, atunci s-ar putea întâmpla următoarele:

$ ls
folder1 folder2 folder3 folrectory
$ cd /some/path/to/a/di

Încă o dată, dacă tast enter, intrarea este recunoscută corect, dar afișajul este înșurubat.

Problema apare cel mai frecvent, dar nu exclusiv, când tast săgeata în sus pentru a obține o comandă anterioară sau când linia de intrare se apropie de marginea dreaptă a ferestrei.

sudodus avatar
drapel jp
Cred că problema ta se datorează modului în care secvențele ANSI sunt interpretate și interacționează cu alte moduri de a comunica cu interfața liniei de comandă.Am observat că bug-ul va cauza probleme, de exemplu atunci când aveți o linie de comandă lungă, care va ajunge la marginea din dreapta a ferestrei/ecranului și este înfășurată. - Folosesc acest mod pentru a obține un prompt colorat și trăiesc cu problema pentru că ajută foarte mult să ai un prompt colorat.
bjorn avatar
drapel de
Dacă s-ar fi întâmplat doar în timpul împachetarii, aș putea trăi și cu el. Dar așa cum este acum, aproape de fiecare dată când folosesc butonul sus, se rupe și fiecare a zecea comandă sau cam așa ceva, care este scurtă, va avea, de asemenea, probleme. Așa cum este acum, din păcate, nu este utilizabil pentru mine... Dacă este o eroare, totuși, cred că abordarea corectă ar fi să depunem un raport de eroare.
sudodus avatar
drapel jp
Ce versiune de Ubuntu, bash și emulator de terminal folosești? Ai încercat alt emulator de terminal?
Puncte:0
drapel jp

Am testat și am observat o problemă și cu promptul dvs., se pare că se așteaptă prea devreme la marginea dreaptă și face o întrerupere de linie.

Vă rog, încercați-l pe acesta, pe care îl folosesc eu

if [ "$USER" = root ]; atunci
    PS1='\[\033[01;31m\]$(statstring)\[\033[00m\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h \[\033[00m\] \[\033[01;34m\]\w\[\033[00m\] \$ '
altfel
    PS1='\[\033[01;31m\]$(statstring)\[\033[00m\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h \[\033[00m\] \[\033[01;34m\]\w\[\033[00m\] \$ '
fi

iar dacă funcționează, îl puteți pune în ~/.bashrc cel puțin pentru shell-uri interactive. eu folosesc

cazul „$TERM” în
xterm-color)
....

pentru a decide când să îl utilizați și puteți verifica ceva care se potrivește cu configurația dvs.


Editare: adăugați o funcție de creat statstring înainte de a seta promptul ~/.bashrc

function statstring {
RC=$?
  if [ "0" != $RC ]; atunci
    printf „[$RC]”
  fi
}
bjorn avatar
drapel de
Mulțumesc! A trebuit să elimin $(statstring) dar acum pare să funcționeze conform așteptărilor. Ce anume a fost în încercarea mea inițială care a cauzat problema? n.b. Am întâmpinat aceeași problemă și cu sugestiile din întrebarea legată.
sudodus avatar
drapel jp
Nu sunt sigur de ce vechea dvs. solicitare a mers prost. Este diferit de al meu la final (ordinea dintre caracterul $ și secvența ANSI), poate de aceea merge prost. De asemenea, secvențele ANSI sunt ușor diferite, ceea ce poate crea rezultate diferite. -- Vă rugăm să răspundeți editat și încercați să utilizați `statstring`.
Puncte:0
drapel cn

Trebuie să includeți secvențele de evadare terminale și numai cele dintre acestea \[ și \].

Vezi in bashpagina de manual a lui, în secțiunea „PROMPTING”.

În loc de

PS1='\e[1;36m\u@\h \W]\$\e[0m '

ar trebui sa scrii

PS1='\[\e[1;36m\]\u@\h \W]\$\[\e[0m\] '

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.