patch 8.0.0898: can't use the alternate screen in a terminal window

Problem:    Can't use the alternate screen in a terminal window.
Solution:   Initialze the alternate screen. (Yasuhiro Matsumoto, closes
            #1957)  Add term_getaltscreen().
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index a98958b..806f0cd 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -2369,6 +2369,7 @@
 tan({expr})			Float	tangent of {expr}
 tanh({expr})			Float	hyperbolic tangent of {expr}
 tempname()			String	name for a temporary file
+term_getaltscreen({buf})	Number	get the alternate screen flag
 term_getattr({attr}, {what})	Number	get the value of attribute {what}
 term_getcursor({buf})		List	get the cursor position of a terminal
 term_getjob({buf})		Job	get the job associated with a terminal
@@ -7914,6 +7915,12 @@
 		For MS-Windows forward slashes are used when the 'shellslash'
 		option is set or when 'shellcmdflag' starts with '-'.
 
+term_getaltscreen({buf})				*term_getaltscreen()*
+		Returns 1 if the terminal of {buf} is using the alternate
+		screen.
+		{buf} is used as with |term_getsize()|.
+		{only available when compiled with the |+terminal| feature}
+
 term_getattr({attr}, {what})				*term_getattr()*
 		Given {attr}, a value returned by term_scrape() in the "attr"
 		item, return whether {what} is on.  {what} can be one of:
diff --git a/src/evalfunc.c b/src/evalfunc.c
index b5880c5..6cb0ed7 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -831,6 +831,7 @@
 #endif
     {"tempname",	0, 0, f_tempname},
 #ifdef FEAT_TERMINAL
+    {"term_getaltscreen", 1, 1, f_term_getaltscreen},
     {"term_getattr",	2, 2, f_term_getattr},
     {"term_getcursor",	1, 1, f_term_getcursor},
     {"term_getjob",	1, 1, f_term_getjob},
diff --git a/src/libvterm/include/vterm.h b/src/libvterm/include/vterm.h
index e797dff..cd7b1f7 100644
--- a/src/libvterm/include/vterm.h
+++ b/src/libvterm/include/vterm.h
@@ -188,6 +188,8 @@
 void vterm_keyboard_end_paste(VTerm *vt);
 
 void vterm_mouse_move(VTerm *vt, int row, int col, VTermModifier mod);
+/* "button" is 1 for left, 2 for middle, 3 for right.
+ * Button 4 is scroll wheel down, button 5 is scroll wheel up. */
 void vterm_mouse_button(VTerm *vt, int button, int pressed, VTermModifier mod);
 
 /* ------------
@@ -302,6 +304,9 @@
   int (*settermprop)(VTermProp prop, VTermValue *val, void *user);
   int (*bell)(void *user);
   int (*resize)(int rows, int cols, void *user);
+  /* A line was pushed off the top of the window.
+   * "cells[cols]" contains the cells of that line.
+   * Return value is unused. */
   int (*sb_pushline)(int cols, const VTermScreenCell *cells, void *user);
   int (*sb_popline)(int cols, VTermScreenCell *cells, void *user);
 } VTermScreenCallbacks;
@@ -320,6 +325,9 @@
 void  vterm_screen_set_unrecognised_fallbacks(VTermScreen *screen, const VTermParserCallbacks *fallbacks, void *user);
 void *vterm_screen_get_unrecognised_fbdata(VTermScreen *screen);
 
+/* Enable support for using the alternate screen if "altscreen" is non-zero.
+ * Before that switching to the alternate screen won't work.
+ * Calling with "altscreen" zero has no effect. */
 void vterm_screen_enable_altscreen(VTermScreen *screen, int altscreen);
 
 typedef enum {
diff --git a/src/proto/terminal.pro b/src/proto/terminal.pro
index 7b28c28..a004d35 100644
--- a/src/proto/terminal.pro
+++ b/src/proto/terminal.pro
@@ -17,6 +17,7 @@
 int term_get_attr(buf_T *buf, linenr_T lnum, int col);
 char_u *term_get_status_text(term_T *term);
 int set_ref_in_term(int copyID);
+void f_term_getaltscreen(typval_T *argvars, typval_T *rettv);
 void f_term_getattr(typval_T *argvars, typval_T *rettv);
 void f_term_getcursor(typval_T *argvars, typval_T *rettv);
 void f_term_getjob(typval_T *argvars, typval_T *rettv);
diff --git a/src/terminal.c b/src/terminal.c
index b1cb61f..e22f7bc 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -146,6 +146,8 @@
 
     VTermPos	tl_cursor_pos;
     int		tl_cursor_visible;
+
+    int		tl_using_altscreen;
 };
 
 #define TMODE_ONCE 1	    /* CTRL-\ CTRL-N used */
@@ -1316,6 +1318,11 @@
 	    out_flush();
 	    break;
 
+	case VTERM_PROP_ALTSCREEN:
+	    /* TODO: do anything else? */
+	    term->tl_using_altscreen = value->boolean;
+	    break;
+
 	default:
 	    break;
     }
@@ -1865,6 +1872,9 @@
 
     /* Required to initialize most things. */
     vterm_screen_reset(screen, 1 /* hard */);
+
+    /* Allow using alternate screen. */
+    vterm_screen_enable_altscreen(screen, 1);
 }
 
 /*
@@ -1939,6 +1949,19 @@
 }
 
 /*
+ * "term_getaltscreen(buf)" function
+ */
+    void
+f_term_getaltscreen(typval_T *argvars, typval_T *rettv)
+{
+    buf_T	*buf = term_get_buf(argvars);
+
+    if (buf == NULL)
+	return;
+    rettv->vval.v_number = buf->b_term->tl_using_altscreen;
+}
+
+/*
  * "term_getattr(attr, name)" function
  */
     void
diff --git a/src/version.c b/src/version.c
index 6a19bd1..8b112c6 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    898,
+/**/
     897,
 /**/
     896,