“-X” olmadan “less -F” nasıl kullanılır, ancak yine de yalnızca bir sayfa varsa çıktı görüntülenir?


12

Git'in çağrı cihazını değiştiriyorum, ancak bununla ilgili bazı sorunlar var.

Ne istiyorum:

  1. Her zaman renkli çıktı
  2. Dokunmatik yüzey veya fare ile kaydırma
  3. Çık-if-one ekran

Ve şu anki yapılandırmam:

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

Bu sonuncusu hariç her şeyi yapar.

Ancak, kaldırırsam -+F, tek ekran durumunda çıkış olmaz. Ben -+Xde çıkarırsam , çıktı geri döndü ama touchpad ile kaydıramıyorum less.

Yukarıdaki tüm gereksinimleri karşılayabilecek bir geçici çözüm var mı?


Bu çok ilginç bir soru. Kullandığımda -F(bir ekrandan çık) her zaman -X(termcap init ve de-init'i devre dışı bırak) ile birlikte yaparım , ancak dediğin gibi, bu fare ile kaydırmaya izin vermez. (Kaydırma işleminin tümüyle mümkün olduğundan şüpheliyim -X.) Soru başlığını değiştirdim, ancak çok fazla anlam kaybettiğini düşünüyorsanız bunu geri almaktan çekinmeyin. :)
Wildcard

Yanıtlar:


8

GÜNCELLEME

tl; dr Çözüm: daha az 530'e yükseltin

Gönderen http://www.greenwoodsoftware.com/less/news.530.html :

-F ve dosya bir ekrana sığarsa, terminal başlatma sırasını çıkarmayın.

Bu nedenle, bu düzeltme ile kendi başımıza kullanılıp kullanılmayacağını belirlemeye bile gerek yok -X, less -Fsadece halleder.

PS. Kullandığım diğer bazı daha az yapılandırmalar:

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'

Sonunda kendi kendime bir sargı yazmaya son verdim.

#!/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 kullanıcıları manuel olarak kurulmalıdır gnu-sed. Renk kodlarının kaldırılmasına yardımcı olan şaşırtıcı normal ifade https://stackoverflow.com/a/18000433/2487227 adresinden alınmıştır.

Bu komut dosyasını kaydettim /usr/local/bin/pagerve sonragit config --global core.pager /usr/local/bin/pager

OKB hastalarının tedavisi, yaşasın!


Dosyanızda satırlar sarılmışsa çalışmaz.
Thomas Dickey

@ThomasDickey Bunu foldhalletmesi gerektiğini düşünüyorum ... ama, evet, belki hatalar ... lütfen bir örnek verebilir misiniz?
Frederick Zhang

@ThomasDickey paste.kde.org/ph9vl7es5 bu benim için çalıştı
Frederick Zhang

foldsekmeleri gerçekten anlamıyor. Bunu kullanarak onarabilirsiniz expand. Bu hala (genellikle bağlamında istenen) gömülü kaçış dizilerini işlemez git.
Thomas Dickey

1
sekmeler yalnızca terminal genişliğiniz sekme duraklarının bir katı olduğunda "çalışır". Bunu test ettiğimde, foldboşlukları kullanarak sarılmış çizgileri ayarlamadığını fark ettim , ancak sadece doğrama için en yakın noktayı buldum. Böylece görünüm yanıltıcı olacaktır.
Thomas Dickey

0

Çağrı cihazı olarak aşağıdaki sarmalayıcıyı kullanıyorum. Burada gösterilen diğer sarıcı kadar süslü değil (çünkü her zaman less -Suzun çizgileri kısaltmak için kullanır ), ama bu çok basit. İTerm2 ile oldukça iyi çalışıyor gibi görünüyor.

#!/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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.