changeset 12146:59c1e09cf1a9 v8.0.0953

patch 8.0.0953: get "no write since last change" error in terminal window commit https://github.com/vim/vim/commit/f5be7cd01642fafc4b7d68894eb60cca60c7a405 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Aug 17 16:55:13 2017 +0200 patch 8.0.0953: get "no write since last change" error in terminal window Problem: Get "no write since last change" error in terminal window. Solution: Use another message when closing a terminal window. Make ":quit!" also end the job.
author Christian Brabandt <cb@256bit.org>
date Thu, 17 Aug 2017 17:00:05 +0200
parents e3d303c068fc
children 0d67653a0e9e
files src/buffer.c src/ex_cmds.c src/ex_cmds2.c src/ex_docmd.c src/globals.h src/proto/buffer.pro src/quickfix.c src/terminal.c src/version.c
diffstat 9 files changed, 35 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -473,8 +473,8 @@ close_buffer(
     {
 	if (term_job_running(buf->b_term))
 	{
-	    if (wipe_buf)
-		/* Wiping out a terminal buffer kills the job. */
+	    if (wipe_buf || unload_buf)
+		/* Wiping out or unloading a terminal buffer kills the job. */
 		free_terminal(buf);
 	    else
 	    {
@@ -1648,7 +1648,7 @@ do_buffer(
 	if (bufIsChanged(curbuf))
 #endif
 	{
-	    EMSG(_(e_nowrtmsg));
+	    no_write_message();
 	    return FAIL;
 	}
     }
@@ -1897,6 +1897,28 @@ do_autochdir(void)
 }
 #endif
 
+    void
+no_write_message(void)
+{
+#ifdef FEAT_TERMINAL
+    if (term_job_running(curbuf->b_term))
+	EMSG(_("E948: Job still running (add ! to end the job)"));
+    else
+#endif
+	EMSG(_("E37: No write since last change (add ! to override)"));
+}
+
+    void
+no_write_message_nobang(void)
+{
+#ifdef FEAT_TERMINAL
+    if (term_job_running(curbuf->b_term))
+	EMSG(_("E948: Job still running"));
+    else
+#endif
+	EMSG(_("E37: No write since last change"));
+}
+
 /*
  * functions for dealing with the buffer list
  */
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -3572,7 +3572,7 @@ getfile(
 	{
 	    if (other)
 		--no_wait_return;
-	    EMSG(_(e_nowrtmsg));
+	    no_write_message();
 	    retval = GETFILE_NOT_WRITTEN;	/* file has been changed */
 	    goto theend;
 	}
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -1934,9 +1934,9 @@ check_changed(buf_T *buf, int flags)
 	}
 #endif
 	if (flags & CCGD_EXCMD)
-	    EMSG(_(e_nowrtmsg));
+	    no_write_message();
 	else
-	    EMSG(_(e_nowrtmsg_nobang));
+	    no_write_message_nobang();
 	return TRUE;
     }
     return FALSE;
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -7468,7 +7468,7 @@ ex_win_close(
 	else
 # endif
 	{
-	    EMSG(_(e_nowrtmsg));
+	    no_write_message();
 	    return;
 	}
     }
--- a/src/globals.h
+++ b/src/globals.h
@@ -1516,8 +1516,6 @@ EXTERN char_u e_notcreate[]	INIT(= N_("E
 EXTERN char_u e_notmp[]		INIT(= N_("E483: Can't get temp file name"));
 EXTERN char_u e_notopen[]	INIT(= N_("E484: Can't open file %s"));
 EXTERN char_u e_notread[]	INIT(= N_("E485: Can't read file %s"));
-EXTERN char_u e_nowrtmsg[]	INIT(= N_("E37: No write since last change (add ! to override)"));
-EXTERN char_u e_nowrtmsg_nobang[]   INIT(= N_("E37: No write since last change"));
 EXTERN char_u e_null[]		INIT(= N_("E38: Null argument"));
 #if defined(FEAT_DIGRAPHS) || defined(FEAT_TIMERS)
 EXTERN char_u e_number_exp[]	INIT(= N_("E39: Number expected"));
--- a/src/proto/buffer.pro
+++ b/src/proto/buffer.pro
@@ -13,6 +13,8 @@ int do_buffer(int action, int start, int
 void set_curbuf(buf_T *buf, int action);
 void enter_buffer(buf_T *buf);
 void do_autochdir(void);
+void no_write_message(void);
+void no_write_message_nobang(void);
 buf_T *buflist_new(char_u *ffname, char_u *sfname, linenr_T lnum, int flags);
 void free_buf_options(buf_T *buf, int free_p_ff);
 int buflist_getfile(int n, linenr_T lnum, int options, int forceit);
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -2327,7 +2327,7 @@ win_found:
 	     * set b_p_ro flag). */
 	    if (!can_abandon(curbuf, forceit))
 	    {
-		EMSG(_(e_nowrtmsg));
+		no_write_message();
 		ok = FALSE;
 	    }
 	    else
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -267,7 +267,7 @@ term_start(typval_T *argvar, jobopt_T *o
 	/* Create a new buffer in the current window. */
 	if (!can_abandon(curbuf, forceit))
 	{
-	    EMSG(_(e_nowrtmsg));
+	    no_write_message();
 	    vim_free(term);
 	    return;
 	}
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    953,
+/**/
     952,
 /**/
     951,