Patch 8.1.0726
Problem:    Redrawing specifically for conceal feature.
Solution:   Use generic redrawing methods.
Files:      src/edit.c, src/gui.c, src/main.c, src/normal.c, src/screen.c,
            src/proto/screen.pro, src/window.c


*** ../vim-8.1.0725/src/edit.c  2019-01-11 13:02:20.101567912 +0100
--- src/edit.c  2019-01-11 20:18:13.240623579 +0100
***************
*** 1745,1767 ****
      }
  #endif
  
!     if (must_redraw)
!       update_screen(0);
!     else if (clear_cmdline || redraw_cmdline)
!       showmode();             /* clear cmdline and show mode */
! # if defined(FEAT_CONCEAL)
      if ((conceal_update_lines
            && (conceal_old_cursor_line != conceal_new_cursor_line
                || conceal_cursor_line(curwin)))
            || need_cursor_line_redraw)
      {
        if (conceal_old_cursor_line != conceal_new_cursor_line)
!           update_single_line(curwin, conceal_old_cursor_line);
!       update_single_line(curwin, conceal_new_cursor_line == 0
!                      ? curwin->w_cursor.lnum : conceal_new_cursor_line);
        curwin->w_valid &= ~VALID_CROW;
      }
! # endif
      showruler(FALSE);
      setcursor();
      emsg_on_display = FALSE;  /* may remove error message now */
--- 1745,1768 ----
      }
  #endif
  
! #if defined(FEAT_CONCEAL)
      if ((conceal_update_lines
            && (conceal_old_cursor_line != conceal_new_cursor_line
                || conceal_cursor_line(curwin)))
            || need_cursor_line_redraw)
      {
        if (conceal_old_cursor_line != conceal_new_cursor_line)
!           redrawWinline(curwin, conceal_old_cursor_line);
!       redrawWinline(curwin, conceal_new_cursor_line == 0
!                           ? curwin->w_cursor.lnum : conceal_new_cursor_line);
        curwin->w_valid &= ~VALID_CROW;
+       need_cursor_line_redraw = FALSE;
      }
! #endif
!     if (must_redraw)
!       update_screen(0);
!     else if (clear_cmdline || redraw_cmdline)
!       showmode();             /* clear cmdline and show mode */
      showruler(FALSE);
      setcursor();
      emsg_on_display = FALSE;  /* may remove error message now */
*** ../vim-8.1.0725/src/gui.c   2018-12-22 18:44:49.100612553 +0100
--- src/gui.c   2019-01-11 20:17:32.756910113 +0100
***************
*** 5166,5173 ****
        last_cursormoved = curwin->w_cursor;
      }
  
-     update_screen(0); /* may need to update the screen */
-     setcursor();
  # ifdef FEAT_CONCEAL
      if (conceal_update_lines
            && (conceal_old_cursor_line != conceal_new_cursor_line
--- 5166,5171 ----
***************
*** 5175,5185 ****
                || need_cursor_line_redraw))
      {
        if (conceal_old_cursor_line != conceal_new_cursor_line)
!           update_single_line(curwin, conceal_old_cursor_line);
!       update_single_line(curwin, conceal_new_cursor_line);
        curwin->w_valid &= ~VALID_CROW;
      }
  # endif
      out_flush_cursor(TRUE, FALSE);
  }
  #endif
--- 5173,5186 ----
                || need_cursor_line_redraw))
      {
        if (conceal_old_cursor_line != conceal_new_cursor_line)
!           redrawWinline(curwin, conceal_old_cursor_line);
!       redrawWinline(curwin, conceal_new_cursor_line);
        curwin->w_valid &= ~VALID_CROW;
+       need_cursor_line_redraw = FALSE;
      }
  # endif
+     update_screen(0); /* may need to update the screen */
+     setcursor();
      out_flush_cursor(TRUE, FALSE);
  }
  #endif
*** ../vim-8.1.0725/src/main.c  2018-12-27 00:28:27.497299324 +0100
--- src/main.c  2019-01-11 20:22:02.995005173 +0100
***************
*** 1194,1199 ****
--- 1194,1215 ----
                last_cursormoved = curwin->w_cursor;
            }
  
+ #if defined(FEAT_CONCEAL)
+           if (conceal_update_lines
+                   && (conceal_old_cursor_line != conceal_new_cursor_line
+                       || conceal_cursor_line(curwin)
+                       || need_cursor_line_redraw))
+           {
+               if (conceal_old_cursor_line != conceal_new_cursor_line
+                       && conceal_old_cursor_line
+                                               <= curbuf->b_ml.ml_line_count)
+                   redrawWinline(curwin, conceal_old_cursor_line);
+               redrawWinline(curwin, conceal_new_cursor_line);
+               curwin->w_valid &= ~VALID_CROW;
+               need_cursor_line_redraw = FALSE;
+           }
+ #endif
+ 
            /* Trigger TextChanged if b:changedtick differs. */
            if (!finish_op && has_textchanged()
                    && curbuf->b_last_changedtick != CHANGEDTICK(curbuf))
***************
*** 1288,1309 ****
            may_clear_sb_text();        /* clear scroll-back text on next msg */
            showruler(FALSE);
  
