Use the pager given by the environment to display long output
Unix systems usually have a PAGER environment variable set.
If it is set, mercurial will use the pager application to display
output.
Two configuration variables are available to influence the
behaviour of the pager:
pager.application
sets the application to be used
pager.quiet
silences Broken Pipe errors that might occur when the user
quits the pager before mercurial finished to write the output
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/pager.py Thu Mar 20 00:57:14 2008 +0100
@@ -0,0 +1,54 @@
+# pager.py - display output using a pager
+#
+# Copyright 2008 David Soria Parra <dsp@php.net>
+#
+# This software may be used and distributed according to the terms
+# of the GNU General Public License, incorporated herein by reference.
+#
+# To load the extension add it to your .hgrc file
+#
+# [extension]
+# hgext.pager =
+#
+# To set the pager that should be used, set the application variable
+#
+# [pager]
+# application = less
+#
+# You can also set environment variables there
+#
+# [pager]
+# application = LESS='FSRX' less
+#
+# If no application is set, the pager extensions use the environment
+# variable $PAGER. If neither pager.application, nor
+# $PAGER is set, no pager is used.
+#
+# If you notice "BROKEN PIPE" error messages, you can disable them
+# by setting
+#
+# [pager]
+# quiet = True
+#
+
+import sys, os, signal
+
+def getpager(ui):
+ '''return a pager
+
+ We separate this method from the pager class as we don't want to
+ instantiate a pager if it is not used at all
+ '''
+ if sys.stdout.isatty():
+ return (ui.config("pager", "application")
+ or os.environ.get("PAGER"))
+
+def uisetup(ui):
+ # disable broken pipe error messages
+ if ui.configbool('pager', 'quiet', False):
+ signal.signal(signal.SIGPIPE, signal.SIG_DFL)
+
+ if getpager(ui):
+ pager = os.popen(getpager(ui), 'wb')
+ sys.stderr = pager
+ sys.stdout = pager