nushell/crates
Bob Hyman 0a8c9b22b0
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 06:32:20 -06:00
..
nu-cli Bump sysinfo from 0.27.7 to 0.28.0 (#8132) 2023-02-19 20:58:07 -06:00
nu-color-config Disable auto-benchmark harness for crates (#8057) 2023-02-12 22:22:00 +00:00
nu-command string | fill counts clusters, not graphemes; and doesn't count ANSI escape codes (#8134) 2023-02-20 06:32:20 -06:00
nu-engine Bump sysinfo from 0.27.7 to 0.28.0 (#8132) 2023-02-19 20:58:07 -06:00
nu-explore Disable auto-benchmark harness for crates (#8057) 2023-02-12 22:22:00 +00:00
nu-glob Disable auto-benchmark harness for crates (#8057) 2023-02-12 22:22:00 +00:00
nu-json Disable auto-benchmark harness for crates (#8057) 2023-02-12 22:22:00 +00:00
nu-parser Bare word improvements (#8066) 2023-02-16 02:30:56 +00:00
nu-path Disable auto-benchmark harness for crates (#8057) 2023-02-12 22:22:00 +00:00
nu-plugin Disable auto-benchmark harness for crates (#8057) 2023-02-12 22:22:00 +00:00
nu-pretty-hex Disable auto-benchmark harness for crates (#8057) 2023-02-12 22:22:00 +00:00
nu-protocol allow date grouping in group-by (#8084) 2023-02-15 19:10:55 +00:00
nu-system Disable auto-benchmark harness for crates (#8057) 2023-02-12 22:22:00 +00:00
nu-table nu-table/ table --collapse style fix (#8041) 2023-02-16 19:32:07 +00:00
nu-term-grid Disable auto-benchmark harness for crates (#8057) 2023-02-12 22:22:00 +00:00
nu-test-support Move some from xxx commands to plugin (#7942) 2023-02-13 12:42:08 +00:00
nu-utils update colors in dark theme (#8090) 2023-02-16 06:59:26 -06:00
nu_plugin_custom_values Disable auto-benchmark harness for crates (#8057) 2023-02-12 22:22:00 +00:00
nu_plugin_example Disable auto-benchmark harness for crates (#8057) 2023-02-12 22:22:00 +00:00
nu_plugin_formats Move some from xxx commands to plugin (#7942) 2023-02-13 12:42:08 +00:00
nu_plugin_gstat Disable auto-benchmark harness for crates (#8057) 2023-02-12 22:22:00 +00:00
nu_plugin_inc Disable auto-benchmark harness for crates (#8057) 2023-02-12 22:22:00 +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 Disable auto-benchmark harness for crates (#8057) 2023-02-12 22:22:00 +00: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.