mirror of
https://github.com/xonsh/xonsh.git
synced 2025-03-04 00:14:41 +01:00
Pre commit ci (#4863)
This commit is contained in:
parent
8b9a7e2782
commit
cbf23e60fb
30 changed files with 186 additions and 232 deletions
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
|
@ -3,4 +3,4 @@ contact_links:
|
||||||
- name: GitHub Community Support
|
- name: GitHub Community Support
|
||||||
url: https://github.com/xonsh/xonsh/discussions/categories/q-a
|
url: https://github.com/xonsh/xonsh/discussions/categories/q-a
|
||||||
about: Please ask and answer questions here.
|
about: Please ask and answer questions here.
|
||||||
|
|
||||||
|
|
4
.github/workflows/test.yml
vendored
4
.github/workflows/test.yml
vendored
|
@ -54,9 +54,7 @@ jobs:
|
||||||
timeout-minutes: 15
|
timeout-minutes: 15
|
||||||
- name: Run QA Checks
|
- name: Run QA Checks
|
||||||
if: ${{ startsWith(matrix.os, 'ubuntu') && startsWith(matrix.python-version, '3.10') }}
|
if: ${{ startsWith(matrix.os, 'ubuntu') && startsWith(matrix.python-version, '3.10') }}
|
||||||
run: |
|
run: python -m xonsh run-tests.xsh validate-news-items
|
||||||
python -m pip install -e ".[lint]"
|
|
||||||
python -m xonsh run-tests.xsh qa
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
if: ${{ !startsWith(matrix.python-version, '3.10') }}
|
if: ${{ !startsWith(matrix.python-version, '3.10') }}
|
||||||
run: |
|
run: |
|
||||||
|
|
|
@ -1,49 +1,80 @@
|
||||||
repos:
|
default_language_version:
|
||||||
- repo: local
|
# force all unspecified python hooks to run python3
|
||||||
hooks:
|
python: python3.10
|
||||||
- id: black
|
|
||||||
name: black
|
|
||||||
# this gets run within development environment.
|
|
||||||
# Otherwise will raise command not found or use system level binary
|
|
||||||
entry: black xonsh/ xontrib/ tests/
|
|
||||||
language: system
|
|
||||||
stages: [ commit ]
|
|
||||||
types:
|
|
||||||
- python
|
|
||||||
- id: isort
|
|
||||||
name: isort
|
|
||||||
# this gets run within development environment.
|
|
||||||
# Otherwise will raise command not found or use system level binary
|
|
||||||
entry: isort xonsh/ xontrib/ tests/
|
|
||||||
language: system
|
|
||||||
stages: [ commit ]
|
|
||||||
types:
|
|
||||||
- python
|
|
||||||
- id: qa
|
|
||||||
name: qa
|
|
||||||
entry: xonsh run-tests.xsh qa
|
|
||||||
language: system
|
|
||||||
stages: [ push ]
|
|
||||||
pass_filenames: false
|
|
||||||
types:
|
|
||||||
- python
|
|
||||||
|
|
||||||
|
ci:
|
||||||
|
autofix_prs: false
|
||||||
|
|
||||||
|
repos:
|
||||||
|
- repo: https://github.com/psf/black
|
||||||
|
rev: 22.6.0
|
||||||
|
hooks:
|
||||||
|
- id: black
|
||||||
|
entry: black xonsh xontrib tests xompletions
|
||||||
|
pass_filenames: false
|
||||||
|
- repo: https://github.com/pycqa/isort
|
||||||
|
rev: 5.10.1
|
||||||
|
hooks:
|
||||||
|
- id: isort
|
||||||
|
entry: isort xonsh xontrib tests xompletions
|
||||||
|
pass_filenames: false
|
||||||
|
name: isort (python)
|
||||||
|
- repo: https://github.com/pycqa/flake8
|
||||||
|
rev: '4.0.1' # pick a git hash / tag to point to
|
||||||
|
hooks:
|
||||||
|
- id: flake8
|
||||||
|
additional_dependencies:
|
||||||
|
- flake8-docstrings
|
||||||
|
- flake8-bugbear
|
||||||
|
# Check for debugger imports and py37+ breakpoint() calls in python source.
|
||||||
|
- flake8-debugger
|
||||||
|
exclude: |
|
||||||
|
(?x)^(
|
||||||
|
xonsh/ply/.+|
|
||||||
|
docs/.+
|
||||||
|
)$
|
||||||
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
||||||
|
rev: 'v0.961' # Use the sha / tag you want to point at
|
||||||
|
hooks:
|
||||||
|
- id: mypy
|
||||||
|
name: mypy xonsh
|
||||||
|
pass_filenames: false
|
||||||
|
entry: mypy xonsh
|
||||||
|
additional_dependencies:
|
||||||
|
- types-ujson
|
||||||
|
- id: mypy
|
||||||
|
name: mypy xontrib
|
||||||
|
pass_filenames: false
|
||||||
|
entry: mypy xontrib --namespace-packages --explicit-package-bases
|
||||||
|
additional_dependencies:
|
||||||
|
- types-ujson
|
||||||
|
- id: mypy
|
||||||
|
name: mypy xompletions
|
||||||
|
pass_filenames: false
|
||||||
|
entry: mypy xompletions --namespace-packages --explicit-package-bases
|
||||||
|
additional_dependencies:
|
||||||
|
- types-ujson
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v4.2.0
|
rev: v4.3.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
|
exclude: |
|
||||||
|
(?x)^(
|
||||||
|
docs/_static/.+
|
||||||
|
)$
|
||||||
- id: check-case-conflict
|
- id: check-case-conflict
|
||||||
- id: check-merge-conflict
|
- id: check-merge-conflict
|
||||||
- id: check-yaml
|
- id: check-yaml
|
||||||
- id: check-toml
|
- id: check-toml
|
||||||
|
|
||||||
# Check for debugger imports and py37+ breakpoint() calls in python source.
|
|
||||||
- id: debug-statements
|
|
||||||
|
|
||||||
- id: check-added-large-files
|
- id: check-added-large-files
|
||||||
|
|
||||||
- repo: https://github.com/asottile/pyupgrade
|
- repo: https://github.com/asottile/pyupgrade
|
||||||
rev: v2.32.1
|
rev: v2.34.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: pyupgrade
|
- id: pyupgrade
|
||||||
args: [--py37-plus]
|
args: [--py38-plus]
|
||||||
|
exclude: |
|
||||||
|
(?x)^(
|
||||||
|
xonsh/ply/.+|
|
||||||
|
tests/bin/.+
|
||||||
|
)$
|
||||||
|
|
|
@ -336,7 +336,7 @@ by executing the command::
|
||||||
|
|
||||||
This will generate html files for the website in the ``_build/html/`` folder.
|
This will generate html files for the website in the ``_build/html/`` folder.
|
||||||
|
|
||||||
There is also a helper utility in the ``docs/`` folder that will watch for changes and automatically rebuild the documentation. You can use this instead of running ``make html`` manually::
|
There is also a helper utility in the ``docs/`` folder that will watch for changes and automatically rebuild the documentation. You can use this instead of running ``make html`` manually::
|
||||||
|
|
||||||
$ python docs/serve_docs.py
|
$ python docs/serve_docs.py
|
||||||
|
|
||||||
|
@ -347,7 +347,7 @@ favorite browser, e.g.::
|
||||||
|
|
||||||
Once the developer is satisfied with the changes, the changes should be
|
Once the developer is satisfied with the changes, the changes should be
|
||||||
committed and pull-requested per usual. The docs are built and deployed using
|
committed and pull-requested per usual. The docs are built and deployed using
|
||||||
GitHub Actions.
|
GitHub Actions.
|
||||||
|
|
||||||
Docs associated with the latest release are hosted at
|
Docs associated with the latest release are hosted at
|
||||||
https://xon.sh while docs for the current ``main`` branch are available at
|
https://xon.sh while docs for the current ``main`` branch are available at
|
||||||
|
|
|
@ -23,7 +23,7 @@ semantics are not encouraged by the built-in methods.
|
||||||
|
|
||||||
So how do I handle results?
|
So how do I handle results?
|
||||||
===========================
|
===========================
|
||||||
``Event.fire()`` returns a list of the returns from the handlers. You should merge this list in an
|
``Event.fire()`` returns a list of the returns from the handlers. You should merge this list in an
|
||||||
appropriate way.
|
appropriate way.
|
||||||
|
|
||||||
What are Species?
|
What are Species?
|
||||||
|
@ -34,7 +34,7 @@ behave differently.
|
||||||
This was done because load hooks look like events and quack like events, but they have different
|
This was done because load hooks look like events and quack like events, but they have different
|
||||||
semantics. See `LoadEvents <api/events.html#xonsh.events.LoadEvent>`_ for details.
|
semantics. See `LoadEvents <api/events.html#xonsh.events.LoadEvent>`_ for details.
|
||||||
|
|
||||||
In order to turn an event from the default ``Event``, you must transmogrify it, using
|
In order to turn an event from the default ``Event``, you must transmogrify it, using
|
||||||
``events.transmogrify()``. The class the event is turned in to must be a subclass of ``AbstractEvent``.
|
``events.transmogrify()``. The class the event is turned in to must be a subclass of ``AbstractEvent``.
|
||||||
|
|
||||||
(Under the hood, transmogrify creates a new instance and copies the handlers and docstring from the
|
(Under the hood, transmogrify creates a new instance and copies the handlers and docstring from the
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
AppImage
|
AppImage
|
||||||
========
|
========
|
||||||
|
|
||||||
`AppImage <https://appimage.org/>`_ is a format for distributing portable software on Linux without needing superuser permissions to install the application. It tries also to allow Linux distribution-agnostic binary software deployment for application developers, also called Upstream packaging.
|
`AppImage <https://appimage.org/>`_ is a format for distributing portable software on Linux without needing superuser permissions to install the application. It tries also to allow Linux distribution-agnostic binary software deployment for application developers, also called Upstream packaging.
|
||||||
|
|
||||||
In short the AppImage is one executable file which contains both xonsh and Python. AppImage allows xonsh to be run on any AppImage supported Linux distribution without installation or root access.
|
In short the AppImage is one executable file which contains both xonsh and Python. AppImage allows xonsh to be run on any AppImage supported Linux distribution without installation or root access.
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ The best way to build xonsh AppImage in 5 minutes is to using `python-appimage <
|
||||||
cd xonsh/appimage
|
cd xonsh/appimage
|
||||||
echo 'xonsh' > requirements.txt
|
echo 'xonsh' > requirements.txt
|
||||||
cat pre-requirements.txt >> requirements.txt # here you can add your additional PyPi packages to pack them into AppImage
|
cat pre-requirements.txt >> requirements.txt # here you can add your additional PyPi packages to pack them into AppImage
|
||||||
cd ..
|
cd ..
|
||||||
pip install git+https://github.com/niess/python-appimage
|
pip install git+https://github.com/niess/python-appimage
|
||||||
python -m python_appimage build app ./appimage
|
python -m python_appimage build app ./appimage
|
||||||
./xonsh-x86_64.AppImage
|
./xonsh-x86_64.AppImage
|
||||||
|
|
|
@ -14,22 +14,22 @@ line is ``#!/usr/bin/env xonsh``.
|
||||||
* - Bash
|
* - Bash
|
||||||
- Xonsh
|
- Xonsh
|
||||||
- Notes
|
- Notes
|
||||||
* - ``echo --arg="val"``
|
* - ``echo --arg="val"``
|
||||||
|
|
||||||
``echo {}``
|
``echo {}``
|
||||||
|
|
||||||
``echo \;``
|
``echo \;``
|
||||||
|
|
||||||
- ``echo --arg "val"``
|
- ``echo --arg "val"``
|
||||||
|
|
||||||
``echo "{}"``
|
``echo "{}"``
|
||||||
|
|
||||||
``echo ";"``
|
``echo ";"``
|
||||||
|
|
||||||
- Read `Subprocess Strings <https://xon.sh/tutorial_subproc_strings.html>`_ tutorial
|
- Read `Subprocess Strings <https://xon.sh/tutorial_subproc_strings.html>`_ tutorial
|
||||||
to understand how strings become arguments in xonsh.
|
to understand how strings become arguments in xonsh.
|
||||||
There is no notion of an escaping character in xonsh like the backslash (``\``) in bash.
|
There is no notion of an escaping character in xonsh like the backslash (``\``) in bash.
|
||||||
Single or double quotes can be used to remove the special meaning of certain
|
Single or double quotes can be used to remove the special meaning of certain
|
||||||
characters, words or brackets.
|
characters, words or brackets.
|
||||||
* - ``$NAME`` or ``${NAME}``
|
* - ``$NAME`` or ``${NAME}``
|
||||||
- ``$NAME``
|
- ``$NAME``
|
||||||
|
@ -39,7 +39,7 @@ line is ``#!/usr/bin/env xonsh``.
|
||||||
- Setting an environment variable. See also :ref:`$UPDATE_OS_ENVIRON <update_os_environ>`.
|
- Setting an environment variable. See also :ref:`$UPDATE_OS_ENVIRON <update_os_environ>`.
|
||||||
* - ``unset NAME``
|
* - ``unset NAME``
|
||||||
- ``del $NAME``
|
- ``del $NAME``
|
||||||
- Unsetting/deleting an environment variable.
|
- Unsetting/deleting an environment variable.
|
||||||
* - ``echo "$HOME/hello"``
|
* - ``echo "$HOME/hello"``
|
||||||
- ``echo "$HOME/hello"``
|
- ``echo "$HOME/hello"``
|
||||||
- Construct an argument using an environment variable.
|
- Construct an argument using an environment variable.
|
||||||
|
@ -55,7 +55,7 @@ line is ``#!/usr/bin/env xonsh``.
|
||||||
this may be any valid expression.
|
this may be any valid expression.
|
||||||
* - ``ENV1=VAL1 command``
|
* - ``ENV1=VAL1 command``
|
||||||
- ``$ENV1=VAL1 command``
|
- ``$ENV1=VAL1 command``
|
||||||
|
|
||||||
or ``with ${...}.swap(ENV1=VAL1): command``
|
or ``with ${...}.swap(ENV1=VAL1): command``
|
||||||
- Set temporary environment variable(s) and execute the command.
|
- Set temporary environment variable(s) and execute the command.
|
||||||
Use the second notation with an indented block to execute many commands in the same context.
|
Use the second notation with an indented block to execute many commands in the same context.
|
||||||
|
@ -76,11 +76,11 @@ line is ``#!/usr/bin/env xonsh``.
|
||||||
- Print colored text as easy as possible.
|
- Print colored text as easy as possible.
|
||||||
* - ``shopt -s dotglob``
|
* - ``shopt -s dotglob``
|
||||||
- ``$DOTGLOB = True``
|
- ``$DOTGLOB = True``
|
||||||
- Globbing files with ``*`` or ``**`` will also match dotfiles, or those ‘hidden’ files whose names
|
- Globbing files with ``*`` or ``**`` will also match dotfiles, or those ‘hidden’ files whose names
|
||||||
begin with a literal `.`. Such files are filtered out by default like in bash.
|
begin with a literal `.`. Such files are filtered out by default like in bash.
|
||||||
* - ``if [ -f "$FILE" ];``
|
* - ``if [ -f "$FILE" ];``
|
||||||
- ``p'/path/to/file'.exists()`` or ``pf'{file}'.exists()``
|
- ``p'/path/to/file'.exists()`` or ``pf'{file}'.exists()``
|
||||||
- Path objects can be instantiated and checked directly using p-string syntax.
|
- Path objects can be instantiated and checked directly using p-string syntax.
|
||||||
* - ``set -e``
|
* - ``set -e``
|
||||||
- ``$RAISE_SUBPROC_ERROR = True``
|
- ``$RAISE_SUBPROC_ERROR = True``
|
||||||
- Cause a failure after a non-zero return code. Xonsh will raise a
|
- Cause a failure after a non-zero return code. Xonsh will raise a
|
||||||
|
@ -99,39 +99,39 @@ line is ``#!/usr/bin/env xonsh``.
|
||||||
- Get PID of the current shell.
|
- Get PID of the current shell.
|
||||||
* - ``$?``
|
* - ``$?``
|
||||||
- ``_.rtn``
|
- ``_.rtn``
|
||||||
- Returns the exit code, or status, of the previous command. The underscore ``_`` is working
|
- Returns the exit code, or status, of the previous command. The underscore ``_`` is working
|
||||||
in the prompt mode. To get the exit code of the command in xonsh script
|
in the prompt mode. To get the exit code of the command in xonsh script
|
||||||
use captured subprocess ``!().rtn``.
|
use captured subprocess ``!().rtn``.
|
||||||
* - ``!$``
|
* - ``!$``
|
||||||
- ``__xonsh__.history[-1, -1]``
|
- ``__xonsh__.history[-1, -1]``
|
||||||
- Get the last argument of the last command
|
- Get the last argument of the last command
|
||||||
* - ``$<n>``
|
* - ``$<n>``
|
||||||
- ``$ARG<n>``
|
- ``$ARG<n>``
|
||||||
- Command line argument at index ``n``,
|
- Command line argument at index ``n``,
|
||||||
so ``$ARG1`` is the equivalent of ``$1``.
|
so ``$ARG1`` is the equivalent of ``$1``.
|
||||||
* - ``$@``
|
* - ``$@``
|
||||||
- ``$ARGS``
|
- ``$ARGS``
|
||||||
- List of all command line argument and parameter strings.
|
- List of all command line argument and parameter strings.
|
||||||
* - ``while getopts``
|
* - ``while getopts``
|
||||||
- ``import argparse``
|
- ``import argparse``
|
||||||
- Start from `argparse <https://docs.python.org/3/library/argparse.html>`_ library to describe
|
- Start from `argparse <https://docs.python.org/3/library/argparse.html>`_ library to describe
|
||||||
the command line arguments in your script. Next try
|
the command line arguments in your script. Next try
|
||||||
`xontrib-argcomplete <https://github.com/anki-code/xontrib-argcomplete>`_ to activate
|
`xontrib-argcomplete <https://github.com/anki-code/xontrib-argcomplete>`_ to activate
|
||||||
tab completion for your script.
|
tab completion for your script.
|
||||||
* - ``complete``
|
* - ``complete``
|
||||||
- ``completer list``
|
- ``completer list``
|
||||||
- As with many other shells, xonsh ships with the ability to complete partially-specified arguments
|
- As with many other shells, xonsh ships with the ability to complete partially-specified arguments
|
||||||
upon hitting the “tab” key.
|
upon hitting the “tab” key.
|
||||||
* - OhMyBash or BashIt
|
* - OhMyBash or BashIt
|
||||||
- `Xontribs <https://xon.sh/xontribs.html>`_
|
- `Xontribs <https://xon.sh/xontribs.html>`_
|
||||||
- Xontributions, or ``xontribs``, are a set of tools and conventions for extending the functionality
|
- Xontributions, or ``xontribs``, are a set of tools and conventions for extending the functionality
|
||||||
of xonsh beyond what is provided by default.
|
of xonsh beyond what is provided by default.
|
||||||
* - Display completions as list
|
* - Display completions as list
|
||||||
- ``$COMPLETIONS_DISPLAY = 'readline'``
|
- ``$COMPLETIONS_DISPLAY = 'readline'``
|
||||||
- Display completions will emulate the behavior of readline.
|
- Display completions will emulate the behavior of readline.
|
||||||
* - ``docker run -it bash``
|
* - ``docker run -it bash``
|
||||||
- ``docker run -it xonsh/xonsh:slim``
|
- ``docker run -it xonsh/xonsh:slim``
|
||||||
- Xonsh publishes a handful of containers, primarily targeting CI and automation use cases.
|
- 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>`_.
|
All of them are published on `Docker Hub <https://hub.docker.com/u/xonsh>`_.
|
||||||
* - ``exit 1``
|
* - ``exit 1``
|
||||||
- ``exit(1)``
|
- ``exit(1)``
|
||||||
|
@ -147,6 +147,6 @@ to set :ref:`$XONSH_TRACE_SUBPROC <xonsh_trace_subproc>` to ``True``:
|
||||||
TRACE SUBPROC: (['echo', 'hello'],)
|
TRACE SUBPROC: (['echo', 'hello'],)
|
||||||
TRACE SUBPROC: (['echo', 'hello\n', 'world'], '|', ['grep', 'hello'])
|
TRACE SUBPROC: (['echo', 'hello\n', 'world'], '|', ['grep', 'hello'])
|
||||||
|
|
||||||
If after time you still try to type ``export``, ``unset`` or ``!!`` commands
|
If after time you still try to type ``export``, ``unset`` or ``!!`` commands
|
||||||
there are the `bashisms <https://xon.sh/xontribs.html#bashisms>`_
|
there are the `bashisms <https://xon.sh/xontribs.html#bashisms>`_
|
||||||
and `sh <https://xon.sh/xontribs.html#sh>`_ xontribs.
|
and `sh <https://xon.sh/xontribs.html#sh>`_ xontribs.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
Package Manager
|
Package Manager
|
||||||
===============
|
===============
|
||||||
|
|
||||||
You can install xonsh using ``conda``, ``pip`` or the package manager for
|
You can install xonsh using ``conda``, ``pip`` or the package manager for
|
||||||
your operating system distribution.
|
your operating system distribution.
|
||||||
|
|
||||||
For the fullest interactive user experience, these additional packages should also be installed:
|
For the fullest interactive user experience, these additional packages should also be installed:
|
||||||
|
@ -10,8 +10,8 @@ For the fullest interactive user experience, these additional packages should al
|
||||||
:pygments: for xonsh and Python syntax-specific highlighting
|
:pygments: for xonsh and Python syntax-specific highlighting
|
||||||
:setproctitle: updates process title (in terminal window and process monitor) to match Xonsh arguments.
|
: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.
|
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
|
If you are operating in a specialized or restricted environment, you can install just the xonsh package, as
|
||||||
described in `fewer prerequisites`_
|
described in `fewer prerequisites`_
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,8 +23,8 @@ described in `fewer prerequisites`_
|
||||||
$ conda install xonsh
|
$ conda install xonsh
|
||||||
|
|
||||||
|
|
||||||
**pip:** Typically you will activate a virtual environment and install xonsh there. This will ensure that you invoke the
|
**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.
|
correct Python interpreter and ``pip`` module.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ This uses the pip 'extras' syntax, and is equivalent to:
|
||||||
|
|
||||||
The above ``pip`` commands may have to be spelled ``pip3`` or ``sudo pip3`` if you are not installing in a virtual environment.
|
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
|
**source:** Pip can also install the most recent xonsh source code from the
|
||||||
`xonsh project repository <https://github.com/xonsh/xonsh>`_.
|
`xonsh project repository <https://github.com/xonsh/xonsh>`_.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
@ -48,7 +48,7 @@ The above ``pip`` commands may have to be spelled ``pip3`` or ``sudo pip3`` if y
|
||||||
Spelling of ``pip`` command may likewise have to be amended as noted above.
|
Spelling of ``pip`` command may likewise have to be amended as noted above.
|
||||||
|
|
||||||
**platform package managers**
|
**platform package managers**
|
||||||
Various operating system distributions have platform-specific package managers which may offer a xonsh package.
|
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
|
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.
|
by the distribution managers.
|
||||||
|
|
||||||
|
@ -71,18 +71,18 @@ If you run into any problems, please let us know!
|
||||||
Fewer Prerequisites
|
Fewer Prerequisites
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
A design goal of Xonsh is to run in any environment that supports a (supported) Python interpreter, you
|
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).
|
can install just the ``xonsh`` package (using any package manager).
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
pip install xonsh
|
pip install xonsh
|
||||||
|
|
||||||
When it starts up, if xonsh does not find ``pygments`` or ``setproctitle`` packages, it simply does not colorize
|
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.
|
or highlight syntax or set process title, respectively.
|
||||||
|
|
||||||
If it does not find ``prompt-toolkit`` package, it will
|
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``).
|
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
|
To ensure xonsh uses ``readline`` even if ``prompt-toolkit`` is installed, configure this in your
|
||||||
``.xonshrc`` file:
|
``.xonshrc`` file:
|
||||||
|
|
||||||
|
|
|
@ -37,8 +37,8 @@ MacOS, OSX
|
||||||
readline
|
readline
|
||||||
^^^^^^^^
|
^^^^^^^^
|
||||||
|
|
||||||
[ed note: This recommendation seems to be `out of date <https://pypi.org/project/gnureadline/>`_.
|
[ed note: This recommendation seems to be `out of date <https://pypi.org/project/gnureadline/>`_.
|
||||||
It's retained in the current docs in case you have an older version of Python or macOS. But if
|
It's retained in the current docs in case you have an older version of Python or macOS. But if
|
||||||
you have Mac platform experience and can clarify, please open an issue or even a PR to correct the documentation.]
|
you have Mac platform experience and can clarify, please open an issue or even a PR to correct the documentation.]
|
||||||
|
|
||||||
On macOS, it is *strongly* recommended to install the ``gnureadline`` library if using the readline shell. ``gnureadline`` can be installed via pip:
|
On macOS, it is *strongly* recommended to install the ``gnureadline`` library if using the readline shell. ``gnureadline`` can be installed via pip:
|
||||||
|
@ -72,8 +72,8 @@ To incorporate the whole functionality of ``/etc/profile``:
|
||||||
|
|
||||||
Tab completion
|
Tab completion
|
||||||
^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^
|
||||||
Xonsh has support for using bash completion files on the shell, to use it you need to install
|
Xonsh has support for using bash completion files on the shell, to use it you need to install
|
||||||
the bash-completion package.
|
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.
|
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.
|
||||||
|
|
||||||
Bash completion comes from <https://github.com/scop/bash-completion> which suggests you use a package manager to install it, this manager will also install a new version of bash without affecting /bin/bash. Xonsh also needs to be told where the bash shell file that builds the completions is, this has to be added to $BASH_COMPLETIONS. The package includes completions for many Unix commands.
|
Bash completion comes from <https://github.com/scop/bash-completion> which suggests you use a package manager to install it, this manager will also install a new version of bash without affecting /bin/bash. Xonsh also needs to be told where the bash shell file that builds the completions is, this has to be added to $BASH_COMPLETIONS. The package includes completions for many Unix commands.
|
||||||
|
@ -85,7 +85,7 @@ Common packaging systems for macOS include
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ brew install bash-completion2
|
$ brew install bash-completion2
|
||||||
|
|
||||||
This will install the bash_completion file in `/usr/local/share/bash-completion/bash_completion` which is in the current xonsh code and so should just work.
|
This will install the bash_completion file in `/usr/local/share/bash-completion/bash_completion` which is in the current xonsh code and so should just work.
|
||||||
|
|
||||||
- `MacPorts <https://trac.macports.org/wiki/howto/bash-completion>`_ where the bash-completion port needs to be installed.
|
- `MacPorts <https://trac.macports.org/wiki/howto/bash-completion>`_ where the bash-completion port needs to be installed.
|
||||||
|
@ -93,7 +93,7 @@ Common packaging systems for macOS include
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ sudo port install bash-completion
|
$ sudo port install bash-completion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
This includes a bash_completion file that needs to be added to the environment.
|
This includes a bash_completion file that needs to be added to the environment.
|
||||||
|
@ -111,12 +111,12 @@ Windows
|
||||||
Windows Terminal
|
Windows Terminal
|
||||||
^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
If you are running a supported version of Windows (which is now Windows 10, version 2004 or later),
|
If you are running a supported version of Windows (which is now Windows 10, version 2004 or later),
|
||||||
we recommend the Windows Terminal (``wt.exe``) rather than the time-honored ``cmd.exe``. This provides
|
we recommend the Windows Terminal (``wt.exe``) rather than the time-honored ``cmd.exe``. This provides
|
||||||
unicode rendering, better ansi terminal compatibility and all the conveniences you expect
|
unicode rendering, better ansi terminal compatibility and all the conveniences you expect
|
||||||
from the terminal application in other platforms.
|
from the terminal application in other platforms.
|
||||||
|
|
||||||
You can install it from the `Microsoft Store <https://www.microsoft.com/en-us/p/windows-terminal/9n0dx20hk701>`_
|
You can install it from the `Microsoft Store <https://www.microsoft.com/en-us/p/windows-terminal/9n0dx20hk701>`_
|
||||||
or from `Github <https://github.com/microsoft/terminal>`_.
|
or from `Github <https://github.com/microsoft/terminal>`_.
|
||||||
|
|
||||||
By default Windows Terminal runs Powershell, but you can add a profile tab to run Xonsh and even configure it
|
By default Windows Terminal runs Powershell, but you can add a profile tab to run Xonsh and even configure it
|
||||||
|
@ -128,7 +128,7 @@ to open automatically in xonsh. Here is a sample settings.json:
|
||||||
"$schema": "https://aka.ms/terminal-profiles-schema",
|
"$schema": "https://aka.ms/terminal-profiles-schema",
|
||||||
|
|
||||||
"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
|
"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
|
||||||
|
|
||||||
// To learn more about global settings, visit https://aka.ms/terminal-global-settings
|
// To learn more about global settings, visit https://aka.ms/terminal-global-settings
|
||||||
// To learn more about profiles, visit https://aka.ms/terminal-profile-settings
|
// To learn more about profiles, visit https://aka.ms/terminal-profile-settings
|
||||||
"profiles":
|
"profiles":
|
||||||
|
@ -171,10 +171,10 @@ The dark red and blue colors are completely unreadable in `cmd.exe`.
|
||||||
|
|
||||||
Xonsh has some tricks to fix colors. This is controlled by the
|
Xonsh has some tricks to fix colors. This is controlled by the
|
||||||
:ref:`$INTENSIFY_COLORS_ON_WIN <intensify_colors_on_win>`
|
:ref:`$INTENSIFY_COLORS_ON_WIN <intensify_colors_on_win>`
|
||||||
environment variable which is ``True`` by default.
|
environment variable which is ``True`` by default.
|
||||||
|
|
||||||
|
|
||||||
:ref:`$INTENSIFY_COLORS_ON_WIN <intensify_colors_on_win>` has the following effect:b
|
:ref:`$INTENSIFY_COLORS_ON_WIN <intensify_colors_on_win>` has the following effect:b
|
||||||
|
|
||||||
On Windows 10:
|
On Windows 10:
|
||||||
Windows 10 supports true color in the terminal, so on Windows 10 Xonsh will use
|
Windows 10 supports true color in the terminal, so on Windows 10 Xonsh will use
|
||||||
|
@ -190,14 +190,14 @@ Avoid locking the working directory
|
||||||
|
|
||||||
Python (like other processes on Windows) locks the current working directory so
|
Python (like other processes on Windows) locks the current working directory so
|
||||||
it can't be deleted or renamed. ``cmd.exe`` has this behaviour as well, but it
|
it can't be deleted or renamed. ``cmd.exe`` has this behaviour as well, but it
|
||||||
is quite annoying for a shell.
|
is quite annoying for a shell.
|
||||||
|
|
||||||
The :ref:`free_cwd <free_cwd>` xontrib (add-on) for xonsh solves some of this problem. It
|
The :ref:`free_cwd <free_cwd>` xontrib (add-on) for xonsh solves some of this problem. It
|
||||||
works by hooking the prompt to reset the current working directory to the root
|
works by hooking the prompt to reset the current working directory to the root
|
||||||
drive folder whenever the shell is idle. It only works with the prompt-toolkit
|
drive folder whenever the shell is idle. It only works with the prompt-toolkit
|
||||||
back-end. To enable that behaviour run the following:
|
back-end. To enable that behaviour run the following:
|
||||||
|
|
||||||
Add this line to your ``~/.xonshrc`` file to have it always enabled.
|
Add this line to your ``~/.xonshrc`` file to have it always enabled.
|
||||||
|
|
||||||
.. code-block:: xonshcon
|
.. code-block:: xonshcon
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ You may also set the interpreter used to create the virtual environment by passi
|
||||||
|
|
||||||
Under the hood, vox uses Python 3's ``venv`` module to create Python 3 virtualenvs. [this is the default]
|
Under the hood, vox uses Python 3's ``venv`` module to create Python 3 virtualenvs. [this is the default]
|
||||||
|
|
||||||
If a Python 2 intrepreter is chosen, it will use the Python 2 interpreter's ``virtualenv`` module.
|
If a Python 2 intrepreter is chosen, it will use the Python 2 interpreter's ``virtualenv`` module.
|
||||||
|
|
||||||
By default, environments are stored in ``~/.virtualenvs``, but you can override it by setting the ``$VIRTUALENV_HOME`` environment variable.
|
By default, environments are stored in ``~/.virtualenvs``, but you can override it by setting the ``$VIRTUALENV_HOME`` environment variable.
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ Tab completion from man pages
|
||||||
---------------------------------
|
---------------------------------
|
||||||
One of the more genius ideas I first encountered from ``fish`` is the idea
|
One of the more genius ideas I first encountered from ``fish`` is the idea
|
||||||
that man pages can be used to supply matches to tab-completion. In principle
|
that man pages can be used to supply matches to tab-completion. In principle
|
||||||
this is not that hard. First, we just need to use ``man2html`` and then
|
this is not that hard. First, we just need to use ``man2html`` and then
|
||||||
parse the html.
|
parse the html.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1513,7 +1513,7 @@ detail is available on the `Tab Completion page <tutorial_completers.html>`_.
|
||||||
|
|
||||||
Customizing the Prompt
|
Customizing the Prompt
|
||||||
======================
|
======================
|
||||||
Customizing the prompt by modifying ``$PROMPT``, ``$RIGHT_PROMPT`` or ``$BOTTOM_TOOLBAR``
|
Customizing the prompt by modifying ``$PROMPT``, ``$RIGHT_PROMPT`` or ``$BOTTOM_TOOLBAR``
|
||||||
is probably the most common reason for altering an environment variable.
|
is probably the most common reason for altering an environment variable.
|
||||||
|
|
||||||
.. note:: Note that the ``$PROMPT`` variable will never be inherited from a
|
.. note:: Note that the ``$PROMPT`` variable will never be inherited from a
|
||||||
|
@ -1571,7 +1571,7 @@ By default, the following variables are available for use:
|
||||||
* ``localtime``: The current, local time as given by ``time.localtime()``.
|
* ``localtime``: The current, local time as given by ``time.localtime()``.
|
||||||
This is formatted with the time format string found in ``time_format``.
|
This is formatted with the time format string found in ``time_format``.
|
||||||
* ``time_format``: A time format string, defaulting to ``"%H:%M:%S"``.
|
* ``time_format``: A time format string, defaulting to ``"%H:%M:%S"``.
|
||||||
* ``last_return_code``: The return code of the last issued command.
|
* ``last_return_code``: The return code of the last issued command.
|
||||||
* ``last_return_code_if_nonzero``: The return code of the last issued command if it is non-zero, otherwise ``None``. This is useful for only printing the code in case of errors.
|
* ``last_return_code_if_nonzero``: The return code of the last issued command if it is non-zero, otherwise ``None``. This is useful for only printing the code in case of errors.
|
||||||
|
|
||||||
.. note:: See the section below on ``PROMPT_FIELDS`` for more information on changing.
|
.. note:: See the section below on ``PROMPT_FIELDS`` for more information on changing.
|
||||||
|
@ -1579,7 +1579,7 @@ By default, the following variables are available for use:
|
||||||
xonsh obeys the ``$VIRTUAL_ENV_DISABLE_PROMPT`` environment variable
|
xonsh obeys the ``$VIRTUAL_ENV_DISABLE_PROMPT`` environment variable
|
||||||
`as defined by virtualenv <https://virtualenv.pypa.io/en/latest/reference/
|
`as defined by virtualenv <https://virtualenv.pypa.io/en/latest/reference/
|
||||||
#envvar-VIRTUAL_ENV_DISABLE_PROMPT>`__. If this variable is truthy, xonsh
|
#envvar-VIRTUAL_ENV_DISABLE_PROMPT>`__. If this variable is truthy, xonsh
|
||||||
will *always* substitute an empty string for ``{env_name}``. Note that unlike
|
will *always* substitute an empty string for ``{env_name}``. Note that unlike
|
||||||
other shells, ``$VIRTUAL_ENV_DISABLE_PROMPT`` takes effect *immediately*
|
other shells, ``$VIRTUAL_ENV_DISABLE_PROMPT`` takes effect *immediately*
|
||||||
after being set---it is not necessary to re-activate the environment.
|
after being set---it is not necessary to re-activate the environment.
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ What's the best way to keep informed in xonsh? Subscribe to an event!
|
||||||
|
|
||||||
Overview
|
Overview
|
||||||
========
|
========
|
||||||
Simply, events are a way for various pieces of xonsh to tell each other what's going on. They're
|
Simply, events are a way for various pieces of xonsh to tell each other what's going on. They're
|
||||||
fired when something of note happens, eg the current directory changes or just before a command is
|
fired when something of note happens, eg the current directory changes or just before a command is
|
||||||
executed.
|
executed.
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ or several other commands)::
|
||||||
with open(g`~/.dirhist`[0], 'a') as dh:
|
with open(g`~/.dirhist`[0], 'a') as dh:
|
||||||
print(newdir, file=dh)
|
print(newdir, file=dh)
|
||||||
|
|
||||||
The exact arguments passed and returns expected vary from event to event; see the
|
The exact arguments passed and returns expected vary from event to event; see the
|
||||||
`event list <events.html>`_ for the details.
|
`event list <events.html>`_ for the details.
|
||||||
|
|
||||||
Note that the event system is keyword only. Event handlers must match argument names and must have a
|
Note that the event system is keyword only. Event handlers must match argument names and must have a
|
||||||
|
@ -50,5 +50,5 @@ Further Reading
|
||||||
|
|
||||||
For a complete list of available events, see `the events reference <events.html>`_.
|
For a complete list of available events, see `the events reference <events.html>`_.
|
||||||
|
|
||||||
If you want to know more about the gory details of what makes events tick, see
|
If you want to know more about the gory details of what makes events tick, see
|
||||||
`Advanced Events <advanced_events.html>`_.
|
`Advanced Events <advanced_events.html>`_.
|
||||||
|
|
|
@ -407,7 +407,7 @@ Xonsh has a second built-in history backend powered by sqlite (other than
|
||||||
the JSON version mentioned all above in this tutorial). It shares the same
|
the JSON version mentioned all above in this tutorial). It shares the same
|
||||||
functionality as the JSON version in most ways, except it currently doesn't
|
functionality as the JSON version in most ways, except it currently doesn't
|
||||||
support the ``history diff`` action and does not store the output of commands,
|
support the ``history diff`` action and does not store the output of commands,
|
||||||
as the json-backend does. E.g.
|
as the json-backend does. E.g.
|
||||||
`__xonsh__.history[-1].out` will always be `None`.
|
`__xonsh__.history[-1].out` will always be `None`.
|
||||||
|
|
||||||
The Sqlite history backend can provide a speed advantage in loading history
|
The Sqlite history backend can provide a speed advantage in loading history
|
||||||
|
|
|
@ -48,10 +48,10 @@ functionality (in less you take the time to rebind them elsewhere).
|
||||||
- ``<Tab>``
|
- ``<Tab>``
|
||||||
- Indent, autocomplete
|
- Indent, autocomplete
|
||||||
* - ``Control R``
|
* - ``Control R``
|
||||||
-
|
-
|
||||||
- Backwards history search
|
- Backwards history search
|
||||||
* - ``Control Z``
|
* - ``Control Z``
|
||||||
-
|
-
|
||||||
- SIGSTOP current job
|
- SIGSTOP current job
|
||||||
* - ``Control C``
|
* - ``Control C``
|
||||||
-
|
-
|
||||||
|
@ -72,13 +72,13 @@ Custom keyload function
|
||||||
|
|
||||||
We need our additional keybindings to load after the shell is initialized, so we
|
We need our additional keybindings to load after the shell is initialized, so we
|
||||||
define a function that contains all of the custom keybindings and decorate it
|
define a function that contains all of the custom keybindings and decorate it
|
||||||
with the appropriate event, in this case ``on_ptk_create``.
|
with the appropriate event, in this case ``on_ptk_create``.
|
||||||
|
|
||||||
We'll start with a toy example that just inserts the text "hi" into the current line of the prompt::
|
We'll start with a toy example that just inserts the text "hi" into the current line of the prompt::
|
||||||
|
|
||||||
@events.on_ptk_create
|
@events.on_ptk_create
|
||||||
def custom_keybindings(bindings, **kw):
|
def custom_keybindings(bindings, **kw):
|
||||||
|
|
||||||
@bindings.add(Keys.ControlW)
|
@bindings.add(Keys.ControlW)
|
||||||
def say_hi(event):
|
def say_hi(event):
|
||||||
event.current_buffer.insert_text('hi')
|
event.current_buffer.insert_text('hi')
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Run Control File
|
Run Control File
|
||||||
=========================
|
=========================
|
||||||
Xonsh allows you to customize your shell behavior with run control files, called "xonshrc" files.
|
Xonsh allows you to customize your shell behavior with run control files, called "xonshrc" files.
|
||||||
These files are written either in the Xonsh language (a superset of Python) or in Python and are executed
|
These files are written either in the Xonsh language (a superset of Python) or in Python and are executed
|
||||||
exactly once at startup.
|
exactly once at startup.
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ The control file usually contains:
|
||||||
* Xonsh function definitions
|
* Xonsh function definitions
|
||||||
* `Alias definitions <aliases.html>`_, many of which invoke the above functions with specified arguments.
|
* `Alias definitions <aliases.html>`_, many of which invoke the above functions with specified arguments.
|
||||||
|
|
||||||
The system-wide ``xonshrc`` file controls options that are applied to all users of Xonsh on a given system.
|
The system-wide ``xonshrc`` file controls options that are applied to all users of Xonsh on a given system.
|
||||||
You can create this file in ``/etc/xonshrc`` for Linux and OSX and in ``%ALLUSERSPROFILE%\xonsh\xonshrc`` on Windows.
|
You can create this file in ``/etc/xonshrc`` for Linux and OSX and in ``%ALLUSERSPROFILE%\xonsh\xonshrc`` on Windows.
|
||||||
|
|
||||||
Xonsh also allows a per-user run control file in your home directory, either
|
Xonsh also allows a per-user run control file in your home directory, either
|
||||||
|
@ -29,11 +29,11 @@ steps you through all the available options.
|
||||||
xonfig web
|
xonfig web
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
This helps you choose a color theme, customized prompt and add-in packages ("xontribs"). It
|
This helps you choose a color theme, customized prompt and add-in packages ("xontribs"). It
|
||||||
initializes your personal run control file (usually at ``~/.xonshrc``). To invoke it (from a xonsh prompt):
|
initializes your personal run control file (usually at ``~/.xonshrc``). To invoke it (from a xonsh prompt):
|
||||||
|
|
||||||
.. code-block:: xonshcon
|
.. code-block:: xonshcon
|
||||||
|
|
||||||
>>> xonfig web
|
>>> xonfig web
|
||||||
Web config started at 'http://localhost:8421'. Hit Crtl+C to stop.
|
Web config started at 'http://localhost:8421'. Hit Crtl+C to stop.
|
||||||
127.0.0.1 - - [23/Aug/2020 15:04:39] "GET / HTTP/1.1" 200 -
|
127.0.0.1 - - [23/Aug/2020 15:04:39] "GET / HTTP/1.1" 200 -
|
||||||
|
@ -41,24 +41,24 @@ initializes your personal run control file (usually at ``~/.xonshrc``). To invo
|
||||||
This will open your default browser on a page served from a local server. You can exit the server by typing ``Ctrl+c`` at any time.
|
This will open your default browser on a page served from a local server. You can exit the server by typing ``Ctrl+c`` at any time.
|
||||||
|
|
||||||
The page has:
|
The page has:
|
||||||
|
|
||||||
:Colors: shows the color themes built into Xonsh.
|
:Colors: shows the color themes built into Xonsh.
|
||||||
Simply click on a sample to select it. Although color names are standardized across various terminal applications,
|
Simply click on a sample to select it. Although color names are standardized across various terminal applications,
|
||||||
their actual appearance is not and do vary widely. Seeing is believing!
|
their actual appearance is not and do vary widely. Seeing is believing!
|
||||||
:Prompts: shows various sample prompts. It is recommended to select one but to then edit
|
:Prompts: shows various sample prompts. It is recommended to select one but to then edit
|
||||||
the ``xonshrc`` file to further refine your prompt.
|
the ``xonshrc`` file to further refine your prompt.
|
||||||
:Xontribs: are community-contributed add-ins often used to enhance command completion and line editing,
|
:Xontribs: are community-contributed add-ins often used to enhance command completion and line editing,
|
||||||
but can affect any aspect of Xonsh behavior.
|
but can affect any aspect of Xonsh behavior.
|
||||||
Choose one or more to suit your needs but note that they will require installation of additional
|
Choose one or more to suit your needs but note that they will require installation of additional
|
||||||
packages. You can extend Xonsh by `writing your own xontrib <tutorial_xontrib.html>`_, and are invited/urged to do so!
|
packages. You can extend Xonsh by `writing your own xontrib <tutorial_xontrib.html>`_, and are invited/urged to do so!
|
||||||
:Save: Click to write the configuration choices to your ``~/.xonshrc``. This will add a few tagged lines to your run control file, but will not
|
:Save: Click to write the configuration choices to your ``~/.xonshrc``. This will add a few tagged lines to your run control file, but will not
|
||||||
overwrite it completely, so you can run `xonfig web` at any time.
|
overwrite it completely, so you can run `xonfig web` at any time.
|
||||||
|
|
||||||
xonfig wizard
|
xonfig wizard
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
This imports settings and tools you have defined in your existing (ordinary) shell such as ``bash``.
|
This imports settings and tools you have defined in your existing (ordinary) shell such as ``bash``.
|
||||||
It also walks you through setting all known environment variables and xontribs
|
It also walks you through setting all known environment variables and xontribs
|
||||||
in a question-and-answer format:
|
in a question-and-answer format:
|
||||||
|
|
||||||
.. code-block:: xonshcon
|
.. code-block:: xonshcon
|
||||||
|
@ -214,19 +214,19 @@ The colors of the ``ls`` command may be hard to read in a dark terminal. If so,
|
||||||
.. code-block:: xonshcon
|
.. code-block:: xonshcon
|
||||||
|
|
||||||
>>> $LS_COLORS='rs=0:di=01;36:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:'
|
>>> $LS_COLORS='rs=0:di=01;36:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:'
|
||||||
|
|
||||||
Make JSON data directly pastable
|
Make JSON data directly pastable
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
With the following snippet, xonsh will understand JSON data such as ``{ "name": "Tyler", "active": false, "age": null }``.
|
With the following snippet, xonsh will understand JSON data such as ``{ "name": "Tyler", "active": false, "age": null }``.
|
||||||
Note that, though practical, this is rather hacky and might break other functionality. Use at your own risk.
|
Note that, though practical, this is rather hacky and might break other functionality. Use at your own risk.
|
||||||
|
|
||||||
.. code-block:: xonshcon
|
.. code-block:: xonshcon
|
||||||
|
|
||||||
>>> import builtins
|
>>> import builtins
|
||||||
>>> builtins.true = True
|
>>> builtins.true = True
|
||||||
>>> builtins.false = False
|
>>> builtins.false = False
|
||||||
>>> builtins.null = None
|
>>> builtins.null = None
|
||||||
|
|
||||||
Display different date information every 10th time
|
Display different date information every 10th time
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
For a compact shell prompts, some people prefer a very condensed time format. But when you have a lengthy shell session you might want the date to show up in your logs every now and then...
|
For a compact shell prompts, some people prefer a very condensed time format. But when you have a lengthy shell session you might want the date to show up in your logs every now and then...
|
||||||
|
@ -235,15 +235,15 @@ For a compact shell prompts, some people prefer a very condensed time format. Bu
|
||||||
|
|
||||||
>>> import time
|
>>> import time
|
||||||
>>> def get_shelldate():
|
>>> def get_shelldate():
|
||||||
>>> get_shelldate.fulldate %= 10
|
>>> get_shelldate.fulldate %= 10
|
||||||
>>> get_shelldate.fulldate += 1
|
>>> get_shelldate.fulldate += 1
|
||||||
>>> if get_shelldate.fulldate == 1:
|
>>> if get_shelldate.fulldate == 1:
|
||||||
>>> return time.strftime('%d%m%Y')
|
>>> return time.strftime('%d%m%Y')
|
||||||
>>> return time.strftime('%H:%M')
|
>>> return time.strftime('%H:%M')
|
||||||
>>> get_shelldate.fulldate = 0
|
>>> get_shelldate.fulldate = 0
|
||||||
>>>
|
>>>
|
||||||
>>> $PROMPT_FIELDS['shelldate'] = get_shelldate
|
>>> $PROMPT_FIELDS['shelldate'] = get_shelldate
|
||||||
|
|
||||||
Use the Nix Package manager with Xonsh
|
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:
|
To users of the `Nix Package Manager <https://www.nixos.org/>`_ these few lines might be life-savers:
|
||||||
|
@ -259,16 +259,16 @@ To users of the `Nix Package Manager <https://www.nixos.org/>`_ these few lines
|
||||||
>>> $NIX_PATH="nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixpkgs:/nix/var/nix/profiles/per-user/root/channels"
|
>>> $NIX_PATH="nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixpkgs:/nix/var/nix/profiles/per-user/root/channels"
|
||||||
>>> $PATH += [f"{$HOME}/.nix-profile/bin", "/nix/var/nix/profiles/default/bin"]
|
>>> $PATH += [f"{$HOME}/.nix-profile/bin", "/nix/var/nix/profiles/default/bin"]
|
||||||
|
|
||||||
Btw. a hacky solution to install xontribs that do not yet ship with ``nixpkgs`` is:
|
Btw. a hacky solution to install xontribs that do not yet ship with ``nixpkgs`` is:
|
||||||
|
|
||||||
.. code-block:: xonshcon
|
.. code-block:: xonshcon
|
||||||
|
|
||||||
>>> for p in map(lambda s: str(s.resolve()), p"~/.local/lib/".glob("python*/site-packages")):
|
>>> for p in map(lambda s: str(s.resolve()), p"~/.local/lib/".glob("python*/site-packages")):
|
||||||
>>> if p not in sys.path:
|
>>> if p not in sys.path:
|
||||||
>>> sys.path.append(p)
|
>>> sys.path.append(p)
|
||||||
>>>
|
>>>
|
||||||
>>> $PYTHONPATH = "$USER/.local/lib/python3.7/site-packages"
|
>>> $PYTHONPATH = "$USER/.local/lib/python3.7/site-packages"
|
||||||
>>>
|
>>>
|
||||||
>>> python -m ensurepip --user
|
>>> python -m ensurepip --user
|
||||||
>>> xonsh
|
>>> xonsh
|
||||||
>>> python -m pip install --user -U pip xontrib-z xonsh-direnv
|
>>> python -m pip install --user -U pip xontrib-z xonsh-direnv
|
||||||
|
|
|
@ -95,18 +95,6 @@ full = [
|
||||||
"setproctitle; platform_system=='Windows'",
|
"setproctitle; platform_system=='Windows'",
|
||||||
"gnureadline; platform_system=='Darwin'",
|
"gnureadline; platform_system=='Darwin'",
|
||||||
]
|
]
|
||||||
format = [
|
|
||||||
"black==22.3.0",
|
|
||||||
"isort>=5.10",
|
|
||||||
]
|
|
||||||
lint = [
|
|
||||||
"xonsh[format]",
|
|
||||||
"flake8",
|
|
||||||
"flake8-docstrings",
|
|
||||||
"flake8-bugbear",
|
|
||||||
"mypy==0.941",
|
|
||||||
"types-ujson",
|
|
||||||
]
|
|
||||||
bestshell = [
|
bestshell = [
|
||||||
"prompt_toolkit>=3.0.29",
|
"prompt_toolkit>=3.0.29",
|
||||||
"pygments>=2.2",
|
"pygments>=2.2",
|
||||||
|
@ -128,10 +116,8 @@ test = [
|
||||||
"amalgamate",
|
"amalgamate",
|
||||||
]
|
]
|
||||||
dev = [
|
dev = [
|
||||||
"xonsh[lint,test,doc]",
|
"xonsh[test,doc]",
|
||||||
"pre-commit",
|
"pre-commit",
|
||||||
"sniffer",
|
|
||||||
"pyinotify; sys_platform == \"linux\"",
|
|
||||||
"re-ver",
|
"re-ver",
|
||||||
"tomli",
|
"tomli",
|
||||||
]
|
]
|
||||||
|
|
|
@ -20,7 +20,7 @@ $VERSION_BUMP_PATTERNS = [
|
||||||
$CHANGELOG_FILENAME = 'CHANGELOG.rst'
|
$CHANGELOG_FILENAME = 'CHANGELOG.rst'
|
||||||
$CHANGELOG_TEMPLATE = 'TEMPLATE.rst'
|
$CHANGELOG_TEMPLATE = 'TEMPLATE.rst'
|
||||||
|
|
||||||
$PYTEST_COMMAND = "./run-tests.xsh -- test"
|
$PYTEST_COMMAND = "./run-tests.xsh test"
|
||||||
|
|
||||||
$TAG_REMOTE = 'git@github.com:xonsh/xonsh.git'
|
$TAG_REMOTE = 'git@github.com:xonsh/xonsh.git'
|
||||||
$TAG_TARGET = 'main'
|
$TAG_TARGET = 'main'
|
||||||
|
|
|
@ -60,28 +60,17 @@ def test(
|
||||||
![pytest @(_replace_args(pytest_args, 0)) --durations=5]
|
![pytest @(_replace_args(pytest_args, 0)) --durations=5]
|
||||||
|
|
||||||
|
|
||||||
def qa():
|
|
||||||
"""QA checks"""
|
|
||||||
$XONSH_NO_AMALGAMATE = True
|
|
||||||
$XONSH_TRACE_SUBPROC_FUNC = colored_tracer
|
|
||||||
$XONSH_TRACE_SUBPROC = True
|
|
||||||
|
|
||||||
black --check xonsh xontrib tests xompletions
|
def validate_news_items(
|
||||||
isort --check xonsh xontrib tests xompletions
|
pytest_args: xcli.Arg(nargs='*') = (),
|
||||||
|
):
|
||||||
python -m flake8
|
![pytest -m news @(pytest_args)]
|
||||||
|
|
||||||
mypy xonsh
|
|
||||||
mypy xontrib --namespace-packages --explicit-package-bases
|
|
||||||
mypy xompletions --namespace-packages --explicit-package-bases
|
|
||||||
|
|
||||||
pytest -m news
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
parser = xcli.make_parser("test commands")
|
parser = xcli.make_parser("test commands")
|
||||||
parser.add_command(test)
|
parser.add_command(test)
|
||||||
parser.add_command(qa)
|
parser.add_command(validate_news_items)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
xcli.dispatch(parser)
|
xcli.dispatch(parser)
|
||||||
|
|
47
scent.py
47
scent.py
|
@ -1,47 +0,0 @@
|
||||||
"""Configuration file for sniffer."""
|
|
||||||
|
|
||||||
import time
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
from sniffer.api import select_runnable, file_validator, runnable
|
|
||||||
|
|
||||||
try:
|
|
||||||
from pync import Notifier
|
|
||||||
except ImportError:
|
|
||||||
notify = None
|
|
||||||
else:
|
|
||||||
notify = Notifier.notify
|
|
||||||
|
|
||||||
watch_paths = ['.']
|
|
||||||
|
|
||||||
|
|
||||||
@select_runnable('python')
|
|
||||||
@file_validator
|
|
||||||
def py_files(filename):
|
|
||||||
return "TemplateDemo" not in filename
|
|
||||||
|
|
||||||
|
|
||||||
@runnable
|
|
||||||
def python(*_):
|
|
||||||
group = int(time.time()) # unique per run
|
|
||||||
|
|
||||||
for count, (command, title) in enumerate((
|
|
||||||
(('dmypy', 'run', "--", "xonsh"), "type-check"),
|
|
||||||
(('flake8', '.'), "Lint"),
|
|
||||||
(('xonsh', 'run-tests.xsh', 'test'), "test"),
|
|
||||||
), start=1):
|
|
||||||
|
|
||||||
print(f"\n$ {' '.join(command)}")
|
|
||||||
failure = subprocess.call(command)
|
|
||||||
|
|
||||||
if failure:
|
|
||||||
if notify and title:
|
|
||||||
mark = "❌" * count
|
|
||||||
notify(mark + " [FAIL] " + mark, title=title, group=group)
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
if notify and title:
|
|
||||||
mark = "✅" * count
|
|
||||||
notify(mark + " [PASS] " + mark, title=title, group=group)
|
|
||||||
|
|
||||||
return True
|
|
|
@ -119,8 +119,9 @@ pretty = True
|
||||||
ignore_errors = True
|
ignore_errors = True
|
||||||
|
|
||||||
# 3rd party libraries that we dont have control over
|
# 3rd party libraries that we dont have control over
|
||||||
[mypy-zmq.*,setproctitle,xonsh.ply.*,jupyter_client.*,winreg.*,pygments.*,prompt_toolkit.*,importlib_resources.*,nt.*,prompt_toolkit.*,distro.*,conda_suggest.*,_winreg.*,*.__amalgam__.*]
|
[mypy-zmq.*,setproctitle,xonsh.ply.*,winreg.*,pygments.*,importlib_resources.*,nt.*,prompt_toolkit.*,distro.*,conda_suggest.*,_winreg.*,*.__amalgam__.*]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
ignore_errors = True
|
||||||
|
|
||||||
[tool:pytest]
|
[tool:pytest]
|
||||||
cache_dir = .cache/pytest
|
cache_dir = .cache/pytest
|
||||||
|
|
|
@ -43,7 +43,7 @@ def _windows_bash_command(env=None):
|
||||||
out = subprocess.check_output(
|
out = subprocess.check_output(
|
||||||
[bash_on_path, "--version"],
|
[bash_on_path, "--version"],
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
universal_newlines=True,
|
text=True,
|
||||||
)
|
)
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
bash_works = False
|
bash_works = False
|
||||||
|
@ -387,7 +387,7 @@ def bash_completions(
|
||||||
try:
|
try:
|
||||||
out = subprocess.check_output(
|
out = subprocess.check_output(
|
||||||
[command, "-c", script],
|
[command, "-c", script],
|
||||||
universal_newlines=True,
|
text=True,
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
env=env,
|
env=env,
|
||||||
)
|
)
|
||||||
|
|
|
@ -109,9 +109,7 @@ def _unc_map_temp_drive(unc_path) -> str:
|
||||||
for dord in range(ord("z"), ord("a"), -1):
|
for dord in range(ord("z"), ord("a"), -1):
|
||||||
d = chr(dord) + ":"
|
d = chr(dord) + ":"
|
||||||
if not os.path.isdir(d): # find unused drive letter starting from z:
|
if not os.path.isdir(d): # find unused drive letter starting from z:
|
||||||
subprocess.check_output(
|
subprocess.check_output(["NET", "USE", d, unc_share], text=True)
|
||||||
["NET", "USE", d, unc_share], universal_newlines=True
|
|
||||||
)
|
|
||||||
_unc_tempDrives[d] = unc_share
|
_unc_tempDrives[d] = unc_share
|
||||||
return os.path.join(d, rem_path)
|
return os.path.join(d, rem_path)
|
||||||
|
|
||||||
|
@ -136,9 +134,7 @@ def _unc_unmap_temp_drive(left_drive, cwd):
|
||||||
return
|
return
|
||||||
|
|
||||||
_unc_tempDrives.pop(left_drive)
|
_unc_tempDrives.pop(left_drive)
|
||||||
subprocess.check_output(
|
subprocess.check_output(["NET", "USE", left_drive, "/delete"], text=True)
|
||||||
["NET", "USE", left_drive, "/delete"], universal_newlines=True
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
events.doc(
|
events.doc(
|
||||||
|
|
|
@ -99,7 +99,7 @@ def DEFAULT_SETERRPOSTCMD():
|
||||||
return {"bash": "", "zsh": "", "cmd": "if errorlevel 1 exit 1"}
|
return {"bash": "", "zsh": "", "cmd": "if errorlevel 1 exit 1"}
|
||||||
|
|
||||||
|
|
||||||
@functools.lru_cache()
|
@functools.lru_cache
|
||||||
def foreign_shell_data(
|
def foreign_shell_data(
|
||||||
shell,
|
shell,
|
||||||
interactive=True,
|
interactive=True,
|
||||||
|
@ -246,7 +246,7 @@ def foreign_shell_data(
|
||||||
# start new session to avoid hangs
|
# start new session to avoid hangs
|
||||||
# (doesn't work on Cygwin though)
|
# (doesn't work on Cygwin though)
|
||||||
start_new_session=((not ON_CYGWIN) and (not ON_MSYS)),
|
start_new_session=((not ON_CYGWIN) and (not ON_MSYS)),
|
||||||
universal_newlines=True,
|
text=True,
|
||||||
)
|
)
|
||||||
except (subprocess.CalledProcessError, FileNotFoundError):
|
except (subprocess.CalledProcessError, FileNotFoundError):
|
||||||
if not safe:
|
if not safe:
|
||||||
|
|
|
@ -381,7 +381,7 @@ def windows_bash_command():
|
||||||
out = subprocess.check_output(
|
out = subprocess.check_output(
|
||||||
[bash_on_path, "--version"],
|
[bash_on_path, "--version"],
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
universal_newlines=True,
|
text=True,
|
||||||
)
|
)
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
bash_works = False
|
bash_works = False
|
||||||
|
|
|
@ -222,7 +222,7 @@ def hg_dirty_working_directory():
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
cwd=cwd,
|
cwd=cwd,
|
||||||
timeout=vcbt,
|
timeout=vcbt,
|
||||||
universal_newlines=True,
|
text=True,
|
||||||
env=denv,
|
env=denv,
|
||||||
)
|
)
|
||||||
return s.strip(os.linesep).endswith("+")
|
return s.strip(os.linesep).endswith("+")
|
||||||
|
|
|
@ -57,7 +57,7 @@ def skip_if_not_has(exe: str):
|
||||||
|
|
||||||
|
|
||||||
def sp(cmd):
|
def sp(cmd):
|
||||||
return subprocess.check_output(cmd, universal_newlines=True)
|
return subprocess.check_output(cmd, text=True)
|
||||||
|
|
||||||
|
|
||||||
class DummyStyler:
|
class DummyStyler:
|
||||||
|
|
|
@ -867,7 +867,7 @@ def debian_command_not_found(cmd):
|
||||||
c = "{0} {1}; exit 0"
|
c = "{0} {1}; exit 0"
|
||||||
s = subprocess.check_output(
|
s = subprocess.check_output(
|
||||||
c.format(cnf, shlex.quote(cmd)),
|
c.format(cnf, shlex.quote(cmd)),
|
||||||
universal_newlines=True,
|
text=True,
|
||||||
stderr=subprocess.STDOUT,
|
stderr=subprocess.STDOUT,
|
||||||
shell=True,
|
shell=True,
|
||||||
)
|
)
|
||||||
|
@ -902,7 +902,7 @@ def command_not_found(cmd, env):
|
||||||
return rtn
|
return rtn
|
||||||
|
|
||||||
|
|
||||||
@functools.lru_cache()
|
@functools.lru_cache
|
||||||
def suggest_commands(cmd, env):
|
def suggest_commands(cmd, env):
|
||||||
"""Suggests alternative commands given an environment and aliases."""
|
"""Suggests alternative commands given an environment and aliases."""
|
||||||
if not env.get("SUGGEST_COMMANDS"):
|
if not env.get("SUGGEST_COMMANDS"):
|
||||||
|
|
|
@ -10,7 +10,7 @@ from xonsh.built_ins import XSH
|
||||||
from xonsh.xoreutils import _which
|
from xonsh.xoreutils import _which
|
||||||
|
|
||||||
|
|
||||||
@functools.lru_cache()
|
@functools.lru_cache
|
||||||
def _which_create_parser():
|
def _which_create_parser():
|
||||||
desc = "Parses arguments to which wrapper"
|
desc = "Parses arguments to which wrapper"
|
||||||
parser = argparse.ArgumentParser("which", description=desc)
|
parser = argparse.ArgumentParser("which", description=desc)
|
||||||
|
|
|
@ -6,9 +6,9 @@ from xonsh.built_ins import XonshSession
|
||||||
|
|
||||||
def handle_sigusr1(sig, frame):
|
def handle_sigusr1(sig, frame):
|
||||||
print("\nSIGUSR1 signal received. Starting interactive debugger...", flush=True)
|
print("\nSIGUSR1 signal received. Starting interactive debugger...", flush=True)
|
||||||
import pdb
|
import pdb # noqa
|
||||||
|
|
||||||
pdb.Pdb().set_trace(frame)
|
pdb.Pdb().set_trace(frame) # noqa
|
||||||
|
|
||||||
|
|
||||||
def _load_xontrib_(xsh: XonshSession, **_):
|
def _load_xontrib_(xsh: XonshSession, **_):
|
||||||
|
|
Loading…
Add table
Reference in a new issue