To: vim_dev@googlegroups.com
Subject: Patch 7.3.426
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------

Patch 7.3.426
Problem:    With '$' in 'cpoptions' the $ is not displayed in the first
            column.
Solution:   Use -1 instead of 0 as a special value. (Hideki Eiraku and
            Hirohito Higashi)
Files:      src/edit.c, src/globals.h, src/move.c, src/screen.c, src/search.c 
    

*** ../vim-7.3.425/src/edit.c	2012-01-26 18:58:25.000000000 +0100
--- src/edit.c	2012-02-04 23:23:45.000000000 +0100
***************
*** 1763,1771 ****
      static void
  undisplay_dollar()
  {
!     if (dollar_vcol)
      {
! 	dollar_vcol = 0;
  	redrawWinline(curwin->w_cursor.lnum, FALSE);
      }
  }
--- 1763,1771 ----
      static void
  undisplay_dollar()
  {
!     if (dollar_vcol >= 0)
      {
! 	dollar_vcol = -1;
  	redrawWinline(curwin->w_cursor.lnum, FALSE);
      }
  }
***************
*** 5441,5447 ****
  				compl_curr_match->cp_number);
  		edit_submode_extra = match_ref;
  		edit_submode_highl = HLF_R;
! 		if (dollar_vcol)
  		    curs_columns(FALSE);
  	    }
  	}
--- 5441,5447 ----
  				compl_curr_match->cp_number);
  		edit_submode_extra = match_ref;
  		edit_submode_highl = HLF_R;
! 		if (dollar_vcol >= 0)
  		    curs_columns(FALSE);
  	    }
  	}
***************
*** 8961,8967 ****
       * We can emulate the vi behaviour by pretending there is a dollar
       * displayed even when there isn't.
       *  --pkv Sun Jan 19 01:56:40 EST 2003 */
!     if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == 0)
  	dollar_vcol = curwin->w_virtcol;
  
  #ifdef FEAT_FOLDING
--- 8961,8967 ----
       * We can emulate the vi behaviour by pretending there is a dollar
       * displayed even when there isn't.
       *  --pkv Sun Jan 19 01:56:40 EST 2003 */
!     if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == -1)
  	dollar_vcol = curwin->w_virtcol;
  
  #ifdef FEAT_FOLDING
*** ../vim-7.3.425/src/globals.h	2011-05-10 16:41:13.000000000 +0200
--- src/globals.h	2012-02-04 23:24:07.000000000 +0100
***************
*** 113,121 ****
   * When '$' is included in 'cpoptions' option set:
   * When a change command is given that deletes only part of a line, a dollar
   * is put at the end of the changed text. dollar_vcol is set to the virtual
!  * column of this '$'.
   */
! EXTERN colnr_T	dollar_vcol INIT(= 0);
  
  #ifdef FEAT_INS_EXPAND
  /*
--- 113,121 ----
   * When '$' is included in 'cpoptions' option set:
   * When a change command is given that deletes only part of a line, a dollar
   * is put at the end of the changed text. dollar_vcol is set to the virtual
!  * column of this '$'.  -1 is used to indicate no $ is being displayed.
   */
! EXTERN colnr_T	dollar_vcol INIT(= -1);
  
  #ifdef FEAT_INS_EXPAND
  /*
*** ../vim-7.3.425/src/move.c	2012-01-10 22:26:12.000000000 +0100
--- src/move.c	2012-02-04 23:21:08.000000000 +0100
***************
*** 362,368 ****
  #endif
  	    )
      {
! 	dollar_vcol = 0;
  	if (curwin->w_skipcol != 0)
  	{
  	    curwin->w_skipcol = 0;
--- 362,368 ----
  #endif
  	    )
      {
! 	dollar_vcol = -1;
  	if (curwin->w_skipcol != 0)
  	{
  	    curwin->w_skipcol = 0;
***************
*** 966,972 ****
  
      /* remove '$' from change command when cursor moves onto it */
      if (startcol > dollar_vcol)
! 	dollar_vcol = 0;
  
      extra = curwin_col_off();
      curwin->w_wcol = curwin->w_virtcol + extra;
--- 966,972 ----
  
      /* remove '$' from change command when cursor moves onto it */
      if (startcol > dollar_vcol)
! 	dollar_vcol = -1;
  
      extra = curwin_col_off();
      curwin->w_wcol = curwin->w_virtcol + extra;
*** ../vim-7.3.425/src/screen.c	2012-01-10 22:26:12.000000000 +0100
--- src/screen.c	2012-02-04 23:22:44.000000000 +0100
***************
*** 1637,1647 ****
  	     * When at start of changed lines: May scroll following lines
  	     * up or down to minimize redrawing.
  	     * Don't do this when the change continues until the end.
