示例#1
0
def test_format_prompt_with_broken_template(xonsh_builtins):
    for p in ('{user', '{user}{hostname'):
        assert partial_format_prompt(p) == p

    # '{{user' will be parsed to '{user'
    for p in ('{{user}', '{{user'):
        assert 'user' in partial_format_prompt(p)
示例#2
0
def test_format_prompt_with_broken_template(xonsh_builtins):
    for p in ('{user', '{user}{hostname'):
        assert partial_format_prompt(p) == p

    # '{{user' will be parsed to '{user'
    for p in ('{{user}', '{{user'):
        assert 'user' in partial_format_prompt(p)
示例#3
0
 def prompt(self):
     """Obtains the current prompt string."""
     global RL_LIB, RL_CAN_RESIZE
     if RL_CAN_RESIZE:
         # This is needed to support some system where line-wrapping doesn't
         # work. This is a bug in upstream Python, or possibly readline.
         RL_LIB.rl_reset_screen_size()
     if self.need_more_lines:
         if self.mlprompt is None:
             try:
                 self.mlprompt = multiline_prompt(curr=self._current_prompt)
             except Exception:  # pylint: disable=broad-except
                 print_exception()
                 self.mlprompt = '<multiline prompt error> '
         return self.mlprompt
     env = builtins.__xonsh_env__  # pylint: disable=no-member
     p = env.get('PROMPT')
     try:
         p = partial_format_prompt(p)
     except Exception:  # pylint: disable=broad-except
         print_exception()
     hide = True if self._force_hide is None else self._force_hide
     p = ansi_partial_color_format(p, style=env.get('XONSH_COLOR_STYLE'),
                                   hide=hide)
     self._current_prompt = p
     self.settitle()
     return p
示例#4
0
def test_format_prompt_with_invalid_func(xonsh_builtins):
    xonsh_builtins.__xonsh_env__ = Env()

    def p():
        foo = bar  # raises exception
        return '{user}'

    assert isinstance(partial_format_prompt(p), str)
示例#5
0
def test_format_prompt_with_broken_template_in_func(xonsh_builtins):
    for p in (
        lambda: '{user',
        lambda: '{{user',
        lambda: '{{user}',
        lambda: '{user}{hostname',
    ):
        # '{{user' will be parsed to '{user'
        assert 'user' in partial_format_prompt(p)
示例#6
0
def test_format_prompt_with_func_that_raises(capsys, xonsh_builtins):
    xonsh_builtins.__xonsh_env__ = Env()
    template = 'tt {zerodiv} tt'
    exp = 'tt (ERROR:zerodiv) tt'
    formatter_dict = {'zerodiv': lambda: 1 / 0}
    obs = partial_format_prompt(template, formatter_dict)
    assert exp == obs
    out, err = capsys.readouterr()
    assert 'prompt: error' in err
示例#7
0
def test_format_prompt_with_broken_template_in_func(xonsh_builtins):
    for p in (
            lambda: '{user',
            lambda: '{{user',
            lambda: '{{user}',
            lambda: '{user}{hostname',
    ):
        # '{{user' will be parsed to '{user'
        assert 'user' in partial_format_prompt(p)
示例#8
0
def test_format_prompt_with_func_that_raises(capsys, xonsh_builtins):
    xonsh_builtins.__xonsh_env__ = Env()
    template = 'tt {zerodiv} tt'
    exp = 'tt (ERROR:zerodiv) tt'
    formatter_dict = {'zerodiv': lambda : 1/0}
    obs = partial_format_prompt(template, formatter_dict)
    assert exp == obs
    out, err = capsys.readouterr()
    assert 'prompt: error' in err
示例#9
0
文件: shell.py 项目: mpacer/xonsh
 def prompt_tokens(self, cli):
     """Returns a list of (token, str) tuples for the current prompt."""
     p = builtins.__xonsh_env__.get('PROMPT')
     try:
         p = partial_format_prompt(p)
     except Exception:  # pylint: disable=broad-except
         print_exception()
     toks = partial_color_tokenize(p)
     self.settitle()
     return toks
