Source code for xonsh.completers.tools

"""Xonsh completer tools."""
import builtins
import textwrap


def _filter_normal(s, x):
    return s.startswith(x)


def _filter_ignorecase(s, x):
    return s.lower().startswith(x.lower())


[docs]def get_filter_function(): """ Return an appropriate filtering function for completions, given the valid of $CASE_SENSITIVE_COMPLETIONS """ csc = builtins.__xonsh__.env.get("CASE_SENSITIVE_COMPLETIONS") if csc: return _filter_normal else: return _filter_ignorecase
[docs]def justify(s, max_length, left_pad=0): """ Re-wrap the string s so that each line is no more than max_length characters long, padding all lines but the first on the left with the string left_pad. """ txt = textwrap.wrap(s, width=max_length, subsequent_indent=" " * left_pad) return "\n".join(txt)
[docs]class RichCompletion(str): """A rich completion that completers can return instead of a string Parameters ---------- value : str The completion's actual value. prefix_len : int Length of the prefix to be replaced in the completion. If None, the default prefix len will be used. display : str Text to display in completion option list. If None, ``value`` will be used. description : str Extra text to display when the completion is selected. """ def __new__(cls, value, prefix_len=None, display=None, description=""): completion = super().__new__(cls, value) completion.prefix_len = prefix_len completion.display = display or value completion.description = description return completion def __repr__(self): return "RichCompletion({}, prefix_len={}, display={}, description={})".format( repr(str(self)), self.prefix_len, repr(self.display), repr(self.description), )
[docs]def get_ptk_completer(): """Get the current PromptToolkitCompleter This is usefull for completers that want to use PromptToolkitCompleter.current_document (the current multiline document). Call this function lazily since in '.xonshrc' the shell doesn't exist. Returns ------- The PromptToolkitCompleter if running with ptk, else returns None """ if __xonsh__.shell is None or __xonsh__.shell.shell_type != "prompt_toolkit": return None return __xonsh__.shell.shell.pt_completer