mirror of
https://github.com/nushell/nushell.git
synced 2024-11-07 17:14:23 +01:00
fix: fix cursor position when cursor is at the end of the commandline (#9030)
# Description Fix getting the cursor position, when it's at the end of the commandline. # User-Facing Changes <!-- List of all changes that impact the user experience here. This helps us keep track of breaking changes. --> # Tests + Formatting # After Submitting
This commit is contained in:
parent
3076378373
commit
b37662c7e1
@ -118,8 +118,9 @@ impl Command for Commandline {
|
|||||||
.expect("repl cursor pos mutex");
|
.expect("repl cursor pos mutex");
|
||||||
let char_pos = buffer
|
let char_pos = buffer
|
||||||
.grapheme_indices(true)
|
.grapheme_indices(true)
|
||||||
|
.chain(std::iter::once((*cursor_pos, "")))
|
||||||
.position(|(i, _c)| i == *cursor_pos)
|
.position(|(i, _c)| i == *cursor_pos)
|
||||||
.unwrap_or(buffer.len());
|
.expect("Cursor position isn't on a grapheme boundary");
|
||||||
Ok(Value::String {
|
Ok(Value::String {
|
||||||
val: char_pos.to_string(),
|
val: char_pos.to_string(),
|
||||||
span: call.head,
|
span: call.head,
|
||||||
|
@ -47,14 +47,14 @@ fn commandline_test_replace() -> TestResult {
|
|||||||
fn commandline_test_cursor() -> TestResult {
|
fn commandline_test_cursor() -> TestResult {
|
||||||
run_test(
|
run_test(
|
||||||
"commandline --replace '0👩❤️👩2'\n\
|
"commandline --replace '0👩❤️👩2'\n\
|
||||||
commandline --cursor '1' \n\
|
commandline --cursor '1'\n\
|
||||||
commandline --insert 'x'\n\
|
commandline --insert 'x'\n\
|
||||||
commandline",
|
commandline",
|
||||||
"0x👩❤️👩2",
|
"0x👩❤️👩2",
|
||||||
)?;
|
)?;
|
||||||
run_test(
|
run_test(
|
||||||
"commandline --replace '0👩❤️👩2'\n\
|
"commandline --replace '0👩❤️👩2'\n\
|
||||||
commandline --cursor '2' \n\
|
commandline --cursor '2'\n\
|
||||||
commandline --insert 'x'\n\
|
commandline --insert 'x'\n\
|
||||||
commandline",
|
commandline",
|
||||||
"0👩❤️👩x2",
|
"0👩❤️👩x2",
|
||||||
@ -62,16 +62,36 @@ fn commandline_test_cursor() -> TestResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn commandline_test_cursor_show_pos() -> TestResult {
|
fn commandline_test_cursor_show_pos_begin() -> TestResult {
|
||||||
|
run_test(
|
||||||
|
"commandline --replace '0👩❤️👩'\n\
|
||||||
|
commandline --cursor '0'\n\
|
||||||
|
commandline --cursor",
|
||||||
|
"0",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn commandline_test_cursor_show_pos_end() -> TestResult {
|
||||||
|
run_test(
|
||||||
|
"commandline --replace '0👩❤️👩'\n\
|
||||||
|
commandline --cursor '2'\n\
|
||||||
|
commandline --cursor",
|
||||||
|
"2",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn commandline_test_cursor_show_pos_mid() -> TestResult {
|
||||||
run_test(
|
run_test(
|
||||||
"commandline --replace '0👩❤️👩2'\n\
|
"commandline --replace '0👩❤️👩2'\n\
|
||||||
commandline --cursor '1' \n\
|
commandline --cursor '1'\n\
|
||||||
commandline --cursor",
|
commandline --cursor",
|
||||||
"1",
|
"1",
|
||||||
)?;
|
)?;
|
||||||
run_test(
|
run_test(
|
||||||
"commandline --replace '0👩❤️👩2'\n\
|
"commandline --replace '0👩❤️👩2'\n\
|
||||||
commandline --cursor '2' \n\
|
commandline --cursor '2'\n\
|
||||||
commandline --cursor",
|
commandline --cursor",
|
||||||
"2",
|
"2",
|
||||||
)
|
)
|
||||||
@ -81,7 +101,7 @@ fn commandline_test_cursor_show_pos() -> TestResult {
|
|||||||
fn commandline_test_cursor_too_small() -> TestResult {
|
fn commandline_test_cursor_too_small() -> TestResult {
|
||||||
run_test(
|
run_test(
|
||||||
"commandline --replace '123456'\n\
|
"commandline --replace '123456'\n\
|
||||||
commandline --cursor '-1' \n\
|
commandline --cursor '-1'\n\
|
||||||
commandline --insert '0'\n\
|
commandline --insert '0'\n\
|
||||||
commandline",
|
commandline",
|
||||||
"0123456",
|
"0123456",
|
||||||
@ -92,7 +112,7 @@ fn commandline_test_cursor_too_small() -> TestResult {
|
|||||||
fn commandline_test_cursor_too_large() -> TestResult {
|
fn commandline_test_cursor_too_large() -> TestResult {
|
||||||
run_test(
|
run_test(
|
||||||
"commandline --replace '123456'\n\
|
"commandline --replace '123456'\n\
|
||||||
commandline --cursor '10' \n\
|
commandline --cursor '10'\n\
|
||||||
commandline --insert '0'\n\
|
commandline --insert '0'\n\
|
||||||
commandline",
|
commandline",
|
||||||
"1234560",
|
"1234560",
|
||||||
|
Loading…
Reference in New Issue
Block a user