# HG changeset patch # User David Soria Parra # Date 2008-03-19 23:57:14 # Node ID 6e1308a09ffd4f0d51eabc22359e536e1be1908d # Parent 108636b9b981869320d2e9377f4718835b37c117 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 diff --git a/hgext/pager.py b/hgext/pager.py new file mode 100644 --- /dev/null +++ b/hgext/pager.py @@ -0,0 +1,54 @@ +# pager.py - display output using a pager +# +# Copyright 2008 David Soria Parra +# +# 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