Tôi đang tự hỏi tại sao Shift+ Arrow Keykết quả trong một trong những A
, B
, C
hoặc D
chữ cái.
Tại sao không phải là các chữ cái khác? Tại sao có thư nào cả?
Shift + Arrow Keys
không làm gì cả.
Tôi đang tự hỏi tại sao Shift+ Arrow Keykết quả trong một trong những A
, B
, C
hoặc D
chữ cái.
Tại sao không phải là các chữ cái khác? Tại sao có thư nào cả?
Shift + Arrow Keys
không làm gì cả.
Câu trả lời:
Giả lập thiết bị đầu cuối như gnome-terminal
( "Terminal" trong Ubuntu) mà còn xterm
và urxvt
được đặt tên là "giả lập" bởi vì họ tái tạo các hành vi của các thiết bị đầu cuối cũ mà là màn hình hiển thị duy nhất của một máy tính. Các thiết bị đầu cuối như vậy giao tiếp với máy tính với giao thức dựa trên văn bản và ban đầu được thiết kế để chỉ nhận văn bản. Nhanh chóng, cần nhiều kiểm soát hơn: làm thế nào để xóa một dòng? Sử dụng màu sắc? Hoặc thay đổi vị trí con trỏ?
Nguồn: Nghệ thuật khả năng sử dụng Unix - Giao diện dòng lệnh
Trình tự thoát được thiết kế cho mọi thiết bị đầu cuối để làm những việc như vậy. Chúng được đặt tên là thoát vì chúng bắt đầu bằng mã thoát ASCII : 33
. Không có cách nào để in trực tiếp một ký tự như vậy, điều này làm cho nó phù hợp với các chuỗi như vậy. Khi chúng tôi vẫn muốn hiển thị biểu đồ này, ^[[
được sử dụng và đây là những gì tôi sẽ sử dụng trong phần giải thích của mình.
Khi thiết bị đầu cuối nhận được ^[[A
, nó không có nghĩa là "in ^ [[A", mà là "người dùng nhấn phím mũi tên lên". "A" ở đây hoàn toàn tùy ý: nó thực sự là chữ cái mà mọi người đã đồng ý, bởi vì đó là những gì mà DEC VT-52 và người kế nhiệm của nó là thiết bị đầu cuối VT-100 phổ biến được sử dụng.
Nguồn: Hướng dẫn bảo trì DEC VT-52 1976
Đây vẫn là cách các trình giả lập thiết bị đầu cuối hoạt động ngày nay: tùy thuộc vào $TERM
biến, cơ sở dữ liệu có tên terminfo
chịu trách nhiệm cho biết mã nào sẽ được gửi đến shell (bash, sh, zsh ...), sau đó chịu trách nhiệm hiểu chúng và phản ứng đối với họ.
Bây giờ, mã cho Shift+ upxảy ra là ^[[1;2A
: trình giả lập thiết bị đầu cuối gửi mã này đến trình bao, nó cố gắng diễn giải ^[[1;2
nhưng không hiển thị bất cứ điều gì vì nó không biết về chuỗi thoát đó. Nhưng A
được để lại và hiển thị.
^[[A
có ý nghĩa khi tôi nhấp vào các phím mũi tên trong khi một quá trình đang chạy trên thiết bị đầu cuối.
cat >/dev/null
sau đó nhập và nhấn Ctrl + C (hoặc Enter rồi Ctrl + D) khi hoàn tất.