如何在不使用“ -X”的情况下使用“ less -F”,但如果只有一页仍显示输出?


11

我正在调整Git的传呼机,但是我遇到了一些问题。

我想要的是:

  1. 始终彩色输出
  2. 通过触摸板或鼠标滚动
  3. 一屏退出

我当前的配置是:

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

除了最后一个,这一切都做。

但是,如果我删除-+F,则在单屏情况下将没有输出。如果我也将其移除-+X,则输出将返回,但无法通过触摸板滚动less

是否有可以满足上述所有要求的解决方法?


这是一个非常有趣的问题。当我使用-F(退出一个屏幕时退出)时,我总是将其与-X(禁用termcap初始化和取消初始化)结合使用,但是正如您所说的那样,这不允许使用鼠标滚动。(我怀疑使用完全可以滚动-X。)我已经修改了问题标题,但是如果您觉得它失去了太多的意思,可以随时将其回滚。:)
通配符

Answers:


8

更新

tl; dr解决方案:升级到530以下

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

如果使用-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。来自/programming//a/18000433/2487227的惊人正则表达式可帮助删除颜色代码

我已将此脚本保存到/usr/local/bin/pager,然后git config --global core.pager /usr/local/bin/pager

对强迫症患者的治疗,万岁!


如果文件中包含换行符,则无法使用。
Thomas Dickey

@ThomasDickey我认为fold应该可以处理...但是,是的,可能是错误...您能请一个例子吗?
Frederick Zhang

@ThomasDickey paste.kde.org/ph9vl7es5这个工作对我来说
弗雷德里克·张

fold不太了解标签。您可能可以使用修复它expand。但这仍然无法处理嵌入的转义序列(通常在中需要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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.