![尽量少用备用屏幕,但前提是整个文件无法在一个屏幕上显示](https://linux22.com/image/1471387/%E5%B0%BD%E9%87%8F%E5%B0%91%E7%94%A8%E5%A4%87%E7%94%A8%E5%B1%8F%E5%B9%95%EF%BC%8C%E4%BD%86%E5%89%8D%E6%8F%90%E6%98%AF%E6%95%B4%E4%B8%AA%E6%96%87%E4%BB%B6%E6%97%A0%E6%B3%95%E5%9C%A8%E4%B8%80%E4%B8%AA%E5%B1%8F%E5%B9%95%E4%B8%8A%E6%98%BE%E7%A4%BA.png)
如果整个文件可以在一个屏幕内显示,我想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
检查标准输入是否为终端,如果是,则计算文件中的行数,并将其与屏幕上的数字进行比较。处理选项当然会使事情变得复杂。
有人可能会发布更简洁的脚本;这可以在这里进行快速测试。