From 1f8ce5ff6c51eca7b696e8014801e0a95b8e78dd Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 16 Jan 2022 13:34:45 -0800 Subject: [PATCH] Stop ignoring initial command in read -c `read` allows specifying the initial command line text. This was text got accidentally ignored starting in a32248277f026fb. Fix this regression and add a test. Fixes #8633 --- src/reader.cpp | 7 ++++++- tests/pexpects/read.py | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/reader.cpp b/src/reader.cpp index 08f2f323b..62c3af304 100644 --- a/src/reader.cpp +++ b/src/reader.cpp @@ -4189,7 +4189,12 @@ bool reader_data_t::jump(jump_direction_t dir, jump_precision_t precision, edita return success; } -maybe_t reader_readline(int nchars) { return current_data()->readline(nchars); } +maybe_t reader_readline(int nchars) { + auto *data = current_data(); + // Apply any outstanding commandline changes (#8633). + data->apply_commandline_state_changes(); + return data->readline(nchars); +} int reader_reading_interrupted() { int res = reader_test_and_clear_interrupted(); diff --git a/tests/pexpects/read.py b/tests/pexpects/read.py index 3e0d416ef..929f7a796 100644 --- a/tests/pexpects/read.py +++ b/tests/pexpects/read.py @@ -54,6 +54,18 @@ expect_prompt() expect_marker(2) print_var_contents("foo", "bar") +# read -c (see #8633) +sendline(r"read -c init_text somevar && echo $somevar") +expect_re("\r\n?read> init_text$") +sendline("someval") +expect_prompt("someval\r\n") + +sendline(r"read --command='some other text' somevar && echo $somevar") +expect_re("\r\n?read> some other text$") +sendline("another value") +expect_prompt("another value\r\n") + + # read -s sendline("read -s foo")