尽量少用备用屏幕,但前提是整个文件无法在一个屏幕上显示

尽量少用备用屏幕,但前提是整个文件无法在一个屏幕上显示

如果整个文件可以在一个屏幕内显示,我想less立即退出。为此,我将使用以下-F选项:

-F or --quit-if-one-screen

    Causes less to automatically exit if the entire file can be
    displayed on the first screen.

问题:当文件长度超过一个屏幕时,我希望能够使用备用屏幕。因此,我不想传递-X

-X or --no-init

    Disables sending the termcap initialization and deinitialization
    strings to the terminal. This is sometimes desirable if the
    deinitialization string does something unnecessary, like
    clearing the screen.

请注意,如果您设置-F而不使用-X,则less some-short-file不会产生可见的输出,因为它仅出现在备用屏幕中,一旦退出就会less立即消失。

我为什么想要这个:我已经设置了 tmux 绑定,以便我可以在备用屏幕模式下使用鼠标滚轮滚动(即在less和将其用作寻呼机的东西中:,,,git等等)。ackagman

想知道我是否必须less用一些包装脚本或函数来替换,该脚本或函数检查屏幕高度并有条件地决定是否调用less -FXless,或者这样的事情在从管道读取时是否太难以实现(在这种情况下它可能必须做一些更简单的事情,比如默认为less)。

答案1

这个问题似乎包含了所有相关信息。一个简单的包装器脚本看起来是这样的:

#!/bin/bash
if [ -t 0 && $# = 1 ]
then
    want=$(wc -l "$1" |sed -e 's/[[:space:]].*//')
    have=$(stty -a |grep -E " rows [[:digit:]]" | sed -e 's/^.* rows //' -e 's/;.*//')
    if [ $want -le $have ]
    then
        less -FX "$1"
    else
        less "$1"
    fi
else
    less "$1"
fi

检查标准输入是否为终端,如果是,则计算文件中的行数,并将其与屏幕上的数字进行比较。处理选项当然会使事情变得复杂。

有人可能会发布更简洁的脚本;这可以在这里进行快速测试。

相关内容