changeset 6323:6e1308a09ffd

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
author David Soria Parra <dsp@php.net>
date Thu, 20 Mar 2008 00:57:14 +0100
parents 108636b9b981
children ee1077b41d5c
files hgext/pager.py
diffstat 1 files changed, 54 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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