From: Kirill Smelkov Date: Tue, 06 Jan 2009 15:16:38 GMT Subject: [PATCH (topgit) 1/2] Implement setup_pager just like in git Message-ID: In-Reply-To: setup_pager() spawns a pager process and redirect the rest of our output to it. This will be needed to fix `tg patch` output in the next commit. Signed-off-by: Kirill Smelkov --- tg.sh | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 53 insertions(+), 0 deletions(-) diff --git a/tg.sh b/tg.sh index 8c23d26..51a82af 100644 --- a/tg.sh +++ b/tg.sh @@ -243,6 +243,59 @@ do_help() fi } +## Pager stuff + +# isatty FD +isatty() +{ + tty -s 0<&$1 || return 1 + return 0 +} + +# setup_pager +# Spawn pager process and redirect the rest of our output to it +setup_pager() +{ + isatty 1 || return 0 + + # TG_PAGER = GIT_PAGER | PAGER + # http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-03/0792.html + case ${GIT_PAGER+XXX} in + '') + case ${PAGER+XXX} in + '') + # both GIT_PAGER & PAGER unset + TG_PAGER='' + ;; + *) + TG_PAGER="$PAGER" + ;; + esac + ;; + *) + TG_PAGER="$GIT_PAGER" + ;; + esac + + [ -z "$TG_PAGER" -o "$TG_PAGER" = "cat" ] && return 0 + + + # now spawn pager + export LESS=${LESS:-FRSX} # as in pager.c:pager_preexec() + + _pager_fifo="$(mktemp -t tg-pager-fifo.XXXXXX)" + rm "$_pager_fifo" && mkfifo -m 600 "$_pager_fifo" + + "$TG_PAGER" < "$_pager_fifo" & + exec > "$_pager_fifo" # dup2(pager_fifo.in, 1) + + # this is needed so e.g. `git diff` will still colorize it's output if + # requested in ~/.gitconfig with color.diff=auto + export GIT_PAGER_IN_USE=1 + + # atexit(close(1); wait pager) + trap "exec >&-; rm $_pager_fifo; wait" EXIT +} ## Startup -- 1.6.1.48.ge9b8