From 2e9a8624a895ff05a533597c9bc5d67954763f49 Mon Sep 17 00:00:00 2001 From: adam j hartz Date: Sun, 15 Mar 2015 01:44:07 -0400 Subject: [PATCH 1/3] Second attempt at fixing #34 Fix the issue with the repr of a Python function being used as a prompt. --- xonsh/built_ins.py | 2 ++ xonsh/environ.py | 8 ++++---- xonsh/shell.py | 10 +++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/xonsh/built_ins.py b/xonsh/built_ins.py index d985816e6..8eaec3341 100644 --- a/xonsh/built_ins.py +++ b/xonsh/built_ins.py @@ -54,6 +54,8 @@ class Env(MutableMapping): return self._detyped ctx = {} for key, val in self._d.items(): + if callable(val): + continue if not isinstance(key, string_types): key = str(key) if 'PATH' in key: diff --git a/xonsh/environ.py b/xonsh/environ.py index 8ea1f666e..a6d39206f 100644 --- a/xonsh/environ.py +++ b/xonsh/environ.py @@ -72,7 +72,7 @@ RE_HIDDEN = re.compile('\001.*?\002') def multiline_prompt(): """Returns the filler text for the prompt in multiline scenarios.""" - curr = builtins.__xonsh_env__.get('PROMPT', "set '$PROMPT = ...' $ ") + curr = builtins.__xonsh_env__.get('XONSH_PROMPT', "set '$XONSH_PROMPT = ...' $ ") curr = curr() if callable(curr) else curr curr = format_prompt(curr) line = curr.rsplit('\n', 1)[1] if '\n' in curr else curr @@ -83,7 +83,7 @@ def multiline_prompt(): # tail is the trailing whitespace tail = line if headlen == 0 else line.rsplit(head[-1], 1)[1] # now to constuct the actual string - dots = builtins.__xonsh_env__.get('MULTILINE_PROMPT', '.') + dots = builtins.__xonsh_env__.get('XONSH_MULTILINE_PROMPT', '.') dots = dots() if callable(dots) else dots if dots is None or len(dots) == 0: return '' @@ -92,8 +92,8 @@ def multiline_prompt(): BASE_ENV = { 'INDENT': ' ', - 'PROMPT': default_prompt, - 'MULTILINE_PROMPT': '.', + 'XONSH_PROMPT': default_prompt, + 'XONSH_MULTILINE_PROMPT': '.', 'XONSHRC': os.path.expanduser('~/.xonshrc'), 'XONSH_HISTORY_SIZE': 8128, 'XONSH_HISTORY_FILE': os.path.expanduser('~/.xonsh_history'), diff --git a/xonsh/shell.py b/xonsh/shell.py index 705a1c373..97b41db39 100644 --- a/xonsh/shell.py +++ b/xonsh/shell.py @@ -177,13 +177,13 @@ class Shell(Cmd): self.mlprompt = multiline_prompt() return self.mlprompt env = builtins.__xonsh_env__ - if 'PROMPT' in env: - p = env['PROMPT'] + if 'XONSH_PROMPT' in env: + p = env['XONSH_PROMPT'] if callable(p): p = p() - else: - p = format_prompt(p) + p = format_prompt(p) else: - p = "set '$PROMPT = ...' $ " + p = "set '$XONSH_PROMPT = ...' $ " self.settitle() + env['PROMPT'] = p return p From de3e4be3c265e0cdbfa6cb95aa6d16869ec16436 Mon Sep 17 00:00:00 2001 From: adam j hartz Date: Sun, 15 Mar 2015 01:57:29 -0400 Subject: [PATCH 2/3] don't bother setting PROMPT --- xonsh/shell.py | 1 - 1 file changed, 1 deletion(-) diff --git a/xonsh/shell.py b/xonsh/shell.py index 97b41db39..d9ecec204 100644 --- a/xonsh/shell.py +++ b/xonsh/shell.py @@ -185,5 +185,4 @@ class Shell(Cmd): else: p = "set '$XONSH_PROMPT = ...' $ " self.settitle() - env['PROMPT'] = p return p From 01171a8e3d6356d35ba53348252ba6d99e64a718 Mon Sep 17 00:00:00 2001 From: adam j hartz Date: Sun, 15 Mar 2015 02:00:52 -0400 Subject: [PATCH 3/3] no need to rename PROMPT --- xonsh/environ.py | 8 ++++---- xonsh/shell.py | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/xonsh/environ.py b/xonsh/environ.py index a6d39206f..8ea1f666e 100644 --- a/xonsh/environ.py +++ b/xonsh/environ.py @@ -72,7 +72,7 @@ RE_HIDDEN = re.compile('\001.*?\002') def multiline_prompt(): """Returns the filler text for the prompt in multiline scenarios.""" - curr = builtins.__xonsh_env__.get('XONSH_PROMPT', "set '$XONSH_PROMPT = ...' $ ") + curr = builtins.__xonsh_env__.get('PROMPT', "set '$PROMPT = ...' $ ") curr = curr() if callable(curr) else curr curr = format_prompt(curr) line = curr.rsplit('\n', 1)[1] if '\n' in curr else curr @@ -83,7 +83,7 @@ def multiline_prompt(): # tail is the trailing whitespace tail = line if headlen == 0 else line.rsplit(head[-1], 1)[1] # now to constuct the actual string - dots = builtins.__xonsh_env__.get('XONSH_MULTILINE_PROMPT', '.') + dots = builtins.__xonsh_env__.get('MULTILINE_PROMPT', '.') dots = dots() if callable(dots) else dots if dots is None or len(dots) == 0: return '' @@ -92,8 +92,8 @@ def multiline_prompt(): BASE_ENV = { 'INDENT': ' ', - 'XONSH_PROMPT': default_prompt, - 'XONSH_MULTILINE_PROMPT': '.', + 'PROMPT': default_prompt, + 'MULTILINE_PROMPT': '.', 'XONSHRC': os.path.expanduser('~/.xonshrc'), 'XONSH_HISTORY_SIZE': 8128, 'XONSH_HISTORY_FILE': os.path.expanduser('~/.xonsh_history'), diff --git a/xonsh/shell.py b/xonsh/shell.py index d9ecec204..0d7273c6a 100644 --- a/xonsh/shell.py +++ b/xonsh/shell.py @@ -177,12 +177,12 @@ class Shell(Cmd): self.mlprompt = multiline_prompt() return self.mlprompt env = builtins.__xonsh_env__ - if 'XONSH_PROMPT' in env: - p = env['XONSH_PROMPT'] + if 'PROMPT' in env: + p = env['PROMPT'] if callable(p): p = p() p = format_prompt(p) else: - p = "set '$XONSH_PROMPT = ...' $ " + p = "set '$PROMPT = ...' $ " self.settitle() return p