~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/ui/__init__.py

  • Committer: Martin Pool
  • Date: 2008-12-16 07:56:29 UTC
  • mto: (3882.7.11 progress)
  • mto: This revision was merged to the branch mainline in revision 3940.
  • Revision ID: mbp@sourcefrog.net-20081216075629-zhgjzxgoh32453tu
Choose the UIFactory class depending on the terminal capabilities

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
displays no output.
27
27
"""
28
28
 
 
29
import os
29
30
import sys
30
31
 
31
32
from bzrlib.lazy_import import lazy_import
49
50
    """
50
51
 
51
52
    def __init__(self):
52
 
        super(UIFactory, self).__init__()
53
53
        self._task_stack = []
54
54
 
55
55
    def get_password(self, prompt='', **kwargs):
125
125
 
126
126
 
127
127
class CLIUIFactory(UIFactory):
128
 
    """Common behaviour for command line UI factories."""
 
128
    """Common behaviour for command line UI factories.
 
129
    
 
130
    This is suitable for dumb terminals that can't repaint existing text."""
129
131
 
130
 
    def __init__(self):
131
 
        super(CLIUIFactory, self).__init__()
132
 
        self.stdin = sys.stdin
 
132
    def __init__(self, stdin=None, stdout=None, stderr=None):
 
133
        UIFactory.__init__(self)
 
134
        self.stdin = stdin or sys.stdin
 
135
        self.stdout = stdout or sys.stdout
 
136
        self.stderr = stderr or sys.stderr
133
137
 
134
138
    def get_boolean(self, prompt):
135
139
        self.clear_term()
174
178
    This is the default UI, if another one is never registered.
175
179
    """
176
180
 
 
181
    def __init__(self):
 
182
        CLIUIFactory.__init__(self)
 
183
 
177
184
    def get_password(self, prompt='', **kwargs):
178
185
        return None
179
186
 
202
209
ui_factory = SilentUIFactory()
203
210
"""IMPORTANT: never import this symbol directly. ONLY ever access it as 
204
211
ui.ui_factory."""
 
212
 
 
213
 
 
214
def make_ui_for_terminal(stdin, stdout, stderr):
 
215
    """Construct and return a suitable UIFactory for a text mode program.
 
216
 
 
217
    If stdout is a smart terminal, this gets a smart UIFactory with 
 
218
    progress indicators, etc.  If it's a dumb terminal, just plain text output.
 
219
    """
 
220
    isatty = getattr(stdin, 'isatty', None)
 
221
    if isatty is None:
 
222
        cls = CLIUIFactory
 
223
    elif not isatty():
 
224
        cls = CLIUIFactory
 
225
    elif os.environ.get('TERM') in (None, 'dumb', ''):
 
226
        # e.g. emacs compile window
 
227
        cls = CLIUIFactory
 
228
    else:
 
229
        from bzrlib.ui.text import TextUIFactory
 
230
        cls = TextUIFactory
 
231
    return cls(stdin=stdin, stdout=stdout, stderr=stderr)