author | Raphaël Gomès <rgomes@octobus.net> |
Thu, 18 Jul 2024 12:03:29 +0200 | |
changeset 51702 | b0a4de6c14f8 |
parent 50788 | 05430a06a2eb |
child 51863 | f4733654f144 |
permissions | -rw-r--r-- |
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 | 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 |
''' |
6323
6e1308a09ffd
Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
24 |
|
28320
63c2864af25f
pager: use absolute_import
Augie Fackler <augie@google.com>
parents:
27128
diff
changeset
|
25 |
from mercurial import ( |
63c2864af25f
pager: use absolute_import
Augie Fackler <augie@google.com>
parents:
27128
diff
changeset
|
26 |
cmdutil, |
63c2864af25f
pager: use absolute_import
Augie Fackler <augie@google.com>
parents:
27128
diff
changeset
|
27 |
commands, |
63c2864af25f
pager: use absolute_import
Augie Fackler <augie@google.com>
parents:
27128
diff
changeset
|
28 |
dispatch, |
63c2864af25f
pager: use absolute_import
Augie Fackler <augie@google.com>
parents:
27128
diff
changeset
|
29 |
extensions, |
34495
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
30 |
registrar, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
34669
diff
changeset
|
31 |
) |
6323
6e1308a09ffd
Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
32 |
|
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29205
diff
changeset
|
33 |
# 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
|
34 |
# 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
|
35 |
# 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
|
36 |
# leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
37 |
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
|
38 |
|
34495
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
39 |
configtable = {} |
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
40 |
configitem = registrar.configitem(configtable) |
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
41 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
34669
diff
changeset
|
42 |
configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43077
diff
changeset
|
43 |
b'pager', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43077
diff
changeset
|
44 |
b'attend', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43077
diff
changeset
|
45 |
default=lambda: attended, |
34495
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
46 |
) |
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
47 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
34669
diff
changeset
|
48 |
|
6323
6e1308a09ffd
Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
49 |
def uisetup(ui): |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
6548
diff
changeset
|
50 |
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
|
51 |
auto = options[b'pager'] == b'auto' |
30993
9c2977ceaa46
pager: move more behavior into core
Augie Fackler <augie@google.com>
parents:
30992
diff
changeset
|
52 |
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
|
53 |
usepager = False |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
54 |
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
|
55 |
ignore = ui.configlist(b'pager', b'ignore') |
19940
7d99bff0f77c
pager: honour internal aliases
David Soria Parra <dsp@experimentalworks.net>
parents:
18923
diff
changeset
|
56 |
cmds, _ = cmdutil.findcmd(cmd, commands.table) |
7d99bff0f77c
pager: honour internal aliases
David Soria Parra <dsp@experimentalworks.net>
parents:
18923
diff
changeset
|
57 |
|
7d99bff0f77c
pager: honour internal aliases
David Soria Parra <dsp@experimentalworks.net>
parents:
18923
diff
changeset
|
58 |
for cmd in cmds: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
59 |
var = b'attend-%s' % cmd |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
60 |
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
|
61 |
usepager = ui.configbool(b'pager', var, True) |
21281
bcddddcf0b54
pager: add attend-<command> option
Matt Mackall <mpm@selenic.com>
parents:
21280
diff
changeset
|
62 |
break |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
34669
diff
changeset
|
63 |
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
|
64 |
usepager = True |
19940
7d99bff0f77c
pager: honour internal aliases
David Soria Parra <dsp@experimentalworks.net>
parents:
18923
diff
changeset
|
65 |
break |
21277
2bc778e2f9b3
pager: break pager invocation out of command check loop
Matt Mackall <mpm@selenic.com>
parents:
20790
diff
changeset
|
66 |
|
30993
9c2977ceaa46
pager: move more behavior into core
Augie Fackler <augie@google.com>
parents:
30992
diff
changeset
|
67 |
if usepager: |
30995
5e85bab867a7
ui: add ignore-single-command functionality
Augie Fackler <augie@google.com>
parents:
30993
diff
changeset
|
68 |
# 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
|
69 |
# 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
|
70 |
# 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
|
71 |
# 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
|
72 |
# behavior is preserved. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
73 |
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
|
74 |
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
|
75 |
else: |
e83302d43748
pager: if old pager extensions is enabled, respect pager.attend
Martin von Zweigbergk <martinvonz@google.com>
parents:
31122
diff
changeset
|
76 |
ui.disablepager() |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
6548
diff
changeset
|
77 |
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
|
78 |
|
50788
05430a06a2eb
wrapfunction: use sysstr instead of bytes as argument in "pager"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48875
diff
changeset
|
79 |
extensions.wrapfunction(dispatch, '_runcommand', pagecmd) |
9841
7cd6dee6fe37
pager: provide a default attend list
Brodie Rao <me+hg@dackz.net>
parents:
9267
diff
changeset
|
80 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
34669
diff
changeset
|
81 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
82 |
attended = [b'annotate', b'cat', b'diff', b'export', b'glog', b'log', b'qdiff'] |