如果整个文件可以在一个屏幕内显示,我想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
等等)。ack
ag
man
想知道我是否必须less
用一些包装脚本或函数来替换,该脚本或函数检查屏幕高度并有条件地决定是否调用less -FX
或less
,或者这样的事情在从管道读取时是否太难以实现(在这种情况下它可能必须做一些更简单的事情,比如默认为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
检查标准输入是否为终端,如果是,则计算文件中的行数,并将其与屏幕上的数字进行比较。处理选项当然会使事情变得复杂。
有人可能会发布更简洁的脚本;这可以在这里进行快速测试。