Bagaimana cara menggunakan "less -F" tanpa "-X", tetapi masih menampilkan output jika hanya satu halaman?


11

Saya mengutak-atik pager dari Git, tapi saya punya beberapa masalah dengannya.

Yang saya inginkan adalah:

  1. Output selalu berwarna
  2. Menggulir dengan touchpad atau mouse
  3. Keluar-jika-satu-layar

Dan konfigurasi saya saat ini adalah:

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

Ini melakukan segalanya kecuali yang terakhir.

Tapi, jika saya hapus -+F, tidak akan ada output dalam hal satu layar. Jika saya menghapus -+Xjuga, output kembali tetapi saya tidak dapat menggulir dengan touchpad less.

Apakah ada solusi yang dapat memenuhi semua persyaratan di atas?


Ini pertanyaan yang sangat menarik. Ketika saya menggunakan -F(keluar jika satu layar) saya selalu melakukannya bersama -X(menonaktifkan termcap init dan de-init), tetapi seperti yang Anda katakan, itu tidak akan memungkinkan menggulir dengan mouse. (Saya ragu bergulir mungkin dilakukan dengan -X.) Saya telah memodifikasi judul pertanyaan, tetapi merasa ragu untuk memutar kembali jika Anda merasa kehilangan terlalu banyak artinya. :)
Wildcard

Jawaban:


8

MEMPERBARUI

tl; dr Solusi: tingkatkan ke kurang 530

Dari http://www.greenwoodsoftware.com/less/news.530.html :

Jangan tampilkan urutan terminal init jika menggunakan -F dan file cocok pada satu layar.

Jadi dengan perbaikan ini kita bahkan tidak perlu repot menentukan apakah akan digunakan -Xsendiri, less -Fcukup urus saja.

PS. Beberapa konfigurasi lain yang kurang saya gunakan:

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'

Saya akhirnya berakhir dengan menulis bungkus sendiri.

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

Pengguna BSD / OSX harus menginstal secara manual gnu-sed. Regexp yang luar biasa, yang membantu menghilangkan kode warna, berasal dari /programming//a/18000433/2487227

Saya telah menyimpan skrip ini /usr/local/bin/pagerlalugit config --global core.pager /usr/local/bin/pager

Perawatan untuk pasien OCD, hore!


Ini tidak akan berfungsi jika file Anda memiliki garis yang dibungkus.
Thomas Dickey

@ThomasDickey saya anggap foldharus menangani itu ... tapi, ya, bug mungkin ... bisakah Anda tolong berikan contoh?
Frederick Zhang

@ThomasDickey paste.kde.org/ph9vl7es5 ini bekerja untuk saya
Frederick Zhang

foldtidak begitu mengerti tab. Anda mungkin dapat memperbaikinya menggunakan expand. Itu masih tidak akan menangani urutan melarikan diri tertanam (yang sering diminta-dalam konteks git).
Thomas Dickey

1
tab hanya akan "bekerja" ketika lebar terminal Anda adalah kelipatan dari tab-stops. Ketika saya menguji ini, saya perhatikan bahwa foldtidak menyesuaikan garis terbungkus menggunakan spasi, tetapi hanya menemukan titik terdekat untuk memotong. Jadi penampilannya akan menyesatkan.
Thomas Dickey

0

Saya menggunakan pembungkus berikut sebagai pager saya. Ini tidak semewah bungkus lainnya yang ditampilkan di sini (karena selalu digunakan less -Suntuk memotong garis panjang), tetapi sangat sederhana. Tampaknya bekerja cukup baik dengan 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.