Làm thế nào để sử dụng ít hơn -Fiên mà không có -Xiên, nhưng vẫn hiển thị đầu ra nếu chỉ có một trang?


11

Tôi đang điều chỉnh máy nhắn tin của Git, nhưng tôi đã gặp một số vấn đề với nó.

Điều tôi muốn là:

  1. Luôn luôn màu đầu ra
  2. Cuộn bằng bàn di chuột hoặc chuột
  3. Thoát khỏi nếu một màn hình

Và cấu hình hiện tại của tôi là:

$ git config --global core.pager
less -+F -+X -+S

Điều này làm mọi thứ trừ cái cuối cùng.

Nhưng, nếu tôi loại bỏ -+F, sẽ không có đầu ra trong trường hợp một màn hình. Nếu tôi cũng loại bỏ -+X, đầu ra trở lại nhưng tôi không thể cuộn bằng bàn di chuột less.

Có một cách giải quyết có thể đáp ứng tất cả các yêu cầu trên?


Đây là một câu hỏi rất thú vị. Khi tôi sử dụng -F(thoát nếu một màn hình), tôi luôn thực hiện kết hợp với -X(tắt termcap init và de-init), nhưng như bạn nói, điều đó sẽ không cho phép cuộn bằng chuột. (Tôi nghi ngờ việc cuộn hoàn toàn có thể xảy ra với -X.) Tôi đã sửa đổi tiêu đề câu hỏi, nhưng cứ thoải mái quay lại nếu bạn cảm thấy nó mất quá nhiều ý nghĩa. :)
tự đại diện

Câu trả lời:


8

CẬP NHẬT

tl; dr Giải pháp: nâng cấp lên dưới 530

Từ http://www.greenwoodsoftware.com/less/news.530.html :

Không xuất trình tự khởi động đầu cuối nếu sử dụng -F và tệp vừa với một màn hình.

Vì vậy, với bản sửa lỗi này, chúng tôi thậm chí không cần bận tâm đến việc có nên tự mình sử dụng hay không -X, less -Fchỉ cần chăm sóc nó.

Tái bút Một số cấu hình ít khác mà tôi sử dụng:

export PAGER='less -F -S -R -M -i'
export MANPAGER='less -R -M -i +Gg'
git config --global core.pager 'less -F -S -R -i'
#alias less='less -F -S -R -M -i'

Cuối cùng tôi đã tự mình viết một cái bọc.

#!/usr/local/bin/bash

# BSD/OSX compatibility
[[ $(type -p gsed) ]] && SED=$(type -p gsed) || SED=$(type -p sed)
CONTEXT=$(expand <&0)
[[ ${#CONTEXT} -eq 0 ]] && exit 0
CONTEXT_NONCOLOR=$( $SED -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" <<< "$CONTEXT")
LINE_COUNT=$( (fold -w $(tput cols) | wc -l) <<< "$CONTEXT_NONCOLOR" )

[[ $LINE_COUNT -ge $(tput lines) ]] && less -+X -+S -R <<< "$CONTEXT" || echo "$CONTEXT"

Người dùng BSD / OSX nên cài đặt thủ công gnu-sed. Chế độ regrec tuyệt vời, giúp loại bỏ mã màu, là từ /programming//a/18000433/2487227

Tôi đã lưu tập lệnh này /usr/local/bin/pagervà sau đógit config --global core.pager /usr/local/bin/pager

Việc điều trị cho bệnh nhân OCD, hoan hô!


Nó sẽ không hoạt động nếu tập tin của bạn có dòng bọc.
Thomas Dickey

@ThomasDickey Tôi cho rằng foldnên xử lý việc đó ... nhưng, vâng, lỗi có thể ... bạn có thể vui lòng cung cấp một ví dụ không?
Frederick Zhang

@ThomasDickey paste.kde.org/ph9vl7es5 cái này hoạt động với tôi
Frederick Zhang

foldkhông thực sự hiểu các tab. Bạn có thể sửa chữa nó bằng cách sử dụng expand. Điều đó vẫn không xử lý các chuỗi thoát được nhúng (thường được yêu cầu trong bối cảnh git).
Thomas Dickey

1
các tab sẽ chỉ "hoạt động" khi chiều rộng thiết bị đầu cuối của bạn là bội số của các điểm dừng tab. Khi tôi kiểm tra điều này, tôi nhận thấy rằng foldkhông điều chỉnh các đường bao bọc bằng cách sử dụng khoảng trắng, mà chỉ tìm thấy điểm gần nhất để cắt. Vì vậy, sự xuất hiện sẽ gây hiểu nhầm.
Thomas Dickey

0

Tôi sử dụng trình bao bọc sau đây làm máy nhắn tin của tôi. Nó không lạ mắt như các trình bao bọc khác được hiển thị ở đây (vì nó luôn sử dụng less -Sđể cắt các dòng dài), nhưng nó rất đơn giản. Có vẻ hoạt động khá tốt với iTerm2.

#!/bin/bash
set -e

text=$(</dev/stdin)
text_lines=$(echo "${text}" | wc -l)
term_lines=$(tput lines)

if [[ $text_lines -lt $term_lines ]]; then
    echo "${text}"
else
    echo "${text}" | less -S -R
fi
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.