diff --git a/hgext/pager.py b/hgext/pager.py --- a/hgext/pager.py +++ b/hgext/pager.py @@ -24,12 +24,37 @@ # # [pager] # quiet = True +# +# You can disable the pager for certain commands by adding them to the +# pager.ignore list: +# +# [pager] +# ignore = version, help, update +# +# You can also enable the pager only for certain commands using pager.attend: +# +# [pager] +# attend = log +# +# If pager.attend is present, pager.ignore will be ignored. +# +# To ignore global commands like 'hg version' or 'hg help', you have to specify them +# in the global .hgrc import sys, os, signal +from mercurial import dispatch def uisetup(ui): - p = ui.config("pager", "pager", os.environ.get("PAGER")) - if p and sys.stdout.isatty(): - if ui.configbool('pager', 'quiet'): - signal.signal(signal.SIGPIPE, signal.SIG_DFL) - sys.stderr = sys.stdout = os.popen(p, "wb") + def pagecmd(ui, options, cmd, cmdfunc): + p = ui.config("pager", "pager", os.environ.get("PAGER")) + if p and sys.stdout.isatty(): + attend = ui.configlist('pager', 'attend') + if (cmd in attend or + (cmd not in ui.configlist('pager', 'ignore') and not attend)): + sys.stderr = sys.stdout = os.popen(p, "wb") + if ui.configbool('pager', 'quiet'): + signal.signal(signal.SIGPIPE, signal.SIG_DFL) + return oldrun(ui, options, cmd, cmdfunc) + + oldrun = dispatch._runcommand + dispatch._runcommand = pagecmd