updated for version 7.4.627
Problem:    The last screen cell is not updated.
Solution:   Respect the "tn" termcap feature. (Hayaki Saito)
diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt
index 2076e83..842f69b 100644
--- a/runtime/doc/term.txt
+++ b/runtime/doc/term.txt
@@ -224,10 +224,11 @@
 the last two characters of the option name.  Only one termcap code is
 required: Cursor motion, 't_cm'.
 
-The options 't_da', 't_db', 't_ms', 't_xs' represent flags in the termcap.
-When the termcap flag is present, the option will be set to "y".  But any
-non-empty string means that the flag is set.  An empty string means that the
-flag is not set.  't_CS' works like this too, but it isn't a termcap flag.
+The options 't_da', 't_db', 't_ms', 't_xs', 't_xn' represent flags in the
+termcap.  When the termcap flag is present, the option will be set to "y".
+But any non-empty string means that the flag is set.  An empty string means
+that the flag is not set.  't_CS' works like this too, but it isn't a termcap
+flag.
 
 OUTPUT CODES
 	option	meaning	~
@@ -281,6 +282,9 @@
 	t_vs	cursor very visible				*t_vs* *'t_vs'*
 								*t_xs* *'t_xs'*
 	t_xs	if non-empty, standout not erased by overwriting (hpterm)
+								*t_xn* *'t_xn'*
+	t_xn	if non-empty, character writing at the last cell of screen
+		didn't causes scrolling
 	t_ZH	italics mode					*t_ZH* *'t_ZH'*
 	t_ZR	italics end					*t_ZR* *'t_ZR'*
 
diff --git a/src/option.c b/src/option.c
index 1ba08f7..d9cfda0 100644
--- a/src/option.c
+++ b/src/option.c
@@ -2978,6 +2978,7 @@
     p_term("t_WS", T_CWS)
     p_term("t_SI", T_CSI)
     p_term("t_EI", T_CEI)
+    p_term("t_xn", T_XN)
     p_term("t_xs", T_XS)
     p_term("t_ZH", T_CZH)
     p_term("t_ZR", T_CZR)
diff --git a/src/screen.c b/src/screen.c
index 2ebd98b..f735552 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -7968,9 +7968,11 @@
     if (row >= screen_Rows || col >= screen_Columns)
 	return;
 
-    /* Outputting the last character on the screen may scrollup the screen.
-     * Don't to it!  Mark the character invalid (update it when scrolled up) */
-    if (row == screen_Rows - 1 && col == screen_Columns - 1
+    /* Outputting a character in the last cell on the screen may scroll the
+     * screen up.  Only do it when the "xn" termcap property is set, otherwise
+     * mark the character invalid (update it when scrolled up). */
+    if (*T_XN == NUL
+	    && row == screen_Rows - 1 && col == screen_Columns - 1
 #ifdef FEAT_RIGHTLEFT
 	    /* account for first command-line character in rightleft mode */
 	    && !cmdmsg_rl
diff --git a/src/term.c b/src/term.c
index a1ab537..0d797bc 100644
--- a/src/term.c
+++ b/src/term.c
@@ -200,6 +200,7 @@
     {(int)KS_VB,	IF_EB("\033|f", ESC_STR "|f")},
     {(int)KS_MS,	"y"},
     {(int)KS_UT,	"y"},
+    {(int)KS_XN,	"y"},
     {(int)KS_LE,	"\b"},		/* cursor-left = BS */
     {(int)KS_ND,	"\014"},	/* cursor-right = CTRL-L */
 # ifdef TERMINFO
@@ -658,6 +659,7 @@
 
     {(int)KS_MS,	"y"},		/* save to move cur in reverse mode */
     {(int)KS_UT,	"y"},
+    {(int)KS_XN,	"y"},
     {(int)KS_LE,	"\b"},
 #  ifdef TERMINFO
     {(int)KS_CM,	"\033|%i%p1%d;%p2%dH"},/* cursor motion */
@@ -772,6 +774,7 @@
     {(int)KS_CSF,	IF_EB("\033[101;%dm", ESC_STR "[101;%dm")},	/* set screen foreground color */
     {(int)KS_MS,	"y"},
     {(int)KS_UT,	"y"},
+    {(int)KS_XN,	"y"},
     {(int)KS_LE,	"\b"},
 #  ifdef TERMINFO
     {(int)KS_CM,	IF_EB("\033[%i%p1%d;%p2%dH",
@@ -1207,6 +1210,7 @@
     {(int)KS_UCS,	"[UCS]"},
     {(int)KS_MS,	"[MS]"},
     {(int)KS_UT,	"[UT]"},
+    {(int)KS_XN,	"[XN]"},
 #  ifdef TERMINFO
     {(int)KS_CM,	"[%p1%dCM%p2%d]"},
 #  else
@@ -1645,6 +1649,9 @@
 		if ((T_XS == NULL || T_XS == empty_option)
 							&& tgetflag("xs") > 0)
 		    T_XS = (char_u *)"y";
+		if ((T_XN == NULL || T_XN == empty_option)
+							&& tgetflag("xn") > 0)
+		    T_XN = (char_u *)"y";
 		if ((T_DB == NULL || T_DB == empty_option)
 							&& tgetflag("db") > 0)
 		    T_DB = (char_u *)"y";
diff --git a/src/term.h b/src/term.h
index 22b60b1..28390a2 100644
--- a/src/term.h
+++ b/src/term.h
@@ -66,6 +66,7 @@
     KS_CSF,	/* set foreground color */
     KS_CSB,	/* set background color */
     KS_XS,	/* standout not erased by overwriting (hpterm) */
+    KS_XN,	/* newline glitch */
     KS_MB,	/* blink mode */
     KS_CAF,	/* set foreground color (ANSI) */
     KS_CAB,	/* set background color (ANSI) */
@@ -144,6 +145,7 @@
 #define T_CSF	(term_str(KS_CSF))	/* set foreground color */
 #define T_CSB	(term_str(KS_CSB))	/* set background color */
 #define T_XS	(term_str(KS_XS))	/* standout not erased by overwriting */
+#define T_XN	(term_str(KS_XN))	/* newline glitch */
 #define T_MB	(term_str(KS_MB))	/* blink mode */
 #define T_CAF	(term_str(KS_CAF))	/* set foreground color (ANSI) */
 #define T_CAB	(term_str(KS_CAB))	/* set background color (ANSI) */
diff --git a/src/version.c b/src/version.c
index 8ef229a..9a813d7 100644
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    627,
+/**/
     626,
 /**/
     625,