示例#10
0
文件: shell.py 项目: mpacer/xonsh
 def bottom_toolbar_tokens(self, cli):
     """Returns a list of (token, str) tuples for the current bottom
     toolbar.
     """
     p = builtins.__xonsh_env__.get('BOTTOM_TOOLBAR')
     # partial_format_prompt does handle empty strings properly,
     # but this avoids descending into it in the common case of
     # $TOOLBAR == ''.
     if isinstance(p, str) and len(p) == 0:
         return []
     try:
         p = partial_format_prompt(p)
     except Exception:  # pylint: disable=broad-except
         print_exception()
     toks = partial_color_tokenize(p)
     return toks
示例#11
0
 def prompt(self):
     """Obtains the current prompt string."""
     if self.need_more_lines:
         if self.mlprompt is None:
             try:
                 self.mlprompt = multiline_prompt()
             except Exception:  # pylint: disable=broad-except
                 print_exception()
                 self.mlprompt = '<multiline prompt error> '
         return self.mlprompt
     env = builtins.__xonsh_env__  # pylint: disable=no-member
     p = env.get('PROMPT')
     try:
         p = partial_format_prompt(p)
     except Exception:  # pylint: disable=broad-except
         print_exception()
     self.settitle()
     return p
示例#12
0
 def prompt(self):
     """Obtains the current prompt string."""
     if self.need_more_lines:
         if self.mlprompt is None:
             try:
                 self.mlprompt = multiline_prompt()
             except Exception:  # pylint: disable=broad-except
                 print_exception()
                 self.mlprompt = '<multiline prompt error> '
         return self.mlprompt
     env = builtins.__xonsh_env__  # pylint: disable=no-member
     p = env.get('PROMPT')
     try:
         p = partial_format_prompt(p)
     except Exception:  # pylint: disable=broad-except
         print_exception()
     self.settitle()
     return p
示例#13
0
 def settitle(self):
     """Sets terminal title."""
     env = builtins.__xonsh_env__  # pylint: disable=no-member
     term = env.get('TERM', None)
     # Shells running in emacs sets TERM to "dumb" or "eterm-color".
     # Do not set title for these to avoid garbled prompt.
     if (term is None and not ON_WINDOWS) or term in ['dumb', 'eterm-color',
                                                      'linux']:
         return
     t = env.get('TITLE')
     if t is None:
         return
     t = partial_format_prompt(t)
     if ON_WINDOWS and 'ANSICON' not in env:
         kernel32.SetConsoleTitleW(t)
     else:
         with open(1, 'wb', closefd=False) as f:
             # prevent xonsh from answering interative questions
             # on the next command by writing the title
             f.write("\x1b]0;{0}\x07".format(t).encode())
             f.flush()
示例#14
0
 def settitle(self):
     """Sets terminal title."""
     env = builtins.__xonsh_env__  # pylint: disable=no-member
     term = env.get('TERM', None)
     # Shells running in emacs sets TERM to "dumb" or "eterm-color".
     # Do not set title for these to avoid garbled prompt.
     if (term is None and not ON_WINDOWS) or term in [
             'dumb', 'eterm-color', 'linux'
     ]:
         return
     t = env.get('TITLE')
     if t is None:
         return
     t = partial_format_prompt(t)
     if ON_WINDOWS and 'ANSICON' not in env:
         kernel32.SetConsoleTitleW(t)
     else:
         with open(1, 'wb', closefd=False) as f:
             # prevent xonsh from answering interative questions
             # on the next command by writing the title
             f.write("\x1b]0;{0}\x07".format(t).encode())
             f.flush()
示例#15
0
def test_format_prompt_with_format_spec(inp, exp, formatter_dict,
                                        xonsh_builtins):
    obs = partial_format_prompt(template=inp, formatter_dict=formatter_dict)
    assert exp == obs
示例#16
0
def test_format_prompt_with_invalid_func(xonsh_builtins):
    xonsh_builtins.__xonsh_env__ = Env()
    def p():
        foo = bar  # raises exception
        return '{user}'
    assert isinstance(partial_format_prompt(p), str)
示例#17
0
def test_format_prompt_with_format_spec(inp, exp, formatter_dict, xonsh_builtins):
    obs = partial_format_prompt(template=inp, formatter_dict=formatter_dict)
    assert exp == obs