mirror of
https://github.com/nushell/nushell.git
synced 2024-12-12 18:20:55 +01:00
b8efd2a347
Related to #14181 # Description Our understanding of `ESC[3J` has apparently been wrong. And I say "our" because I posted a [Super User answer](https://superuser.com/a/1738611/1210833) a couple of years ago with the same misconception (now fixed). In addition, the [crossterm crate doc](https://docs.rs/crossterm/latest/crossterm/terminal/enum.ClearType.html) is wrong on the topic. `ESC[3J` doesn't clear the screen plus the scrollback; it *only* clears the scrollback. Reference the official [Xterm Control Sequences doc](https://www.xfree86.org/4.8.0/ctlseqs.html). > CSI P s J > > Erase in Display (ED) > > P s = 0 → Erase Below (default) > P s = 1 → Erase Above > P s = 2 → Erase All > P s = 3 → Erase Saved Lines (xterm) This also means that: ```nu $"(ansi clear_entire_screen_plus_buffer)" ``` ... doesn't. This PR updates it to `ansi clear_scrollback_buffer` (short-code remains the same). # User-Facing Changes Breaking-change: `ansi clear_entire_screen_plus_buffer` is renamed `ansi clear_scrollback_buffer` # Tests + Formatting - 🟢 `toolkit fmt` - 🟢 `toolkit clippy` - 🟢 `toolkit test` - 🟢 `toolkit test stdlib` # After Submitting Self-documenting command via `ansi -l`
30 lines
832 B
Rust
30 lines
832 B
Rust
use nu_test_support::nu;
|
|
|
|
#[test]
|
|
fn test_ansi_shows_error_on_escape() {
|
|
let actual = nu!(r"ansi --escape \");
|
|
|
|
assert!(actual.err.contains("no need for escape characters"))
|
|
}
|
|
|
|
#[test]
|
|
fn test_ansi_list_outputs_table() {
|
|
let actual = nu!("ansi --list | length");
|
|
|
|
assert_eq!(actual.out, "425");
|
|
}
|
|
|
|
#[test]
|
|
fn test_ansi_codes() {
|
|
let actual = nu!("$'(ansi clear_scrollback_buffer)'");
|
|
assert_eq!(actual.out, "\x1b[3J");
|
|
|
|
// Currently, bg is placed before fg in the results
|
|
// It's okay if something internally changes this, but
|
|
// if so, the test case will need to be updated to:
|
|
// assert_eq!(actual.out, "\x1b[31;48;2;0;255;0mHello\x1b[0m");
|
|
|
|
let actual = nu!("$'(ansi { fg: red, bg: \"#00ff00\" })Hello(ansi reset)'");
|
|
assert_eq!(actual.out, "\x1b[48;2;0;255;0;31mHello\x1b[0m");
|
|
}
|