Đây là một đoạn trích có liên quan từ less
'FAQ :
Có thể ít rời khỏi màn hình một mình khi nó thoát?
Khi ít khởi động hơn, nó sẽ gửi chuỗi termcap "ti" đến thiết bị đầu cuối và khi thoát ra, nó sẽ gửi chuỗi "te". Chính xác những gì chuỗi "te" phụ thuộc vào hệ thống bạn đang sử dụng, loại thiết bị đầu cuối và phiên bản thuật ngữ của bạn. Trên một số hệ thống, nó không làm gì cả; trên những cái khác, nó khôi phục màn hình về trạng thái khi nó bắt đầu ít hơn, do đó xóa khỏi màn hình trang cuối cùng của tệp mà ít xem hơn.
Nếu bạn không thích hành vi "te" trên hệ thống của mình, bạn có thể vô hiệu hóa việc gửi các chuỗi "ti" và "te" bằng cách gọi ít hơn với tùy chọn -X. Thật không may, điều này đôi khi có tác dụng phụ khác, bởi vì chuỗi "ti" / "te" có thể làm những việc khác được yêu cầu. Ví dụ, trên một số thiết bị đầu cuối, việc vô hiệu hóa "ti" và "te" khiến các phím mũi tên ngừng hoạt động.
Nếu bạn muốn "te" làm điều gì đó khác biệt (ví dụ: khôi phục màn hình nếu chưa làm như vậy), bạn sẽ phải tìm ra cách thay đổi termcap hoặc terminfo cho thiết bị đầu cuối trên hệ thống của bạn. Thật không may, điều này được thực hiện khác nhau trên các hệ thống khác nhau, vì vậy bạn sẽ phải kiểm tra tài liệu cho hệ thống của mình.
Nghiên cứu dẫn đến khả năng thuật ngữ "ti" và "te" được đặt tên là "smcup" và "rmcup" trong terminfo, đây là một thuật ngữ tương đương hiện đại hơn.
Bạn có thể thấy cách thiết bị đầu cuối của bạn ( $TERM
, có khả năng xterm
) được cấu hình với:
infocmp -1 # which will print out capabilites one per line
Bạn có thể giải mã ý nghĩa của các chuỗi với sự trợ giúp của tham chiếu các ký tự điều khiển VT100 .
Nếu bạn loại bỏ các khả năng "smcup" và "rmcup" khỏi thiết bị đầu cuối của bạn:
infocmp -1 | sed -r '/[sr]mcup.*/d' > new-terminfo-for-$TERM
và sau đó cho thư viện terminfo biết đây là thông số kỹ thuật mới, được ưu tiên cho $ TERM,
tic new-terminfo-for-$TERM
# you reverse this with `rm -ri ~/.terminfo`
bạn sẽ thấy less
' màn hình thay thế không bị xóa nữa (vì nó chưa bao giờ được nhập). Nhưng chuột không hoạt động nữa .
Nếu bạn nghịch ngợm với các chuỗi ký tự điều khiển "rmcup" và tìm ra nó, xin vui lòng cho tôi biết!
Cập nhật:
Một giải pháp thay thế hoạt động là bọc ít hơn như một hàm chạy cat khi tệp vừa với chiều cao của thiết bị đầu cuối (đặt cái này vào .bashrc của bạn ):
less () {
# When single file argument, and file small enough, cat it
if [ $# = 1 ] && [ -f "$1" ] && [ $(wc -l "$1" | cut -d' ' -f1) -le $((${LINES:-0} - 3)) ]; then
cat "$@"
else
command less "$@"
fi
}
smcup
vàrmcup
bạn vẫn chưa giải quyết?