Show More
@@ -190,8 +190,8 b' def _newchgui(srcui, csystem, attachio):' | |||||
190 | self.flush() |
|
190 | self.flush() | |
191 | return self._csystem(cmd, util.shellenviron(environ), cwd) |
|
191 | return self._csystem(cmd, util.shellenviron(environ), cwd) | |
192 |
|
192 | |||
193 | def _runpager(self, cmd): |
|
193 | def _runpager(self, cmd, env=None): | |
194 | self._csystem(cmd, util.shellenviron(), type='pager', |
|
194 | self._csystem(cmd, util.shellenviron(env), type='pager', | |
195 | cmdtable={'attachio': attachio}) |
|
195 | cmdtable={'attachio': attachio}) | |
196 | return True |
|
196 | return True | |
197 |
|
197 |
@@ -90,3 +90,9 b' def rccomponents():' | |||||
90 | _rccomponents.append(envrc) |
|
90 | _rccomponents.append(envrc) | |
91 | _rccomponents.extend(normpaths(userrcpath())) |
|
91 | _rccomponents.extend(normpaths(userrcpath())) | |
92 | return _rccomponents |
|
92 | return _rccomponents | |
|
93 | ||||
|
94 | def defaultpagerenv(): | |||
|
95 | '''return a dict of default environment variables and their values, | |||
|
96 | intended to be set before starting a pager. | |||
|
97 | ''' | |||
|
98 | return {'LESS': 'FRX', 'LV': '-c'} |
@@ -854,13 +854,18 b' class ui(object):' | |||||
854 | if not pagercmd: |
|
854 | if not pagercmd: | |
855 | return |
|
855 | return | |
856 |
|
856 | |||
|
857 | pagerenv = {} | |||
|
858 | for name, value in rcutil.defaultpagerenv().items(): | |||
|
859 | if name not in encoding.environ: | |||
|
860 | pagerenv[name] = value | |||
|
861 | ||||
857 | self.debug('starting pager for command %r\n' % command) |
|
862 | self.debug('starting pager for command %r\n' % command) | |
858 | self.flush() |
|
863 | self.flush() | |
859 |
|
864 | |||
860 | wasformatted = self.formatted() |
|
865 | wasformatted = self.formatted() | |
861 | if util.safehasattr(signal, "SIGPIPE"): |
|
866 | if util.safehasattr(signal, "SIGPIPE"): | |
862 | signal.signal(signal.SIGPIPE, _catchterm) |
|
867 | signal.signal(signal.SIGPIPE, _catchterm) | |
863 | if self._runpager(pagercmd): |
|
868 | if self._runpager(pagercmd, pagerenv): | |
864 | self.pageractive = True |
|
869 | self.pageractive = True | |
865 | # Preserve the formatted-ness of the UI. This is important |
|
870 | # Preserve the formatted-ness of the UI. This is important | |
866 | # because we mess with stdout, which might confuse |
|
871 | # because we mess with stdout, which might confuse | |
@@ -879,7 +884,7 b' class ui(object):' | |||||
879 | # warning about a missing pager command. |
|
884 | # warning about a missing pager command. | |
880 | self.disablepager() |
|
885 | self.disablepager() | |
881 |
|
886 | |||
882 | def _runpager(self, command): |
|
887 | def _runpager(self, command, env=None): | |
883 | """Actually start the pager and set up file descriptors. |
|
888 | """Actually start the pager and set up file descriptors. | |
884 |
|
889 | |||
885 | This is separate in part so that extensions (like chg) can |
|
890 | This is separate in part so that extensions (like chg) can | |
@@ -912,7 +917,8 b' class ui(object):' | |||||
912 | pager = subprocess.Popen( |
|
917 | pager = subprocess.Popen( | |
913 | command, shell=shell, bufsize=-1, |
|
918 | command, shell=shell, bufsize=-1, | |
914 | close_fds=util.closefds, stdin=subprocess.PIPE, |
|
919 | close_fds=util.closefds, stdin=subprocess.PIPE, | |
915 |
stdout=util.stdout, stderr=util.stderr |
|
920 | stdout=util.stdout, stderr=util.stderr, | |
|
921 | env=util.shellenviron(env)) | |||
916 | except OSError as e: |
|
922 | except OSError as e: | |
917 | if e.errno == errno.ENOENT and not shell: |
|
923 | if e.errno == errno.ENOENT and not shell: | |
918 | self.warn(_("missing pager command '%s', skipping pager\n") |
|
924 | self.warn(_("missing pager command '%s', skipping pager\n") |
@@ -254,3 +254,29 b' Put annotate in the ignore list for page' | |||||
254 | 8: a 8 |
|
254 | 8: a 8 | |
255 | 9: a 9 |
|
255 | 9: a 9 | |
256 | 10: a 10 |
|
256 | 10: a 10 | |
|
257 | ||||
|
258 | Environment variables like LESS and LV are set automatically: | |||
|
259 | $ cat > $TESTTMP/printlesslv.py <<EOF | |||
|
260 | > import os, sys | |||
|
261 | > sys.stdin.read() | |||
|
262 | > for name in ['LESS', 'LV']: | |||
|
263 | > sys.stdout.write(('%s=%s\n') % (name, os.environ.get(name, '-'))) | |||
|
264 | > sys.stdout.flush() | |||
|
265 | > EOF | |||
|
266 | ||||
|
267 | $ cat >> $HGRCPATH <<EOF | |||
|
268 | > [alias] | |||
|
269 | > noop = log -r 0 -T '' | |||
|
270 | > [ui] | |||
|
271 | > formatted=1 | |||
|
272 | > [pager] | |||
|
273 | > pager = $PYTHON $TESTTMP/printlesslv.py | |||
|
274 | > EOF | |||
|
275 | $ unset LESS | |||
|
276 | $ unset LV | |||
|
277 | $ hg noop --pager=on | |||
|
278 | LESS=FRX | |||
|
279 | LV=-c | |||
|
280 | $ LESS=EFGH hg noop --pager=on | |||
|
281 | LESS=EFGH | |||
|
282 | LV=-c |
General Comments 0
You need to be logged in to leave comments.
Login now