From ac1c48349664604fbaf5a69130be94ad0f472682 Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Thu, 10 May 2007 11:36:22 +0000 Subject: 23409: disable prompt_sp output after ^D was seen and message printed --- ChangeLog | 7 +++++++ Src/init.c | 2 +- Src/utils.c | 7 +++++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9e931aa82..af3b2bf3a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-05-10 Andrey Borzenkov + + * 23409 with extra comment: Src/init.c, Src/utils.c: after ZLE + displayed "use 'exit' to exit" message, PROMPT_SP will overwrite + prompt without ZLE knowing about it. Disable PROMPT_SP output if + message was printed. + 2007-05-10 Peter Stephenson * Peter A. Castro: 23408: zftp account handling was broken. diff --git a/Src/init.c b/Src/init.c index b987f1399..6c5421e6f 100644 --- a/Src/init.c +++ b/Src/init.c @@ -123,6 +123,7 @@ loop(int toplevel, int justonce) errflag = 0; } } + use_exit_printed = 0; intr(); /* interrupts on */ lexinit(); /* initialize lexical state */ if (!(prog = parse_event())) { /* if we couldn't parse a list */ @@ -1335,7 +1336,6 @@ zsh_main(UNUSED(int argc), char **argv) init_misc(); for (;;) { - use_exit_printed = 0; /* * See if we can free up some of jobtab. * We only do this at top level, because if we are diff --git a/Src/utils.c b/Src/utils.c index 35915a2e7..98d441aa0 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -1156,10 +1156,13 @@ preprompt(void) int period = getiparam("PERIOD"); int mailcheck = getiparam("MAILCHECK"); - if (isset(PROMPTSP) && isset(PROMPTCR)) { + if (isset(PROMPTSP) && isset(PROMPTCR) && !use_exit_printed) { /* The PROMPT_SP heuristic will move the prompt down to a new line * if there was any dangling output on the line (assuming the terminal - * has automatic margins, but we try even if hasam isn't set). */ + * has automatic margins, but we try even if hasam isn't set). + * Unfortunately it interacts badly with ZLE displaying message + * when ^D has been pressed. So just disable PROMPT_SP logic in + * this case */ char *str; int percents = opts[PROMPTPERCENT]; opts[PROMPTPERCENT] = 1; -- cgit 1.4.1