Patch 8.1.1016
Problem:    MS-Windows: No color in shell when using "!" in 'guioptions.
Solution:   Don't stop termcap when using a terminal window for the shell.
            (vim-jp, closes #4117)
Files:      src/ex_cmds.c


*** ../vim-8.1.1015/src/ex_cmds.c       2019-02-20 22:18:59.990044254 +0100
--- src/ex_cmds.c       2019-03-17 16:56:37.691336310 +0100
***************
*** 1542,1547 ****
--- 1542,1548 ----
  #endif
  #ifdef MSWIN
      int               winstart = FALSE;
+     int               keep_termcap = FALSE;
  #endif
  
      /*
***************
*** 1557,1604 ****
  
  #ifdef MSWIN
      /*
!      * Check if ":!start" is used.
       */
      if (cmd != NULL)
!       winstart = (STRNICMP(cmd, "start ", 6) == 0);
  #endif
  
      /*
       * For autocommands we want to get the output on the current screen, to
       * avoid having to type return below.
       */
!     msg_putchar('\r');                        /* put cursor at start of line 
*/
      if (!autocmd_busy)
      {
  #ifdef MSWIN
!       if (!winstart)
  #endif
            stoptermcap();
      }
  #ifdef MSWIN
      if (!winstart)
  #endif
!       msg_putchar('\n');              /* may shift screen one line up */
  
!     /* warning message before calling the shell */
      if (p_warn && !autocmd_busy && msg_silent == 0)
        FOR_ALL_BUFFERS(buf)
            if (bufIsChangedNotTerm(buf))
            {
  #ifdef FEAT_GUI_MSWIN
!               if (!winstart)
!                   starttermcap();     /* don't want a message box here */
  #endif
                msg_puts(_("[No write since last change]\n"));
  #ifdef FEAT_GUI_MSWIN
!               if (!winstart)
                    stoptermcap();
  #endif
                break;
            }
  
!     /* This windgoto is required for when the '\n' resulted in a "delete line
!      * 1" command to the terminal. */
      if (!swapping_screen())
        windgoto(msg_row, msg_col);
      cursor_on();
--- 1558,1611 ----
  
  #ifdef MSWIN
      /*
!      * Check if ":!start" is used.  This implies not stopping termcap mode.
       */
      if (cmd != NULL)
!       keep_termcap = winstart = (STRNICMP(cmd, "start ", 6) == 0);
! 
! # if defined(FEAT_GUI) && defined(FEAT_TERMINAL)
!     // Don't stop termcap mode when using a terminal window for the shell.
!     if (gui.in_use && vim_strchr(p_go, GO_TERMINAL) != NULL)
!       keep_termcap = TRUE;
! # endif
  #endif
  
      /*
       * For autocommands we want to get the output on the current screen, to
       * avoid having to type return below.
       */
!     msg_putchar('\r');                        // put cursor at start of line
      if (!autocmd_busy)
      {
  #ifdef MSWIN
!       if (!keep_termcap)
  #endif
            stoptermcap();
      }
  #ifdef MSWIN
      if (!winstart)
  #endif
!       msg_putchar('\n');              // may shift screen one line up
  
!     // warning message before calling the shell
      if (p_warn && !autocmd_busy && msg_silent == 0)
        FOR_ALL_BUFFERS(buf)
            if (bufIsChangedNotTerm(buf))
            {
  #ifdef FEAT_GUI_MSWIN
!               if (!keep_termcap)
!                   starttermcap();     // don't want a message box here
  #endif
                msg_puts(_("[No write since last change]\n"));
  #ifdef FEAT_GUI_MSWIN
!               if (!keep_termcap)
                    stoptermcap();
  #endif
                break;
            }
  
!     // This windgoto is required for when the '\n' resulted in a "delete line
!     // 1" command to the terminal.
      if (!swapping_screen())
        windgoto(msg_row, msg_col);
      cursor_on();
***************
*** 1632,1638 ****
  #ifndef FEAT_GUI_MSWIN
        if (cmd == NULL
  # ifdef MSWIN
!               || (winstart && !need_wait_return)
  # endif
           )
        {
--- 1639,1645 ----
  #ifndef FEAT_GUI_MSWIN
        if (cmd == NULL
  # ifdef MSWIN
!               || (keep_termcap && !need_wait_return)
  # endif
           )
        {
***************
*** 1659,1667 ****
  #endif /* FEAT_GUI_MSWIN */
  
  #ifdef MSWIN
!       if (!winstart) /* if winstart==TRUE, never stopped termcap! */
  #endif
!           starttermcap();     /* start termcap if not done by wait_return() */
  
        /*
         * In an Amiga window redrawing is caused by asking the window size.
--- 1666,1674 ----
  #endif /* FEAT_GUI_MSWIN */
  
  #ifdef MSWIN
!       if (!keep_termcap)      // if keep_termcap is TRUE didn't stop termcap
  #endif
!           starttermcap();     // start termcap if not done by wait_return()
  
        /*
         * In an Amiga window redrawing is caused by asking the window size.
*** ../vim-8.1.1015/src/version.c       2019-03-17 16:39:01.566006172 +0100
--- src/version.c       2019-03-17 16:58:06.018782269 +0100
***************
*** 781,782 ****
--- 781,784 ----
  {   /* Add new patch number below this line */
+ /**/
+     1016,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
80. At parties, you introduce your spouse as your "service provider."

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui