Commit graph

2194 commits

Author SHA1 Message Date
Andy Kipp
b19a89b432
Fixed `xonsh -DVAR=VAL` behavior: initiate env variables before shell initialization. (#5396)
### Before

Case 1:
```xsh
xonsh --no-rc --no-env -DCOLOR_OUTPUT 0  # space between -DVAR and VALUE
```
```xsh
Traceback (most recent call last):
  File "/Users/pc/.local/xonsh-env/lib/python3.12/site-packages/xonsh/main.py", line 478, in main
    args = premain(argv)
           ^^^^^^^^^^^^^
  File "/Users/pc/.local/xonsh-env/lib/python3.12/site-packages/xonsh/main.py", line 420, in premain
    env.update([x.split("=", 1) for x in args.defines])
  File "<frozen _collections_abc>", line 987, in update
ValueError: not enough values to unpack (expected 2, got 1)
Xonsh encountered an issue during launch
```
Case 2:
```xsh
xonsh --no-rc --no-env -DXONSH_HISTORY_BACKEND=dummy
history info
# json  # EXPECTED: dummy
```

### After
Case 1:
```xsh
xonsh --no-rc --no-env -DCOLOR_OUTPUT 0
# Wrong format for -DCOLOR_OUTPUT argument. Use -DVAR=VAL form.
```

Case 2:
```xsh
xonsh --no-rc --no-env -DXONSH_HISTORY_BACKEND=dummy
history info
# dummy
```

Closes #5395

## For community
⬇️ **Please click the 👍 reaction instead of leaving a `+1` or 👍
comment**

---------

Co-authored-by: a <1@1.1>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-05-06 17:39:10 +05:30
Andy Kipp
cdc1d602a2
Fixed empty stacktrace for CalledProcessError (#5391)
Fixed #5387

### Before

```xsh
$XONSH_SHOW_TRACEBACK = False
$RAISE_SUBPROC_ERROR = True

ls nofile
# ls: nofile: No such file or directory
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
#
```

### After 

```xsh
$RAISE_SUBPROC_ERROR = False
$XONSH_SHOW_TRACEBACK = False
ls nofile
# ls: nofile: No such file or directory

$RAISE_SUBPROC_ERROR = True
$XONSH_SHOW_TRACEBACK = False
ls nofile
# ls: nofile: No such file or directory
# subprocess.CalledProcessError: Command '['ls', 'nofile']' returned non-zero exit status 1.

$RAISE_SUBPROC_ERROR = True
$XONSH_SHOW_TRACEBACK = True
ls nofile
# ls: nofile: No such file or directory
# Traceback (most recent call last):
# ...
# subprocess.CalledProcessError: Command '['ls', 'nofile']' returned non-zero exit status 1.

$RAISE_SUBPROC_ERROR = False
$XONSH_SHOW_TRACEBACK = True
ls nofile
# ls: nofile: No such file or directory
```

## For community
⬇️ **Please click the 👍 reaction instead of leaving a `+1` or 👍
comment**

---------

Co-authored-by: a <1@1.1>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-05-04 11:50:32 +02:00
Andy Kipp
a3e8b1a025
Use substring for env completion and better way to sort list (#5388)
### Motivation

It's very annoying to search env variable exactly by lprefix. The better
is to search by substring and sort results by the position of substring
and then alphabetically.

Closes #5386

### Before

```xsh
$TRA<Tab>
# nothing
```

### After
```xsh
$TRA<Tab>
# 'XONSH_TRACE_COMPLETIONS', 
# 'XONSH_TRACE_SUBPROC', 
# 'XONSH_TRACE_SUBPROC_FUNC', 
# 'XONSH_TRACEBACK_LOGFILE', 
# 'XONSH_SHOW_TRACEBACK', 
# 'VC_GIT_INCLUDE_UNTRACKED'
```

## For community
⬇️ **Please click the 👍 reaction instead of leaving a `+1` or 👍
comment**

---------

Co-authored-by: a <1@1.1>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-05-03 10:30:14 +02:00
Andy Kipp
21da30e753
Fixed populating the return code for interrupted process. (#5380)
### Motivation

There is annoying behavior when you run command in the loop and can't
interrupt e.g. [this
report](https://github.com/xonsh/xonsh/discussions/5371) and a bit
#5342. After diving into this I see the issue around return code.

### The essence

Basically ``p = subprocess.Popen()`` populates ``p.returncode`` after
``p.wait()``, ``p.poll()`` or ``p.communicate()``
([doc](https://docs.python.org/3/library/os.html#os.waitpid)). But if
you're using `os.waitpid()` BEFORE these functions you're capturing
return code from a signal subsystem and ``p.returncode`` will be ``0``
like success but it's not success. So after ``os.waitid`` call you need
to set return code manually ``p.returncode = -os.WTERMSIG(status)`` like
in Popen. Example:
```xsh
python  # python interactive

import os, signal, subprocess as sp

p = sp.Popen(['sleep', '100'])
p.pid
# 123
p.wait()
# Ctrl+C or `kill -SIGINT 123` from another terminal
p.returncode
# -2

# BUT:

p = sp.Popen(['sleep', '100'])
p.pid
# 123

pid, status = os.waitpid(p.pid, os.WUNTRACED)
# status=2

# From another terminal:
kill -SIGINT 123

p.wait()
# 0
p.returncode
# 0
```

```xsh
from xonsh.tools import describe_waitpid_status
describe_waitpid_status(2)
# WIFEXITED - False - Return True if the process returning status exited via the exit() system call.
# WEXITSTATUS - 0 - Return the process return code from status.
# WIFSIGNALED - True - Return True if the process returning status was terminated by a signal.
# WTERMSIG - 2 - Return the signal that terminated the process that provided the status value.
# WIFSTOPPED - False - Return True if the process returning status was stopped.
# WSTOPSIG - 0 - Return the signal that stopped the process that provided the status value.
```

See also: [Helpful things for
knight](https://github.com/xonsh/xonsh/pull/5361#issuecomment-2078826181).

### Before

```xsh
$RAISE_SUBPROC_ERROR = True

sleep 100
# Ctrl+C
_.rtn
# 0  # It's wrong and RAISE_SUBPROC_ERROR ignored.

for i in range(5):
    print(i)
    sleep 5
# 0
# Ctrl+C  # Can't interrupt
# 1
# 2 
```

### After
```xsh
sleep 100
# Ctrl+C
_.rtn
# -2  # Like in default Popen

$RAISE_SUBPROC_ERROR = True
for i in range(5):
    print(i)
    sleep 5
# 0
# Ctrl+C
# subprocess.CalledProcessError
```

### Notes

* We need to refactor `xonsh.jobs`. It's pretty uncomfortable work with
module.
* The logic is blurry between Specs, Pipelines and Jobs. We need to
bring more clear functions.
* The `captured` variable looks like "just the way of capturing (stdout,
object)" but in fact it affects all logic very much. We need to create
table where we can see the logic difference for every type of capturing.
E.g. in `captured=stdout` mode we use `xonsh.jobs` to monitor the
command but in `captured=object` we avoid this and some logic from
`xonsh.jobs` applied in `stdout` mode but missed in `object` mode. We
need clear map.

## For community
⬇️ **Please click the 👍 reaction instead of leaving a `+1` or 👍
comment**

---------

Co-authored-by: a <1@1.1>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-05-02 22:10:53 +02:00
Andy Kipp
a5f0308a5a
CommandPipeline: clean repr + a bit of code cleaning (#5369)
* XONSH_TRACE_SUBPROC returns more useful details.

* update

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Name obj to thread because it's thread!

* update

* wip

* wip

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: a <1@1.1>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-05-03 00:09:31 +05:30
Andy Kipp
c4c7d1cbd7
Xonfig: show sensitive env variables that could affect the shell behavior. (#5374)
* wip

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Added XONSH_SUBPROC_OUTPUT_FORMAT

---------

Co-authored-by: a <1@1.1>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-05-02 22:46:22 +05:30
Andy Kipp
c5cb7044b5
feat: add subproc output format, autostrip singleline output (#5377)
### Motivation

* To have an ability to manage the output format added ``$XONSH_SUBPROC_OUTPUT_FORMAT`` to switch the way to return the output lines. Default ``stream_lines`` to return text. Alternative ``list_lines`` to return the list of lines. Also supported custom lambda function.
* Additionally the [proposal to change default behavior](https://github.com/xonsh/xonsh/pull/5377#discussion_r1587627131) for a single line case.
* Closes #3924 as soft solution.

### Before

```xsh
mkdir -p /tmp/tst && cd /tmp/tst && touch 1 2 3

$(ls)
# '1\n2\n3\n'

id $(whoami)
# id: ‘pc\n’: no such user: Invalid argument

du $(ls)
# du: cannot access '1'$'\n''2'$'\n''3'$'\n': No such file or directory

ls $(fzf)
# ls: cannot access 'FUNDING.yml'$'\n': No such file or directory
```

### After

```xsh
mkdir -p /tmp/tst && cd /tmp/tst && touch 1 2 3

$XONSH_SUBPROC_OUTPUT_FORMAT = 'list_lines'

$(ls)
# ['1', '2', '3']

[f for f in $(ls)]
# ['1', '2', '3']

id $(whoami)
# uid=501(user) gid=20(staff)

du $(ls)
# 0 1
# 0 2
# 0 3

ls $(fzf)
# FUNDING.yml

# etc
mkdir -p /tmp/@($(whoami))/dir
cat /etc/passwd | grep $(whoami)
```

### Notes

* It will be good to improve parser for cases like `mkdir -p /tmp/$(whoami)/dir`. PR is welcome!
* I named the default mode as `stream_lines` (instead of just `stream` or `raw`) because in fact we transform raw output into stream of lines and possibly reduce the length of output ([replacing `\r\n` to `\n`](c3a12b2a9c/xonsh/procs/pipelines.py (L380-L383))). May be some day we need to add raw "stream" output format.
* Now anybody can implement bash `IFS` behavior in [bashisms](https://github.com/xonsh/xontrib-bashisms).

---------

Co-authored-by: a <1@1.1>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-05-02 11:48:25 -04:00
Andy Kipp
c3a12b2a9c
feat: add --no-env flag to avoid inheriting parent-shell env (#5370)
### Motivation

Basically we use `xonsh --no-rc` to have pure xonsh. 
I noticed many times when parent environment can affect `xonsh --no-rc` e.g. `$XONSH_HISTORY_FILE`.
Current workaround is `env -i @$(which xonsh) --no-rc` but I think we need to have pure xonsh way.

Closes #4921

### Before

```xsh
xonsh --no-rc
$QWE = 1
xonsh --no-rc
$QWE
# 1
```

### After
```xsh
xonsh --no-rc
$QWE = 1
xonsh --no-rc --no-env
$QWE
# Unknown environment variable: $QWE

$XONSH_ENV_INHERITED  # Marker to have a way to catch this situation.
# False
```

Co-authored-by: a <1@1.1>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Gil Forsyth <gforsyth@users.noreply.github.com>
2024-04-29 12:29:22 -04:00
Andy Kipp
f71b5adde8
Xonsh Zulip Community started (#5372)
* wip

* wip

---------

Co-authored-by: a <1@1.1>
2024-04-29 10:01:02 -04:00
Andy Kipp
61751c2319
jobs: catching ChildProcessError (#5365)
* Update jobs.py

* Create jobs_catch_no_process.rst

* Update jobs.py

* Update jobs_catch_no_process.rst

* Update jobs.py
2024-04-26 10:34:31 +02:00
Andy Kipp
8ab1b9a0ee
jobs: default representation changed to dict (#5363)
* update

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: a <1@1.1>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-04-26 10:26:24 +02:00
a
a8a604d4c5 wip 2024-04-26 13:37:19 +05:30
a
24fdfece1e XONSH_TRACE_SUBPROC returns more useful details. 2024-04-26 13:37:19 +05:30
Andy Kipp
26c6e119e2
Shortcut for shell-type (#5367)
* Shortcut for shell-type

* Shortcut for shell-type

---------

Co-authored-by: a <1@1.1>
2024-04-25 20:10:18 +02:00
Andy Kipp
4dc17ca600
Downgrade AppImage to 3.11 (#5364)
* Update rever.xsh

* Create appimage_py311.rst
2024-04-25 11:46:36 +02:00
Andy Kipp
273f12d329
Add thread details to the exception (#5360)
* thread details

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: a <1@1.1>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-04-24 11:15:40 +02:00
Andy Kipp
af9c3afa23
Added detailed info about thread to thread exceptions (#5357)
* update

* update

* update

* update

* update

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: a <1@1.1>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-04-24 08:46:04 +02:00
Gil Forsyth
c508e0de60
Updated CHANGELOG for 0.16.0 2024-04-23 14:34:31 -04:00
Andy Kipp
cc143b1ece
Pin ptk for AppImage (#5356)
* Update pre-requirements.txt

* Update appimage-py312.rst
2024-04-23 10:31:41 +02:00
Andy Kipp
330f150f6a
EnvPath methods (append, remove, add, insert) prepare the path (#5349)
* EnvPath methods (append, remove, add, insert) prepare the path before add.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* update

* update

* update

* update

* update

---------

Co-authored-by: a <1@1.1>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-04-21 10:03:42 +02:00
Noortheen Raja
667efceb72 refactor!: remove confusing hook_post_add_argument
current usecase can be solved with custom Action
2024-04-20 23:44:26 +05:30
Andy Kipp
2419eaa952
Fix jobs.py: list index out of range (#5340)
* Update jobs.py

* Create fix-jobs-index.rst

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update fix-jobs-index.rst

* Update test_virtualenv_activator.py

* Update test_virtualenv_activator.py

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update test_virtualenv_activator.py

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* test: update venv activator test

* chore: update test xonsh

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Noorhteen Raja NJ <jnoortheen@gmail.com>
2024-04-19 10:33:30 +02:00
Gil Forsyth
fde07cda5f
refactor(aliases): source foreign shell funcs without interactive mode (#5344)
Co-authored-by: Noortheen Raja <jnoortheen@gmail.com>
2024-04-18 19:51:39 +05:30
Andy Kipp
6c94d4ad6c
Builtin aliases (xontrib, history) switched to threadable mode (#5321)
* Create xonfig_xontrib_threadable.rst

* xonfig and xontrib threadable

* xonfig and xontrib threadable

* xonfig and xontrib threadable

* Update builtin_aliases_threadable.rst

* Update xonfig.py

---------

Co-authored-by: a <1@1.1>
2024-04-16 13:27:55 -04:00
Noortheen Raja
2a6e5e15f8 docs: update contribution guide 2024-04-16 11:23:35 -04:00
Noortheen Raja
912c7d395c refactor!: remove deprecated module xonsh.proc 2024-04-16 11:23:35 -04:00
Andy Kipp
db83a3f353
Bump xonsh.AppImage to python 3.12 (#5338)
* Update rever.xsh

* Create appimage-py312.rst

* Update appimage-py312.rst
2024-04-16 11:37:20 +02:00
Peter Ye
a7688f647d
fix: do not attempt to color traceback for error in xonshrc file (#5331)
do not color traceback unless shell has been loaded
2024-04-11 08:22:08 +05:30
l-no
a028c72deb
fix: Error in completions with absolute paths (#5127) (#5328)
fix: Error in completions with absolute paths

fixes #5127, an error in fetching command completions when
UPDATE_COMPLETIONS_ON_KEYPRESS is enabled and the command is specified
by absolute path.
2024-04-10 11:18:46 +05:30
Peter Ye
5a525e3789
feat: allow square brackets in command arguments (#5326)
Allow square brackets in command arguments
2024-04-09 22:33:43 +05:30
Peter Ye
08ac0d9759
Fix parsing of redirect tokens (#5322)
* Fix parsing of redirect tokens

In the parser, wrap redirect tokens such as ">", "a>", and "2>1" in a
tuple (along with the name of the redirect file, if applicable) to
differentiate them from regular command line arguments.

This ensures that a command like ![echo ">"] is parsed correctly.

We now need 2 types of IO-redirect tokens (IOREDIRECT1 and IOREDIRECT2)
so that the parser knows whether or not an IO-redirect has a file
argument. For example, "a>" has type IOREDIRECT1, whereas "2>1" has
type IOREDIRECT2.

* update ioredir tests

* add tests

* add news

* fix multiple redirections error message
2024-04-05 13:21:54 +05:30
Peter Ye
7461c507b2
Fix incorrect IOREDIRECT tokens in Python mode (#5013)
* add tests

* Fix incorrect IOREDIRECT tokens in Python mode

* add news

* Update lexer used in CompletionContextParser

The completion context lexer should start in subprocess mode so that
operators like ``2>`` are recognized as IOREDIRECT tokens.

This fixes the test case "command 2>/dev/nul{X}" for
test_completion_context.py::test_command.
2024-04-04 16:04:53 +05:30
Noortheen Raja
c930c9f234 fix: web config overwrite existing value
fixes #5297
2024-03-19 16:33:12 +05:30
Noortheen Raja
ce215bb8fe docs: add news item 2024-03-19 16:33:12 +05:30
Andy Kipp
5fd9a25d09
Fix dircolors NotADirectoryError (#5300)
* Update environ.py

* Create fix_dircolors_NotADirectoryError.rst
2024-03-11 16:53:50 -04:00
Gil Forsyth
f5ae75268a
feat(bashpath): add env-var to allow overriding path to bash (#5295)
I've run into issues with bash completion failing when using `nix` to
handle environments.
The nix environment often installs its own `bash` which doesn't respect
the `BASH_COMPLETIONS` env-var.

This allows an (off-by-default) option to override what is returned by
`xonsh.platform.bash_command`.

The removal of the `lru_cache` should be negligible since
`windows_bash_command` has its own `lru_cache` and the other options are
doing an env lookup or returning a string.
2024-03-08 17:57:53 +01:00
Gil Forsyth
43c9aafe61 Updated CHANGELOG for 0.15.1 2024-03-07 10:11:43 -05:00
doronz88
cb85c938b3
pytest: Fix pytest collection starting at pytest>=8.1.0 (#5293) 2024-03-05 23:51:01 +01:00
Daniel Saunders
d4a342f49d
Fix documented default loc parameter for add_one_completer() (#5289)
* Correct documentation about default parameter

* Create DanielSaunders-patch-1.rst
2024-02-27 16:22:12 +01:00
Gil Forsyth
1da7118e23 Updated CHANGELOG for 0.15.0 2024-02-24 19:09:24 -05:00
Andy Kipp
7a915113f6
Pin prompt-toolkit version (#5288)
* Update pyproject.toml

* Create pin-ptk.rst

* chore: strip whitespace

---------

Co-authored-by: Gil Forsyth <gil@forsyth.dev>
2024-02-24 18:42:50 -05:00
Jason R. Coombs
1d54c74832
Mention VS Code supports xonsh as default shell (#5273)
* Add paragraph about support for xonsh as the default shell.

Ref #4469

Also, updated the text to use 'VS Code', which is the preferred short name.

* Add news entry.
2024-02-06 00:29:45 +01:00
Matthieu LAURENT
7c23508afc
Add news item about Atuin support (#5272) 2024-01-30 12:24:36 +01:00
Gil Forsyth
0f16fa7d64 Updated CHANGELOG for 0.14.4 2024-01-16 08:58:06 -05:00
Nathan Monfils
5b20891975
Actually fully disable system clipboard (#5155) (#5261)
Allow to fully disable system clipboard

Fixes #5155

In VI mode, disabling "delete" hotkeys isn't enough.

After discussion in #5261, we don't change the default behavior but
allow fully disabling the system clipboard to better support the
use-case of VI mode user.

Co-authored-by: Nathan Monfils <nmo@escaux.com>
2024-01-15 15:55:23 +05:30
Gil Forsyth
23c50c215e Updated CHANGELOG for 0.14.3 2023-12-05 10:47:54 -05:00
Gil Forsyth
7a5d7c2886
fix(xpip): patch in user site packages for xpip where needed (#5238) 2023-12-05 10:46:49 -05:00
Joshix-1
b2b23a8240
add generic on_pre_spec_run and on_post_spec_run (#5232)
* add generic on_pre_spec_run and on_post_spec_run

* black

* edit docs/events.rst

* news

* Update on_pre_spec_run-on_post_spec_run.rst

---------

Co-authored-by: Andy Kipp <anki-code@users.noreply.github.com>
2023-11-23 12:19:34 +01:00
Gil Forsyth
0b141e56ad Updated CHANGELOG for 0.14.2 2023-11-17 10:58:12 -05:00
doronz88
f308813f15
history: fix json file permissions upon sudo (#5220) (#5221) 2023-10-25 16:26:04 -04:00