为 Git 定制的分页器

为 Git 定制的分页器

我写了一个脚本来显示git diff。它会

  1. stdout显示输出是否适合终端屏幕的差异,或者
  2. 否则在寻呼机中显示差异。

我的脚本:

#!/bin/sh

if ! git diff "$@" > /dev/null; then
    # not in a Git repository
    exit 1
fi

if [ `git diff "$@" | wc --lines` -gt `tput lines` ]; then
    git diff "$@" --color=always | less
else
    git diff "$@" --color=always | cat
fi

该脚本当前的限制:

  1. 如果我需要对git showor执行相同的操作git log,我需要编写另外两个类似的脚本(不是 DRY)。
  2. 自动完成不起作用。我需要自己写一个(花费太多时间)。

现在我希望编写一个具有相同功能但用作分页器的脚本,以便我可以将 Git 配置设置core.pager为脚本并解决提到的问题。

注意:我使用的是 Zsh。

更新

我尝试了less --no-init --quit-if-one-screenless -FX),它几乎满足了我的需要,只是在超过一页的情况下它不会清除屏幕。所以实际上我需要--no-init有条件的选项:禁用初始化并在适合一个屏幕时退出;没有其他特别行动。或许less --no-init-if-one-screen --quit-if-one-screen

相关内容