about summary refs log tree commit diff
path: root/Src
diff options
context:
space:
mode:
Diffstat (limited to 'Src')
-rw-r--r--Src/Zle/zle_main.c1
-rw-r--r--Src/init.c18
2 files changed, 17 insertions, 2 deletions
diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c
index 0e34a3fc3..8c65d217f 100644
--- a/Src/Zle/zle_main.c
+++ b/Src/Zle/zle_main.c
@@ -1232,6 +1232,7 @@ execzlefunc(Thingy func, char **args, int set_bindk)
 	    !zlell && isfirstln && (zlereadflags & ZLRF_IGNOREEOF)) {
 	    showmsg((!islogin) ? "zsh: use 'exit' to exit." :
 		    "zsh: use 'logout' to logout.");
+	    use_exit_printed = 1;
 	    eofsent = 1;
 	    ret = 1;
 	} else {
diff --git a/Src/init.c b/Src/init.c
index 9d6a0514e..50bdec59d 100644
--- a/Src/init.c
+++ b/Src/init.c
@@ -1245,6 +1245,13 @@ fallback_compctlread(char *name, UNUSED(char **args), UNUSED(Options ops), UNUSE
 }
 
 /*
+ * Used by zle to indicate it has already printed a "use 'exit' to exit"
+ * message.
+ */
+/**/
+mod_export int use_exit_printed;
+
+/*
  * This is real main entry point. This has to be mod_export'ed
  * so zsh.exe can found it on Cygwin
  */
@@ -1313,6 +1320,7 @@ 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
@@ -1343,7 +1351,13 @@ zsh_main(UNUSED(int argc), char **argv)
 	    stopmsg = 1;
 	    zexit(lastval, 0);
 	}
-	zerrnam("zsh", (!islogin) ? "use 'exit' to exit."
-		: "use 'logout' to logout.");
+	/*
+	 * Don't print the message if it was already handled by
+	 * zle, since that makes special arrangements to keep
+	 * the display tidy.
+	 */
+	if (!use_exit_printed)
+	    zerrnam("zsh", (!islogin) ? "use 'exit' to exit."
+		    : "use 'logout' to logout.");
     }
 }