* Copyright (c) 2008-2014, IPython Development Team * Copyright (C) 2001-2007 Fernando Perez <*****@*****.**> * Copyright (c) 2001, Janko Hauser <*****@*****.**> * Copyright (c) 2001, Nathaniel Gray <*****@*****.**> """ import io import re from xonsh2.lazyasd import LazyObject from xonsh2.tokenize import detect_encoding, tokopen cookie_comment_re = LazyObject( lambda: re.compile(r"^\s*#.*coding[:=]\s*([-\w.]+)", re.UNICODE), globals(), "cookie_comment_re", ) def source_to_unicode(txt, errors="replace", skip_encoding_cookie=True): """Converts a bytes string with python source code to unicode. Unicode strings are passed through unchanged. Byte strings are checked for the python source file encoding cookie to determine encoding. txt can be either a bytes buffer or a string containing the source code. """ if isinstance(txt, str): return txt if isinstance(txt, bytes):
"""Tools for color handling in xonsh2. This includes Convert values between RGB hex codes and xterm-256 color codes. Parts of this file were originally forked from Micah Elliott http://MicahElliott.com Copyright (C) 2011 Micah Elliott. All rights reserved. WTFPL http://sam.zoy.org/wtfpl/ """ import re import math from xonsh2.lazyasd import lazyobject, LazyObject from xonsh2.tools import print_warning _NO_COLOR_WARNING_SHOWN = False RE_BACKGROUND = LazyObject(lambda: re.compile("(BG#|BGHEX|BACKGROUND)"), globals(), "RE_BACKGROUND") @lazyobject def KNOWN_XONSH_COLORS(): """These are the minimum number of colors that need to be implemented by any style. """ return frozenset([ "DEFAULT", "BLACK", "RED", "GREEN", "YELLOW", "BLUE", "PURPLE",
import linecache import importlib import functools import typing as tp from xonsh2.lazyasd import LazyObject from xonsh2.platform import HAS_PYGMENTS from xonsh2.tools import DefaultNotGiven, print_color, normabspath, to_bool from xonsh2.inspectors import find_file from xonsh2.lazyimps import pygments, pyghooks import xonsh2.procs.pipelines as xpp import xonsh2.prompt.cwd as prompt terminal = LazyObject( lambda: importlib.import_module("pygments.formatters.terminal"), globals(), "terminal", ) class TracerType(object): """Represents a xonsh tracer object, which keeps track of all tracing state. This is a singleton. """ _inst: tp.Optional["TracerType"] = None valid_events = frozenset(["line", "call"]) def __new__(cls, *args, **kwargs): if cls._inst is None: cls._inst = super(TracerType, cls).__new__(cls, *args, **kwargs)
"""Job control for the xonsh shell.""" import os import sys import time import ctypes import signal import builtins import subprocess import collections import typing as tp from xonsh2.lazyasd import LazyObject from xonsh2.platform import FD_STDERR, ON_DARWIN, ON_WINDOWS, ON_CYGWIN, ON_MSYS, LIBC from xonsh2.tools import unthreadable tasks = LazyObject(collections.deque, globals(), "tasks") # Track time stamp of last exit command, so that two consecutive attempts to # exit can kill all jobs and exit. _last_exit_time: tp.Optional[float] = None if ON_DARWIN: def _send_signal(job, signal): # On OS X, os.killpg() may cause PermissionError when there are # any zombie processes in the process group. # See github issue #1012 for details for pid in job["pids"]: if pid is None: # the pid of an aliased proc is None continue try: os.kill(pid, signal)
"""Lazy imports that may apply across the xonsh package.""" import os import importlib from xonsh2.platform import ON_WINDOWS, ON_DARWIN from xonsh2.lazyasd import LazyObject, lazyobject pygments = LazyObject(lambda: importlib.import_module("pygments"), globals(), "pygments") pyghooks = LazyObject(lambda: importlib.import_module("xonsh2.pyghooks"), globals(), "pyghooks") @lazyobject def pty(): if ON_WINDOWS: return else: return importlib.import_module("pty") @lazyobject def termios(): if ON_WINDOWS: return else: return importlib.import_module("termios") @lazyobject def fcntl():
from xonsh2.platform import ON_POSIX, ON_WINDOWS from xonsh2.tools import ( expand_path, globpath, XonshError, XonshCalledProcessError, print_color, ) from xonsh2.commands_cache import CommandsCache from xonsh2.events import events import xonsh2.procs.specs import xonsh2.completers.init BUILTINS_LOADED = False INSPECTOR = LazyObject(Inspector, globals(), "INSPECTOR") warnings.filterwarnings("once", category=DeprecationWarning) @lazyobject def AT_EXIT_SIGNALS(): sigs = ( signal.SIGABRT, signal.SIGFPE, signal.SIGILL, signal.SIGSEGV, signal.SIGTERM, ) if ON_POSIX: sigs += (signal.SIGTSTP, signal.SIGQUIT, signal.SIGHUP)
DEFAULT_STYLE_DICT = LazyObject( lambda: defaultdict( lambda: "", { Token: "", Token.Aborted: "ansibrightblack", Token.AutoSuggestion: "ansibrightblack", Token.Color.BACKGROUND_BLACK: "bg:ansiblack", Token.Color.BACKGROUND_BLUE: "bg:ansiblue", Token.Color.BACKGROUND_CYAN: "bg:ansicyan", Token.Color.BACKGROUND_GREEN: "bg:ansigreen", Token.Color.BACKGROUND_INTENSE_BLACK: "bg:ansibrightblack", Token.Color.BACKGROUND_INTENSE_BLUE: "bg:ansibrightblue", Token.Color.BACKGROUND_INTENSE_CYAN: "bg:ansibrightcyan", Token.Color.BACKGROUND_INTENSE_GREEN: "bg:ansibrightgreen", Token.Color.BACKGROUND_INTENSE_PURPLE: "bg:ansibrightmagenta", Token.Color.BACKGROUND_INTENSE_RED: "bg:ansibrightred", Token.Color.BACKGROUND_INTENSE_WHITE: "bg:ansiwhite", Token.Color.BACKGROUND_INTENSE_YELLOW: "bg:ansibrightyellow", Token.Color.BACKGROUND_PURPLE: "bg:ansimagenta", Token.Color.BACKGROUND_RED: "bg:ansired", Token.Color.BACKGROUND_WHITE: "bg:ansigray", Token.Color.BACKGROUND_YELLOW: "bg:ansiyellow", Token.Color.BLACK: "ansiblack", Token.Color.BLUE: "ansiblue", Token.Color.BOLD_BLACK: "bold ansiblack", Token.Color.BOLD_BLUE: "bold ansiblue", Token.Color.BOLD_CYAN: "bold ansicyan", Token.Color.BOLD_GREEN: "bold ansigreen", Token.Color.BOLD_INTENSE_BLACK: "bold ansibrightblack", Token.Color.BOLD_INTENSE_BLUE: "bold ansibrightblue", Token.Color.BOLD_INTENSE_CYAN: "bold ansibrightcyan", Token.Color.BOLD_INTENSE_GREEN: "bold ansibrightgreen", Token.Color.BOLD_INTENSE_PURPLE: "bold ansibrightmagenta", Token.Color.BOLD_INTENSE_RED: "bold ansibrightred", Token.Color.BOLD_INTENSE_WHITE: "bold ansiwhite", Token.Color.BOLD_INTENSE_YELLOW: "bold ansibrightyellow", Token.Color.BOLD_PURPLE: "bold ansimagenta", Token.Color.BOLD_RED: "bold ansired", Token.Color.BOLD_UNDERLINE_BLACK: "bold underline ansiblack", Token.Color.BOLD_UNDERLINE_BLUE: "bold underline ansiblue", Token.Color.BOLD_UNDERLINE_CYAN: "bold underline ansicyan", Token.Color.BOLD_UNDERLINE_GREEN: "bold underline ansigreen", Token.Color.BOLD_UNDERLINE_INTENSE_BLACK: "bold underline ansibrightblack", Token.Color.BOLD_UNDERLINE_INTENSE_BLUE: "bold underline ansibrightblue", Token.Color.BOLD_UNDERLINE_INTENSE_CYAN: "bold underline ansibrightcyan", Token.Color.BOLD_UNDERLINE_INTENSE_GREEN: "bold underline ansibrightgreen", Token.Color.BOLD_UNDERLINE_INTENSE_PURPLE: "bold underline ansibrightmagenta", Token.Color.BOLD_UNDERLINE_INTENSE_RED: "bold underline ansibrightred", Token.Color.BOLD_UNDERLINE_INTENSE_WHITE: "bold underline ansiwhite", Token.Color.BOLD_UNDERLINE_INTENSE_YELLOW: "bold underline ansibrightyellow", Token.Color.BOLD_UNDERLINE_PURPLE: "bold underline ansimagenta", Token.Color.BOLD_UNDERLINE_RED: "bold underline ansired", Token.Color.BOLD_UNDERLINE_WHITE: "bold underline ansigray", Token.Color.BOLD_UNDERLINE_YELLOW: "bold underline ansiyellow", Token.Color.BOLD_WHITE: "bold ansigray", Token.Color.BOLD_YELLOW: "bold ansiyellow", Token.Color.CYAN: "ansicyan", Token.Color.GREEN: "ansigreen", Token.Color.INTENSE_BLACK: "ansibrightblack", Token.Color.INTENSE_BLUE: "ansibrightblue", Token.Color.INTENSE_CYAN: "ansibrightcyan", Token.Color.INTENSE_GREEN: "ansibrightgreen", Token.Color.INTENSE_PURPLE: "ansibrightmagenta", Token.Color.INTENSE_RED: "ansibrightred", Token.Color.INTENSE_WHITE: "ansiwhite", Token.Color.INTENSE_YELLOW: "ansibrightyellow", Token.Color.RESET: "noinherit", Token.Color.PURPLE: "ansimagenta", Token.Color.RED: "ansired", Token.Color.UNDERLINE_BLACK: "underline ansiblack", Token.Color.UNDERLINE_BLUE: "underline ansiblue", Token.Color.UNDERLINE_CYAN: "underline ansicyan", Token.Color.UNDERLINE_GREEN: "underline ansigreen", Token.Color.UNDERLINE_INTENSE_BLACK: "underline ansibrightblack", Token.Color.UNDERLINE_INTENSE_BLUE: "underline ansibrightblue", Token.Color.UNDERLINE_INTENSE_CYAN: "underline ansibrightcyan", Token.Color.UNDERLINE_INTENSE_GREEN: "underline ansibrightgreen", Token.Color.UNDERLINE_INTENSE_PURPLE: "underline ansibrightmagenta", Token.Color.UNDERLINE_INTENSE_RED: "underline ansibrightred", Token.Color.UNDERLINE_INTENSE_WHITE: "underline ansiwhite", Token.Color.UNDERLINE_INTENSE_YELLOW: "underline ansibrightyellow", Token.Color.UNDERLINE_PURPLE: "underline ansimagenta", Token.Color.UNDERLINE_RED: "underline ansired", Token.Color.UNDERLINE_WHITE: "underline ansigray", Token.Color.UNDERLINE_YELLOW: "underline ansiyellow", Token.Color.WHITE: "ansigray", Token.Color.YELLOW: "ansiyellow", Token.Comment: "underline ansicyan", Token.Comment.Hashbang: "", Token.Comment.Multiline: "", Token.Comment.Preproc: "underline ansiyellow", Token.Comment.PreprocFile: "", Token.Comment.Single: "", Token.Comment.Special: "", Token.Error: "ansibrightred", Token.Escape: "", Token.Generic: "", Token.Generic.Deleted: "ansired", Token.Generic.Emph: "underline", Token.Generic.Error: "bold ansibrightred", Token.Generic.Heading: "bold ansiblue", Token.Generic.Inserted: "ansibrightgreen", Token.Generic.Output: "ansiblue", Token.Generic.Prompt: "bold ansiblue", Token.Generic.Strong: "", Token.Generic.Subheading: "bold ansimagenta", Token.Generic.Traceback: "ansiblue", Token.Keyword: "bold ansigreen", Token.Keyword.Constant: "", Token.Keyword.Declaration: "", Token.Keyword.Namespace: "", Token.Keyword.Pseudo: "nobold", Token.Keyword.Reserved: "", Token.Keyword.Type: "nobold ansired", Token.Literal: "", Token.Literal.Date: "", Token.Literal.Number: "ansibrightblack", Token.Literal.Number.Bin: "", Token.Literal.Number.Float: "", Token.Literal.Number.Hex: "", Token.Literal.Number.Integer: "", Token.Literal.Number.Integer.Long: "", Token.Literal.Number.Oct: "", Token.Literal.String: "ansibrightred", Token.Literal.String.Affix: "", Token.Literal.String.Backtick: "", Token.Literal.String.Char: "", Token.Literal.String.Delimiter: "", Token.Literal.String.Doc: "underline", Token.Literal.String.Double: "", Token.Literal.String.Escape: "bold ansiyellow", Token.Literal.String.Heredoc: "", Token.Literal.String.Interpol: "bold ansimagenta", Token.Literal.String.Other: "ansigreen", Token.Literal.String.Regex: "ansimagenta", Token.Literal.String.Single: "", Token.Literal.String.Symbol: "ansiyellow", Token.Menu.Completions: "bg:ansigray ansiblack", Token.Menu.Completions.Completion: "", Token.Menu.Completions.Completion.Current: "bg:ansibrightblack ansiwhite", Token.Name: "", Token.Name.Attribute: "ansibrightyellow", Token.Name.Builtin: "ansigreen", Token.Name.Builtin.Pseudo: "", Token.Name.Class: "bold ansibrightblue", Token.Name.Constant: "ansired", Token.Name.Decorator: "ansibrightmagenta", Token.Name.Entity: "bold ansigray", Token.Name.Exception: "bold ansibrightred", Token.Name.Function: "ansibrightblue", Token.Name.Function.Magic: "", Token.Name.Label: "ansibrightyellow", Token.Name.Namespace: "bold ansibrightblue", Token.Name.Other: "", Token.Name.Property: "", Token.Name.Tag: "bold ansigreen", Token.Name.Variable: "ansiblue", Token.Name.Variable.Class: "", Token.Name.Variable.Global: "", Token.Name.Variable.Instance: "", Token.Name.Variable.Magic: "", Token.Operator: "ansibrightblack", Token.Operator.Word: "bold ansimagenta", Token.Other: "", Token.Punctuation: "", Token.Scrollbar: "bg:ansibrightblack", Token.Scrollbar.Arrow: "bg:ansiblack ansiwhite bold", Token.Scrollbar.Button: "bg:ansiblack", Token.Text: "", Token.Text.Whitespace: "ansigray", }, ), globals(), "DEFAULT_STYLE_DICT", )
import sys import types import inspect import itertools import linecache from xonsh2.lazyasd import LazyObject from xonsh2.tokenize import detect_encoding from xonsh2.openpy import read_py_file from xonsh2.tools import cast_unicode, safe_hasattr, indent, print_color, format_color from xonsh2.platform import HAS_PYGMENTS from xonsh2.lazyimps import pygments, pyghooks from xonsh2.style_tools import partial_color_tokenize # builtin docstrings to ignore _func_call_docstring = LazyObject(lambda: types.FunctionType.__call__.__doc__, globals(), "_func_call_docstring") _object_init_docstring = LazyObject(lambda: object.__init__.__doc__, globals(), "_object_init_docstring") _builtin_type_docstrings = LazyObject( lambda: { inspect.getdoc(t) for t in (types.ModuleType, types.MethodType, types.FunctionType, property) }, globals(), "_builtin_type_docstrings", ) _builtin_func_type = LazyObject(lambda: type(all), globals(), "_builtin_func_type")
VBAR, VBAREQUAL, tok_name, ) import typing as tp from xonsh2.lazyasd import LazyObject from xonsh2.platform import PYTHON_VERSION_INFO HAS_WALRUS = PYTHON_VERSION_INFO > (3, 8) if HAS_WALRUS: from token import COLONEQUAL # type:ignore cookie_re = LazyObject( lambda: re.compile(r"^[ \t\f]*#.*coding[:=][ \t]*([-\w.]+)", re.ASCII), globals(), "cookie_re", ) blank_re = LazyObject(lambda: re.compile(br"^[ \t\f]*(?:[#\r\n]|$)", re.ASCII), globals(), "blank_re") # # token modifications # tok_name = tok_name.copy() __all__ = token.__all__ + [ # type:ignore "COMMENT", "tokenize", "detect_encoding", "NL", "untokenize",
import os import sys import queue import builtins import threading import subprocess import re import pathlib import xonsh2.tools as xt from xonsh2.lazyasd import LazyObject RE_REMOVE_ANSI = LazyObject( lambda: re.compile(r"(?:\x1B[@-_]|[\x80-\x9F])[0-?]*[ -/]*[@-~]"), globals(), "RE_REMOVE_ANSI", ) def _get_git_branch(q): # create a safge detyped env dictionary and update with the additional git environment variables # when running git status commands we do not want to acquire locks running command like git status denv = dict(builtins.__xonsh__.env.detype()) denv.update({"GIT_OPTIONAL_LOCKS": "0"}) try: cmd = ["git", "rev-parse", "--abbrev-ref", "HEAD"] branch = xt.decode_bytes( subprocess.check_output(cmd, env=denv, stderr=subprocess.DEVNULL)) branch = branch.splitlines()[0] or None except (subprocess.CalledProcessError, OSError, FileNotFoundError):