'Ít -F' có thể được kết hợp hữu ích với khởi tạo termcap không?


7

less -Fđóng ít hơn nếu nội dung vừa với một màn hình. Tuy nhiên, nếu tôi sử dụng khởi tạo termcap, nghĩa là tôi không sử dụng -Xvà tập tin vừa với màn hình, không có gì được in vì ít hiển thị nội dung, thông báo rằng chúng vừa với màn hình, thoát ra và xóa màn hình trong quá trình khử.

Điều này có thể được chứng minh như sau (giả sử LESSbiến rỗng ):

$ echo foo > new_file
$ cat new_file
foo
$ less -X -F new_file
foo
$ less -F new_file
$

Tôi thích các tính năng termcap, nó cho phép cuộn bằng bánh xe chuột trong số những thứ khác vì vậy tôi chắc chắn không muốn sử dụng -X. Vẫn còn một cách để có ít thoát hơn nếu nội dung phù hợp trên màn hình (và về cơ bản hoạt động như thế nào cat)?

Câu trả lời:


6

Đâ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
}

Tôi đã làm điều này trong nhiều năm và hoàn toàn có thể đề xuất nó như một giải pháp. Tại sao tôi viết thư là tìm cách làm rõ câu cuối cùng của bạn. Đây có phải là "cho tôi biết nếu điều này có hiệu quả với bạn" đối với @musiKk hay nó có liên quan đến một số vấn đề tế nhị khác smcuprmcupbạn vẫn chưa giải quyết?
roaima

@roaima, vấn đề là bánh xe chuột ngừng hoạt động. Tôi thích cuộn bánh xe chuột, và OP cũng vậy, như ông nói.
K3 --- rnc

1

Đối với đầu vào chậm, như git log -Gregex, bạn có muốn:

A) các dòng xuất hiện trên màn hình chính khi chúng đến, sau đó chuyển sang màn hình thay thế sau khi cần cuộn (vì vậy đầu ra đầu tiên $LINESsẽ luôn xuất hiện trong cuộn ngược của bạn); nếu vậy, hãy đi với câu trả lời thứ 2 của Gilles cho một câu hỏi tương tự .

B) các dòng xuất hiện trên màn hình thay thế, nhưng thoát khỏi màn hình thay thế và in các dòng ra màn hình chính nếu cuộn không cần thiết (vì vậy sẽ không xuất ra đầu ra trong cuộn ngược của bạn nếu cần cuộn); nếu vậy, hãy nhìn vào câu trả lời của tôi cho một câu hỏi tương tự .

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.