Re: [PATCH (topgit) 1/2] Implement setup_pager just like in git
From: Petr Baudis <hidden>
Date: 2016-06-15 22:45:52
On Wed, Jan 07, 2009 at 02:27:54PM +0300, Kirill Smelkov wrote:
quoted
From 2193b7c703c2d31c8739eec617b8c0e8c1d09b79 Mon Sep 17 00:00:00 2001From: Kirill Smelkov <redacted> Date: Tue, 6 Jan 2009 17:56:37 +0300 Subject: [PATCH (topgit) v2] Implement setup_pager just like in git 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>
But you never use it...?
quoted hunk
--- tg.sh | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 54 insertions(+), 0 deletions(-)diff --git a/tg.sh b/tg.sh index 8c23d26..bf9cf5c 100644 --- a/tg.sh +++ b/tg.sh@@ -243,6 +243,60 @@ do_help() fi } +## Pager stuff + +# isatty FD +isatty() +{ + tty -s 0<&$1 +} + +# 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 + # (but differentiate between GIT_PAGER='' and unset variables) + # http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-03/0792.html + case ${GIT_PAGER+XXX} in + '') + case ${PAGER+XXX} in + '')
I'm pretty sure there's been a nice trick for this, but I can't remember it at all now.
+ # 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_dir="$(mktemp -t -d tg-pager-fifo.XXXXXX)"
+ _pager_fifo="$_pager_fifo_dir/0"
+ 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"; rmdir "$_pager_fifo_dir"; wait" EXIT
+}Frankly, I would have been just much happier if something like git pager--helper would be provided for external tools to use. Seeing how it gets reimplemented like this just pains me greatly. On Wed, Jan 07, 2009 at 03:44:32PM +0100, Pierre Habouzit wrote:
On Wed, Jan 07, 2009 at 11:27:54AM +0000, Kirill Smelkov wrote:quoted
isatty() { tty -s 0<&$1 }why not test -t 0 ? I'm not sure it's POSIX though.
It's SUS for many issues already it seems. -- Petr "Pasky" Baudis The average, healthy, well-adjusted adult gets up at seven-thirty in the morning feeling just terrible. -- Jean Kerr