- #if defined(FEAT_CONCEAL)
-           if (conceal_update_lines
-                   && (conceal_old_cursor_line != conceal_new_cursor_line
-                       || conceal_cursor_line(curwin)
-                       || need_cursor_line_redraw))
-           {
-               mch_disable_flush();    /* Stop issuing gui_mch_flush(). */
-               if (conceal_old_cursor_line != conceal_new_cursor_line
-                       && conceal_old_cursor_line
-                                               <= curbuf->b_ml.ml_line_count)
-                   update_single_line(curwin, conceal_old_cursor_line);
-               update_single_line(curwin, conceal_new_cursor_line);
-               mch_enable_flush();
-               curwin->w_valid &= ~VALID_CROW;
-           }
- #endif
            setcursor();
            cursor_on();
  
--- 1304,1309 ----
*** ../vim-8.1.0725/src/normal.c        2019-01-11 14:37:16.689248837 +0100
--- src/normal.c        2019-01-11 20:22:27.958829978 +0100
***************
*** 8512,8518 ****
        {
  #ifdef FEAT_CONCEAL
            if (curwin->w_p_cole > 0 && oldline != curwin->w_cursor.lnum)
!               update_single_line(curwin, oldline);
  #endif
            /* When '#' is in 'cpoptions' ignore the count. */
            if (vim_strchr(p_cpo, CPO_HASH) != NULL)
--- 8512,8518 ----
        {
  #ifdef FEAT_CONCEAL
            if (curwin->w_p_cole > 0 && oldline != curwin->w_cursor.lnum)
!               redrawWinline(curwin, oldline);
  #endif
            /* When '#' is in 'cpoptions' ignore the count. */
            if (vim_strchr(p_cpo, CPO_HASH) != NULL)
*** ../vim-8.1.0725/src/screen.c        2019-01-09 21:47:26.356341693 +0100
--- src/screen.c        2019-01-11 20:23:24.722432006 +0100
***************
*** 927,981 ****
        curs_columns(TRUE);
      }
  }
- 
-     void
- update_single_line(win_T *wp, linenr_T lnum)
- {
-     int               row;
-     int               j;
- #ifdef SYN_TIME_LIMIT
-     proftime_T        syntax_tm;
- #endif
- 
-     /* Don't do anything if the screen structures are (not yet) valid. */
-     if (!screen_valid(TRUE) || updating_screen)
-       return;
- 
-     if (lnum >= wp->w_topline && lnum < wp->w_botline
-                                && foldedCount(wp, lnum, &win_foldinfo) == 0)
-     {
- #ifdef SYN_TIME_LIMIT
-       /* Set the time limit to 'redrawtime'. */
-       profile_setlimit(p_rdt, &syntax_tm);
-       syn_set_timeout(&syntax_tm);
- #endif
-       update_prepare();
- 
-       row = 0;
-       for (j = 0; j < wp->w_lines_valid; ++j)
-       {
-           if (lnum == wp->w_lines[j].wl_lnum)
-           {
-               screen_start(); /* not sure of screen cursor */
- # ifdef FEAT_SEARCH_EXTRA
-               init_search_hl(wp);
-               prepare_search_hl(wp, lnum);
- # endif
-               win_line(wp, lnum, row, row + wp->w_lines[j].wl_size,
-                                                                FALSE, FALSE);
-               break;
-           }
-           row += wp->w_lines[j].wl_size;
-       }
- 
-       update_finish();
- 
- #ifdef SYN_TIME_LIMIT
-       syn_set_timeout(NULL);
- #endif
-     }
-     need_cursor_line_redraw = FALSE;
- }
  #endif
  
  #if defined(FEAT_SIGNS) || defined(PROTO)
--- 927,932 ----
*** ../vim-8.1.0725/src/proto/screen.pro        2019-01-09 21:47:26.356341693 
+0100
--- src/proto/screen.pro        2019-01-11 20:24:12.926094436 +0100
***************
*** 15,21 ****
  int update_screen(int type_arg);
  int conceal_cursor_line(win_T *wp);
  void conceal_check_cursor_line(void);
- void update_single_line(win_T *wp, linenr_T lnum);
  void update_debug_sign(buf_T *buf, linenr_T lnum);
  void updateWindow(win_T *wp);
  int screen_get_current_line_off(void);
--- 15,20 ----
*** ../vim-8.1.0725/src/window.c        2019-01-06 17:25:23.876557968 +0100
--- src/window.c        2019-01-11 20:24:06.470139628 +0100
***************
*** 4177,4185 ****
      win_enter(wp, TRUE);
  
  #ifdef FEAT_CONCEAL
!     /* Conceal cursor line in previous window, unconceal in current window. */
      if (win_valid(owp) && owp->w_p_cole > 0 && !msg_scrolled)
!       update_single_line(owp, owp->w_cursor.lnum);
      if (curwin->w_p_cole > 0 && !msg_scrolled)
        need_cursor_line_redraw = TRUE;
  #endif
--- 4177,4185 ----
      win_enter(wp, TRUE);
  
  #ifdef FEAT_CONCEAL
!     // Conceal cursor line in previous window, unconceal in current window.
      if (win_valid(owp) && owp->w_p_cole > 0 && !msg_scrolled)
!       redrawWinline(owp, owp->w_cursor.lnum);
      if (curwin->w_p_cole > 0 && !msg_scrolled)
        need_cursor_line_redraw = TRUE;
  #endif
*** ../vim-8.1.0725/src/version.c       2019-01-11 20:12:57.066876963 +0100
--- src/version.c       2019-01-11 20:24:42.153889913 +0100
***************
*** 797,798 ****
--- 797,800 ----
  {   /* Add new patch number below this line */
+ /**/
+     726,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
166. You have been on your computer soo long that you didn't realize
     you had grandchildren.

 /// 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