Use the pager given by the environment to display long output
authorDavid Soria Parra <dsp@php.net>
Thu, 20 Mar 2008 00:57:14 +0100
changeset 6323 6e1308a09ffd
parent 6322 108636b9b981
child 6324 ee1077b41d5c
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
hgext/pager.py
--- /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