hgext/pager.py
author Gregory Szorc <gregory.szorc@gmail.com>
Sat, 02 Nov 2019 13:04:47 -0700
branchstable
changeset 43389 e6ce1599af74
parent 43077 687b865b95ad
child 45942 89a2afe31e82
permissions -rw-r--r--
fsmonitor: fix str/bytes mismatch when accessing watchman version There were 2 bugs here. First, keys in the tuple are always str. Second, we needed to normalize the value to bytes to prevent a str/bytes mismatch on Python 3. With this commit, `hg debuginstall` with fsmonitor enabled now works on Python 3. Differential Revision: https://phab.mercurial-scm.org/D7205
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6323
6e1308a09ffd Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff changeset
     1
# pager.py - display output using a pager
6e1308a09ffd Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff changeset
     2
#
6e1308a09ffd Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff changeset
     3
# Copyright 2008 David Soria Parra <dsp@php.net>
6e1308a09ffd Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff changeset
     4
#
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 7995
diff changeset
     5
# This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 10112
diff changeset
     6
# GNU General Public License version 2 or any later version.
6323
6e1308a09ffd Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff changeset
     7
#
12083
ebfc46929f3e help: refer to user configuration file more consistently
Brodie Rao <brodie@bitheap.org>
parents: 11414
diff changeset
     8
# To load the extension, add it to your configuration file:
6323
6e1308a09ffd Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff changeset
     9
#
6e1308a09ffd Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff changeset
    10
#   [extension]
10112
703db37d186b hgext: enable extensions without "hgext." prefix in help texts
Martin Geisler <mg@lazybytes.net>
parents: 9841
diff changeset
    11
#   pager =
6323
6e1308a09ffd Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff changeset
    12
#
29967
bd55d98027ee pager: use single quotes in use warning
timeless <timeless@mozdev.org>
parents: 29841
diff changeset
    13
# Run 'hg help pager' to get info on configuration.
6462
6c4e12682fb9 pager: make config info accessible with "hg help pager"
Christian Ebert <blacktrash@gmx.net>
parents: 6457
diff changeset
    14
31061
900996da577a pager: move most help to a new help topic and deprecate extension
Augie Fackler <augie@google.com>
parents: 31033
diff changeset
    15
'''browse command output with an external pager (DEPRECATED)
6462
6c4e12682fb9 pager: make config info accessible with "hg help pager"
Christian Ebert <blacktrash@gmx.net>
parents: 6457
diff changeset
    16
31061
900996da577a pager: move most help to a new help topic and deprecate extension
Augie Fackler <augie@google.com>
parents: 31033
diff changeset
    17
Forcibly enable paging for individual commands that don't typically
900996da577a pager: move most help to a new help topic and deprecate extension
Augie Fackler <augie@google.com>
parents: 31033
diff changeset
    18
request pagination with the attend-<command> option. This setting
900996da577a pager: move most help to a new help topic and deprecate extension
Augie Fackler <augie@google.com>
parents: 31033
diff changeset
    19
takes precedence over ignore options and defaults::
21281
bcddddcf0b54 pager: add attend-<command> option
Matt Mackall <mpm@selenic.com>
parents: 21280
diff changeset
    20
bcddddcf0b54 pager: add attend-<command> option
Matt Mackall <mpm@selenic.com>
parents: 21280
diff changeset
    21
  [pager]
bcddddcf0b54 pager: add attend-<command> option
Matt Mackall <mpm@selenic.com>
parents: 21280
diff changeset
    22
  attend-cat = false
6462
6c4e12682fb9 pager: make config info accessible with "hg help pager"
Christian Ebert <blacktrash@gmx.net>
parents: 6457
diff changeset
    23
'''
28320
63c2864af25f pager: use absolute_import
Augie Fackler <augie@google.com>
parents: 27128
diff changeset
    24
from __future__ import absolute_import
6323
6e1308a09ffd Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff changeset
    25
28320
63c2864af25f pager: use absolute_import
Augie Fackler <augie@google.com>
parents: 27128
diff changeset
    26
from mercurial import (
63c2864af25f pager: use absolute_import
Augie Fackler <augie@google.com>
parents: 27128
diff changeset
    27
    cmdutil,
63c2864af25f pager: use absolute_import
Augie Fackler <augie@google.com>
parents: 27128
diff changeset
    28
    commands,
63c2864af25f pager: use absolute_import
Augie Fackler <augie@google.com>
parents: 27128
diff changeset
    29
    dispatch,
63c2864af25f pager: use absolute_import
Augie Fackler <augie@google.com>
parents: 27128
diff changeset
    30
    extensions,
34495
6d1b0970f80c configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents: 31406
diff changeset
    31
    registrar,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 34669
diff changeset
    32
)
6323
6e1308a09ffd Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff changeset
    33
29841
d5883fd055c6 extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents: 29205
diff changeset
    34
# Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
25186
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24067
diff changeset
    35
# extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24067
diff changeset
    36
# be specifying the version(s) of Mercurial they are tested with, or
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24067
diff changeset
    37
