git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH (topgit) 1/2] Implement setup_pager just like in git

From
Kirill Smelkov <kirr@landau.phys.spbu.ru>
Date
Jan 6, 2009, 15:16 UTC
Message-ID
<acaae74f79d385014e726b97f8258b2a0caa3dd0.1231254832.git.kirr@landau.phys.spbu.ru>
In-Reply-To
<cover.1231254832.git.kirr@landau.phys.spbu.ru>

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 <kirr@landau.phys.spbu.ru>
---
 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
Previous: Kirill SmelkovNext: martin f krafft
Message 2 of 14 in “tg-patch: fix pagination”
  1. 0/2 tg-patch: fix paginationKirill Smelkov, Jan 6, 2009
  2. 1/2 Implement setup_pager just like in gitKirill Smelkov, Jan 6, 2009
  3. martin f krafftJan 6, 2009
  4. Adeodato SimóJan 7, 2009
  5. Kirill SmelkovJan 7, 2009
  6. Thomas RastJan 7, 2009
  7. Bert WesargJan 7, 2009
  8. Pierre HabouzitJan 7, 2009
  9. Petr BaudisJan 7, 2009
  10. Kirill SmelkovJan 7, 2009
  11. martin f krafftJan 8, 2009
  12. Kirill SmelkovJan 8, 2009
  13. 2/2 tg-patch: fix paginationKirill Smelkov, Jan 6, 2009
  14. Kirill SmelkovJan 18, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.