[PATCH (topgit) 1/2] Implement setup_pager just like in git
flat view
STALE3776d
From: Kirill Smelkov <hidden>
Date: 2016-06-15 22:45:52
Subsystem:
the rest · Maintainer:
Linus Torvalds
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 <redacted> --- 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