Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package xonsh for openSUSE:Factory checked in at 2026-01-26 11:05:56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xonsh (Old) and /work/SRC/openSUSE:Factory/.xonsh.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xonsh" Mon Jan 26 11:05:56 2026 rev:46 rq:1329072 version:0.22.1 Changes: -------- --- /work/SRC/openSUSE:Factory/xonsh/xonsh.changes 2026-01-08 15:31:38.491616069 +0100 +++ /work/SRC/openSUSE:Factory/.xonsh.new.1928/xonsh.changes 2026-01-26 11:05:58.995184787 +0100 @@ -1,0 +2,17 @@ +Sun Jan 18 12:23:46 UTC 2026 - Sebastian Wagner <[email protected]> + +- Update to version 0.22.1: + - Features + - Added expanding aliases to `showcmd` command using `-e` argument ([#6041](https://github.com/xonsh/xonsh/issues/6041)) ([5b706d4](https://github.com/xonsh/xonsh/commit/5b706d493e6deb4cd2b6935a56495547b558d083)) + - **prompt:** Added XONSH_PROMPT_NEXT_CMD to set the text of the next command that will be inserted in the next prompt ([#6037](https://github.com/xonsh/xonsh/issues/6037)) ([8a04bad](https://github.com/xonsh/xonsh/commit/8a04bad17ad38848e75c7b7f320111e9399c6c28)) + - Bug Fixes + - **appimage:** Fixed `xpy` value in `xcontext` in xonsh AppImage ([#6033](https://github.com/xonsh/xonsh/issues/6033)) ([5f27c06](https://github.com/xonsh/xonsh/commit/5f27c06aa3f9423701586252bdbbfce7d34ba6e7)) + - **source-foreign:** Quote pathnames when sourcing a foreign function ([#6014](https://github.com/xonsh/xonsh/issues/6014)) ([818b19a](https://github.com/xonsh/xonsh/commit/818b19a5fac0c1b1407e2f497f37f895c8187534)) + - **xoreutils:** Added KeyboardInterrupt handling in xoreutils yes command ([#6012](https://github.com/xonsh/xonsh/issues/6012)) ([cb71a8d](https://github.com/xonsh/xonsh/commit/cb71a8d06b12fd71d4b1c87f4f9f516802f6e5f1)) + - Documentation + - add showcmd mention ([54e2898](https://github.com/xonsh/xonsh/commit/54e2898e0847b3c3fbd7f7b28acb525841771e08)) + - Add xonsh install script ([#6046](https://github.com/xonsh/xonsh/issues/6046)) ([d044dc4](https://github.com/xonsh/xonsh/commit/d044dc41cb1711de704855f3ba4b0bb4954660e4)) + - platform guide micro fix ([93dd54e](https://github.com/xonsh/xonsh/commit/93dd54eb06522c83f23a01679b379c4ad4f8d0e4)) + - Refactor xonsh installation process description ([#6029](https://github.com/xonsh/xonsh/issues/6029)) ([3770165](https://github.com/xonsh/xonsh/commit/3770165220f121cb3fa822c5671c51633bfa9033)) + +------------------------------------------------------------------- Old: ---- xonsh-0.22.0.tar.gz New: ---- xonsh-0.22.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xonsh.spec ++++++ --- /var/tmp/diff_new_pack.UEr0pV/_old 2026-01-26 11:05:59.815219043 +0100 +++ /var/tmp/diff_new_pack.UEr0pV/_new 2026-01-26 11:05:59.819219208 +0100 @@ -18,7 +18,7 @@ %define pythons python3 Name: xonsh -Version: 0.22.0 +Version: 0.22.1 Release: 0 Summary: A general purpose, Python-powered shell License: BSD-2-Clause AND BSD-3-Clause ++++++ xonsh-0.22.0.tar.gz -> xonsh-0.22.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/.github/issue_template.md new/xonsh-0.22.1/.github/issue_template.md --- old/xonsh-0.22.0/.github/issue_template.md 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/.github/issue_template.md 2026-01-14 06:06:40.000000000 +0100 @@ -1,39 +1,31 @@ -<!--- Provide a general summary of the issue in the Title above --> -<!--- If you have a question along the lines of "How do I do this Bash command in xonsh" -please first look over the Bash to Xonsh translation guide: https://xon.sh/bash_to_xsh.html -If you don't find an answer there, please do open an issue! --> +## Expected Behavior +<!--- Put here what should happen. --> -## xonfig +## Current Behavior +<!--- Put here what happens instead of the expected behavior. --> + +### Traceback (if applicable) <details> -``` -$ xonfig +```xsh +<Put here the traceback.> ``` </details> -## Expected Behavior -<!--- Tell us what should happen --> - -## Current Behavior -<!--- Tell us what happens instead of the expected behavior --> -<!--- If part of your bug report is a traceback, please first enter debug mode before triggering the error -To enter debug mode, set the environment variable `XONSH_DEBUG=1` _before_ starting `xonsh`. -On Linux and OSX, an easy way to to do this is to run `env XONSH_DEBUG=1 xonsh` --> +## Steps to Reproduce +<!--- Put here the minimal reproducible snippet to trigger the bug. --> -### Traceback (if applicable) +## xonfig <details> -``` -traceback +```xsh +<Put here the output of `xonfig` command.> ``` </details> -## Steps to Reproduce -<!--- Please try to write out a minimal reproducible snippet to trigger the bug, it will help us fix it! --> - ## For community β¬οΈ **Please click the π reaction instead of leaving a `+1` or π comment** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/.github/pull_request_template.md new/xonsh-0.22.1/.github/pull_request_template.md --- old/xonsh-0.22.0/.github/pull_request_template.md 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/.github/pull_request_template.md 2026-01-14 06:06:40.000000000 +0100 @@ -1,13 +1,11 @@ -<!--- - -Thanks for opening a PR on xonsh! +<!--- 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`. +1. Use Conventional Commits for PR title e.g. `feat(prompt): Add new color`. +2. Add the documentation to `/docs/`. 3. Add the example of usage or before-after behavior. -4. Mention the issue that this PR is addressing e.g. `#1234`. +4. Mention the issue that this PR is addressing e.g. `Closes #1234`. --> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/.pre-commit-config.yaml new/xonsh-0.22.1/.pre-commit-config.yaml --- old/xonsh-0.22.0/.pre-commit-config.yaml 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/.pre-commit-config.yaml 2026-01-14 06:06:40.000000000 +0100 @@ -9,7 +9,7 @@ repos: - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. - rev: 'v0.14.9' + rev: 'v0.14.10' hooks: - id: ruff args: [., --fix, --exit-non-zero-on-fix] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/.release-please-manifest.json new/xonsh-0.22.1/.release-please-manifest.json --- old/xonsh-0.22.0/.release-please-manifest.json 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/.release-please-manifest.json 2026-01-14 06:06:40.000000000 +0100 @@ -1,3 +1,3 @@ { - ".": "0.22.0" + ".": "0.22.1" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/CHANGELOG.md new/xonsh-0.22.1/CHANGELOG.md --- old/xonsh-0.22.0/CHANGELOG.md 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/CHANGELOG.md 2026-01-14 06:06:40.000000000 +0100 @@ -1,5 +1,28 @@ # Xonsh Change Log +## [0.22.1](https://github.com/xonsh/xonsh/compare/0.22.0...0.22.1) (2026-01-14) + + +### Features + +* Added expanding aliases to `showcmd` command using `-e` argument ([#6041](https://github.com/xonsh/xonsh/issues/6041)) ([5b706d4](https://github.com/xonsh/xonsh/commit/5b706d493e6deb4cd2b6935a56495547b558d083)) +* **prompt:** Added XONSH_PROMPT_NEXT_CMD to set the text of the next command that will be inserted in the next prompt ([#6037](https://github.com/xonsh/xonsh/issues/6037)) ([8a04bad](https://github.com/xonsh/xonsh/commit/8a04bad17ad38848e75c7b7f320111e9399c6c28)) + + +### Bug Fixes + +* **appimage:** Fixed `xpy` value in `xcontext` in xonsh AppImage ([#6033](https://github.com/xonsh/xonsh/issues/6033)) ([5f27c06](https://github.com/xonsh/xonsh/commit/5f27c06aa3f9423701586252bdbbfce7d34ba6e7)) +* **source-foreign:** Quote pathnames when sourcing a foreign function ([#6014](https://github.com/xonsh/xonsh/issues/6014)) ([818b19a](https://github.com/xonsh/xonsh/commit/818b19a5fac0c1b1407e2f497f37f895c8187534)) +* **xoreutils:** Added KeyboardInterrupt handling in xoreutils yes command ([#6012](https://github.com/xonsh/xonsh/issues/6012)) ([cb71a8d](https://github.com/xonsh/xonsh/commit/cb71a8d06b12fd71d4b1c87f4f9f516802f6e5f1)) + + +### Documentation + +* add showcmd mention ([54e2898](https://github.com/xonsh/xonsh/commit/54e2898e0847b3c3fbd7f7b28acb525841771e08)) +* Add xonsh install script ([#6046](https://github.com/xonsh/xonsh/issues/6046)) ([d044dc4](https://github.com/xonsh/xonsh/commit/d044dc41cb1711de704855f3ba4b0bb4954660e4)) +* platform guide micro fix ([93dd54e](https://github.com/xonsh/xonsh/commit/93dd54eb06522c83f23a01679b379c4ad4f8d0e4)) +* Refactor xonsh installation process description ([#6029](https://github.com/xonsh/xonsh/issues/6029)) ([3770165](https://github.com/xonsh/xonsh/commit/3770165220f121cb3fa822c5671c51633bfa9033)) + ## [0.22.0](https://github.com/xonsh/xonsh/compare/0.21.2...0.22.0) (2025-12-19) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/README.rst new/xonsh-0.22.1/README.rst --- old/xonsh-0.22.0/README.rst 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/README.rst 2026-01-14 06:06:40.000000000 +0100 @@ -126,15 +126,20 @@ First steps *********** -Install xonsh from pip: +We're refactoring the docs about xonsh installation so you can try the new way: + +* Install xonsh using `xonsh-install <https://github.com/anki-code/xonsh-install>`_ +* `Draft "Xonsh Installation General Guide" <https://github.com/xonsh/xonsh/blob/refactor_install_docs/docs/install.rst>`_ + +The old way is to install xonsh from pip: .. code-block:: shell python -m pip install 'xonsh[full]' -And visit https://xon.sh for more information: +Visit https://xon.sh for more information: -- `Installation <https://xon.sh/contents.html#installation>`_ - using packages, docker or AppImage. +- `Installation <https://xon.sh/contents.html#installation>`_ - using `xonsh-install <https://github.com/anki-code/xonsh-install>`_, packages, docker or AppImage. - `Tutorial <https://xon.sh/tutorial.html>`_ - step by step introduction in xonsh. Some beginners find the `xonsh cheatsheet <https://github.com/anki-code/xonsh-cheatsheet>`_ a helpful place to start. @@ -170,6 +175,13 @@ - `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. +Compile, packaging or accelerate xonsh: + +- `AppImage <https://github.com/appimage>`_ is a format for distributing Linux applications and can be used to `create a standalone xonsh package <https://xon.sh/appimage.html>`_. +- `Nuitka <https://github.com/Nuitka/Nuitka>`_ is an optimizing Python compiler that can `build a native xonsh binary <https://github.com/xonsh/xonsh/issues/2895#issuecomment-3665753657>`_. +- `RustPython <https://github.com/RustPython/RustPython/>`_ is a Python interpreter written in Rust that can `run xonsh on top of Rust <https://github.com/xonsh/xonsh/issues/5082#issue-1611837062>`_. + + Welcome to the xonsh shell community ************************************ @@ -180,6 +192,7 @@ - Contribute to `xonsh API <https://github.com/xonsh/xonsh/tree/main/xonsh/api>`_. - Become xonsh core developer by deep diving into xonsh internals. E.g. we feel a lack of Windows support. - Add xonsh support in third party tool: `package manager <https://github.com/topics/package-manager>`_, `terminal emulator <https://github.com/topics/terminal-emulators>`_, `console tool <https://github.com/topics/console>`_, `IDE <https://github.com/topics/ide>`_. +- Test xonsh with compiler, interpreter, optimizer and report upstream issues (e.g. `Nuitka <https://github.com/xonsh/xonsh/issues/2895#issuecomment-3665753657>`_, `RustPython <https://github.com/xonsh/xonsh/issues/5082#issue-1611837062>`_). - Design more `logos and images <https://github.com/anki-code/xonsh-logo>`_, improve `xonsh website <https://xon.sh/>`_ (`src <https://github.com/xonsh/xonsh/blob/12f12ce94f1b6c92218e22fbdaaa846e16ac8b2d/docs/_templates/index.html#L9>`_). - `Become a sponsor to xonsh <https://github.com/sponsors/xonsh>`_. - Spread the good word about xonsh in the world by sharing news and notes about xonsh. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/docs/_templates/index.html new/xonsh-0.22.1/docs/_templates/index.html --- old/xonsh-0.22.0/docs/_templates/index.html 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/docs/_templates/index.html 2026-01-14 06:06:40.000000000 +0100 @@ -94,7 +94,7 @@ <a class="nav-link" href="#features-area" data-scroll-nav="2">Features</a> </li> <li class="nav-item"> - <a class="nav-link" href="#faq-area" data-scroll-nav="3">Install</a> + <a class="nav-link" href="install.html" target="_blank">Install</a> </li> <li class="nav-item"> <a class="nav-link" href="#product-area" data-scroll-nav="4">Xontribs</a> @@ -103,7 +103,7 @@ <a class="nav-link" href="#blog-area" data-scroll-nav="5">Talks</a> </li> <li class="nav-item"> - <a class="nav-link" href="contents.html">Docs</a> + <a class="nav-link" href="contents.html" target="_blank">Docs</a> </li> <li class="nav-item"> <a class="nav-link" href="https://github.com/xonsh/xonsh" target="_blank">Github</a> @@ -135,10 +135,10 @@ <br> <p style="font-size: 20px; font-weight: 1;">Xonsh <span style="color:#CCC;">(sounds like "consh")</span> is a modern, full-featured and cross-platform python shell. The language is a superset of Python 3.6+ with additional shell primitives that you are used to from Bash and IPython. It works on all major systems including Linux, OSX, and Windows. Xonsh is meant for the daily use of experts and novices.</p> - <a href="#" data-scroll-nav="3"><i class="icofont-download"></i> Install</a> + <a href="install.html" target="_blank"><i class="icofont-download"></i> Install</a> <a href="contents.html" target="_blank"><i class="icofont-ui-note"></i> Docs</a> <a href="https://github.com/xonsh/xonsh" target="_blank"><i class="icofont-github"></i> Github</a> - <a href="https://github.com/sponsors/xonsh" target="_blank"><i class="icofont-dollar"></i> Donate</a> + <a href="https://github.com/sponsors/xonsh" target="_blank"><i class="icofont-dollar"></i> Sponsor</a> </div> </div> </div> @@ -157,7 +157,7 @@ <div class="col-lg-6 col-md-7"> <div class="about-content"> <h3>Xonsh is the Shell</h3> - <p>The xonsh language has shell primitives that you are used to from Bash. <a href="tutorial.html" target="_blank">Read more β</a></p> + <p>The xonsh language provides the shell primitives commonly found in traditional Unix shells, including interaction with standard utilities, pipelines, and input/output streams. <a href="tutorial.html" target="_blank">Read more β</a></p> </div> </div> @@ -165,7 +165,7 @@ <div class="text-center"> <pre class="code"> -<span unselectable-text="@ "></span><b>cd</b> /home +<span unselectable-text="@ "></span><b>cd</b> $HOME <span unselectable-text="@ "></span><b>cat</b> /etc/passwd | <b>grep</b> root @@ -183,7 +183,7 @@ <div class="about-content"> <h3>Xonsh is Python</h3> - <p>The xonsh language is a superset of Python 3.6+ and you can run Python code and import modules. <a href="tutorial.html" target="_blank">Read more β</a></p> + <p>The xonsh language is a superset of Python 3.6+, allowing you to execute Python code directly, install and use third-party libraries, import modules, and take advantage of the broader Python ecosystem and tooling. <a href="tutorial.html" target="_blank">Read more β</a></p> </div> </div> @@ -210,7 +210,7 @@ <div class="about-content"> <h3>Xonsh is the Shell in Python</h3> - <p>With xonsh you can combine Python with shell commands. <a href="tutorial.html" target="_blank">Read more β</a></p> + <p>Xonsh provides a unified environment where shell functionality and Python code work together naturally. <a href="tutorial.html" target="_blank">Read more β</a></p> </div> </div> @@ -238,7 +238,7 @@ <div class="about-content"> <h3>Xonsh is Python in the Shell</h3> - <p>Prepare environment variables and arguments in Python and use them in shell commands. <a href="tutorial.html" target="_blank">Read more β</a></p> + <p>Xonsh shell session builtins allow xonsh to function as a fully featured shell, tightly integrated with the operating system and its environment. <a href="tutorial.html" target="_blank">Read more β</a></p> </div> </div> @@ -322,151 +322,6 @@ </div> </section> - <section id="faq-area" data-scroll-index="3"> - <div class="container"> - <div class="row"> - <div class="col-lg-6 offset-lg-3 col-md-8 offset-md-2"> - <div class="section-heading text-center"> - <h2>Install Xonsh</h2> - <p>Xonsh can be installed and run with various package managers, by using appimage, or from a docker container.</p> - </div> - </div> - </div> - <div class="row"> - <div class="col-lg-8 offset-lg-2 col-md-10 offset-md-1"> - <div id="accordion" role="tablist"> - <div class="card"> - <div class="card-header active" role="tab" id="faq1"> - <h5 class="mb-0"> - <a data-toggle="collapse" href="#collapse0" aria-expanded="true" aria-controls="collapse0">PyPi package</a> - </h5> - </div> - <div id="collapse0" class="collapse show" role="tabpanel" aria-labelledby="faq1" data-parent="#accordion"> - <div class="card-body"> - <p>Install the <a href="https://github.com/xonsh/xonsh/releases">latest release</a>:</p> - <pre class="code">python -m pip install 'xonsh[full]'</pre> - <a href="packages.html">Learn more β</a> - </div> - </div> - </div> - - <div class="card"> - <div class="card-header" role="tab" id="faq2"> - <h5 class="mb-0"> - <a data-toggle="collapse" href="#collapse1" aria-expanded="false" aria-controls="collapse1">Install as a core shell</a> - </h5> - </div> - <div id="collapse1" class="collapse" role="tabpanel" aria-labelledby="faq2" data-parent="#accordion"> - <div class="card-body"> - <p> - When using xonsh as a default shell (and we do!), it's important to ensure that it is installed - in a Python environment that is independent of changes from the system package manager. - If you are installing xonsh via your system package-manager, this is handled for you. - If you install xonsh outside of your system package manager, you can use - <a href="https://github.com/anki-code/xonsh-install">xonsh-install</a> for this. - </p> - </div> - </div> - </div> - - <div class="card"> - <div class="card-header" role="tab" id="faq3"> - <h5 class="mb-0"> - <a class="collapsed" data-toggle="collapse" href="#collapse2" aria-expanded="false" aria-controls="collapse2">Conda package</a> - </h5> - </div> - <div id="collapse2" class="collapse" role="tabpanel" aria-labelledby="faq2" data-parent="#accordion"> - <div class="card-body"> - <p>Install:</p> - <pre class="code"> -conda config --add channels conda-forge -conda install xonsh</pre> - -<a href="packages.html">Learn more β</a> - </div> - </div> - </div> - - <div class="card"> - <div class="card-header" role="tab" id="faq4"> - <h5 class="mb-0"> - <a class="collapsed" data-toggle="collapse" href="#collapse3" aria-expanded="false" aria-controls="collapse3">Portable Linux AppImage</a> - </h5> - </div> - <div id="collapse3" class="collapse" role="tabpanel" aria-labelledby="faq3" data-parent="#accordion"> - <div class="card-body"> - <p> - <a href="https://appimage.org/">AppImage</a> is a format for distributing portable software on Linux without needing superuser permissions to install the application. - The xonsh AppImage file contains both xonsh and Python and allows xonsh to be run on any AppImage-supported Linux distribution without installation or root access. - </p> - <p> - Download and run: - </p> - <pre class="code"> -wget https://github.com/xonsh/xonsh/releases/latest/download/xonsh-x86_64.AppImage -chmod +x xonsh-x86_64.AppImage -./xonsh-x86_64.AppImage</pre> - - <a href="appimage.html" target="_blank">Learn more β</a> - </div> - </div> - </div> - - <div class="card"> - <div class="card-header" role="tab" id="faq5"> - <h5 class="mb-0"> - <a class="collapsed" data-toggle="collapse" href="#collapse4" aria-expanded="false" aria-controls="collapse4">Docker container</a> - </h5> - </div> - <div id="collapse4" class="collapse" role="tabpanel" aria-labelledby="faq4" data-parent="#accordion"> - <div class="card-body"> - <p> - Xonsh publishes a handful of containers, primarily targeting CI and automation use cases. All of them are published on <a href="https://hub.docker.com/u/xonsh">Docker Hub</a>. - </p> - <p> - Run the xonsh shell in a small size docker container: - </p> - <pre class="code">docker run -it --rm xonsh/xonsh:slim</pre> - </div> - </div> - </div> - - <div class="card"> - <div class="card-header" role="tab" id="faq6"> - <h5 class="mb-0"> - <a class="collapsed" data-toggle="collapse" href="#collapse5" aria-expanded="false" aria-controls="collapse5">Platform package managers: brew, apt, pacman, dnf, guix</a> - </h5> - </div> - <div id="collapse5" class="collapse" role="tabpanel" aria-labelledby="faq5" data-parent="#accordion"> - <div class="card-body"> - <p> - Another way is to install xonsh from the package manager that is supplied by the operating system. This way is <b>not</b> recommended - because in operating systems without the <a href="https://en.wikipedia.org/wiki/Rolling_release">rolling release concept</a> - the xonsh shell version may be very old (<a href="https://github.com/xonsh/xonsh/releases/">check latest release</a>). - </p> - <p>OSX brew:</p><pre class="code">brew install xonsh</pre> - <p>Debian/Ubuntu apt:</p><pre class="code">apt install xonsh</pre> - <p>Arch Linux pacman:</p><pre class="code">pacman -S xonsh</pre> - <p>Fedora dnf:</p><pre class="code">dnf install xonsh</pre> - <p>GNU guix:</p><pre class="code">guix install xonsh</pre> - </div> - </div> - </div> - - </div> - </div> - - </div> - - <div class="text-center"> - <p style="margin-top: 30px;"> - <a href="contents.html#installation" target="_blank"> <i class="icofont-ui-note"></i> More installation methods β</a> - </p> - </div> - - </div> - </section> - <section id="product-area" data-scroll-index="4"> <div class="container"> <div class="row"> @@ -613,7 +468,7 @@ <a href="https://hub.docker.com/u/xonsh">Docker Hub</a> </p> <p> - <a href="https://github.com/sponsors/xonsh">Donate</a> + <a href="https://github.com/sponsors/xonsh">Sponsor</a> </p> </div> <div class="col-lg-3 col-sm-6"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/docs/aliases.rst new/xonsh-0.22.1/docs/aliases.rst --- old/xonsh-0.22.0/docs/aliases.rst 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/docs/aliases.rst 2026-01-14 06:06:40.000000000 +0100 @@ -123,7 +123,7 @@ ``showcmd`` ============ -Displays how commands and arguments are evaluated. +Displays how commands and arguments are evaluated. Use ``-e`` to expand aliases. ``trace`` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/docs/bash_to_xsh.rst new/xonsh-0.22.1/docs/bash_to_xsh.rst --- old/xonsh-0.22.0/docs/bash_to_xsh.rst 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/docs/bash_to_xsh.rst 2026-01-14 06:06:40.000000000 +0100 @@ -141,8 +141,7 @@ - ``exit 1`` or ``exit(1)`` - Exiting from the current script. -To understand how xonsh executes the subprocess commands try -to set :ref:`$XONSH_TRACE_SUBPROC <xonsh_trace_subproc>` to ``True``: +To understand how xonsh executes the subprocess commands try ``showcmd`` or set :ref:`$XONSH_TRACE_SUBPROC <xonsh_trace_subproc>` to ``True``: .. code-block:: console diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/docs/conf.py new/xonsh-0.22.1/docs/conf.py --- old/xonsh-0.22.0/docs/conf.py 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/docs/conf.py 2026-01-14 06:06:40.000000000 +0100 @@ -186,7 +186,7 @@ # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] -html_extra_path = ["_static/robots.txt"] +html_extra_path = ["_static/robots.txt", "install"] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/docs/install/install/index.html new/xonsh-0.22.1/docs/install/install/index.html --- old/xonsh-0.22.0/docs/install/install/index.html 1970-01-01 01:00:00.000000000 +0100 +++ new/xonsh-0.22.1/docs/install/install/index.html 2026-01-14 06:06:40.000000000 +0100 @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Redirecting...</title> + <meta http-equiv="refresh" content="0; url=https://xon.sh/install.html"> + <link rel="canonical" href="https://xon.sh/install.html"> + </head> + <body> + <p> + Redirecting to + <a href="https://xon.sh/install.html">https://xon.sh/install.html</a>β¦ + </p> + </body> +</html> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/docs/install/install/mamba-install-xonsh.sh new/xonsh-0.22.1/docs/install/install/mamba-install-xonsh.sh --- old/xonsh-0.22.0/docs/install/install/mamba-install-xonsh.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/xonsh-0.22.1/docs/install/install/mamba-install-xonsh.sh 2026-01-14 06:06:40.000000000 +0100 @@ -0,0 +1,188 @@ +#!/bin/sh + +set -eu + +echo +echo Install xonsh using micromamba +echo + +TARGET_DIR="${TARGET_DIR:-${HOME}/.local/xonsh-env}" +PYTHON_VER="${PYTHON_VER:-3.11}" +XONSH_VER="${XONSH_VER:-xonsh[full]}" +PIP_INSTALL="${PIP_INSTALL:-}" +XONSHRC="${XONSHRC:-}" + + +MAMBA_BIN_DIR="${TARGET_DIR}/bin" +MAMBA_USE_CONDA_FORGE="${MAMBA_USE_CONDA_FORGE:-yes}" + +echo +echo Env +echo +echo TARGET_DIR=$TARGET_DIR +echo PYTHON_VER=$PYTHON_VER +echo MAMBA_USE_CONDA_FORGE=$MAMBA_USE_CONDA_FORGE + +echo +echo Create directories +echo + +mkdir -p $TARGET_DIR $MAMBA_BIN_DIR $TARGET_DIR/xbin +cd $TARGET_DIR + + +echo +echo Install micromamba +echo + +# START INSTALLING MAMBA -- Code from https://github.com/mamba-org/micromamba-releases/blob/main/install.sh + +# Computing artifact location +case "$(uname)" in + Linux) + PLATFORM="linux" ;; + Darwin) + PLATFORM="osx" ;; + *NT*) + PLATFORM="win" ;; +esac + +ARCH="$(uname -m)" +case "$ARCH" in + aarch64|ppc64le|arm64) + ;; # pass + *) + ARCH="64" ;; +esac + +case "$PLATFORM-$ARCH" in + linux-aarch64|linux-ppc64le|linux-64|osx-arm64|osx-64|win-64) + ;; # pass + *) + echo "Failed to detect your OS" >&2 + exit 1 + ;; +esac + +if [ "${VERSION:-}" = "" ]; then + RELEASE_URL="https://github.com/mamba-org/micromamba-releases/releases/latest/download/micromamba-${PLATFORM}-${ARCH}" +else + RELEASE_URL="https://github.com/mamba-org/micromamba-releases/releases/download/micromamba-${VERSION}/micromamba-${PLATFORM}-${ARCH}" +fi + + +# Downloading artifact +mkdir -p "${MAMBA_BIN_DIR}" +if hash curl >/dev/null 2>&1; then + curl "${RELEASE_URL}" -o "${MAMBA_BIN_DIR}/micromamba" -fsSL --compressed ${CURL_OPTS:-} +elif hash wget >/dev/null 2>&1; then + wget ${WGET_OPTS:-} -qO "${MAMBA_BIN_DIR}/micromamba" "${RELEASE_URL}" +else + echo "Neither curl nor wget was found" >&2 + exit 1 +fi +chmod +x "${MAMBA_BIN_DIR}/micromamba" + + +# Initializing conda-forge +case "$MAMBA_USE_CONDA_FORGE" in + y|Y|yes) + "${MAMBA_BIN_DIR}/micromamba" config append channels conda-forge + "${MAMBA_BIN_DIR}/micromamba" config append channels nodefaults + "${MAMBA_BIN_DIR}/micromamba" config set channel_priority strict + ;; +esac + +# FINISH INSTALLING MAMBA + +echo +echo Install xonsh +echo + +cat > ./xbin/xmamba <<EOF +if \$XONSH_MODE != 'source': + printx('Run: source xmamba', 'YELLOW') + exit(1) +\$MAMBA_ROOT_PREFIX = \$(which xonsh)[:-10] +execx(\$(@(\$MAMBA_ROOT_PREFIX+'/bin/micromamba') shell hook --shell xonsh).replace("aliases['micromamba']", "aliases['xmamba']")) +EOF +chmod +x ./xbin/xmamba + +cat > ./xbin/xbin-add <<EOF +#!/bin/bash +ln -s $MAMBA_BIN_DIR/"\$@" $MAMBA_BIN_DIR/../xbin/"\$@" +ls $MAMBA_BIN_DIR/../xbin/"\$@" +EOF +chmod +x ./xbin/xbin-add + +cat > ./xbin/xbin-del <<EOF +#!/bin/bash +rm -i $MAMBA_BIN_DIR/../xbin/"\$@" +EOF +chmod +x ./xbin/xbin-del + +cat > ./xbin/xbin-list <<EOF +#!/bin/bash +ls -1 $MAMBA_BIN_DIR/../xbin/ | grep -v xbin- +EOF +chmod +x ./xbin/xbin-list + +cat > ./xbin/xbin-hidden <<EOF +#!/bin/bash +ls -1 $MAMBA_BIN_DIR/ +EOF +chmod +x ./xbin/xbin-hidden + +export MAMBA_ROOT_PREFIX="$TARGET_DIR" +eval "$($MAMBA_BIN_DIR/micromamba shell hook --shell bash)" +micromamba activate base +micromamba install -y python=$PYTHON_VER + +echo +echo Install $XONSH_VER +echo +"$TARGET_DIR/bin/python" -m pip install $XONSH_VER + +if [ -n "$PIP_INSTALL" ]; then + echo + echo Install: $PIP_INSTALL + echo + "$TARGET_DIR/bin/python" -m pip install $(echo $PIP_INSTALL) +fi + +ln -s $TARGET_DIR/bin/xonsh ./xbin/xonsh +ln -s xonsh ./xbin/xbin-xonsh # to run xonsh from xonsh env if xonsh overwritten by $PATH +ln -s ../bin/python ./xbin/xbin-python # to run python from xonsh env + + +if [ -n "$XONSHRC" ]; then + echo + echo Update ~/.xonshrc + echo + echo $XONSHRC >> ~/.xonshrc +fi + +echo +echo 'Test xonsh' +echo +${TARGET_DIR}/xbin/xonsh --no-rc --no-env -c "echo @(21+21)" + +echo +echo 'Result' +echo +echo "TARGET_DIR=$TARGET_DIR" +echo "PYTHON_VER=$PYTHON_VER" +echo "MAMBA_USE_CONDA_FORGE=$MAMBA_USE_CONDA_FORGE" +echo +echo 'Now you can:' +echo +echo ' * Add `xbin` dir to the top of your system shell path:' +echo +echo " echo 'export PATH=${TARGET_DIR}/xbin:\$PATH' >> ~/.zshrc" +echo " echo 'export PATH=${TARGET_DIR}/xbin:\$PATH' >> ~/.bashrc" +echo ' # Restart session and run xonsh.' +echo +echo " * Or run xonsh manually by path from any place:" +echo +echo " ${TARGET_DIR}/xbin/xonsh" +echo \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/docs/install.rst new/xonsh-0.22.1/docs/install.rst --- old/xonsh-0.22.0/docs/install.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/xonsh-0.22.1/docs/install.rst 2026-01-14 06:06:40.000000000 +0100 @@ -0,0 +1,196 @@ +******************* +Xonsh Installation General Guide +******************* + +**The guide is new so in case of error please open the issue in the `tracker <https://github.com/xonsh/xonsh/issues>`_. + +Important +======================== + +Xonsh is a full-featured shell and can technically be used as a login shell, +but since it is not a POSIXβcompatible shell, we don't recommend doing +so unless you clearly understand the purpose and consequences. +Do not attempt to set it as your default shell using ``chsh`` +or by any other method that would replace the system shell. + +The recommended practice is to create a Xonsh profile in your terminal emulator. + + +Overview +======================== + +Xonsh is a Python-based shell that requires Python to be packaged, preinstalled or compiled in order to run. +Since there are many ways to install Python, there are also many ways to run xonsh. The table describes +the main approaches and their advantages. + +.. list-table:: + :widths: 3 1 1 1 1 1 + :header-rows: 1 + :stub-columns: 1 + + * - + - Use as core shell + - Isolated env + - Fresh version + - Automation + - Portable + * - Independent install + - β + - β + - β + - + - + * - PyPi package + - + - + - β + - β + - + * - AppImage + - + - ~ + - β + - + - β + * - Conainer + - + - β + - β + - β + - + * - Platform package + - + - + - + - + - + +Work in progress: +`binary build <https://github.com/xonsh/xonsh/issues/2895#issuecomment-3665753657>`_, +`running in RustPython <https://github.com/xonsh/xonsh/issues/5082#issue-1611837062>`_. + +Independent install +======================== + +When xonsh is used as a core shell, it is necessary to keep the Python environment with xonsh +stable, predictable, and independent of system changes. Lightweight environment managers +such as ``venv``, ``pipx``, or ``rye`` do not fully address this requirement. +Package managers that can install fully isolated Python environments as a core feature, +such as Miniconda or Micromamba, should be used. + +Install xonsh with Micromamba: + +.. code-block:: console + + TARGET_DIR=$HOME/.local/xonsh-env PYTHON_VER=3.11 XONSH_VER='xonsh[full]' \ + /bin/bash -c "$(curl -fsSL https://xon.sh/install/mamba-install-xonsh.sh)" + +Learn more: `Mamba installer <install_mamba.html>`_. + + +PyPi package +======================== + +You can install xonsh package from PyPi using an existing installation of ``pip``, ``pipx``, ``rye``, etc. + +**pip:** + +.. code-block:: console + + pip install 'xonsh[full]' + +Pip can also install the most recent xonsh source code from the +`xonsh project repository <https://github.com/xonsh/xonsh>`_: + +.. code-block:: console + + pip install 'https://github.com/xonsh/xonsh/archive/main.zip#egg=xonsh[full]' + + +**conda:** + +.. code-block:: console + + conda config --add channels conda-forge + conda install xonsh + + +AppImage +======================== + +Xonsh is available as a single AppImage bundled with Python, allowing you to run it on Linux without installation: + +.. code-block:: console + + wget 'https://github.com/xonsh/xonsh/releases/latest/download/xonsh-x86_64.AppImage' -O xonsh + chmod +x xonsh + ./xonsh + +Study how to package your libraries in `Xonsh AppImage <appimage.html>`_ article. + +Container +======================== + +Xonsh publishes a handful of containers, primarily targeting CI and automation use cases. +All of them are published on `Docker Hub <https://hub.docker.com/u/xonsh>`__. + +Example of running an interactive xonsh session in a container: + +.. code-block:: console + + docker run --rm -it xonsh/interactive + +Learn more: `Containers <containers.html>`_. + + +Platform package +======================== + +Various operating system distributions provide platform-specific package managers that may offer a xonsh package. +This approach is **not recommended** for the following reasons: + +* On non-rolling-release operating systems, the xonsh version is often outdated and may lack important dependencies. +* System package managers install xonsh into the system Python environment, which means that any significant system update or change has a high probability of breaking the shell. + +**Arch Linux:** + +.. code-block:: console + + pacman -S xonsh # not recommended but possible + +**Debian/Ubuntu:** + +.. code-block:: console + + apt install xonsh # not recommended but possible + + +**Fedora:** + +.. code-block:: console + + dnf install xonsh # not recommended but possible + +**GNU guix:** + +.. code-block:: console + + guix install xonsh # not recommended but possible + +**OSX:** + +.. code-block:: console + + brew install xonsh # not recommended but possible + +WIP Binary build +======================== + +Using Nuitka (a Python compiler), it is possible to build a binary version of xonsh. +Learn more in `xonsh/2895 <https://github.com/xonsh/xonsh/issues/2895>`_. + +WIP RustPython build +======================== + +Using RustPython (a Python Interpreter written in Rust), it is possible to run xonsh using Rust. +Learn more in `xonsh/5082 <https://github.com/xonsh/xonsh/issues/5082>`_. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/docs/install_mamba.rst new/xonsh-0.22.1/docs/install_mamba.rst --- old/xonsh-0.22.0/docs/install_mamba.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/xonsh-0.22.1/docs/install_mamba.rst 2026-01-14 06:06:40.000000000 +0100 @@ -0,0 +1,142 @@ +******************* +Xonsh Mamba Installer +******************* + +Xonsh is a Python-based shell, and running xonsh requires Python to be installed. +The Python version and its packages can be installed in various locations. When +you execute ``import`` or any other Python code during a xonsh session, it is +executed in the Python environment that was used to start the current xonsh +instance. + +When xonsh is used as a core shell, it is necessary to keep the Python environment +with xonsh stable, predictable, and independent of system changes. Lightweight +environment managers such as ``venv``, ``pipx``, or ``rye`` do not fully address +this requirement. Package managers that can install fully isolated Python +environments as a core feature, such as ``miniconda`` or ``micromamba``, should +be used. + +The ``mamba-install-xonsh.sh`` script creates an independent Python environment +for xonsh using `mamba <https://mamba.readthedocs.io/>`_ in ``$TARGET_DIR`` without +affecting any other components of the system. This is an isolated, +xonsh-specific environment that is not affected by system package upgrades, +Python version changes, or other experiments with environments. You can use +``xpip`` and ``xmamba`` to intentionally install packages into this environment. + +Install the latest xonsh release with a well-tested Python version: + +.. code-block:: console + + TARGET_DIR=$HOME/.local/xonsh-env PYTHON_VER=3.11 XONSH_VER='xonsh[full]' \ + /bin/bash -c "$(curl -fsSL https://xon.sh/install/mamba-install-xonsh.sh)" + +Install xonsh from the ``main`` Git branch with a stable Python version + +.. code-block:: console + + TARGET_DIR=$HOME/.local/xonsh-env PYTHON_VER=3.11 XONSH_VER='git+https://github.com/xonsh/xonsh#egg=xonsh[full]' \ + /bin/bash -c "$(curl -fsSL https://xon.sh/install/mamba-install-xonsh.sh)" + + +Preinstall and preload `xontribs <https://github.com/topics/xontrib>`_: + +.. code-block:: console + + TARGET_DIR=$HOME/.local/xonsh-env PYTHON_VER=3.11 XONSH_VER='git+https://github.com/xonsh/xonsh#egg=xonsh[full]' \ + PIP_INSTALL="uv xontrib-sh xontrib-jump-to-dir xontrib-dalias xontrib-pipeliner xontrib-whole-word-jumping" \ + XONSHRC="\$XONSH_HISTORY_BACKEND = 'sqlite'; xontrib load -s sh jump_to_dir pipeliner whole_word_jumping dalias; \$PROMPT = \$PROMPT.replace('{prompt_end}', '\n{prompt_end}')" \ + /bin/bash -c "$(curl -fsSL https://xon.sh/install/mamba-install-xonsh.sh)" + +Usage +===== + +After installation, you no longer need to worry about Python or package +manipulations unintentionally breaking the shell. You can safely use ``pip``, +``brew``, and other package managers without corrupting the xonsh environment. + +After installation: + +* ``xonsh`` refers to ``~/.local/xonsh-env/xbin/xonsh``. +* ``xpython`` refers to ``~/.local/xonsh-env/bin/python``. +* ``xpip`` refers to ``~/.local/xonsh-env/bin/python -m pip``. +* ``xcontext`` shows the current context. +* You can run ``source xmamba`` to activate mamba (see below). + +Additions: + +* ``xbin-xonsh`` runs xonsh from xonsh-env if ``xonsh`` is overridden in ``$PATH``. +* ``xbin-python`` runs Python from xonsh-env. +* Executable helpers from xonsh-env: + + * ``xbin-hidden`` lists the internal hidden ``bin`` directory of xonsh-env. + Example: ``xpip install lolcat && xbin-hidden``. + * ``xbin-add`` adds an executable from the hidden ``bin`` directory to the + visible ``xbin``. Example: ``xbin-add lolcat``. + * ``xbin-list`` lists executables in the visible ``xbin`` directory. + * ``xbin-del`` removes an executable from ``xbin``. The executable remains in + ``bin``. + +Tips and Tricks +=============== + +Using mamba from xonsh-env +-------------------------- + +To bind the xonsh-env micromamba to the ``xmamba`` alias, run: + +.. code-block:: console + + source xmamba + +You can then use: + +.. code-block:: console + + xmamba activate base # Environment where xonsh was installed. + pip install lolcat # Install ``lolcat`` into the ``base`` environment. + xmamba deactivate + + xmamba create --name myenv python=3.12 + xmamba activate myenv + pip install lolcat # Install ``lolcat`` into ``myenv``. + xmamba deactivate + +Cleaning +-------- + +If you do not plan to use ``xmamba``, you can reclaim disk space using +`mamba clean <https://fig.io/manual/mamba/clean>`_: + +.. code-block:: console + + source xmamba + xmamba clean -a + +Uninstall +========= + +Simply delete ``$TARGET_DIR``. For example: + +.. code-block:: console + + rm -rf ~/.local/xonsh-env/ + +Known Issues +============ + +Do not blindly use as a login shell +---------------------------------- + +Using xonsh as a `login shell <https://linuxhandbook.com/login-shell/>`_ is not +recommended unless you are experienced and understand the implications. Many +tools expect the login shell to be POSIX-compliant, and issues may arise when +such tools attempt to run POSIX-specific commands in xonsh. + +``std::bad_alloc`` +------------------ + +If you encounter the error:: + + terminate called after throwing an instance of 'std::bad_alloc' + +delete the target directory (for example, ``rm -rf ~/.local/xonsh-env/``) and +repeat the installation. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/docs/installation.rst new/xonsh-0.22.1/docs/installation.rst --- old/xonsh-0.22.0/docs/installation.rst 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/docs/installation.rst 2026-01-14 06:06:40.000000000 +0100 @@ -1,12 +1,12 @@ Installation ============ -Xonsh can be installed and run with various package managers, by using appimage, or from a docker container: +Xonsh can be installed and run with various methods: .. toctree:: :titlesonly: :maxdepth: 2 - packages + install appimage containers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/docs/intro.rst new/xonsh-0.22.1/docs/intro.rst --- old/xonsh-0.22.0/docs/intro.rst 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/docs/intro.rst 2026-01-14 06:06:40.000000000 +0100 @@ -19,7 +19,6 @@ "The xonsh is a symbol", "It is pronounced <i>consh</i>", "It is pronounced <i>π</i>", - "It is pronounced <i>kΙntΚ</i>", "The shell, bourne again", "Snailed it", "Starfish loves you", @@ -42,9 +41,17 @@ "Python-powered, cross-platform, Unix-gazing shell", "Tab completion in Alderaan places", "This fix was trickier than expected", - "The unholy cross of Bash/Python", + "The unholy cross of Shell/Python", "Exploiting the workers and hanging on to outdated imperialist dogma since 2015.", - "Not perfect but ahead" + "Not perfect but ahead", + "We call @ a conch", + "Still a shell, now with feelings", + "The only shell that knows what your code meant", + "Shell yeah", + "Tab completion as a service", + "Now powered by vibes and unit tests", + "Infrastructure as a conchline", + "Reproducibility is a lifestyle" ]; document.write(taglines[Math.floor(Math.random() * taglines.length)]); </script> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/docs/packages.rst new/xonsh-0.22.1/docs/packages.rst --- old/xonsh-0.22.0/docs/packages.rst 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/docs/packages.rst 2026-01-14 06:06:40.000000000 +0100 @@ -1,103 +1,10 @@ -Package Manager -=============== +Packages +============ -You can install xonsh using ``conda``, ``pip`` or the package manager for -your operating system distribution. +Xonsh can be installed and run with various methods: -For the fullest interactive user experience, these additional packages should also be installed: +.. toctree:: + :titlesonly: + :maxdepth: 2 - :prompt-toolkit: for command completion, configurable key bindings and especially multi-line line editing. - :pygments: for xonsh and Python syntax-specific highlighting - :setproctitle: updates process title (in terminal window and process monitor) to match Xonsh arguments. - -Installing with these packages is the recommended configuration and is documented first. -If you are operating in a specialized or restricted environment, you can install just the xonsh package, as -described in `fewer prerequisites`_ - - -**conda:** - -.. code-block:: console - - $ conda config --add channels conda-forge - $ conda install xonsh - - -**pip:** Typically you will activate a virtual environment and install xonsh there. This will ensure that you invoke the -correct Python interpreter and ``pip`` module. - -.. code-block:: console - - $ pip install 'xonsh[full]' - -This uses the pip 'extras' syntax, and is equivalent to: - -.. code-block:: console - - $ pip install pygments prompt-toolkit setproctitle xonsh - -The above ``pip`` commands may have to be spelled ``pip3`` or ``sudo pip3`` if you are not installing in a virtual environment. - -**source:** Pip can also install the most recent xonsh source code from the -`xonsh project repository <https://github.com/xonsh/xonsh>`_. - -.. code-block:: console - - $ pip install pygments prompt-toolkit setproctitle https://github.com/xonsh/xonsh/archive/main.zip - -Spelling of ``pip`` command may likewise have to be amended as noted above. - -**core shell:** When using ``xonsh`` as a default shell (and we do!), it's important to ensure that it is installed in a -Python environment that is independent of changes from the system package manager. If you are installing -``xonsh`` via your system package-manager, this is handled for you. If you install ``xonsh`` outside of your -system package manager, you can use `xonsh-install <https://github.com/anki-code/xonsh-install>`_ for this. - -**platform package managers** -Various operating system distributions have platform-specific package managers which may offer a xonsh package. -This may not be the most current version of xonsh, but it should have been tested for stability on that platform -by the distribution managers. - - - +---------------------------+-----------------------------+---------------------+ - | OS or distribution | command | Package(s) | - +===========================+=============================+=====================+ - | Debian/Ubuntu | ``$ [sudo] apt install`` | | - +---------------------------+-----------------------------+ pygments | - | Fedora | ``$ [sudo] dnf install`` | prompt-toolkit | - +---------------------------+-----------------------------+ setproctitle | - | Arch Linux | ``$ [sudo] pacman -S`` | xonsh | - +---------------------------+-----------------------------+ | - | OSX | ``$ [sudo] brew install`` | | - +---------------------------+-----------------------------+---------------------+ - - -If you run into any problems, please let us know! - -Fewer Prerequisites --------------------- - -A design goal of Xonsh is to run in any environment that supports a (supported) Python interpreter, you -can install just the ``xonsh`` package (using any package manager). - -.. code-block:: console - - pip install xonsh - -When it starts up, if xonsh does not find ``pygments`` or ``setproctitle`` packages, it simply does not colorize -or highlight syntax or set process title, respectively. - -If it does not find ``prompt-toolkit`` package, it will -use the Python ``readline`` module (which reads configuration file ``.inputrc`` in a manner compatible with ``GNU readline``). -To ensure xonsh uses ``readline`` even if ``prompt-toolkit`` is installed, configure this in your -`xonshrc <xonshrc.rst>`_ (e.g. ``~/.xonshrc``) file: - -.. code-block:: xonshcon - - $SHELL_TYPE = 'readline' - -Windows -------- - -On Windows 10, the separately-installable `Windows Terminal app`_ is recommended. - -.. _`Windows Terminal app`: platform-issues.html#windows-terminal + install \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/docs/platform-issues.rst new/xonsh-0.22.1/docs/platform-issues.rst --- old/xonsh-0.22.0/docs/platform-issues.rst 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/docs/platform-issues.rst 2026-01-14 06:06:40.000000000 +0100 @@ -4,32 +4,6 @@ Linux ------ -Possible conflicts with Bash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Depending on how your installation of Bash is configured, Xonsh may have trouble -loading certain shell modules. If you see errors similar to this -when launching Xonsh: - -.. code-block:: console - - bash: module: line 1: syntax error: unexpected end of file - bash: error importing function definition for 'BASH_FUNC_module' - bash: scl: line 1: syntax error: unexpected end of file - bash: error importing function definition for 'BASH_FUNC_scl' - bash: module: line 1: syntax error: unexpected end of file - bash: error importing function definition for 'BASH_FUNC_module' - bash: scl: line 1: syntax error: unexpected end of file - bash: error importing function definition for 'BASH_FUNC_scl' - -...You can correct the problem by unsetting the modules, by adding the following -lines to your ``~/.bashrc file``: - -.. code-block:: console - - unset module - unset scl - Use the Nix Package manager with Xonsh ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To users of the `Nix Package Manager <https://www.nixos.org/>`_ these few lines might be life-savers: @@ -60,6 +34,32 @@ Just run the last three lines, do not put them in your `xonshrc`! +Possible conflicts with Bash +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Depending on how your installation of Bash is configured, Xonsh may have trouble +loading certain shell modules. If you see errors similar to this +when launching Xonsh: + +.. code-block:: console + + bash: module: line 1: syntax error: unexpected end of file + bash: error importing function definition for 'BASH_FUNC_module' + bash: scl: line 1: syntax error: unexpected end of file + bash: error importing function definition for 'BASH_FUNC_scl' + bash: module: line 1: syntax error: unexpected end of file + bash: error importing function definition for 'BASH_FUNC_module' + bash: scl: line 1: syntax error: unexpected end of file + bash: error importing function definition for 'BASH_FUNC_scl' + +...You can correct the problem by unsetting the modules, by adding the following +lines to your ``~/.bashrc file``: + +.. code-block:: console + + unset module + unset scl + MacOS, OSX ---------- @@ -101,6 +101,9 @@ Tab completion ^^^^^^^^^^^^^^ + +First of all take a look `xontrib-fish-completer <https://github.com/xonsh/xontrib-fish-completer>`_ for a modern approach. + Xonsh has support for using bash completion files on the shell, to use it you need to install the bash-completion package. The regular bash-completion package uses v1 which mostly works, but `occasionally has rough edges <https://github.com/xonsh/xonsh/issues/2111>`_ so we recommend using bash-completion v2. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/docs/tutorial.rst new/xonsh-0.22.1/docs/tutorial.rst --- old/xonsh-0.22.0/docs/tutorial.rst 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/docs/tutorial.rst 2026-01-14 06:06:40.000000000 +0100 @@ -407,10 +407,7 @@ .. code-block:: xonshcon @ echo ${ - . - SyntaxError: <xonsh-code>:1:5: ('code: {',) - echo ${ - ^ + SyntaxError @ echo '${' ${ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/tests/aliases/test_source.py new/xonsh-0.22.1/tests/aliases/test_source.py --- old/xonsh-0.22.0/tests/aliases/test_source.py 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/tests/aliases/test_source.py 2026-01-14 06:06:40.000000000 +0100 @@ -1,12 +1,14 @@ import builtins import os.path +import shlex from contextlib import contextmanager from pathlib import Path from unittest.mock import MagicMock import pytest -from xonsh.aliases import make_default_aliases, source_alias_fn +from xonsh.aliases import make_default_aliases, source_alias_fn, source_foreign_fn +from xonsh.tools import argvquote @pytest.fixture @@ -100,3 +102,39 @@ "dryrun", "interactive", ] + + +def _spy_foreign_shell(monkeypatch): + calls = {} + + def fake_foreign_shell_data(*args, **kwargs): + calls["kwargs"] = kwargs + return {}, {} + + fake_foreign_shell_data.cache_clear = lambda: None + monkeypatch.setattr( + "xonsh.aliases.foreign_shell_data", fake_foreign_shell_data, raising=False + ) + return calls + + +def test_source_foreign_quotes_posix_paths(monkeypatch, xession): + calls = _spy_foreign_shell(monkeypatch) + monkeypatch.setattr(os.path, "isfile", lambda _: True) + target = "/Applications/Visual Studio Code.app/foo.sh" + + source_foreign_fn("bash", [target], sourcer="source") + + expected = f"source {shlex.quote(target)}\n" + assert calls["kwargs"]["prevcmd"] == expected + + +def test_source_foreign_quotes_cmd_paths(monkeypatch, xession): + calls = _spy_foreign_shell(monkeypatch) + monkeypatch.setattr(os.path, "isfile", lambda _: True) + target = r"C:\\Program Files\\foo.bat" + + source_foreign_fn("cmd.exe", [target], sourcer="call") + + expected = f"call {argvquote(target, force=True)}\n" + assert calls["kwargs"]["prevcmd"] == expected diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/xonsh/__init__.py new/xonsh-0.22.1/xonsh/__init__.py --- old/xonsh-0.22.0/xonsh/__init__.py 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/xonsh/__init__.py 2026-01-14 06:06:40.000000000 +0100 @@ -1 +1 @@ -__version__ = "0.22.0" +__version__ = "0.22.1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/xonsh/aliases.py new/xonsh-0.22.1/xonsh/aliases.py --- old/xonsh-0.22.0/xonsh/aliases.py 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/xonsh/aliases.py 2026-01-14 06:06:40.000000000 +0100 @@ -7,6 +7,7 @@ import os import pathlib import re +import shlex import shutil import sys import types @@ -670,7 +671,13 @@ if not sourcer: return (None, "xonsh: error: `sourcer` command is not mentioned.\n", 1) # we have filenames to source - prevcmd = "".join([f"{sourcer} {f}\n" for f in files_or_code]) + shell_name = os.path.basename(shell).lower() + quote = ( + functools.partial(argvquote, force=True) + if shell_name in {"cmd", "cmd.exe"} + else shlex.quote + ) + prevcmd = "".join(f"{sourcer} {quote(f)}\n" for f in files_or_code) files = tuple(files_or_code) elif not prevcmd: prevcmd = " ".join(files_or_code) # code to run, no files @@ -995,22 +1002,30 @@ def showcmd(args, stdin=None): - """usage: showcmd [-h|--help|cmd args] + """usage: showcmd [-e|--expand-alias] [-h|--help] cmd Displays the command and arguments as a list of strings that xonsh would run in subprocess mode. This is useful for determining how xonsh evaluates your commands and arguments prior to running these commands. optional arguments: + -e, --expand-alias expand alias -h, --help show this help message and exit Examples -------- - >>> showcmd echo $USER "can't" hear "the sea" + @ showcmd echo $USER "can't" hear "the sea" ['echo', 'I', "can't", 'hear', 'the sea'] + + @ aliases['ali'] = 'echo 1' + @ showcmd -e ali 2 + ['echo', '1', '2'] + """ if len(args) == 0 or (len(args) == 1 and args[0] in {"-h", "--help"}): print(showcmd.__doc__.rstrip().replace("\n ", "\n")) + elif args[0] in {"-e", "--expand-alias"}: + sys.displayhook(XSH.aliases.eval_alias(args[1:])) else: sys.displayhook(args) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/xonsh/environ.py new/xonsh-0.22.1/xonsh/environ.py --- old/xonsh-0.22.0/xonsh/environ.py 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/xonsh/environ.py 2026-01-14 06:06:40.000000000 +0100 @@ -1736,6 +1736,11 @@ sync="AUTO_SUGGEST", ) + XONSH_PROMPT_NEXT_CMD = Var.with_default( + "", + "The text of the next command that will be inserted in the next prompt.", + ) + AUTO_SUGGEST_IN_COMPLETIONS = Var.with_default( False, "Places the auto-suggest result as the first option in the completions. " diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/xonsh/shell.py new/xonsh-0.22.1/xonsh/shell.py --- old/xonsh-0.22.0/xonsh/shell.py 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/xonsh/shell.py 2026-01-14 06:06:40.000000000 +0100 @@ -54,6 +54,16 @@ * ``rtn``: The result of the command executed (``0`` for success) * ``out``: If xonsh stores command output, this is the output * ``ts``: Timestamps, in the order of ``[starting, ending]`` + +Example: + +.. code-block:: python + + @events.on_postcommand + def _prompt_err_command_again(cmd, rtn, out, ts): + '''If the result of executing the command is not zero, repeat the command on the next command prompt.''' + if rtn != 0: + $XONSH_PROMPT_NEXT_CMD = cmd.rstrip() """, ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/xonsh/shells/ptk_shell/__init__.py new/xonsh-0.22.1/xonsh/shells/ptk_shell/__init__.py --- old/xonsh-0.22.0/xonsh/shells/ptk_shell/__init__.py 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/xonsh/shells/ptk_shell/__init__.py 2026-01-14 06:06:40.000000000 +0100 @@ -292,6 +292,7 @@ """ events.on_pre_prompt_format.fire() env = XSH.env + next_command = env.get("XONSH_PROMPT_NEXT_CMD", "") mouse_support = env.get("MOUSE_SUPPORT") auto_suggest = auto_suggest if env.get("XONSH_PROMPT_AUTO_SUGGEST") else None refresh_interval = env.get("PROMPT_REFRESH_INTERVAL") @@ -345,6 +346,7 @@ menu_rows += 1 prompt_args = { + "default": next_command, "mouse_support": mouse_support, "auto_suggest": auto_suggest, "message": get_prompt_tokens, @@ -363,6 +365,7 @@ "refresh_interval": refresh_interval, "complete_in_thread": complete_in_thread, } + env["XONSH_PROMPT_NEXT_CMD"] = "" if env["ENABLE_ASYNC_PROMPT"]: # once the prompt is done, update it in background as each future is completed prompt_args["pre_run"] = self.prompt_formatter.start_update diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/xonsh/xoreutils/xcontext.py new/xonsh-0.22.1/xonsh/xoreutils/xcontext.py --- old/xonsh-0.22.0/xonsh/xoreutils/xcontext.py 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/xonsh/xoreutils/xcontext.py 2026-01-14 06:06:40.000000000 +0100 @@ -6,6 +6,7 @@ from xonsh.built_ins import XSH from xonsh.cli_utils import ArgParserAlias +from xonsh.platform import IN_APPIMAGE def _get_version(binary): @@ -29,7 +30,8 @@ """Report information about the current xonsh environment.""" stdout = _stdout or sys.stdout print("[Current xonsh session]", file=stdout) - xpy = sys.executable + appimage_python = XSH.env.get("_") if IN_APPIMAGE else None + xpy = appimage_python if appimage_python else sys.executable xpy_ver = _get_version(xpy) print(f"xpython: {xpy} # {xpy_ver}", file=stdout) xpip = XSH.aliases.get("xpip") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xonsh-0.22.0/xonsh/xoreutils/yes.py new/xonsh-0.22.1/xonsh/xoreutils/yes.py --- old/xonsh-0.22.0/xonsh/xoreutils/yes.py 2025-12-19 07:32:17.000000000 +0100 +++ new/xonsh-0.22.1/xonsh/xoreutils/yes.py 2026-01-14 06:06:40.000000000 +0100 @@ -9,10 +9,11 @@ to_print = ["y"] if len(args) == 0 else [str(i) for i in args] - while True: - print(*to_print, file=stdout) - - return 0 + try: + while True: + print(*to_print, file=stdout) + except KeyboardInterrupt: + return 130 YES_HELP = """Usage: yes [STRING]...
