hgext/pager.py
author David Soria Parra <dsp@php.net>
Thu, 20 Mar 2008 00:57:14 +0100
changeset 6323 6e1308a09ffd
child 6324 ee1077b41d5c
permissions -rw-r--r--
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

# 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