patch 8.0.0769: build problems with terminal on MS-Windows v8.0.0769
authorBram Moolenaar <Bram@vim.org>
Mon, 24 Jul 2017 20:29:21 +0000 (22:29 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 24 Jul 2017 20:29:21 +0000 (22:29 +0200)
Problem:    Build problems with terminal on MS-Windows using MSVC.
Solution:   Remove stdbool.h dependency. Only use ScreenLinesUC when it was
            allocated. Fix typos. (Ken Takata)

runtime/doc/terminal.txt
src/INSTALLpc.txt
src/Make_cyg_ming.mak
src/Make_mvc.mak
src/libvterm/Makefile.msc
src/libvterm/bin/vterm-ctrl.c
src/terminal.c
src/version.c

index 4fc119cc7ff26e6cd76de88225b67efcad60d899..73bcf997194ba4e8993ad39968a0c90b3d6a8f9b 100644 (file)
@@ -1,4 +1,4 @@
-*terminal.txt* For Vim version 8.0.  Last change: 2017 Jul 19
+*terminal.txt* For Vim version 8.0.  Last change: 2017 Jul 24
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -47,8 +47,9 @@ See option 'termsize' for controlling the size of the terminal window.
 (TODO: scrolling when the terminal is larger than the window)
 
 Syntax ~
-                                               *:ter* *:terminal*
-:terminal[!] [command] Open a new terminal window.
+
+:ter[minal][!] [command]                       *:ter* *:terminal*
+                       Open a new terminal window.
 
                        If [command] is provided run it as a job and connect
                        the input and output to the terminal.
@@ -79,7 +80,7 @@ The size of the terminal can be in one of three modes:
    The minimal size is 2 screen lines with 10 cells.
 
 2. The 'termsize' option is "rows*cols", where "rows" is the minimal number of
-   screen rows and "cols" is the minial number of cells.
+   screen rows and "cols" is the minimal number of cells.
 
 3. The 'termsize' option is "rowsXcols" (where the x is upper or lower case).
    The terminal size is fixed to the specified number of screen lines and
@@ -101,9 +102,20 @@ can even run Vim in the terminal!  That's used for debugging, see below.
 
 MS-Windows ~
 
-On MS-Windows a hidden console is used to run the command in.  This should
-work well for all kind of commands.  Obviously, they must be commands that run
-in a terminal, not open their own window.
+On MS-Windows winpty is used to make it possible to run all kind of commands.
+Obviously, they must be commands that run in a terminal, not open their own
+window.
+
+You need the following two files from winpty:
+
+    winpty.dll
+    winpty-agent.exe
+
+You can download them from the following page:
+
+    https://github.com/rprichard/winpty
+
+Just put the files somewhere in your PATH.
 
 ==============================================================================
 2. Remote testing                                      *terminal-testing*
index b875b77c9ae7a6ac6f5cc068b5623a7355c7e1e1..762fdb60100d2a740108a8310b4aafc17af9b1ff 100644 (file)
@@ -706,20 +706,17 @@ Or when using MinGW (as one line):
 13. Building with Terminal support
 ==================================
 
-Vim with Terminal support can be built with either MSVC, or MinGW or Cygwin.
+Vim with Terminal support can be built with either MSVC, MinGW or Cygwin.
 This uses the included libvterm and winpty.  No extra header files or
-libraries are needed for building.
+libraries are needed for building.  Just set TERMINAL to yes.
 
-Running Vim with terminal support requires the following two winpty files:
+E.g. When using MSVC:
 
-    winpty.dll
-    winpty-agent.dll
+    nmake -f Make_mvc.mak TERMINAL=yes
 
-You can download them from the following page:
-
-    https://github.com/rprichard/winpty
+Or when using MinGW (as one line):
 
-Just put the DLL files somewhere in your PATH.
+    mingw32-make -f Make_mingw.mak TERMINAL=yes
 
 
 14. Windows 3.1x
index 0f6a4921888ff142d562b8771eb57cc5ad423d1e..a7bf3b90b944f91322c114e0a8349ed2ffa71adc 100644 (file)
@@ -73,6 +73,7 @@ CHANNEL=yes
 else
 CHANNEL=$(GUI)
 endif
+# Set to yes to enable terminal support.
 TERMINAL=no
 
 
index 99dcb294dca0e47c51b4fbdbc64f43ae6a660547..d51d9762a251f84e7d2a74b42f8d22c310a42021 100644 (file)
@@ -356,6 +356,9 @@ CSCOPE_DEFS  = -DFEAT_CSCOPE
 !if "$(TERMINAL)" == "yes"
 TERMINAL_OBJ   = $(OBJDIR)/terminal.obj
 TERMINAL_DEFS  = -DFEAT_TERMINAL
+!if $(MSVC_MAJOR) <= 11
+TERMINAL_DEFS = $(TERMINAL_DEFS) /I if_perl_msvc
+!endif
 TERMINAL_SRC   = terminal.c
 VTERM_LIB      = libvterm/vterm.lib
 !endif
@@ -1154,7 +1157,7 @@ all:      $(VIM).exe \
 
 $(VIM).exe: $(OUTDIR) $(OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \
                $(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
-               $(CSCOPE_OBJ) $(TERMINAL_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
+               $(CSCOPE_OBJ) $(TERMINAL_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) $(VTERM_LIB) \
                version.c version.h
        $(CC) $(CFLAGS) version.c
        $(link) $(LINKARGS1) -out:$(VIM).exe $(OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) \
@@ -1549,7 +1552,7 @@ proto.h: \
 
 libvterm/vterm.lib :
        cd libvterm
-       $(MAKE) /NOLOGO -f Makefile.msc
+       $(MAKE) /NOLOGO -f Makefile.msc "MSVC_MAJOR=$(MSVC_MAJOR)"
        cd ..
 
 # vim: set noet sw=8 ts=8 sts=0 wm=0 tw=0:
index 18280d256dedfc04f4fd3386e0fc60fc1482c7df..c2313ba998dd99e1f98a9542c36c866f9553af67 100644 (file)
@@ -1,3 +1,5 @@
+CFLAGS = /DINLINE= /Iinclude
+
 OBJS = \
        src\encoding.c \
        src\keyboard.c \
@@ -24,7 +26,10 @@ all : vterm.lib
 
 
 .c.obj :
-       cl /DINLINE= /Iinclude /Fo$@ /c $<
+       cl $(CFLAGS) /Fo$@ /c $<
 
 vterm.lib : $(OBJS)
        lib /OUT:$@ $(OBJS)
+
+clean:
+       del $(OBJS) vterm.lib
index 14e35cda5262f39fdc487d534f530538a594512f..2568ee6090dd07aeb67e3668b655bf30cefeccf8 100644 (file)
@@ -1,10 +1,11 @@
 #define _XOPEN_SOURCE 500  /* strdup */
 
-#include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #define streq(a,b) (strcmp(a,b)==0)
+#define TRUE 1
+#define FALSE 0
 
 #include <termios.h>
 
@@ -60,13 +61,14 @@ static char *helptext[] = {
   NULL
 };
 
-static bool seticanon(bool icanon, bool echo)
+static int seticanon(int icanon, int echo)
 {
   struct termios termios;
+  int ret;
 
   tcgetattr(0, &termios);
 
-  bool ret = (termios.c_lflag & ICANON);
+  ret = (termios.c_lflag & ICANON);
 
   if(icanon) termios.c_lflag |=  ICANON;
   else       termios.c_lflag &= ~ICANON;
@@ -84,16 +86,16 @@ static void await_c1(int c1)
   int c;
 
   /* await CSI - 8bit or 2byte 7bit form */
-  bool in_esc = false;
+  int in_esc = FALSE;
   while((c = getchar())) {
     if(c == c1)
       break;
     if(in_esc && c == (char)(c1 - 0x40))
       break;
     if(!in_esc && c == 0x1b)
-      in_esc = true;
+      in_esc = TRUE;
     else
-      in_esc = false;
+      in_esc = FALSE;
   }
 }
 
@@ -121,7 +123,7 @@ static char *read_csi()
 static char *read_dcs()
 {
   unsigned char dcs[32];
-  bool in_esc = false;
+  int in_esc = FALSE;
   int i;
 
   await_c1(0x90);
@@ -133,10 +135,10 @@ static char *read_dcs()
     if(in_esc && c == 0x5c)
       break;
     if(!in_esc && c == 0x1b)
-      in_esc = true;
+      in_esc = TRUE;
     else {
       dcs[i++] = c;
-      in_esc = false;
+      in_esc = FALSE;
     }
   }
   dcs[++i] = 0;
@@ -158,7 +160,7 @@ static void usage(int exitcode)
   exit(exitcode);
 }
 
-static bool query_dec_mode(int mode)
+static int query_dec_mode(int mode)
 {
   char *s = NULL;
 
@@ -189,12 +191,12 @@ static bool query_dec_mode(int mode)
     free(s);
 
     if(reply_value == 1 || reply_value == 3)
-      return true;
+      return TRUE;
     if(reply_value == 2 || reply_value == 4)
-      return false;
+      return FALSE;
 
     printf("Unrecognised reply to DECRQM: %d\n", reply_value);
-    return false;
+    return FALSE;
   } while(1);
 }
 
@@ -247,11 +249,11 @@ static int query_rqss_numeric(char *cmd)
   } while(1);
 }
 
