def make_fs_wiz(): """Makes the foreign shell part of the wizard.""" cond = wiz.create_truefalse_cond(prompt="Add a new foreign shell, " + wiz.YN) fs = wiz.While( cond=cond, body=[ wiz.Input("shell name (e.g. bash): ", path="/foreign_shells/{idx}/shell"), wiz.StoreNonEmpty( "interactive shell [bool, default=True]: ", converter=to_bool, show_conversion=True, path="/foreign_shells/{idx}/interactive", ), wiz.StoreNonEmpty( "login shell [bool, default=False]: ", converter=to_bool, show_conversion=True, path="/foreign_shells/{idx}/login", ), wiz.StoreNonEmpty( "env command [str, default='env']: ", path="/foreign_shells/{idx}/envcmd", ), wiz.StoreNonEmpty( "alias command [str, default='alias']: ", path="/foreign_shells/{idx}/aliascmd", ), wiz.StoreNonEmpty( ("extra command line arguments [list of str, " "default=[]]: "), converter=ast.literal_eval, show_conversion=True, path="/foreign_shells/{idx}/extra_args", ), wiz.StoreNonEmpty( "safely handle exceptions [bool, default=True]: ", converter=to_bool, show_conversion=True, path="/foreign_shells/{idx}/safe", ), wiz.StoreNonEmpty("pre-command [str, default='']: ", path="/foreign_shells/{idx}/prevcmd"), wiz.StoreNonEmpty("post-command [str, default='']: ", path="/foreign_shells/{idx}/postcmd"), wiz.StoreNonEmpty( "foreign function command [str, default=None]: ", path="/foreign_shells/{idx}/funcscmd", ), wiz.StoreNonEmpty( "source command [str, default=None]: ", path="/foreign_shells/{idx}/sourcer", ), wiz.Message(message="Foreign shell added.\n"), ], ) return fs
def make_xontrib(xon_item: tp.Tuple[str, Xontrib]): """Makes a message and StoreNonEmpty node for a xontrib.""" name, xontrib = xon_item name = name or "<unknown-xontrib-name>" msg = "\n{BOLD_CYAN}" + name + "{RESET}\n" if xontrib.url: msg += "{RED}url:{RESET} " + xontrib.url + "\n" if xontrib.package: pkg = xontrib.package msg += "{RED}package:{RESET} " + pkg.name + "\n" if pkg.url: if xontrib.url and pkg.url != xontrib.url: msg += "{RED}package-url:{RESET} " + pkg.url + "\n" if pkg.license: msg += "{RED}license:{RESET} " + pkg.license + "\n" msg += "{PURPLE}installed?{RESET} " msg += ("no" if find_xontrib(name) is None else "yes") + "\n" msg += _wrap_paragraphs(xontrib.description, width=69) if msg.endswith("\n"): msg = msg[:-1] mnode = wiz.Message(message=msg) convert = lambda x: name if to_bool(x) else wiz.Unstorable pnode = wiz.StoreNonEmpty(XONTRIB_PROMPT, converter=convert, path=_xontrib_path) return mnode, pnode
def make_envvar(name): """Makes a StoreNonEmpty node for an environment variable.""" env = builtins.__xonsh__.env vd = env.get_docs(name) if not vd.doc_configurable: return default = vd.doc_default if "\n" in default: default = "\n" + _wrap_paragraphs(default, width=69) curr = env.get(name) if is_string(curr) and is_template_string(curr): curr = curr.replace("{", "{{").replace("}", "}}") curr = pprint.pformat(curr, width=69) if "\n" in curr: curr = "\n" + curr msg = ENVVAR_MESSAGE.format( name=name, default=default, current=curr, docstr=_wrap_paragraphs(vd.doc, width=69), ) mnode = wiz.Message(message=msg) converter = env.get_converter(name) path = "/env/" + name pnode = wiz.StoreNonEmpty( ENVVAR_PROMPT, converter=converter, show_conversion=True, path=path, retry=True, store_raw=vd.doc_store_as_str, ) return mnode, pnode
def make_xontrib(xontrib, package): """Makes a message and StoreNonEmpty node for a xontrib.""" name = xontrib.get('name', '<unknown-xontrib-name>') msg = '\n{BOLD_CYAN}' + name + '{NO_COLOR}\n' if 'url' in xontrib: msg += '{RED}url:{NO_COLOR} ' + xontrib['url'] + '\n' if 'package' in xontrib: msg += '{RED}package:{NO_COLOR} ' + xontrib['package'] + '\n' if 'url' in package: if 'url' in xontrib and package['url'] != xontrib['url']: msg += '{RED}package-url:{NO_COLOR} ' + package['url'] + '\n' if 'license' in package: msg += '{RED}license:{NO_COLOR} ' + package['license'] + '\n' msg += '{PURPLE}installed?{NO_COLOR} ' msg += ('no' if find_xontrib(name) is None else 'yes') + '\n' desc = xontrib.get('description', '') if not isinstance(desc, str): desc = ''.join(desc) msg += _wrap_paragraphs(desc, width=69) if msg.endswith('\n'): msg = msg[:-1] mnode = wiz.Message(message=msg) convert = lambda x: name if to_bool(x) else wiz.Unstorable pnode = wiz.StoreNonEmpty(XONTRIB_PROMPT, converter=convert, path=_xontrib_path) return mnode, pnode
def make_envvar(name): """Makes a StoreNonEmpty node for an environment variable.""" env = builtins.__xonsh_env__ vd = env.get_docs(name) if not vd.configurable: return default = vd.default if '\n' in default: default = '\n' + _wrap_paragraphs(default, width=69) curr = env.get(name) if is_string(curr) and is_template_string(curr): curr = curr.replace('{', '{{').replace('}', '}}') curr = pprint.pformat(curr, width=69) if '\n' in curr: curr = '\n' + curr msg = ENVVAR_MESSAGE.format(name=name, default=default, current=curr, docstr=_wrap_paragraphs(vd.docstr, width=69)) mnode = wiz.Message(message=msg) ens = env.get_ensurer(name) path = '/env/' + name pnode = wiz.StoreNonEmpty(ENVVAR_PROMPT, converter=ens.convert, show_conversion=True, path=path, retry=True, store_raw=vd.store_as_str) return mnode, pnode
def make_xontrib(xontrib, package): """Makes a message and StoreNonEmpty node for a xontrib.""" name = xontrib.get("name", "<unknown-xontrib-name>") msg = "\n{BOLD_CYAN}" + name + "{RESET}\n" if "url" in xontrib: msg += "{RED}url:{RESET} " + xontrib["url"] + "\n" if "package" in xontrib: msg += "{RED}package:{RESET} " + xontrib["package"] + "\n" if "url" in package: if "url" in xontrib and package["url"] != xontrib["url"]: msg += "{RED}package-url:{RESET} " + package["url"] + "\n" if "license" in package: msg += "{RED}license:{RESET} " + package["license"] + "\n" msg += "{PURPLE}installed?{RESET} " msg += ("no" if find_xontrib(name) is None else "yes") + "\n" desc = xontrib.get("description", "") if not isinstance(desc, str): desc = "".join(desc) msg += _wrap_paragraphs(desc, width=69) if msg.endswith("\n"): msg = msg[:-1] mnode = wiz.Message(message=msg) convert = lambda x: name if to_bool(x) else wiz.Unstorable pnode = wiz.StoreNonEmpty(XONTRIB_PROMPT, converter=convert, path=_xontrib_path) return mnode, pnode
def make_fs_wiz(): """Makes the foreign shell part of the wizard.""" cond = wiz.create_truefalse_cond(prompt='Add a foreign shell, ' + wiz.YN) fs = wiz.While( cond=cond, body=[ wiz.Input('shell name (e.g. bash): ', path='/foreign_shells/{idx}/shell'), wiz.StoreNonEmpty('interactive shell [bool, default=True]: ', converter=to_bool, show_conversion=True, path='/foreign_shells/{idx}/interactive'), wiz.StoreNonEmpty('login shell [bool, default=False]: ', converter=to_bool, show_conversion=True, path='/foreign_shells/{idx}/login'), wiz.StoreNonEmpty("env command [str, default='env']: ", path='/foreign_shells/{idx}/envcmd'), wiz.StoreNonEmpty("alias command [str, default='alias']: ", path='/foreign_shells/{idx}/aliascmd'), wiz.StoreNonEmpty(("extra command line arguments [list of str, " "default=[]]: "), converter=ast.literal_eval, show_conversion=True, path='/foreign_shells/{idx}/extra_args'), wiz.StoreNonEmpty('current environment [dict, default=None]: ', converter=ast.literal_eval, show_conversion=True, path='/foreign_shells/{idx}/currenv'), wiz.StoreNonEmpty( 'safely handle exceptions [bool, default=True]: ', converter=to_bool, show_conversion=True, path='/foreign_shells/{idx}/safe'), wiz.StoreNonEmpty("pre-command [str, default='']: ", path='/foreign_shells/{idx}/prevcmd'), wiz.StoreNonEmpty("post-command [str, default='']: ", path='/foreign_shells/{idx}/postcmd'), wiz.StoreNonEmpty("foreign function command [str, default=None]: ", path='/foreign_shells/{idx}/funcscmd'), wiz.StoreNonEmpty("source command [str, default=None]: ", path='/foreign_shells/{idx}/sourcer'), wiz.Message(message='') # inserts a newline ]) return fs