nushell/crates
Bob Hyman 2e01bf9cba
add dirs command to std lib (#8368)
# Description

Prototype replacement for `enter`, `n`, `p`, `exit` built-ins
implemented as scripts in standard library.
MVP-level capabilities (rough hack), for feedback please. Not intended
to merge and ship as is.

_(Description of your pull request goes here. **Provide examples and/or
screenshots** if your changes affect the user experience.)_

# User-Facing Changes
New command in standard library

```nushell
〉use ~/src/rust/nushell/crates/nu-utils/standard_library/dirs.nu
---------------------------------------------- /home/bobhy ----------------------------------------------
〉help dirs
module dirs.nu -- maintain list of remembered directories + navigate them

todo:
* expand relative to absolute paths (or relative to some prefix?)
* what if user does `cd` by hand?

Module: dirs

Exported commands:
  add (dirs add), drop, next (dirs next), prev (dirs prev), show (dirs show)

This module exports environment.
---------------------------------------------- /home/bobhy ----------------------------------------------
〉dirs add ~/src/rust/nushell /etc ~/.cargo
-------------------------------------- /home/bobhy/src/rust/nushell --------------------------------------
〉dirs next 2
------------------------------------------- /home/bobhy/.cargo -------------------------------------------
〉dirs show
╭───┬─────────┬────────────────────╮
│ # │ current │        path        │
├───┼─────────┼────────────────────┤
│ 0 │         │ /home/bobhy        │
│ 1 │         │ ~/src/rust/nushell │
│ 2 │         │ /etc               │
│ 3 │ ==>     │ ~/.cargo           │
╰───┴─────────┴────────────────────╯
------------------------------------------- /home/bobhy/.cargo -------------------------------------------
〉dirs drop
---------------------------------------------- /home/bobhy ----------------------------------------------
〉dirs show
╭───┬─────────┬────────────────────╮
│ # │ current │        path        │
├───┼─────────┼────────────────────┤
│ 0 │ ==>     │ /home/bobhy        │
│ 1 │         │ ~/src/rust/nushell │
│ 2 │         │ /etc               │
╰───┴─────────┴────────────────────╯
---------------------------------------------- /home/bobhy ----------------------------------------------
〉
```
# Tests + Formatting

Haven't even looked at stdlib `tests.nu` yet.

Other todos:
* address module todos.
* integrate into std lib, rather than as standalone module. Somehow
arrange for `use .../standard_library/std.nu` to load this module
without having to put all the source in `std.nu`?
*  Maybe command should be `std dirs ...`?   
* what else do `enter` and `exit` do that this should do? Then deprecate
those commands.

Don't forget to add tests that cover your changes.

Make sure you've run and fixed any issues with these commands:

- `cargo fmt --all -- --check` to check standard code formatting (`cargo
fmt --all` applies these changes)
- `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A
clippy::needless_collect` to check that you're using the standard code
style
- `cargo test --workspace` to check that all tests pass

# After Submitting

If your PR had any user-facing changes, update [the
documentation](https://github.com/nushell/nushell.github.io) after the
PR is merged, if necessary. This will help us keep the docs up to date.
2023-03-11 16:31:09 -06:00
..
nu-cli FEATURE: add the startup time to $nu (#8353) 2023-03-09 14:18:58 -06:00
nu-cmd-lang Fix the SQLite feature name in version (#8381) 2023-03-09 20:49:29 -08:00
nu-color-config Display empty records and lists (#7925) 2023-02-22 16:18:33 +00:00
nu-command Allow aliasing parser keywords (#8250) 2023-03-10 23:20:31 +02:00
nu-engine Reworking help aliases (#8372) 2023-03-10 20:14:55 +02:00
nu-explore Update to 0.76.1 version for development (#8161) 2023-02-21 23:21:39 +00:00
nu-glob Update to 0.76.1 version for development (#8161) 2023-02-21 23:21:39 +00:00
nu-json README for nu-json. Related to nushell/nushell#8253 (#8289) 2023-03-03 19:07:25 -06:00
nu-parser Allow aliasing parser keywords (#8250) 2023-03-10 23:20:31 +02:00
nu-path Update to 0.76.1 version for development (#8161) 2023-02-21 23:21:39 +00:00
nu-plugin Document and critically review ShellError variants - Ep. 3 (#8340) 2023-03-06 18:33:09 +01:00
nu-pretty-hex Update to 0.76.1 version for development (#8161) 2023-02-21 23:21:39 +00:00
nu-protocol Hack around bad binary viewing logic (#8399) 2023-03-11 14:13:37 +13:00
nu-system Bump procfs from 0.14.1 to 0.15.1 (#8233) 2023-02-27 20:53:01 +13:00
nu-table table --collapse dont do truncation return message instead (#8172) 2023-02-22 18:35:45 +00:00
nu-term-grid Update to 0.76.1 version for development (#8161) 2023-02-21 23:21:39 +00:00
nu-test-support Put a lock around cargo build invocations for plugin tests (#8333) 2023-03-05 19:04:12 -08:00
nu-utils add dirs command to std lib (#8368) 2023-03-11 16:31:09 -06:00
nu_plugin_custom_values Document and critically review ShellError variants - Ep. 3 (#8340) 2023-03-06 18:33:09 +01:00
nu_plugin_example Update to 0.76.1 version for development (#8161) 2023-02-21 23:21:39 +00:00
nu_plugin_formats Document and critically review ShellError variants - Ep. 3 (#8340) 2023-03-06 18:33:09 +01:00
nu_plugin_gstat Update to 0.76.1 version for development (#8161) 2023-02-21 23:21:39 +00:00
nu_plugin_inc Update to 0.76.1 version for development (#8161) 2023-02-21 23:21:39 +00:00
nu_plugin_python update nu_plugin_python due to signature changes (#8107) 2023-02-18 13:27:24 +00:00
nu_plugin_query Bump scraper from 0.14.0 to 0.15.0 (#8331) 2023-03-05 19:37:22 -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.