nushell/crates
YizhePKU b9a7faad5a
Implement PWD recovery (#12779)
This PR has two parts. The first part is the addition of the
`Stack::set_pwd()` API. It strips trailing slashes from paths for
convenience, but will reject otherwise bad paths, leaving PWD in a good
state. This should reduce the impact of faulty code incorrectly trying
to set PWD.
(https://github.com/nushell/nushell/pull/12760#issuecomment-2095393012)

The second part is implementing a PWD recovery mechanism. PWD can become
bad even when we did nothing wrong. For example, Unix allows you to
remove any directory when another process might still be using it, which
means PWD can just "disappear" under our nose. This PR makes it possible
to use `cd` to reset PWD into a good state. Here's a demonstration:

```sh
mkdir /tmp/foo
cd /tmp/foo

# delete "/tmp/foo" in a subshell, because Nushell is smart and refuse to delete PWD
nu -c 'cd /; rm -r /tmp/foo'

ls          # Error:   × $env.PWD points to a non-existent directory
            # help: Use `cd` to reset $env.PWD into a good state

cd /
pwd         # prints /
```

Also, auto-cd should be working again.
2024-05-10 11:06:33 -05:00
..
nu_plugin_custom_values Bump version to 0.93.1 (#12710) 2024-05-01 17:19:20 -05:00
nu_plugin_example feat: add an echo command to nu_plugin_example (#12754) 2024-05-08 12:45:44 -07:00
nu_plugin_formats Bump version to 0.93.1 (#12710) 2024-05-01 17:19:20 -05:00
nu_plugin_gstat Bump version to 0.93.1 (#12710) 2024-05-01 17:19:20 -05:00
nu_plugin_inc Bump version to 0.93.1 (#12710) 2024-05-01 17:19:20 -05:00
nu_plugin_nu_example Bump version to 0.93.1 (#12710) 2024-05-01 17:19:20 -05:00
nu_plugin_polars Polars lazy refactor (#12669) 2024-05-06 23:19:11 +00:00
nu_plugin_python Bump version to 0.93.1 (#12710) 2024-05-01 17:19:20 -05:00
nu_plugin_query Bump version to 0.93.1 (#12710) 2024-05-01 17:19:20 -05:00
nu_plugin_stress_internals Upgrade to interprocess 2.0.0 (#12729) 2024-05-02 22:31:33 -07:00
nu-cli Implement PWD recovery (#12779) 2024-05-10 11:06:33 -05:00
nu-cmd-base Implement PWD recovery (#12779) 2024-05-10 11:06:33 -05:00
nu-cmd-dataframe Bump version to 0.93.1 (#12710) 2024-05-01 17:19:20 -05:00
nu-cmd-extra ListStream touchup (#12524) 2024-05-05 16:00:59 +00:00
nu-cmd-lang Shrink Value by boxing Range/Closure (#12784) 2024-05-09 08:10:58 +08:00
nu-cmd-plugin Make the message when running a plugin exe directly clearer (#12806) 2024-05-07 20:12:32 -07:00
nu-color-config Shrink Value by boxing Range/Closure (#12784) 2024-05-09 08:10:58 +08:00
nu-command Implement PWD recovery (#12779) 2024-05-10 11:06:33 -05:00
nu-engine Implement PWD recovery (#12779) 2024-05-10 11:06:33 -05:00
nu-explore Add sys subcommands (#12747) 2024-05-06 23:20:27 +00:00
nu-glob Bump version to 0.93.1 (#12710) 2024-05-01 17:19:20 -05:00
nu-json Minimize future false positive typos (#12751) 2024-05-04 15:00:44 +00:00
nu-lsp Refactor the CLI code a bit (#12782) 2024-05-10 07:29:27 +08:00
nu-parser Fix raw strings as external argument (#12817) 2024-05-10 07:50:31 +08:00
nu-path Fix trailing slash in PWD set by cd (#12760) 2024-05-04 12:38:37 +03:00
nu-plugin Make the message when running a plugin exe directly clearer (#12806) 2024-05-07 20:12:32 -07:00
nu-plugin-core ListStream touchup (#12524) 2024-05-05 16:00:59 +00:00
nu-plugin-engine Shrink Value by boxing Range/Closure (#12784) 2024-05-09 08:10:58 +08:00
nu-plugin-protocol ListStream touchup (#12524) 2024-05-05 16:00:59 +00:00
nu-plugin-test-support ListStream touchup (#12524) 2024-05-05 16:00:59 +00:00
nu-pretty-hex Bump version to 0.93.1 (#12710) 2024-05-01 17:19:20 -05:00
nu-protocol Implement PWD recovery (#12779) 2024-05-10 11:06:33 -05:00
nu-std Migrate to a new PWD API (part 2) (#12749) 2024-05-07 18:17:49 +03:00
nu-system Bump version to 0.93.1 (#12710) 2024-05-01 17:19:20 -05:00
nu-table Avoid taking unnecessary ownership of intermediates (#12740) 2024-05-04 00:53:15 +00:00
nu-term-grid Bump version to 0.93.1 (#12710) 2024-05-01 17:19:20 -05:00
nu-test-support Avoid taking unnecessary ownership of intermediates (#12740) 2024-05-04 00:53:15 +00:00
nu-utils overhaul shell_integration to enable individual control over ansi escape sequences (#12629) 2024-05-02 09:56:50 -04:00
nuon Shrink Value by boxing Range/Closure (#12784) 2024-05-09 08:10:58 +08:00
README.md Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00

Nushell core libraries and plugins

These sub-crates form both the foundation for Nu and a set of plugins which extend Nu with additional functionality.

Foundational libraries are split into two kinds of crates:

  • Core crates - those crates that work together to build the Nushell language engine
  • Support crates - a set of crates that support the engine with additional features like JSON support, ANSI support, and more.

Plugins are likewise also split into two types:

  • Core plugins - plugins that provide part of the default experience of Nu, including access to the system properties, processes, and web-connectivity features.
  • Extra plugins - these plugins run a wide range of different capabilities like working with different file types, charting, viewing binary data, and more.