「-X」なしで「less -F」を使用し、1ページだけの場合でも出力を表示する方法


11

私はGitのページャーを微調整していますが、いくつかの問題があります。

私が欲しいのは:

  1. 常にカラー出力
  2. タッチパッドまたはマウスによるスクロール
  3. 1つの画面を終了

そして私の現在の設定は:

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

これは最後のものを除いてすべてを行います。

ただし、を削除すると-+F、1画面の場合は出力がなくなります。-+X同様に削除すると、出力は元に戻りますが、のタッチパッドでスクロールできませんless

上記のすべての要件を満たすことができる回避策はありますか?


これは非常に興味深い質問です。-F(1つの画面の場合は終了する)を使用するときは、-X(termcap initとde-initを無効にする)と常に組み合わせて使用しますが、あなたが言うように、マウスでスクロールすることはできません。(でスクロールがまったくできないと-X思います。)質問のタイトルを変更しましたが、あまり意味がなくなったと感じたら、遠慮なくロールバックしてください。:)
ワイルドカード

回答:


8

更新

tl; drソリューション:530未満にアップグレード

http://www.greenwoodsoftware.com/less/news.530.htmlから:

-Fを使用してファイルが1つの画面に収まる場合は、端末の初期シーケンスを出力しません。

そのため、この修正-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ます。カラーコードを削除するのに役立つ驚くべき正規表現は/programming//a/18000433/2487227からです

このスクリプトを/usr/local/bin/pager次に保存しましたgit config --global core.pager /usr/local/bin/pager

OCD患者の治療法です。


ファイルに折り返し行がある場合は機能しません。
Thomas Dickey、2016

@ThomasDickey私はそれfoldを処理するべきだと思います...しかし、ええ、バグ多分...あなたは親切に例を提供できますか?
Frederick Zhang

@ThomasDickey paste.kde.org/ph9vl7es5これは私にとってはうまくいっ
Frederick Zhang

foldタブを本当に理解していません。を使用して修復できる場合がありますexpand。それでも、埋め込まれたエスケープシーケンスは処理されません(これは、のコンテキストでしばしば要求されますgit)。
トーマスディッキー2016

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.