mercurial/ui.py
changeset 6325 41c77bb8d7f3
parent 6309 7240204121af
child 6333 f477afeb3a0f
equal deleted inserted replaced
6324:ee1077b41d5c 6325:41c77bb8d7f3
    29     def __init__(self, verbose=False, debug=False, quiet=False,
    29     def __init__(self, verbose=False, debug=False, quiet=False,
    30                  interactive=True, traceback=False, report_untrusted=True,
    30                  interactive=True, traceback=False, report_untrusted=True,
    31                  parentui=None):
    31                  parentui=None):
    32         self.overlay = None
    32         self.overlay = None
    33         self.buffers = []
    33         self.buffers = []
    34         self.pager = None
       
    35         if parentui is None:
    34         if parentui is None:
    36             # this is the parent of all ui children
    35             # this is the parent of all ui children
    37             self.parentui = None
    36             self.parentui = None
    38             self.quiet = quiet
    37             self.quiet = quiet
    39             self.verbose = verbose
    38             self.verbose = verbose
    64             self.buffers = parentui.buffers
    63             self.buffers = parentui.buffers
    65 
    64 
    66     def __getattr__(self, key):
    65     def __getattr__(self, key):
    67         return getattr(self.parentui, key)
    66         return getattr(self.parentui, key)
    68 
    67 
    69     def __del__(self):
       
    70         if self.pager:
       
    71             try:
       
    72                 self.pager.close()
       
    73             except IOException:
       
    74                 # we might get into an broken pipe if the users quit
       
    75                 # the pager before we finished io
       
    76                 pass
       
    77 
       
    78     def isatty(self):
    68     def isatty(self):
    79         if ui._isatty is None:
    69         if ui._isatty is None:
    80             ui._isatty = sys.stdin.isatty()
    70             ui._isatty = sys.stdin.isatty()
    81         return ui._isatty
    71         return ui._isatty
    82 
    72 
   379 
   369 
   380     def popbuffer(self):
   370     def popbuffer(self):
   381         return "".join(self.buffers.pop())
   371         return "".join(self.buffers.pop())
   382 
   372 
   383     def write(self, *args):
   373     def write(self, *args):
   384         """Write to a pager if available, otherwise to stdout"""
       
   385         if self.buffers:
   374         if self.buffers:
   386             self.buffers[-1].extend([str(a) for a in args])
   375             self.buffers[-1].extend([str(a) for a in args])
   387         else:
   376         else:
   388             if self.getpager() and not self.pager:
       
   389                 self.pager = os.popen(self.getpager(), "wb")
       
   390                 sys.stderr = self.pager
       
   391                 sys.stdout = self.pager
       
   392             for a in args:
   377             for a in args:
   393                 sys.stdout.write(str(a))
   378                 sys.stdout.write(str(a))
   394 
   379 
   395     def write_err(self, *args):
   380     def write_err(self, *args):
   396         try:
   381         try:
   491         '''return editor to use'''
   476         '''return editor to use'''
   492         return (os.environ.get("HGEDITOR") or
   477         return (os.environ.get("HGEDITOR") or
   493                 self.config("ui", "editor") or
   478                 self.config("ui", "editor") or
   494                 os.environ.get("VISUAL") or
   479                 os.environ.get("VISUAL") or
   495                 os.environ.get("EDITOR", "vi"))
   480                 os.environ.get("EDITOR", "vi"))
   496 
       
   497     def getpager(self):
       
   498         '''return a pager'''
       
   499         if sys.stdout.isatty() and self.configbool("ui", "usepager", False):
       
   500             return (self.config("ui", "pager")
       
   501                     or os.environ.get("PAGER"))