From 9e48e9cdd114b4f45b120f61d9cb130f298cc922 Mon Sep 17 00:00:00 2001 From: Anthony Scopatz Date: Tue, 5 Jan 2016 14:07:24 -0800 Subject: [PATCH] return env to original state --- xonsh/environ.py | 19 +++++++++++++++++++ xonsh/xonfig.py | 5 ++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/xonsh/environ.py b/xonsh/environ.py index f55cf6584..8d455f826 100644 --- a/xonsh/environ.py +++ b/xonsh/environ.py @@ -10,6 +10,7 @@ import builtins import subprocess from warnings import warn from functools import wraps +from contextlib import contextmanager from collections import MutableMapping, MutableSequence, MutableSet, namedtuple from xonsh import __version__ as XONSH_VERSION @@ -281,6 +282,24 @@ class Env(MutableMapping): self.ensurers[key] = ens return ens + @contextmanager + def swap(self, other): + """Provides a context manager for temporarily swapping out certain + environment variables with other values. On exit from the context + manager, the original values are restored. + """ + old = {} + for k, v in other.items(): + old[k] = self.get(k, NotImplemented) + self[k] = v + yield self + for k, v in old.items(): + if v is NotImplemented: + del self[k] + else: + self[k] = v + + # # Mutable mapping interface # diff --git a/xonsh/xonfig.py b/xonsh/xonfig.py index 71d1f95cb..51f476b1e 100644 --- a/xonsh/xonfig.py +++ b/xonsh/xonfig.py @@ -93,6 +93,7 @@ def make_fs(): path='/foreign_shells/{idx}/funcscmd'), StoreNonEmpty("source command [str, default=None]: ", path='/foreign_shells/{idx}/sourcer'), + Message(message='') # inserts a newline ]) return fs @@ -127,8 +128,10 @@ def _wizard(ns): env = builtins.__xonsh_env__ fname = env.get('XONSHCONFIG') if ns.file is None else ns.file wiz = make_wizard(default_file=fname, confirm=ns.confirm) + tempenv = {'PROMPT': '', 'XONSH_STORE_STDOUT': False} pv = PromptVisitor(wiz) - pv.visit() + with env.swap(tempenv): + pv.visit() def _format_human(data):