# leave the attribute unspecified.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    38
testedwith = b'ships-with-hg-core'
16743
38caf405d010 hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents: 16652
diff changeset
    39
34495
6d1b0970f80c configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents: 31406
diff changeset
    40
configtable = {}
6d1b0970f80c configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents: 31406
diff changeset
    41
configitem = registrar.configitem(configtable)
6d1b0970f80c configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents: 31406
diff changeset
    42
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 34669
diff changeset
    43
configitem(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    44
    b'pager', b'attend', default=lambda: attended,
34495
6d1b0970f80c configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents: 31406
diff changeset
    45
)
6d1b0970f80c configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents: 31406
diff changeset
    46
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 34669
diff changeset
    47
6323
6e1308a09ffd Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff changeset
    48
def uisetup(ui):
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 6548
diff changeset
    49
    def pagecmd(orig, ui, options, cmd, cmdfunc):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    50
        auto = options[b'pager'] == b'auto'
30993
9c2977ceaa46 pager: move more behavior into core
Augie Fackler <augie@google.com>
parents: 30992
diff changeset
    51
        if auto and not ui.pageractive:
21279
19b8cfe4396f pager: break auto out of command check loop
Matt Mackall <mpm@selenic.com>
parents: 21278
diff changeset
    52
            usepager = False
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    53
            attend = ui.configlist(b'pager', b'attend')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    54
            ignore = ui.configlist(b'pager', b'ignore')
19940
7d99bff0f77c pager: honour internal aliases
David Soria Parra <dsp@experimentalworks.net>
parents: 18923
diff changeset
    55
            cmds, _ = cmdutil.findcmd(cmd, commands.table)
7d99bff0f77c pager: honour internal aliases
David Soria Parra <dsp@experimentalworks.net>
parents: 18923
diff changeset
    56
7d99bff0f77c pager: honour internal aliases
David Soria Parra <dsp@experimentalworks.net>
parents: 18923
diff changeset
    57
            for cmd in cmds:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    58
                var = b'attend-%s' % cmd
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    59
                if ui.config(b'pager', var, None):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    60
                    usepager = ui.configbool(b'pager', var, True)
21281
bcddddcf0b54 pager: add attend-<command> option
Matt Mackall <mpm@selenic.com>
parents: 21280
diff changeset
    61
                    break
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 34669
diff changeset
    62
                if cmd in attend or (cmd not in ignore and not attend):
21277
2bc778e2f9b3 pager: break pager invocation out of command check loop
Matt Mackall <mpm@selenic.com>
parents: 20790
diff changeset
    63
                    usepager = True
19940
7d99bff0f77c pager: honour internal aliases
David Soria Parra <dsp@experimentalworks.net>
parents: 18923
diff changeset
    64
                    break
21277
2bc778e2f9b3 pager: break pager invocation out of command check loop
Matt Mackall <mpm@selenic.com>
parents: 20790
diff changeset
    65
30993
9c2977ceaa46 pager: move more behavior into core
Augie Fackler <augie@google.com>
parents: 30992
diff changeset
    66
            if usepager:
30995
5e85bab867a7 ui: add ignore-single-command functionality
Augie Fackler <augie@google.com>
parents: 30993
diff changeset
    67
                # Slight hack: the attend list is supposed to override
5e85bab867a7 ui: add ignore-single-command functionality
Augie Fackler <augie@google.com>
parents: 30993
diff changeset
    68
                # the ignore list for the pager extension, but the
5e85bab867a7 ui: add ignore-single-command functionality
Augie Fackler <augie@google.com>
parents: 30993
diff changeset
    69
                # core code doesn't know about attend, so we have to
5e85bab867a7 ui: add ignore-single-command functionality
Augie Fackler <augie@google.com>
parents: 30993
diff changeset
    70
                # lobotomize the ignore list so that the extension's
5e85bab867a7 ui: add ignore-single-command functionality
Augie Fackler <augie@google.com>
parents: 30993
diff changeset
    71
                # behavior is preserved.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    72
                ui.setconfig(b'pager', b'ignore', b'', b'pager')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    73
                ui.pager(b'extension-via-attend-' + cmd)
31406
e83302d43748 pager: if old pager extensions is enabled, respect pager.attend
Martin von Zweigbergk <martinvonz@google.com>
parents: 31122
diff changeset
    74
            else:
e83302d43748 pager: if old pager extensions is enabled, respect pager.attend
Martin von Zweigbergk <martinvonz@google.com>
parents: 31122
diff changeset
    75
                ui.disablepager()
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 6548
diff changeset
    76
        return orig(ui, options, cmd, cmdfunc)
6417
13fafd8cc4a1 pager: Add a configuration to enable/disable the pager for certain commands
David Soria Parra <dsp <at> php.net>
parents: 6324
diff changeset
    77
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    78
    extensions.wrapfunction(dispatch, b'_runcommand', pagecmd)
9841
7cd6dee6fe37 pager: provide a default attend list
Brodie Rao <me+hg@dackz.net>
parents: 9267
diff changeset
    79
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 34669
diff changeset
    80
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    81
attended = [b'annotate', b'cat', b'diff', b'export', b'glog', b'log', b'qdiff']