diff --git a/src/reader.rs b/src/reader.rs index d797b7ba0..5e21b7760 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -500,6 +500,7 @@ pub struct ReaderData { /// The source of input events. inputter: Inputter, + queued_repaint: bool, /// The history. history: Arc, /// The history search. @@ -914,6 +915,9 @@ pub fn reader_execute_readline_cmd(ch: CharEvent) { | ReadlineCmd::Repaint | ReadlineCmd::ForceRepaint ) { + data.queued_repaint = true; + } + if data.queued_repaint { data.inputter.queue_char(ch); return; } @@ -1091,6 +1095,7 @@ impl ReaderData { last_flash: Default::default(), screen: Screen::new(), inputter, + queued_repaint: false, history, history_search: Default::default(), history_pager_active: Default::default(), @@ -2220,6 +2225,7 @@ impl ReaderData { } } rl::RepaintMode | rl::ForceRepaint | rl::Repaint => { + self.queued_repaint = false; self.parser().libdata_mut().pods.is_repaint = true; if c == rl::RepaintMode { // Repaint the mode-prompt only if possible. diff --git a/tests/checks/tmux-transient.fish b/tests/checks/tmux-transient.fish new file mode 100644 index 000000000..c595fbe60 --- /dev/null +++ b/tests/checks/tmux-transient.fish @@ -0,0 +1,23 @@ +#RUN: %fish %s +#REQUIRES: command -v tmux + +set -g isolated_tmux_fish_extra_args -C ' + function fish_prompt + if set -q transient + printf "> " + set --erase transient + else + printf "> full prompt > " + end + end + bind enter "set transient true; commandline -f repaint execute" +' + +isolated-tmux-start + +isolated-tmux send-keys 'echo foo' Enter +tmux-sleep +isolated-tmux capture-pane -p +# CHECK: > echo foo +# CHECK: foo +# CHECK: > full prompt >