--- a/mercurial/ui.py Tue Mar 18 18:14:59 2008 -0300
+++ b/mercurial/ui.py Tue Mar 18 22:12:34 2008 +0100
@@ -31,6 +31,7 @@
parentui=None):
self.overlay = None
self.buffers = []
+ self.pager = None
if parentui is None:
# this is the parent of all ui children
self.parentui = None
@@ -64,6 +65,15 @@
def __getattr__(self, key):
return getattr(self.parentui, key)
+ def __del__(self):
+ if self.pager:
+ try:
+ self.pager.close()
+ except IOException:
+ # we might get into an broken pipe if the users quit
+ # the pager before we finished io
+ pass
+
def isatty(self):
if ui._isatty is None:
ui._isatty = sys.stdin.isatty()
@@ -370,9 +380,14 @@
return "".join(self.buffers.pop())
def write(self, *args):
+ """Write to a pager if available, otherwise to stdout"""
if self.buffers:
self.buffers[-1].extend([str(a) for a in args])
else:
+ if self.getpager() and not self.pager:
+ self.pager = os.popen(self.getpager(), "w")
+ sys.stderr = self.pager
+ sys.stdout = self.pager
for a in args:
sys.stdout.write(str(a))
@@ -478,3 +493,8 @@
os.environ.get("VISUAL") or
os.environ.get("EDITOR", "vi"))
+ def getpager(self):
+ '''return a pager'''
+ if self.configbool("ui", "usepager", False):
+ return (self.config("ui", "pager")
+ or os.environ.get("PAGER"))