Patch 8.2.1595
Problem:    Cannot easily see what Vim sends to the terminal.
Solution:   Write output to the channel log if it contains terminal control
            sequences.  Avoid warnings for tputs() argument.
Files:      src/term.c, src/globals.h, src/edit.c, src/normal.c,
            src/optionstr.c


*** ../vim-8.2.1594/src/term.c  2020-08-23 14:28:24.107838497 +0200
--- src/term.c  2020-09-05 14:21:45.855301895 +0200
***************
*** 43,49 ****
  #  ifdef HAVE_OUTFUNTYPE
  #   define TPUTSFUNCAST (outfuntype)
  #  else
! #   define TPUTSFUNCAST (int (*)())
  #  endif
  # endif
  #endif
--- 43,49 ----
  #  ifdef HAVE_OUTFUNTYPE
  #   define TPUTSFUNCAST (outfuntype)
  #  else
! #   define TPUTSFUNCAST (int (*)(int))
  #  endif
  # endif
  #endif
***************
*** 2515,2520 ****
--- 2515,2528 ----
        len = out_pos;
        out_pos = 0;
        ui_write(out_buf, len);
+ #ifdef FEAT_JOB_CHANNEL
+       if (ch_log_output)
+       {
+           out_buf[len] = NUL;
+           ch_log(NULL, "raw terminal output: \"%s\"", out_buf);
+           ch_log_output = FALSE;
+       }
+ #endif
      }
  }
  
***************
*** 2586,2598 ****
  /*
   * Output "c" like out_char(), but don't flush when p_wd is set.
   */
!     static void
! out_char_nf(unsigned c)
  {
!     out_buf[out_pos++] = c;
  
      if (out_pos >= OUT_SIZE)
        out_flush();
  }
  
  /*
--- 2594,2607 ----
  /*
   * Output "c" like out_char(), but don't flush when p_wd is set.
   */
