วิธีใช้“ น้อยกว่า -F” โดยไม่มี“ -X” แต่ยังคงแสดงผลออกมาถ้าหน้าเดียว?


11

ฉันกำลังปรับแต่งเพจเจอร์ของ Git แต่ฉันมีปัญหากับมัน

สิ่งที่ฉันต้องการคือ:

  1. สีออกมาเสมอ
  2. เลื่อนด้วยทัชแพดหรือเมาส์
  3. เลิกถ้าหนึ่งหน้าจอ

และการกำหนดค่าปัจจุบันของฉันคือ:

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

มันทำทุกอย่างยกเว้นอันสุดท้าย

แต่ถ้าฉันลบออก-+Fจะไม่มีผลลัพธ์ในกรณีของหน้าจอเดียว หากฉันลบ-+Xเช่นกันเอาต์พุตจะกลับมา แต่ฉันไม่สามารถเลื่อนโดยทัชแพดlessได้

มีวิธีแก้ปัญหาซึ่งสามารถตอบสนองความต้องการทั้งหมดข้างต้นหรือไม่


นี่เป็นคำถามที่น่าสนใจมาก เมื่อฉันใช้-F(ออกจากถ้าหนึ่งหน้าจอ) ฉันมักจะทำร่วมกับ-X(ปิดการใช้งาน termcap init และ de-init) แต่อย่างที่คุณบอกว่ามันไม่อนุญาตให้เลื่อนด้วยเมาส์ (ฉันสงสัยว่าการเลื่อนเป็นไปได้ด้วย-X) ฉันได้แก้ไขชื่อคำถาม แต่อย่าลังเลที่จะย้อนกลับไปหากคุณรู้สึกว่าไม่มีความหมายมากเกินไป :)
สัญลักษณ์แทน

คำตอบ:


8

UPDATE

tl; dr โซลูชัน: อัปเกรดเป็น 530 น้อยกว่า

จากhttp://www.greenwoodsoftware.com/less/news.530.html :

อย่าส่งลำดับ init เทอร์มินัลเอาต์พุตหากใช้ -F และไฟล์พอดีกับหน้าจอเดียว

ดังนั้นด้วยการแก้ไขนี้เราไม่จำเป็นต้องกังวลว่าจะใช้-Xด้วยตัวเองหรือless -Fไม่

PS การกำหนดค่าที่น้อยกว่าอื่น ๆ ที่ฉันใช้:

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'

ในที่สุดฉันก็จบลงด้วยการเขียนเสื้อคลุมด้วยตัวเอง

#!/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"

ผู้ใช้ BSD / OSX gnu-sedควรติดตั้งด้วยตนเอง regexp ที่น่าทึ่งซึ่งช่วยลบรหัสสีมาจาก/programming//a/18000433/2487227

ฉันบันทึกสคริปต์นี้ไป/usr/local/bin/pagerแล้วgit config --global core.pager /usr/local/bin/pager

การรักษาผู้ป่วย OCD ไชโย!


มันจะไม่ทำงานหากไฟล์ของคุณมีการตัดคำ
Thomas Dickey

@ThomasDickey ฉันเห็นว่าfoldควรจัดการกับ ... แต่ใช่ข้อผิดพลาดอาจ ... คุณช่วยกรุณายกตัวอย่าง?
Frederick Zhang

@ThomasDickey paste.kde.org/ph9vl7es5 อันนี้ทำงานให้ฉัน
Frederick Zhang

foldไม่เข้าใจแท็บจริงๆ expandคุณอาจจะสามารถซ่อมแซมได้โดยใช้ ที่ยังคงไม่สามารถจัดการกับ escape sequences แบบฝังได้ (ซึ่งมักถูกถามถึงในบริบทของgit)
Thomas Dickey

1
แท็บจะ "ทำงาน" เท่านั้นเมื่อความกว้างของเทอร์มินัลเกิดขึ้นกับหลายแท็บหยุด เมื่อฉันทดสอบสิ่งนี้ฉันสังเกตเห็นfoldว่าไม่ได้ปรับลายเส้นที่พันด้วยช่องว่าง แต่พบจุดที่ใกล้ที่สุดสำหรับการสับ ดังนั้นรูปลักษณ์จะทำให้เข้าใจผิด
Thomas Dickey

0

ฉันใช้เสื้อคลุมต่อไปนี้เป็นเพจเจอร์ของฉัน มันไม่ได้แฟนซีเหมือนกับเสื้อคลุมอื่น ๆ ที่แสดงที่นี่ (เพราะมันมักจะใช้less -Sในการตัดทอนเส้นยาว) แต่มันเป็นเรื่องง่าย ดูเหมือนว่าจะทำงานได้ดีกับ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.