To: vim_dev@googlegroups.com Subject: Patch 7.3.426 Fcc: outbox From: Bram Moolenaar 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 ///