pager.py
82 lines
| 2.5 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 | ||
Matt Mackall
|
r10263 | # GNU General Public License version 2 or any later version. | ||
David Soria Parra
|
r6323 | # | ||
Brodie Rao
|
r12083 | # To load the extension, add it to your configuration file: | ||
David Soria Parra
|
r6323 | # | ||
# [extension] | ||||
Martin Geisler
|
r10112 | # pager = | ||
David Soria Parra
|
r6323 | # | ||
timeless
|
r29967 | # Run 'hg help pager' to get info on configuration. | ||
Christian Ebert
|
r6462 | |||
Augie Fackler
|
r31061 | '''browse command output with an external pager (DEPRECATED) | ||
Christian Ebert
|
r6462 | |||
Augie Fackler
|
r31061 | Forcibly enable paging for individual commands that don't typically | ||
request pagination with the attend-<command> option. This setting | ||||
takes precedence over ignore options and defaults:: | ||||
Matt Mackall
|
r21281 | |||
[pager] | ||||
attend-cat = false | ||||
Christian Ebert
|
r6462 | ''' | ||
David Soria Parra
|
r6323 | |||
Augie Fackler
|
r28320 | from mercurial import ( | ||
cmdutil, | ||||
commands, | ||||
dispatch, | ||||
extensions, | ||||
Boris Feld
|
r34496 | registrar, | ||
Augie Fackler
|
r43346 | ) | ||
David Soria Parra
|
r6323 | |||
Augie Fackler
|
r29841 | # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for | ||
Augie Fackler
|
r25186 | # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should | ||
# be specifying the version(s) of Mercurial they are tested with, or | ||||
# leave the attribute unspecified. | ||||
Augie Fackler
|
r43347 | testedwith = b'ships-with-hg-core' | ||
Augie Fackler
|
r16743 | |||
Boris Feld
|
r34496 | configtable = {} | ||
configitem = registrar.configitem(configtable) | ||||
Augie Fackler
|
r43346 | configitem( | ||
Augie Fackler
|
r46554 | b'pager', | ||
b'attend', | ||||
default=lambda: attended, | ||||
Boris Feld
|
r34496 | ) | ||
Augie Fackler
|
r43346 | |||
David Soria Parra
|
r6323 | def uisetup(ui): | ||
Matt Mackall
|
r7216 | def pagecmd(orig, ui, options, cmd, cmdfunc): | ||
Augie Fackler
|
r43347 | auto = options[b'pager'] == b'auto' | ||
Augie Fackler
|
r30993 | if auto and not ui.pageractive: | ||
Matt Mackall
|
r21279 | usepager = False | ||
Augie Fackler
|
r43347 | attend = ui.configlist(b'pager', b'attend') | ||
ignore = ui.configlist(b'pager', b'ignore') | ||||
David Soria Parra
|
r19940 | cmds, _ = cmdutil.findcmd(cmd, commands.table) | ||
for cmd in cmds: | ||||
Augie Fackler
|
r43347 | var = b'attend-%s' % cmd | ||
if ui.config(b'pager', var, None): | ||||
usepager = ui.configbool(b'pager', var, True) | ||||
Matt Mackall
|
r21281 | break | ||
Augie Fackler
|
r43346 | if cmd in attend or (cmd not in ignore and not attend): | ||
Matt Mackall
|
r21277 | usepager = True | ||
David Soria Parra
|
r19940 | break | ||
Matt Mackall
|
r21277 | |||
Augie Fackler
|
r30993 | if usepager: | ||
Augie Fackler
|
r30995 | # Slight hack: the attend list is supposed to override | ||
# the ignore list for the pager extension, but the | ||||
# core code doesn't know about attend, so we have to | ||||
# lobotomize the ignore list so that the extension's | ||||
# behavior is preserved. | ||||
Augie Fackler
|
r43347 | ui.setconfig(b'pager', b'ignore', b'', b'pager') | ||
ui.pager(b'extension-via-attend-' + cmd) | ||||
Martin von Zweigbergk
|
r31406 | else: | ||
ui.disablepager() | ||||
Matt Mackall
|
r7216 | return orig(ui, options, cmd, cmdfunc) | ||
David Soria Parra <dsp <at> php.net>
|
r6417 | |||
r51681 | extensions.wrapfunction(dispatch, '_runcommand', pagecmd) | |||
Brodie Rao
|
r9841 | |||
Augie Fackler
|
r43346 | |||
Augie Fackler
|
r43347 | attended = [b'annotate', b'cat', b'diff', b'export', b'glog', b'log', b'qdiff'] | ||