mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-04-20 07:51:14 -03:00
Fix regression on paste in non-interactive read
As reported in https://github.com/fish-shell/fish-shell/issues/11836#issuecomment-3369973613, running "fish -c read" and pasting something would result this error from __fish_paste: commandline: Can not set commandline in non-interactive mode Bisects to32c36aa5f8(builtins commandline/complete: allow handling commandline before reader initialization, 2025-06-13). That commit allowed "commandline" to work only in interactive sessions, i.e. if stdin is a TTY or if overridden with -i. But this is not the only case where fish might read from the TTY. The notable other case is builtin read, which also works in noninteractive shells. Let's allow "commandline" at least after we have initialized the TTY for the first reader, which restores the relevant historical behavior (which is weird, e.g. « fish -c 'read; commandline foo' »). (cherry picked from commita958f23f63)
This commit is contained in:
@@ -9,6 +9,7 @@ This release fixes the following regressions identified in 4.1.0:
|
||||
- Stopped printing output that would cause a glitch on old versions of Midnight Commander (:issue:`11869`).
|
||||
- Added a fix for some configurations of Zellij where :kbd:`escape` key processing was delayed (:issue:`11868`).
|
||||
- Fixed a case where the :doc:`web-based configuration tool <cmds/fish_config>` would generate invalid configuration (:issue:`11861`).
|
||||
- Fixed a case where pasting into ``fish -c read`` would fail with a noisy error (:issue:`11836`).
|
||||
- Fixed a case where upgrading fish would break old versions of fish that were still running.
|
||||
|
||||
In general, fish still needs to be restarted after it is upgraded,
|
||||
|
||||
@@ -635,7 +635,7 @@ pub fn commandline(parser: &Parser, streams: &mut IoStreams, args: &mut [&wstr])
|
||||
transient = parser.libdata().transient_commandline.clone().unwrap();
|
||||
current_buffer = &transient;
|
||||
current_cursor_pos = transient.len();
|
||||
} else if is_interactive_session() {
|
||||
} else if parser.interactive_initialized.load() || is_interactive_session() {
|
||||
current_buffer = &rstate.text;
|
||||
current_cursor_pos = rstate.cursor_pos;
|
||||
} else {
|
||||
|
||||
@@ -458,7 +458,7 @@ pub fn complete(parser: &Parser, streams: &mut IoStreams, argv: &mut [&wstr]) ->
|
||||
None => {
|
||||
// No argument given, try to use the current commandline.
|
||||
let commandline_state = commandline_get_state(true);
|
||||
if !is_interactive_session() {
|
||||
if !parser.interactive_initialized.load() && !is_interactive_session() {
|
||||
streams.err.append(cmd);
|
||||
streams
|
||||
.err
|
||||
|
||||
Reference in New Issue
Block a user