🐚 Python-powered shell. Full-featured and cross-platform.
Find a file
jyn a953c29443
allow test_raise_subproc_error_with_show_traceback to be run locally (#5461)
previously, this succeeded in CI, but always failed locally with the
following error:
```xsh
_____________________________________________________________________ test_raise_subproc_error_with_show_traceback[True] _____________________________________________________________________

monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x76f6ba8882e0>, interactive = True

    @skip_if_on_windows
    @pytest.mark.parametrize("interactive", [True, False])
    def test_raise_subproc_error_with_show_traceback(monkeypatch, interactive):
        out, err, ret = run_xonsh(
            "$COLOR_RESULTS=False\n$RAISE_SUBPROC_ERROR=False\n$XONSH_SHOW_TRACEBACK=False\nls nofile",
            interactive=interactive,
            single_command=True,
        )
        assert ret != 0
>       assert re.match("ls.*No such file or directory\n", out)
E       assert None
E        +  where None = <function match at 0x76f6bcd0cd30>('ls.*No such file or directory\n', "\x1b]0;ls | jyn@pop-os: ~/src/xonsh | xonsh\x07ls: cannot access 'nofile': No such file or directory\n")
E        +    where <function match at 0x76f6bcd0cd30> = re.match

tests/test_integrations.py:1190: AssertionError
```

the problem was that the following string was prepended before the error
message:
```
\x1b]0;ls | jyn@pop-os: ~/src/xonsh | xonsh\x07l
```

that in turn came from
[`BaseShell.settitle`](66c0490d37/xonsh/base_shell.py (L570)),
which always prepends at least the escape codes even when TITLE is set
to an empty string.

avoid this issue by mimicking a dumb terminal in tests, in which case
`settitle` doesn't add any title at all.

see
https://xonsh.zulipchat.com/#narrow/stream/435069-xonsh-dev/topic/Running.20tests.20locally
for more context.
<!---

Thanks for opening a PR on xonsh!

Please do this:

1. Include a news file with your PR
(https://xon.sh/devguide.html#changelog).
2. Add the documentation for your feature into `/docs`.
3. Add the example of usage or before-after behavior.
4. Mention the issue that this PR is addressing e.g. `#1234`.

-->

## For community
⬇️ **Please click the 👍 reaction instead of leaving a `+1` or 👍
comment**
2024-05-30 17:02:53 +02:00
.devcontainer Codespaces and devcontainer.json (#5158) 2023-06-21 22:23:46 +05:30
.github chore: use stable 3.12 for CI jobs (#5307) 2024-05-16 15:43:57 +05:30
appimage Unpin prompt-toolkit version (#5438) 2024-05-23 14:08:54 -04:00
ci fix: xonfig web is not upto-date (#4606) 2022-01-18 11:11:16 -05:00
docs Added SpecModifierAlias and xthread, xunthread aliases (#5443) 2024-05-28 11:03:45 -04:00
news prompt: yellow env_name (#5457) 2024-05-28 22:25:21 -04:00
scripts re-run CI tests 2020-08-08 14:02:44 -04:00
tests allow test_raise_subproc_error_with_show_traceback to be run locally (#5461) 2024-05-30 17:02:53 +02:00
xompletions feat: add xontrib-django 2022-04-12 14:19:15 +05:30
xonsh prompt: yellow env_name (#5457) 2024-05-28 22:25:21 -04:00
xontrib [pre-commit.ci] pre-commit autoupdate (#5271) 2024-01-30 12:23:50 +01:00
.authors.yml Updated authorship for 0.16.0 2024-04-23 14:34:30 -04:00
.coveragerc refactor(amalgamate): remove amalgamation (#4858) 2022-07-04 10:40:16 +05:30
.gitattributes Remove syntax override for .xsh files (#4554) 2021-11-22 10:07:04 -05:00
.gitignore chore: use stable 3.12 for CI jobs (#5307) 2024-05-16 15:43:57 +05:30
.mailmap Updated authorship for 0.16.0 2024-04-23 14:34:30 -04:00
.pre-commit-config.yaml [pre-commit.ci] pre-commit autoupdate (#5448) 2024-05-27 20:37:55 +02:00
AUTHORS.rst Updated authorship for 0.16.0 2024-04-23 14:34:30 -04:00
CHANGELOG.rst Updated CHANGELOG for 0.16.0 2024-04-23 14:34:31 -04:00
conftest.py use recommended pytest entry point in docs and comments (#4671) 2022-02-19 01:45:45 +05:30
CONTRIBUTING.rst note that xonsh requires pip 24 for an editable install and development (#5460) 2024-05-30 16:03:55 +02:00
FUNDING.yml Become a sponsor to xonsh (#5167) 2023-07-01 13:15:06 +00:00
github_deploy_key.enc publish dev and latest release docs on xonsh-docs 2016-10-20 19:48:38 -04:00
license copyright update 2016-06-30 12:24:55 -04:00
logo.txt accomodate pip bug by making setup.py ascii 2015-11-16 15:12:02 -08:00
MANIFEST.in refactor(amalgamate): remove amalgamation (#4858) 2022-07-04 10:40:16 +05:30
pyproject.toml Unpin prompt-toolkit version (#5438) 2024-05-23 14:08:54 -04:00
README.rst Add Jupytext to news (#5402) 2024-05-10 11:03:44 +02:00
rever.xsh Downgrade AppImage to 3.11 (#5364) 2024-04-25 11:46:36 +02:00
run-tests.xsh refactor(amalgamate): remove amalgamation (#4858) 2022-07-04 10:40:16 +05:30
setup.cfg refactor: update line length to default setting 2024-04-16 11:23:35 -04:00
setup.py docs: Fix a few typos (#4889) 2022-07-23 04:42:46 +05:30
xonsh-in-docker.py Ruff linter (#5118) 2023-04-19 12:59:32 +00:00

xonsh
=====

.. class:: center

    **xonsh** is a Python-powered, cross-platform, Unix-gazing shell language and command prompt.

    The language is a superset of Python 3.6+ with additional shell primitives.
    xonsh (pronounced *conch*) is meant for the daily use of experts and novices alike.

    .. image:: https://raw.githubusercontent.com/xonsh/xonsh/main/docs/_static/what_is_xonsh.png
            :alt: What is xonsh?
            :align: center

.. class:: center

    If you like xonsh, :star: the repo, `write a tweet`_ and stay tuned by watching releases.

    .. image:: https://img.shields.io/badge/Zulip%20Community-xonsh-green
            :target: https://xonsh.zulipchat.com/join/hbvue5rimpdkwkdjuiqfs7tv/
            :alt: Join to xonsh.zulipchat.com

    .. image:: https://github.com/xonsh/xonsh/actions/workflows/test.yml/badge.svg
            :target: https://github.com/xonsh/xonsh/actions/workflows/test.yml
            :alt: GitHub Actions

    .. image:: https://codecov.io/gh/xonsh/xonsh/branch/master/graphs/badge.svg?branch=main
            :target: https://codecov.io/github/xonsh/xonsh?branch=main
            :alt: codecov.io

    .. image:: https://repology.org/badge/tiny-repos/xonsh.svg
            :target: https://repology.org/project/xonsh/versions
            :alt: repology.org

First steps
***********

Install xonsh from pip:

.. code-block:: xonshcon

    python -m pip install 'xonsh[full]'

And visit https://xon.sh for more information:

- `Installation <https://xon.sh/contents.html#installation>`_ - using packages, docker or AppImage.
- `Tutorial <https://xon.sh/tutorial.html>`_ - step by step introduction in xonsh.

Extensions
**********

Xonsh has an extension/plugin system.  We call these additions ``xontribs``.

- `Xontribs on Github <https://github.com/topics/xontrib>`_
- `Awesome xontribs <https://github.com/xonsh/awesome-xontribs>`_
- `Core xontribs <https://xon.sh/api/_autosummary/xontribs/xontrib.html>`_
- `Create a xontrib step by step from template <https://github.com/xonsh/xontrib-template>`_

Projects that use xonsh or compatible
*************************************

- `gitsome <https://github.com/donnemartin/gitsome>`_: Supercharged Git/shell autocompleter with GitHub integration.
- `xxh <https://github.com/xxh/xxh>`_: Using xonsh wherever you go through the SSH.
- `rever <https://regro.github.io/rever-docs/>`_: Cross-platform software release tool.
- `Regro autotick bot <https://github.com/regro/cf-scripts>`_: Regro Conda-Forge autoticker.
- `zoxide <https://github.com/ajeetdsouza/zoxide>`_: A smarter cd command.
- `any-nix-shell <https://github.com/haslersn/any-nix-shell>`_: xonsh support for the ``nix run`` and ``nix-shell`` environments of the Nix package manager.

Jupyter-based interactive notebooks via `xontrib-jupyter <https://github.com/xonsh/xontrib-jupyter>`_:

- `Jupyter and JupyterLab <https://jupyter.org/>`_: Interactive notebook platform.
- `euporie <https://github.com/joouha/euporie>`_: Terminal based interactive computing environment.
- `Jupytext <https://jupytext.readthedocs.io/>`_: Clear and meaningful diffs when doing Jupyter notebooks version control.

The xonsh shell community
*************************

The xonsh shell is developed by a community of volunteers. There are a few ways to help out:

- Solve a `popular issue <https://github.com/xonsh/xonsh/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc>`_. You can start with the `Developer guide <https://xon.sh/devguide.html>`_.
- Solve a `good first issue <https://github.com/xonsh/xonsh/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22+sort%3Areactions-%2B1-desc>`_.
- Take an `idea <https://github.com/xonsh/xontrib-template/issues?q=is%3Aopen+is%3Aissue+label%3Aidea+sort%3Areactions-%2B1-desc>`_ and `create a new xontrib <https://github.com/xonsh/xontrib-template#why-use-this-template>`_.
- Become xonsh core by deep diving into xonsh and improve the threading and subprocess logic.
- `Become a sponsor to xonsh <https://github.com/sponsors/xonsh>`_.
- `Write a tweet`_, post or an article to spread the good word about xonsh in the world.
- Give a star to xonsh repository and to `xontribs <https://github.com/topics/xontrib>`_ you like.

We welcome new contributors!

.. _write a tweet: https://twitter.com/intent/tweet?text=xonsh%20is%20a%20Python-powered,%20cross-platform,%20Unix-gazing%20shell%20language%20and%20command%20prompt.&url=https://github.com/xonsh/xonsh

Credits
*******

- Thanks to `Zulip <https://zulip.com/>`_ for supporting the xonsh community!