2019-05-10 18:59:12 +02:00
|
|
|
[package]
|
2022-03-13 19:30:27 +01:00
|
|
|
authors = ["The Nushell Project Developers"]
|
2023-05-20 14:57:51 +02:00
|
|
|
build = "scripts/build.rs"
|
2020-07-05 22:12:44 +02:00
|
|
|
default-run = "nu"
|
2020-04-06 09:16:14 +02:00
|
|
|
description = "A new type of shell"
|
2020-07-05 22:12:44 +02:00
|
|
|
documentation = "https://www.nushell.sh/book/"
|
2023-01-05 13:24:42 +01:00
|
|
|
edition = "2021"
|
2020-07-05 22:12:44 +02:00
|
|
|
exclude = ["images"]
|
|
|
|
homepage = "https://www.nushell.sh"
|
|
|
|
license = "MIT"
|
|
|
|
name = "nu"
|
2019-07-16 21:17:46 +02:00
|
|
|
repository = "https://github.com/nushell/nushell"
|
2024-02-08 20:29:36 +01:00
|
|
|
rust-version = "1.74.1"
|
2024-03-06 23:08:14 +01:00
|
|
|
version = "0.91.1"
|
2021-06-30 03:42:56 +02:00
|
|
|
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
|
2022-11-23 17:46:06 +01:00
|
|
|
[package.metadata.binstall]
|
|
|
|
pkg-url = "{ repo }/releases/download/{ version }/{ name }-{ version }-{ target }.{ archive-format }"
|
|
|
|
pkg-fmt = "tgz"
|
|
|
|
|
|
|
|
[package.metadata.binstall.overrides.x86_64-pc-windows-msvc]
|
|
|
|
pkg-fmt = "zip"
|
|
|
|
|
2021-08-25 21:29:36 +02:00
|
|
|
[workspace]
|
2021-10-28 08:12:33 +02:00
|
|
|
members = [
|
2024-03-07 23:40:31 +01:00
|
|
|
"crates/nu-cli",
|
|
|
|
"crates/nu-engine",
|
|
|
|
"crates/nu-parser",
|
|
|
|
"crates/nu-system",
|
|
|
|
"crates/nu-cmd-base",
|
|
|
|
"crates/nu-cmd-extra",
|
|
|
|
"crates/nu-cmd-lang",
|
|
|
|
"crates/nu-cmd-dataframe",
|
|
|
|
"crates/nu-command",
|
|
|
|
"crates/nu-color-config",
|
|
|
|
"crates/nu-explore",
|
|
|
|
"crates/nu-json",
|
|
|
|
"crates/nu-lsp",
|
|
|
|
"crates/nu-pretty-hex",
|
|
|
|
"crates/nu-protocol",
|
|
|
|
"crates/nu-plugin",
|
|
|
|
"crates/nu_plugin_inc",
|
|
|
|
"crates/nu_plugin_gstat",
|
|
|
|
"crates/nu_plugin_example",
|
|
|
|
"crates/nu_plugin_stream_example",
|
|
|
|
"crates/nu_plugin_query",
|
|
|
|
"crates/nu_plugin_custom_values",
|
|
|
|
"crates/nu_plugin_formats",
|
|
|
|
"crates/nu-std",
|
|
|
|
"crates/nu-table",
|
|
|
|
"crates/nu-term-grid",
|
|
|
|
"crates/nu-test-support",
|
|
|
|
"crates/nu-utils",
|
2021-10-28 08:12:33 +02:00
|
|
|
]
|
2021-08-25 21:29:36 +02:00
|
|
|
|
2024-03-07 23:40:31 +01:00
|
|
|
[workspace.dependencies]
|
|
|
|
chrono = { default-features = false, version = "0.4" }
|
|
|
|
crossterm = "0.27"
|
|
|
|
ctrlc = "3.4"
|
|
|
|
fancy-regex = "0.13"
|
|
|
|
log = "0.4"
|
|
|
|
miette = "7.1"
|
|
|
|
nix = { version = "0.27", default-features = false }
|
|
|
|
nu-ansi-term = "0.50.0"
|
|
|
|
once_cell = "1.18"
|
|
|
|
pathdiff = "0.2"
|
|
|
|
percent-encoding = "2"
|
|
|
|
reedline = "0.30.0"
|
|
|
|
rstest = { version = "0.18", default-features = false }
|
|
|
|
serde_json = "1.0"
|
|
|
|
sysinfo = "0.30"
|
|
|
|
tempfile = "3.10"
|
|
|
|
unicode-segmentation = "1.11"
|
|
|
|
uuid = "1.6.0"
|
|
|
|
which = "6.0.0"
|
|
|
|
|
2021-06-30 03:42:56 +02:00
|
|
|
[dependencies]
|
2024-03-06 23:08:14 +01:00
|
|
|
nu-cli = { path = "./crates/nu-cli", version = "0.91.1" }
|
|
|
|
nu-cmd-base = { path = "./crates/nu-cmd-base", version = "0.91.1" }
|
|
|
|
nu-cmd-lang = { path = "./crates/nu-cmd-lang", version = "0.91.1" }
|
|
|
|
nu-cmd-dataframe = { path = "./crates/nu-cmd-dataframe", version = "0.91.1", features = [
|
2024-03-07 23:40:31 +01:00
|
|
|
"dataframe",
|
2024-01-20 15:04:06 +01:00
|
|
|
], optional = true }
|
2024-03-10 17:29:02 +01:00
|
|
|
nu-cmd-extra = { path = "./crates/nu-cmd-extra", version = "0.91.1" }
|
2024-03-06 23:08:14 +01:00
|
|
|
nu-command = { path = "./crates/nu-command", version = "0.91.1" }
|
|
|
|
nu-engine = { path = "./crates/nu-engine", version = "0.91.1" }
|
|
|
|
nu-explore = { path = "./crates/nu-explore", version = "0.91.1" }
|
|
|
|
nu-lsp = { path = "./crates/nu-lsp/", version = "0.91.1" }
|
|
|
|
nu-parser = { path = "./crates/nu-parser", version = "0.91.1" }
|
|
|
|
nu-path = { path = "./crates/nu-path", version = "0.91.1" }
|
|
|
|
nu-plugin = { path = "./crates/nu-plugin", optional = true, version = "0.91.1" }
|
|
|
|
nu-protocol = { path = "./crates/nu-protocol", version = "0.91.1" }
|
|
|
|
nu-std = { path = "./crates/nu-std", version = "0.91.1" }
|
|
|
|
nu-utils = { path = "./crates/nu-utils", version = "0.91.1" }
|
2023-12-21 16:41:31 +01:00
|
|
|
|
2024-03-07 23:40:31 +01:00
|
|
|
reedline = { workspace = true, features = ["bashisms", "sqlite"] }
|
2022-09-19 16:28:36 +02:00
|
|
|
|
2024-03-07 23:40:31 +01:00
|
|
|
crossterm = { workspace = true }
|
|
|
|
ctrlc = { workspace = true }
|
|
|
|
log = { workspace = true }
|
|
|
|
miette = { workspace = true, features = ["fancy-no-backtrace", "fancy"] }
|
2023-08-23 22:23:27 +02:00
|
|
|
mimalloc = { version = "0.1.37", default-features = false, optional = true }
|
2024-03-07 23:40:31 +01:00
|
|
|
serde_json = { workspace = true }
|
2023-05-26 17:32:48 +02:00
|
|
|
simplelog = "0.12"
|
|
|
|
time = "0.3"
|
2022-02-22 16:55:28 +01:00
|
|
|
|
2022-05-26 20:28:59 +02:00
|
|
|
[target.'cfg(not(target_os = "windows"))'.dependencies]
|
|
|
|
# Our dependencies don't use OpenSSL on Windows
|
2023-05-26 17:32:48 +02:00
|
|
|
openssl = { version = "0.10", features = ["vendored"], optional = true }
|
2022-05-26 20:28:59 +02:00
|
|
|
|
2022-10-16 23:51:15 +02:00
|
|
|
[target.'cfg(windows)'.build-dependencies]
|
2023-04-26 14:14:55 +02:00
|
|
|
winresource = "0.1"
|
2022-10-16 23:51:15 +02:00
|
|
|
|
|
|
|
[target.'cfg(target_family = "unix")'.dependencies]
|
2024-03-07 23:40:31 +01:00
|
|
|
nix = { workspace = true, default-features = false, features = [
|
|
|
|
"signal",
|
|
|
|
"process",
|
|
|
|
"fs",
|
|
|
|
"term",
|
`string | fill` counts clusters, not graphemes; and doesn't count ANSI escape codes (#8134)
Enhancement of new `fill` command (#7846) to handle content including
ANSI escape codes for formatting or multi-code-point Unicode grapheme
clusters.
In both of these cases, the content is (many) bytes longer than its
visible length, and `fill` was counting the extra bytes so not adding
enough fill characters.
# Description
This script:
```rust
# the teacher emoji `\u{1F9D1}\u{200D}\u{1F3EB}` is 3 code points, but only 1 print position wide.
echo "This output should be 3 print positions wide, with leading and trailing `+`"
$"\u{1F9D1}\u{200D}\u{1F3EB}" | fill -c "+" -w 3 -a "c"
echo "This output should be 3 print positions wide, with leading and trailing `+`"
$"(ansi green)a(ansi reset)" | fill -c "+" -w 3 -a c
echo ""
```
Was producing this output:
```rust
This output should be 3 print positions wide, with leading and trailing `+`
🧑🏫
This output should be 3 print positions wide, with leading and trailing `+`
a
```
After this PR, it produces this output:
```rust
This output should be 3 print positions wide, with leading and trailing `+`
+🧑🏫+
This output should be 3 print positions wide, with leading and trailing `+`
+a+
```
# User-Facing Changes
Users may have to undo fixes they may have introduced to work around the
former behavior. I have one such in my prompt string that I can now
revert.
# Tests + Formatting
Don't forget to add tests that cover your changes.
-- Done
Make sure you've run and fixed any issues with these commands:
- [x] `cargo fmt --all -- --check` to check standard code formatting
(`cargo fmt --all` applies these changes)
- [x] `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A
clippy::needless_collect` to check that you're using the standard code
style
- [x] `cargo test --workspace` to check that all tests pass
# After Submitting
`fill` command not documented in the book, and it still talks about `str
lpad/rpad`. I'll fix.
Note added dependency on a new library `print-positions`, which is an
iterator that yields a complete print position (cluster + Ansi sequence)
per call. Should this be vendored?
2023-02-20 13:32:20 +01:00
|
|
|
] }
|
2022-10-16 23:51:15 +02:00
|
|
|
|
2021-07-30 22:02:16 +02:00
|
|
|
[dev-dependencies]
|
2024-03-06 23:08:14 +01:00
|
|
|
nu-test-support = { path = "./crates/nu-test-support", version = "0.91.1" }
|
2023-05-26 17:32:48 +02:00
|
|
|
assert_cmd = "2.0"
|
Use XDG_CONFIG_HOME before default config directory (#12118)
<!--
if this PR closes one or more issues, you can automatically link the PR
with
them by using one of the [*linking
keywords*](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword),
e.g.
- this PR should close #xxxx
- fixes #xxxx
you can also mention related issues, PRs or discussions!
-->
Closes #12103
# Description
<!--
Thank you for improving Nushell. Please, check our [contributing
guide](../CONTRIBUTING.md) and talk to the core team before making major
changes.
Description of your pull request goes here. **Provide examples and/or
screenshots** if your changes affect the user experience.
-->
As described in #12103, this PR makes Nushell use `XDG_CONFIG_HOME` as
the config directory if it exists. Otherwise, it uses the old behavior,
which was to use `dirs_next::config_dir()`.
Edit: We discussed choosing between `XDG_CONFIG_HOME` and the default
config directory in Discord and decided against it, at least for now.
<s>@kubouch also suggested letting users choose between
`XDG_CONFIG_HOME` and the default config directory if config files
aren't found on startup and `XDG_CONFIG_HOME` is set to a value
different from the default config directory</s>
On Windows and MacOS, if the `XDG_CONFIG_HOME` variable is set but
`XDG_CONFIG_HOME` is either empty or doesn't exist *and* the old config
directory is non-empty, Nushell will issue a warning on startup saying
that it won't move files from the old config directory to the new one.
To do this, I had to add a `nu_path::config_dir_old()` function. I
assume that at some point, we will remove the warning message and the
function can be removed too. Alternatively, instead of having that
function there, `main.rs` could directly call `dirs_next::config_dir()`.
# User-Facing Changes
<!-- List of all changes that impact the user experience here. This
helps us keep track of breaking changes. -->
When `$env.XDG_CONFIG_HOME` is set to an absolute path, Nushell will use
`$"($env.XDG_CONFIG_HOME)/nushell"` as its config directory (previously,
this only worked on Linux).
To use `App Data\Roaming` (Windows) or `Library/Application Support`
(MacOS) instead (the old behavior), one can either leave
`XDG_CONFIG_HOME` unset or set it to an empty string.
If `XDG_CONFIG_HOME` is set, but to a non-absolute/invalid path, Nushell
will report an error on startup and use the default config directory
instead:
![image](https://github.com/nushell/nushell/assets/45539777/a434fe04-b7c8-4e95-b50c-80628008ad08)
On Windows and MacOS, if the `XDG_CONFIG_HOME` variable is set but
`XDG_CONFIG_HOME` is either empty or doesn't exist *and* the old config
directory is non-empty, Nushell will issue a warning on startup saying
that it won't move files from the old config directory to the new one.
![image](https://github.com/nushell/nushell/assets/45539777/1686cc17-4083-4c12-aecf-1d832460ca57)
# Tests + Formatting
<!--
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` to
check that you're using the standard code style
- `cargo test --workspace` to check that all tests pass (on Windows make
sure to [enable developer
mode](https://learn.microsoft.com/en-us/windows/apps/get-started/developer-mode-features-and-debugging))
- `cargo run -- -c "use std testing; testing run-tests --path
crates/nu-std"` to run the tests for the standard library
> **Note**
> from `nushell` you can also use the `toolkit` as follows
> ```bash
> use toolkit.nu # or use an `env_change` hook to activate it
automatically
> toolkit check pr
> ```
-->
The existing config path tests have been modified to use
`XDG_CONFIG_HOME` to change the config directory on all OSes, not just
Linux.
# 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.
-->
The documentation will have to be updated to note that Nushell uses
`XDG_CONFIG_HOME` now. As @fdncred pointed out, it's possible for people
to set `XDG_CONFIG_HOME` to, say, `~/.config/nushell` rather than
`~/.config`, so the documentation could warn about that mistake.
2024-03-11 12:15:46 +01:00
|
|
|
dirs-next = "2.0"
|
2024-03-01 19:09:21 +01:00
|
|
|
divan = "0.1.14"
|
2023-07-24 07:41:03 +02:00
|
|
|
pretty_assertions = "1.4"
|
2024-03-07 23:40:31 +01:00
|
|
|
rstest = { workspace = true, default-features = false }
|
2024-02-19 02:36:41 +01:00
|
|
|
serial_test = "3.0"
|
2024-03-07 23:40:31 +01:00
|
|
|
tempfile = { workspace = true }
|
2021-12-07 21:06:34 +01:00
|
|
|
|
|
|
|
[features]
|
2023-01-23 19:57:40 +01:00
|
|
|
plugin = [
|
2024-03-07 23:40:31 +01:00
|
|
|
"nu-plugin",
|
|
|
|
"nu-cli/plugin",
|
|
|
|
"nu-parser/plugin",
|
|
|
|
"nu-command/plugin",
|
|
|
|
"nu-protocol/plugin",
|
|
|
|
"nu-engine/plugin",
|
2023-01-23 19:57:40 +01:00
|
|
|
]
|
2024-01-20 15:04:06 +01:00
|
|
|
default = ["default-no-clipboard", "system-clipboard"]
|
|
|
|
# Enables convenient omitting of the system-clipboard feature, as it leads to problems in ci on linux
|
|
|
|
# See https://github.com/nushell/nushell/pull/11535
|
|
|
|
default-no-clipboard = [
|
2024-03-07 23:40:31 +01:00
|
|
|
"plugin",
|
|
|
|
"which-support",
|
|
|
|
"trash-support",
|
|
|
|
"sqlite",
|
|
|
|
"mimalloc",
|
2024-01-20 15:04:06 +01:00
|
|
|
]
|
2021-12-07 21:06:34 +01:00
|
|
|
stable = ["default"]
|
2023-05-22 17:42:38 +02:00
|
|
|
wasi = ["nu-cmd-lang/wasi"]
|
2023-06-14 23:12:55 +02:00
|
|
|
# NOTE: individual features are also passed to `nu-cmd-lang` that uses them to generate the feature matrix in the `version` command
|
2022-11-21 18:24:25 +01:00
|
|
|
|
2023-10-11 01:13:28 +02:00
|
|
|
# Enable to statically link OpenSSL (perl is required, to build OpenSSL https://docs.rs/openssl/latest/openssl/);
|
2023-09-09 22:34:07 +02:00
|
|
|
# otherwise the system version will be used. Not enabled by default because it takes a while to build
|
2023-05-22 17:42:38 +02:00
|
|
|
static-link-openssl = ["dep:openssl", "nu-cmd-lang/static-link-openssl"]
|
2021-12-07 21:06:34 +01:00
|
|
|
|
2023-06-15 00:27:12 +02:00
|
|
|
mimalloc = ["nu-cmd-lang/mimalloc", "dep:mimalloc"]
|
2024-01-20 15:04:06 +01:00
|
|
|
system-clipboard = ["reedline/system_clipboard"]
|
2023-06-15 00:27:12 +02:00
|
|
|
|
2021-12-07 21:06:34 +01:00
|
|
|
# Stable (Default)
|
2023-05-22 17:42:38 +02:00
|
|
|
which-support = ["nu-command/which-support", "nu-cmd-lang/which-support"]
|
|
|
|
trash-support = ["nu-command/trash-support", "nu-cmd-lang/trash-support"]
|
2022-01-20 19:02:53 +01:00
|
|
|
|
2021-12-07 21:06:34 +01:00
|
|
|
# Dataframe feature for nushell
|
2023-06-14 23:12:55 +02:00
|
|
|
dataframe = ["dep:nu-cmd-dataframe", "nu-cmd-lang/dataframe"]
|
2021-12-07 21:06:34 +01:00
|
|
|
|
2022-11-23 01:58:11 +01:00
|
|
|
# SQLite commands for nushell
|
2023-05-22 17:42:38 +02:00
|
|
|
sqlite = ["nu-command/sqlite", "nu-cmd-lang/sqlite"]
|
2022-04-24 11:29:21 +02:00
|
|
|
|
2021-12-07 21:06:34 +01:00
|
|
|
[profile.release]
|
2023-01-23 19:57:40 +01:00
|
|
|
opt-level = "s" # Optimize for size
|
2022-02-28 13:13:24 +01:00
|
|
|
strip = "debuginfo"
|
2022-03-10 14:37:24 +01:00
|
|
|
lto = "thin"
|
2022-02-28 13:13:24 +01:00
|
|
|
|
2022-03-16 23:21:06 +01:00
|
|
|
# build with `cargo build --profile profiling`
|
2022-02-28 13:13:24 +01:00
|
|
|
# to analyze performance with tooling like linux perf
|
|
|
|
[profile.profiling]
|
|
|
|
inherits = "release"
|
|
|
|
strip = false
|
|
|
|
debug = true
|
2021-12-07 21:06:34 +01:00
|
|
|
|
2022-05-16 06:02:11 +02:00
|
|
|
# build with `cargo build --profile ci`
|
|
|
|
# to analyze performance with tooling like linux perf
|
|
|
|
[profile.ci]
|
|
|
|
inherits = "dev"
|
|
|
|
strip = false
|
|
|
|
debug = false
|
|
|
|
|
2019-12-10 01:05:40 +01:00
|
|
|
# Main nu binary
|
2019-06-27 06:56:48 +02:00
|
|
|
[[bin]]
|
|
|
|
name = "nu"
|
|
|
|
path = "src/main.rs"
|
2023-02-12 23:22:00 +01:00
|
|
|
bench = false
|
2022-09-29 20:37:48 +02:00
|
|
|
|
2022-10-17 23:45:28 +02:00
|
|
|
# To use a development version of a dependency please use a global override here
|
|
|
|
# changing versions in each sub-crate of the workspace is tedious
|
2024-02-12 15:30:41 +01:00
|
|
|
[patch.crates-io]
|
2024-03-10 20:31:54 +01:00
|
|
|
reedline = { git = "https://github.com/nushell/reedline", branch = "main" }
|
2023-03-13 23:38:18 +01:00
|
|
|
# nu-ansi-term = {git = "https://github.com/nushell/nu-ansi-term.git", branch = "main"}
|
2023-01-05 20:39:54 +01:00
|
|
|
|
|
|
|
# Run all benchmarks with `cargo bench`
|
|
|
|
# Run individual benchmarks like `cargo bench -- <regex>` e.g. `cargo bench -- parse`
|
|
|
|
[[bench]]
|
2023-01-11 02:51:25 +01:00
|
|
|
name = "benchmarks"
|
2023-01-23 19:57:40 +01:00
|
|
|
harness = false
|