Mercurial > public > mercurial-scm > hg-stable
diff mercurial/ui.py @ 31954:e518192d6bac
pager: set some environment variables if they're not set
Git did this already [1] [2]. We want this behavior too [3].
This provides a better default user experience (like, supporting colors) if
users have things like "PAGER=less" set, which is not uncommon.
The environment variables are provided by a method so extensions can
override them on demand.
[1]: https://github.com/git/git/blob/6a5ff7acb5965718cc7016c0ab6c601454fd7cde/pager.c#L87
[2]: https://github.com/git/git/blob/6a5ff7acb5965718cc7016c0ab6c601454fd7cde/Makefile#L1545
[3]: https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-March/094780.html
author | Jun Wu <quark@fb.com> |
---|---|
date | Thu, 13 Apr 2017 08:27:19 -0700 |
parents | ac69675fff1c |
children | c13ff31818b0 |
line wrap: on
line diff
--- a/mercurial/ui.py Thu Apr 13 14:48:18 2017 -0400 +++ b/mercurial/ui.py Thu Apr 13 08:27:19 2017 -0700 @@ -854,13 +854,18 @@ if not pagercmd: return + pagerenv = {} + for name, value in rcutil.defaultpagerenv().items(): + if name not in encoding.environ: + pagerenv[name] = value + self.debug('starting pager for command %r\n' % command) self.flush() wasformatted = self.formatted() if util.safehasattr(signal, "SIGPIPE"): signal.signal(signal.SIGPIPE, _catchterm) - if self._runpager(pagercmd): + if self._runpager(pagercmd, pagerenv): self.pageractive = True # Preserve the formatted-ness of the UI. This is important # because we mess with stdout, which might confuse @@ -879,7 +884,7 @@ # warning about a missing pager command. self.disablepager() - def _runpager(self, command): + def _runpager(self, command, env=None): """Actually start the pager and set up file descriptors. This is separate in part so that extensions (like chg) can @@ -912,7 +917,8 @@ pager = subprocess.Popen( command, shell=shell, bufsize=-1, close_fds=util.closefds, stdin=subprocess.PIPE, - stdout=util.stdout, stderr=util.stderr) + stdout=util.stdout, stderr=util.stderr, + env=util.shellenviron(env)) except OSError as e: if e.errno == errno.ENOENT and not shell: self.warn(_("missing pager command '%s', skipping pager\n")