Zastanawiam się dlaczego Backspace w postaci wspólnych terminali Linux nie faktycznie wymazać znaki, po wydrukowaniu (który normalnie działa po wpisaniu) ..Backspace charakter niesamowitość
To działa zgodnie z oczekiwaniami:
$ echo -e "abc\b\b\bxyz"
xyz
(\b
ocenia BackSpace, mogą być umieszczone również jako Ctrl + VCtrl + H - wykonane jako ^H
(0x08
))
ale kiedy jest mniej znaków po backspace, dziwne zachowanie objawia się:
$ echo -e "abc\b\b\bx"
xbc
zachowuje się jak klawiszy strzałek lewo zamiast Backspace:
$ echo -e "abc\e[D\e[D\e[Dx"
xbc
erase linia działa normalnie:
$ echo -e "abc\e[1Kx"
x
W rzeczywistości , Gdy typ Ctrl + VBackspace terminalu, ^?
(0x7f
) jest uzyskane zamiast ^H
, to Del ASCII, ale Ctrl + VDel wytwarza <ESC>[3~
, ale to jest inna historia ...
Czy ktoś może wyjaśnić, dlaczego drukowana postać Backspace nie wymazuje znaków?
(Moje środowisko jest xterm Linux i inne emulatory terminali, $TERM
== xterm
, próbował vt100
, Linux
również)
cóż, to nie jest wyjaśnienie _why_ znak kontrolny backspace zachowuje się jak lewy przycisk kursora, nie zgodnie z sensem commons (usuń ostatni znak) – mykhal
teraz jestem zadowolony, dziękuję za link spec :) – mykhal
REALNY powód to działa w ten sposób powstają nawet starsze terminale "papierowe", które drukuje się na papierze jak maszyna do pisania.Na takim terminalu nie ma możliwości wymazania znaku po jego wyprowadzeniu. Terminale przypominające maszyny do pisania również powodują, że nadal mamy do czynienia z oddzielnymi znakami "powrotu karetki" i "wprowadzania linii" do linii końcowych w systemie Windows. – alexis