pager.py
64 lines
| 1.9 KiB
| text/x-python
|
PythonLexer
/ hgext / pager.py
David Soria Parra
|
r6323 | # pager.py - display output using a pager | ||
# | ||||
# Copyright 2008 David Soria Parra <dsp@php.net> | ||||
# | ||||
Martin Geisler
|
r8225 | # This software may be used and distributed according to the terms of the | ||
# GNU General Public License version 2, incorporated herein by reference. | ||||
David Soria Parra
|
r6323 | # | ||
Matt Mackall
|
r6324 | # To load the extension, add it to your .hgrc file: | ||
David Soria Parra
|
r6323 | # | ||
# [extension] | ||||
# hgext.pager = | ||||
# | ||||
Christian Ebert
|
r6462 | # Run "hg help pager" to get info on configuration. | ||
Cédric Duval
|
r8894 | '''browse command output with an external pager | ||
Christian Ebert
|
r6462 | |||
To set the pager that should be used, set the application variable: | ||||
[pager] | ||||
pager = LESS='FSRX' less | ||||
Martin Geisler
|
r7995 | If no pager is set, the pager extensions uses the environment variable | ||
$PAGER. If neither pager.pager, nor $PAGER is set, no pager is used. | ||||
Christian Ebert
|
r6462 | |||
Martin Geisler
|
r7995 | If you notice "BROKEN PIPE" error messages, you can disable them by | ||
setting: | ||||
Christian Ebert
|
r6462 | |||
[pager] | ||||
quiet = True | ||||
You can disable the pager for certain commands by adding them to the | ||||
pager.ignore list: | ||||
[pager] | ||||
ignore = version, help, update | ||||
Martin Geisler
|
r7995 | You can also enable the pager only for certain commands using | ||
pager.attend: | ||||
Christian Ebert
|
r6462 | |||
[pager] | ||||
attend = log | ||||
If pager.attend is present, pager.ignore will be ignored. | ||||
Martin Geisler
|
r7995 | To ignore global commands like "hg version" or "hg help", you have to | ||
specify them in the global .hgrc | ||||
Christian Ebert
|
r6462 | ''' | ||
David Soria Parra
|
r6323 | |||
import sys, os, signal | ||||
Matt Mackall
|
r7216 | from mercurial import dispatch, util, extensions | ||
David Soria Parra
|
r6323 | |||
def uisetup(ui): | ||||
Matt Mackall
|
r7216 | def pagecmd(orig, ui, options, cmd, cmdfunc): | ||
David Soria Parra <dsp <at> php.net>
|
r6417 | p = ui.config("pager", "pager", os.environ.get("PAGER")) | ||
Dirkjan Ochtman
|
r6457 | if p and sys.stdout.isatty() and '--debugger' not in sys.argv: | ||
David Soria Parra <dsp <at> php.net>
|
r6417 | attend = ui.configlist('pager', 'attend') | ||
if (cmd in attend or | ||||
(cmd not in ui.configlist('pager', 'ignore') and not attend)): | ||||
Dirkjan Ochtman
|
r6548 | sys.stderr = sys.stdout = util.popen(p, "wb") | ||
David Soria Parra <dsp <at> php.net>
|
r6417 | if ui.configbool('pager', 'quiet'): | ||
signal.signal(signal.SIGPIPE, signal.SIG_DFL) | ||||
Matt Mackall
|
r7216 | return orig(ui, options, cmd, cmdfunc) | ||
David Soria Parra <dsp <at> php.net>
|
r6417 | |||
Matt Mackall
|
r7216 | extensions.wrapfunction(dispatch, '_runcommand', pagecmd) | ||