!     static int
! out_char_nf(int c)
  {
!     out_buf[out_pos++] = (unsigned)c;
  
      if (out_pos >= OUT_SIZE)
        out_flush();
+     return (unsigned)c;
  }
  
  /*
***************
*** 3031,3036 ****
--- 3040,3048 ----
      void
  term_settitle(char_u *title)
  {
+ #ifdef FEAT_JOB_CHANNEL
+     ch_log_output = TRUE;
+ #endif
      // t_ts takes one argument: column in status line
      OUT_STR(tgoto((char *)T_TS, 0, 0));       // set title start
      out_str_nf(title);
***************
*** 3529,3534 ****
--- 3541,3549 ----
            if (termcap_active && tmode != TMODE_SLEEP
                                                   && cur_tmode != TMODE_SLEEP)
            {
+ #ifdef FEAT_JOB_CHANNEL
+               ch_log_output = TRUE;
+ #endif
                if (tmode != TMODE_RAW)
                {
                    out_str(T_BD);      // disable bracketed paste mode
***************
*** 3559,3564 ****
--- 3574,3582 ----
  {
      if (full_screen && !termcap_active)
      {
+ #ifdef FEAT_JOB_CHANNEL
+       ch_log_output = TRUE;
+ #endif
        out_str(T_TI);                  // start termcap mode
        out_str(T_CTI);                 // start "raw" mode
        out_str(T_KS);                  // start "keypad transmit" mode
***************
*** 3611,3616 ****
--- 3629,3637 ----
            check_for_codes_from_term();
        }
  #endif
+ #ifdef FEAT_JOB_CHANNEL
+       ch_log_output = TRUE;
+ #endif
        out_str(T_BD);                  // disable bracketed paste mode
        out_str(T_KE);                  // stop "keypad transmit" mode
        out_flush();
***************
*** 3646,3651 ****
--- 3667,3675 ----
            && starting == 0
            && *T_CRV != NUL)
      {
+ #ifdef FEAT_JOB_CHANNEL
+       ch_log_output = TRUE;
+ #endif
        LOG_TR(("Sending CRV request"));
        out_str(T_CRV);
        termrequest_sent(&crv_status);
***************
*** 3684,3689 ****
--- 3708,3716 ----
        // width, that will be (1, 2).  This function has the side effect that
        // changes cursor position, so it must be called immediately after
        // entering termcap mode.
+ #ifdef FEAT_JOB_CHANNEL
+       ch_log_output = TRUE;
+ #endif
        LOG_TR(("Sending request for ambiwidth check"));
        // Do this in the second row.  In the first row the returned sequence
        // may be CSI 1;2R, which is the same as <S-F3>.
***************
*** 3712,3717 ****
--- 3739,3747 ----
        // sequence is ignored and the cursor does not move.  If the terminal
        // handles test sequence incorrectly, a garbage string is displayed and
        // the cursor does move.
+ #ifdef FEAT_JOB_CHANNEL
+       ch_log_output = TRUE;
+ #endif
        LOG_TR(("Sending xterm compatibility test sequence."));
        // Do this in the third row.  Second row is used by ambiguous
        // chararacter width check.
***************
*** 3762,3767 ****
--- 3792,3800 ----
        // Only request foreground if t_RF is set.
        if (rfg_status.tr_progress == STATUS_GET && *T_RFG != NUL)
        {
+ #ifdef FEAT_JOB_CHANNEL
+           ch_log_output = TRUE;
+ #endif
            LOG_TR(("Sending FG request"));
            out_str(T_RFG);
            termrequest_sent(&rfg_status);
***************
*** 3772,3777 ****
--- 3805,3813 ----
        // Only request background if t_RB is set.
        if (rbg_status.tr_progress == STATUS_GET && *T_RBG != NUL)
        {
+ #ifdef FEAT_JOB_CHANNEL
+           ch_log_output = TRUE;
+ #endif
            LOG_TR(("Sending BG request"));
            out_str(T_RBG);
            termrequest_sent(&rbg_status);
***************
*** 3835,3840 ****
--- 3871,3879 ----
  {
      if (*T_VS != NUL && *T_CVS != NUL)
      {
+ #ifdef FEAT_JOB_CHANNEL
+       ch_log_output = TRUE;
+ #endif
        out_str(T_VS);
        out_str(T_CVS);
        screen_start();         // don't know where cursor is now
***************
*** 4685,4690 ****
--- 4724,4732 ----
                && *T_CSH != NUL
                && *T_CRS != NUL)
        {
+ #ifdef FEAT_JOB_CHANNEL
+           ch_log_output = TRUE;
+ #endif
            LOG_TR(("Sending cursor style request"));
            out_str(T_CRS);
            termrequest_sent(&rcs_status);
***************
*** 4699,4704 ****
--- 4741,4749 ----
                && term_props[TPR_CURSOR_BLINK].tpr_status == TPR_YES
                && *T_CRC != NUL)
        {
+ #ifdef FEAT_JOB_CHANNEL
+           ch_log_output = TRUE;
+ #endif
            LOG_TR(("Sending cursor blink mode request"));
            out_str(T_CRC);
            termrequest_sent(&rbm_status);
***************
*** 6120,6125 ****
--- 6165,6173 ----
      {
        char *key_name = key_names[xt_index_out];
  
+ #ifdef FEAT_JOB_CHANNEL
+       ch_log_output = TRUE;
+ #endif
        LOG_TR(("Requesting XT %d: %s", xt_index_out, key_name));
        sprintf(buf, "\033P+q%02x%02x\033\\", key_name[0], key_name[1]);
        out_str_nf((char_u *)buf);
*** ../vim-8.2.1594/src/globals.h       2020-09-02 21:21:30.964799806 +0200
--- src/globals.h       2020-09-05 14:02:17.269249855 +0200
***************
*** 1898,1903 ****
--- 1898,1907 ----
  # define REPEATED_MSG_LOOKING     1
  # define REPEATED_MSG_SAFESTATE           2
  
+ // This flag is set when outputting a terminal control code and reset in
+ // out_flush() when characters have been written.
+ EXTERN int ch_log_output INIT(= FALSE);
+ 
  #define FOR_ALL_CHANNELS(ch) \
      for ((ch) = first_channel; (ch) != NULL; (ch) = (ch)->ch_next)
  #define FOR_ALL_JOBS(job) \
*** ../vim-8.2.1594/src/edit.c  2020-09-04 16:35:06.425571289 +0200
--- src/edit.c  2020-09-05 14:07:23.616925571 +0200
***************
*** 315,320 ****
--- 315,323 ----
  #endif
      if (!p_ek)
      {
+ #ifdef FEAT_JOB_CHANNEL
+       ch_log_output = TRUE;
+ #endif
        // Disable bracketed paste mode, we won't recognize the escape
        // sequences.
        out_str(T_BD);
***************
*** 3724,3729 ****
--- 3727,3735 ----
  #endif
      if (!p_ek)
      {
+ #ifdef FEAT_JOB_CHANNEL
+       ch_log_output = TRUE;
+ #endif
        // Re-enable bracketed paste mode.
        out_str(T_BE);
  
*** ../vim-8.2.1594/src/normal.c        2020-08-30 20:46:34.470356761 +0200
--- src/normal.c        2020-09-05 14:07:13.904939106 +0200
***************
*** 897,902 ****
--- 897,905 ----
  #endif
            if ((State & INSERT) && !p_ek)
            {
+ #ifdef FEAT_JOB_CHANNEL
+               ch_log_output = TRUE;
+ #endif
                // Disable bracketed paste and modifyOtherKeys here, we won't
                // recognize the escape sequences with 'esckeys' off.
                out_str(T_BD);
***************
*** 907,912 ****
--- 910,918 ----
  
            if ((State & INSERT) && !p_ek)
            {
+ #ifdef FEAT_JOB_CHANNEL
+               ch_log_output = TRUE;
+ #endif
                // Re-enable bracketed paste mode and modifyOtherKeys
                out_str(T_BE);
                out_str(T_CTI);
*** ../vim-8.2.1594/src/optionstr.c     2020-07-20 21:31:01.268823457 +0200
--- src/optionstr.c     2020-09-05 14:05:46.369052732 +0200
***************
*** 1434,1439 ****
--- 1434,1442 ----
        }
        if (varp == &T_BE && termcap_active)
        {
+ #ifdef FEAT_JOB_CHANNEL
+           ch_log_output = TRUE;
+ #endif
            if (*T_BE == NUL)
                // When clearing t_BE we assume the user no longer wants
                // bracketed paste, thus disable it by writing t_BD.
*** ../vim-8.2.1594/src/version.c       2020-09-05 13:48:35.742661008 +0200
--- src/version.c       2020-09-05 14:26:41.786650210 +0200
***************
*** 756,757 ****
--- 756,759 ----
  {   /* Add new patch number below this line */
+ /**/
+     1595,
  /**/

-- 
ARTHUR:  Be quiet!
DENNIS:  Well you can't expect to wield supreme executive power just 'cause
         some watery tart threw a sword at you!
ARTHUR:  Shut up!
DENNIS:  I mean, if I went around sayin' I was an empereror just because some
         moistened bint had lobbed a scimitar at me they'd put me away!
                                  The Quest for the Holy Grail (Monty Python)

 /// 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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202009051228.085CSC0u583969%40masaka.moolenaar.net.

Raspunde prin e-mail lui