-bool wasicanon;
+int wasicanon;
 
 void restoreicanon(void)
 {
-  seticanon(wasicanon, true);
+  seticanon(wasicanon, TRUE);
 }
 
 int main(int argc, char *argv[])
@@ -261,7 +263,7 @@ int main(int argc, char *argv[])
   if(argc == 1)
     usage(0);
 
-  wasicanon = seticanon(false, false);
+  wasicanon = seticanon(FALSE, FALSE);
   atexit(restoreicanon);
 
   while(argi < argc) {
index ef3c3c241d8b68e47826cc1f26e06b69a64ed2e0..93715d51a59b172e71f6576973049b7d5d6df86d 100644 (file)
@@ -25,7 +25,7 @@
  * the terminal emulator.
  *
  * If the terminal window has keyboard focus, typed keys are converted to the
- * terminal encoding and writting to the job over a channel.
+ * terminal encoding and writing to the job over a channel.
  *
  * If the job produces output, it is written to the terminal emulator.  The
  * terminal emulator invokes callbacks when its screen content changes.  The
@@ -731,7 +731,7 @@ color2index(VTermColor *color)
     else if (red == 128)
     {
        if (green == 128 && blue == 128)
-           return 9; /* high intensity bladk */
+           return 9; /* high intensity black */
     }
     else if (red == 255)
     {
@@ -894,7 +894,10 @@ term_update_window(win_T *wp)
                if (c == NUL)
                {
                    ScreenLines[off] = ' ';
-                   ScreenLinesUC[off] = NUL;
+#if defined(FEAT_MBYTE)
+                   if (enc_utf8)
+                       ScreenLinesUC[off] = NUL;
+#endif
                }
                else
                {
@@ -907,7 +910,8 @@ term_update_window(win_T *wp)
                    else
                    {
                        ScreenLines[off] = c;
-                       ScreenLinesUC[off] = NUL;
+                       if (enc_utf8)
+                           ScreenLinesUC[off] = NUL;
                    }
 #else
                    ScreenLines[off] = c;
@@ -920,7 +924,10 @@ term_update_window(win_T *wp)
                if (cell.width == 2)
                {
                    ScreenLines[off] = NUL;
-                   ScreenLinesUC[off] = NUL;
+#if defined(FEAT_MBYTE)
+                   if (enc_utf8)
+                       ScreenLinesUC[off] = NUL;
+#endif
                    ++pos.col;
                    ++off;
                }
@@ -1025,9 +1032,9 @@ term_get_status_text(term_T *term)
 #define WINPTY_SPAWN_FLAG_AUTO_SHUTDOWN 1ul
 #define WINPTY_SPAWN_FLAG_EXIT_AFTER_SHUTDOWN 2ull
 
-void* (*winpty_config_new)(int, void*);
+void* (*winpty_config_new)(UINT64, void*);
 void* (*winpty_open)(void*, void*);
-void* (*winpty_spawn_config_new)(int, void*, LPCWSTR, void*, void*, void*);
+void* (*winpty_spawn_config_new)(UINT64, void*, LPCWSTR, void*, void*, void*);
 BOOL (*winpty_spawn)(void*, void*, HANDLE*, HANDLE*, DWORD*, void*);
 void (*winpty_config_set_initial_size)(void*, int, int);
 LPCWSTR (*winpty_conin_name)(void*);
index 894fa452d6be1e273445cb49f7e40ce2d7dd7181..2c0a53b58ecea50daa52e8046dedf76b6120dc0c 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    769,
 /**/
     768,
 /**/