Đầu vào thiết bị đầu cuối không bao bọc chính xác, hoặc tất cả


15

Lâu nay, tôi gặp phải vấn đề dai dẳng này trên tất cả các thiết bị đầu cuối của mình, từ mặc định gnome và tilda mà cả hai tôi sử dụng cho một vòng xoáy nhanh, trong đó đầu vào của tôi sẽ ghi đè lên đầu dòng của nó khi cần bọc, và chỉ gói trên dòng tiếp theo.

Nhấn Ctrl-A để trở về đầu dòng thay vào đó sẽ đưa tôi trở lại nơi nào đó trong dòng trước dòng đầu vào đầu tiên của tôi, từ đó bất kỳ đầu vào nào trở nên rất kỳ lạ.

Bởi vì đây là một lời giải thích thực sự tồi tệ và khó hình dung, đây là cách nó diễn ra:

Screencap: kiểm tra gói dòng

Có ai biết đây là gì? Nó không chỉ xảy ra trong một số trường hợp nhất định, đó là điều thường trực luôn có từ đầu đến cuối mỗi phiên trong mọi trình giả lập thiết bị đầu cuối.

Đầu ra của printf "%s\n" "$PS1" "$COLUMNS":

leod:~$ printf "%s\n" "$PS1" "$COLUMNS"
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ 
80

Đầu ra của stty -a:

leod:~$ stty -a
speed 38400 baud; rows 11; columns 140; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

3
Thêm đầu ra của printf "%s\n" "$PS1" "$COLUMNS", xin vui lòng.
muru

Nó có thể là chương trình của bạn testrời khỏi thiết bị đầu cuối ở trạng thái không ổn định. Nếu đó là một kịch bản, bạn có thể đưa nó vào câu hỏi của bạn không? Điều gì xảy ra nếu bạn bắt đầu nhập mà không chạy testtrước, văn bản có bao bọc bình thường không?
WinEunuuchs2Unix

1
Chúng tôi có thể xem đầu ra stty -alà tốt xin vui lòng?
steeldriver

1
@ WinEunuuchs2Unix kiểm tra sai (ý định chơi chữ). Hãy thử type -a testthay thế.
muru

1
Đầu ra của printf "%q\n" "$PS1"cái gì? Có thể có các chuỗi thoát thô bên trong PS1 và %sgiữ nguyên chúng (có thể thay đổi màu sắc qua lại mà vẫn không được chú ý trong đầu ra). %qtrích dẫn mỗi ký tự không thể in một cách dễ đọc.
egmont

Câu trả lời:


7

Có thể thiết bị đầu cuối của bạn không nhận ra kích thước cửa sổ chính xác. Tôi đã tìm thấy một câu hỏi liên quan trong U & L Stackexchange và ai đó đã gợi ý cách kiểm tra bên dưới xem đây có phải là điều đang xảy ra không:

Kiểu

shopt | grep checkwinsize

Nếu đầu ra không:

checkwinsize    on

Bạn có thể dùng

shopt -s checkwinsize

để kích hoạt. Để hủy kích hoạt:shopt -u checkwinsize


1
Có lẽ tôi đã không kiểm tra đủ nhưng tôi checkwinsizeđã có on. Tôi đã sử dụng shopt -u checkwinsizeđể tắt nó và thiết bị đầu cuối của tôi vẫn bọc văn bản chính xác. Tôi không chắc câu trả lời này có thực sự giải quyết được vấn đề OP không.
WinEunuuchs2Unix

Xuất sắc. Đây là bản sửa lỗi tôi cần. Gói lệnh dòng hoạt động hoàn hảo với hơn 80 ký tự.
Randy

@Randy Vui mừng khi nghe nó làm việc cho bạn!
Hee Jin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.