! 	     * Don't scroll when dollar_vcol is non-zero, keep the "$".
  	     */
  	    if (lnum == mod_top
  		    && mod_bot != MAXLNUM
! 		    && !(dollar_vcol != 0 && mod_bot == mod_top + 1))
  	    {
  		int		old_rows = 0;
  		int		new_rows = 0;
--- 1637,1647 ----
  	     * When at start of changed lines: May scroll following lines
  	     * up or down to minimize redrawing.
  	     * Don't do this when the change continues until the end.
! 	     * Don't scroll when dollar_vcol >= 0, keep the "$".
  	     */
  	    if (lnum == mod_top
  		    && mod_bot != MAXLNUM
! 		    && !(dollar_vcol >= 0 && mod_bot == mod_top + 1))
  	    {
  		int		old_rows = 0;
  		int		new_rows = 0;
***************
*** 1868,1879 ****
  	    if (row > wp->w_height)	/* past end of screen */
  	    {
  		/* we may need the size of that too long line later on */
! 		if (dollar_vcol == 0)
  		    wp->w_lines[idx].wl_size = plines_win(wp, lnum, TRUE);
  		++idx;
  		break;
  	    }
! 	    if (dollar_vcol == 0)
  		wp->w_lines[idx].wl_size = row - srow;
  	    ++idx;
  #ifdef FEAT_FOLDING
--- 1868,1879 ----
  	    if (row > wp->w_height)	/* past end of screen */
  	    {
  		/* we may need the size of that too long line later on */
! 		if (dollar_vcol == -1)
  		    wp->w_lines[idx].wl_size = plines_win(wp, lnum, TRUE);
  		++idx;
  		break;
  	    }
! 	    if (dollar_vcol == -1)
  		wp->w_lines[idx].wl_size = row - srow;
  	    ++idx;
  #ifdef FEAT_FOLDING
***************
*** 1990,1996 ****
  	    }
  #endif
  	}
! 	else if (dollar_vcol == 0)
  	    wp->w_botline = lnum;
  
  	/* make sure the rest of the screen is blank */
--- 1990,1996 ----
  	    }
  #endif
  	}
! 	else if (dollar_vcol == -1)
  	    wp->w_botline = lnum;
  
  	/* make sure the rest of the screen is blank */
***************
*** 2005,2011 ****
      wp->w_old_botfill = wp->w_botfill;
  #endif
  
!     if (dollar_vcol == 0)
      {
  	/*
  	 * There is a trick with w_botline.  If we invalidate it on each
--- 2005,2011 ----
      wp->w_old_botfill = wp->w_botfill;
  #endif
  
!     if (dollar_vcol == -1)
      {
  	/*
  	 * There is a trick with w_botline.  If we invalidate it on each
***************
*** 3564,3570 ****
  	}
  
  	/* When still displaying '$' of change command, stop at cursor */
! 	if (dollar_vcol != 0 && wp == curwin
  		   && lnum == wp->w_cursor.lnum && vcol >= (long)wp->w_virtcol
  #ifdef FEAT_DIFF
  				   && filler_todo <= 0
--- 3564,3570 ----
  	}
  
  	/* When still displaying '$' of change command, stop at cursor */
! 	if (dollar_vcol >= 0 && wp == curwin
  		   && lnum == wp->w_cursor.lnum && vcol >= (long)wp->w_virtcol
  #ifdef FEAT_DIFF
  				   && filler_todo <= 0
*** ../vim-7.3.425/src/search.c	2012-01-26 20:58:21.000000000 +0100
--- src/search.c	2012-02-04 23:23:10.000000000 +0100
***************
*** 2501,2508 ****
  	    save_siso = p_siso;
  	    /* Handle "$" in 'cpo': If the ')' is typed on top of the "$",
  	     * stop displaying the "$". */
! 	    if (dollar_vcol > 0 && dollar_vcol == curwin->w_virtcol)
! 		dollar_vcol = 0;
  	    ++curwin->w_virtcol;	/* do display ')' just before "$" */
  	    update_screen(VALID);	/* show the new char first */
  
--- 2501,2508 ----
  	    save_siso = p_siso;
  	    /* Handle "$" in 'cpo': If the ')' is typed on top of the "$",
  	     * stop displaying the "$". */
! 	    if (dollar_vcol >= 0 && dollar_vcol == curwin->w_virtcol)
! 		dollar_vcol = -1;
  	    ++curwin->w_virtcol;	/* do display ')' just before "$" */
  	    update_screen(VALID);	/* show the new char first */
  
*** ../vim-7.3.425/src/version.c	2012-02-04 22:44:27.000000000 +0100
--- src/version.c	2012-02-04 23:32:55.000000000 +0100
***************
*** 716,717 ****
--- 716,719 ----
  {   /* Add new patch number below this line */
+ /**/
+     426,
  /**/


-- 
I am also told that there is a logical proof out there somewhere
that demonstrates that there is no task which duct tape cannot handle.
					-- Paul Brannan

 /// Bram Moolenaar -- Bram@Moolenaar.net -- 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    ///
