diff options
Diffstat (limited to 'data/vim/patches/8.1.0826')
-rw-r--r-- | data/vim/patches/8.1.0826 | 3149 |
1 files changed, 3149 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0826 b/data/vim/patches/8.1.0826 new file mode 100644 index 000000000..f224fef2a --- /dev/null +++ b/data/vim/patches/8.1.0826 @@ -0,0 +1,3149 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0826 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0826 +Problem: Too many #ifdefs. +Solution: Graduate FEAT_VIRTUALEDIT. Adds about 10Kbyte to the code. +Files: src/buffer.c, src/charset.c, src/edit.c, src/eval.c, + src/evalfunc.c, src/ex_cmds.c, src/ex_docmd.c, src/feature.h, + src/globals.h, src/gui.c, src/if_py_both.h, src/macros.h, + src/mark.c, src/mbyte.c, src/memline.c, src/menu.c, src/misc1.c, + src/misc2.c, src/move.c, src/netbeans.c, src/normal.c, src/ops.c, + src/option.c, src/option.h, src/screen.c, src/search.c, + src/spell.c, src/structs.h, src/tag.c, src/ui.c, src/undo.c, + src/userfunc.c, src/version.c, src/vim.h, src/window.c + + +*** ../vim-8.1.0825/src/buffer.c 2019-01-24 15:04:44.662887892 +0100 +--- src/buffer.c 2019-01-26 16:53:13.030607118 +0100 +*************** +*** 1729,1737 **** + /* Cursor on first line by default. */ + curwin->w_cursor.lnum = 1; + curwin->w_cursor.col = 0; +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + curwin->w_set_curswant = TRUE; + curwin->w_topline_was_set = FALSE; + +--- 1729,1735 ---- +*************** +*** 2333,2341 **** + { + curwin->w_cursor.col = col; + check_cursor_col(); +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + curwin->w_set_curswant = TRUE; + } + return OK; +--- 2331,2337 ---- +*************** +*** 2363,2371 **** + { + curwin->w_cursor.col = fpos->col; + check_cursor_col(); +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + curwin->w_set_curswant = TRUE; + } + } +--- 2359,2365 ---- +*************** +*** 2958,2964 **** + buflist_findfpos(buf_T *buf) + { + wininfo_T *wip; +! static pos_T no_position = INIT_POS_T(1, 0, 0); + + wip = find_wininfo(buf, FALSE); + if (wip != NULL) +--- 2952,2958 ---- + buflist_findfpos(buf_T *buf) + { + wininfo_T *wip; +! static pos_T no_position = {1, 0, 0}; + + wip = find_wininfo(buf, FALSE); + if (wip != NULL) +*************** +*** 3955,3963 **** + // Line may have changed since checking the cursor column, or the lnum + // was adjusted above. + wp->w_cursor.col = (colnr_T)len; +- #ifdef FEAT_VIRTUALEDIT + wp->w_cursor.coladd = 0; +- #endif + byteval = 0; + } + else +--- 3949,3955 ---- +*** ../vim-8.1.0825/src/charset.c 2019-01-24 15:54:17.794846944 +0100 +--- src/charset.c 2019-01-26 16:53:46.770374525 +0100 +*************** +*** 1365,1381 **** + colnr_T vcol; + + curwin->w_p_list = FALSE; +- #ifdef FEAT_VIRTUALEDIT + if (posp->coladd) + getvvcol(curwin, posp, NULL, &vcol, NULL); + else +- #endif + getvcol(curwin, posp, NULL, &vcol, NULL); + curwin->w_p_list = list_save; + return vcol; + } + +- #if defined(FEAT_VIRTUALEDIT) || defined(PROTO) + /* + * Get virtual column in virtual mode. + */ +--- 1365,1378 ---- +*************** +*** 1425,1431 **** + else + getvcol(wp, pos, start, cursor, end); + } +- #endif + + /* + * Get the leftmost and rightmost virtual column of pos1 and pos2. +--- 1422,1427 ---- +*** ../vim-8.1.0825/src/edit.c 2019-01-25 22:29:54.139821894 +0100 +--- src/edit.c 2019-01-26 16:55:18.241740105 +0100 +*************** +*** 1072,1085 **** + break; + ins_ctrl_o(); + +- #ifdef FEAT_VIRTUALEDIT + /* don't move the cursor left when 'virtualedit' has "onemore". */ + if (ve_flags & VE_ONEMORE) + { + ins_at_eol = FALSE; + nomove = TRUE; + } +- #endif + count = 0; + goto doESCkey; + +--- 1072,1083 ---- +*************** +*** 7125,7138 **** + { + if (gchar_cursor() != NUL) + inc_cursor(); +! #ifdef FEAT_VIRTUALEDIT +! /* If the cursor is still at the same character, also keep +! * the "coladd". */ + if (gchar_cursor() == NUL + && curwin->w_cursor.lnum == tpos.lnum + && curwin->w_cursor.col == tpos.col) + curwin->w_cursor.coladd = tpos.coladd; +- #endif + } + } + +--- 7123,7134 ---- + { + if (gchar_cursor() != NUL) + inc_cursor(); +! // If the cursor is still at the same character, also keep +! // the "coladd". + if (gchar_cursor() == NUL + && curwin->w_cursor.lnum == tpos.lnum + && curwin->w_cursor.col == tpos.col) + curwin->w_cursor.coladd = tpos.coladd; + } + } + +*************** +*** 7182,7190 **** + if (VIsual.col > len) + { + VIsual.col = len; +- #ifdef FEAT_VIRTUALEDIT + VIsual.coladd = 0; +- #endif + } + } + } +--- 7178,7184 ---- +*************** +*** 7293,7301 **** + else + { + curwin->w_cursor.col = 0; +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + + if (flags & (BL_WHITE | BL_SOL)) + { +--- 7287,7293 ---- +*************** +*** 7323,7329 **** + char_u *ptr; + int l; + +- #ifdef FEAT_VIRTUALEDIT + if (virtual_active()) + { + pos_T prevpos = curwin->w_cursor; +--- 7315,7320 ---- +*************** +*** 7338,7344 **** + return (prevpos.col != curwin->w_cursor.col + || prevpos.coladd != curwin->w_cursor.coladd) ? OK : FAIL; + } +- #endif + + ptr = ml_get_cursor(); + if (*ptr == NUL) +--- 7329,7334 ---- +*************** +*** 7351,7361 **** + + /* move "l" bytes right, but don't end up on the NUL, unless 'virtualedit' + * contains "onemore". */ +! if (ptr[l] == NUL +! #ifdef FEAT_VIRTUALEDIT +! && (ve_flags & VE_ONEMORE) == 0 +! #endif +! ) + return FAIL; + curwin->w_cursor.col += l; + +--- 7341,7347 ---- + + /* move "l" bytes right, but don't end up on the NUL, unless 'virtualedit' + * contains "onemore". */ +! if (ptr[l] == NUL && (ve_flags & VE_ONEMORE) == 0) + return FAIL; + curwin->w_cursor.col += l; + +*************** +*** 7366,7383 **** + int + oneleft(void) + { +- #ifdef FEAT_VIRTUALEDIT + if (virtual_active()) + { +! # ifdef FEAT_LINEBREAK + int width; +! # endif + int v = getviscol(); + + if (v == 0) + return FAIL; + +! # ifdef FEAT_LINEBREAK + /* We might get stuck on 'showbreak', skip over it. */ + width = 1; + for (;;) +--- 7352,7368 ---- + int + oneleft(void) + { + if (virtual_active()) + { +! #ifdef FEAT_LINEBREAK + int width; +! #endif + int v = getviscol(); + + if (v == 0) + return FAIL; + +! #ifdef FEAT_LINEBREAK + /* We might get stuck on 'showbreak', skip over it. */ + width = 1; + for (;;) +*************** +*** 7391,7399 **** + break; + ++width; + } +! # else + coladvance(v - 1); +! # endif + + if (curwin->w_cursor.coladd == 1) + { +--- 7376,7384 ---- + break; + ++width; + } +! #else + coladvance(v - 1); +! #endif + + if (curwin->w_cursor.coladd == 1) + { +*************** +*** 7409,7415 **** + curwin->w_set_curswant = TRUE; + return OK; + } +- #endif + + if (curwin->w_cursor.col == 0) + return FAIL; +--- 7394,7399 ---- +*************** +*** 8665,8674 **** + */ + if (!nomove + && (curwin->w_cursor.col != 0 +! #ifdef FEAT_VIRTUALEDIT +! || curwin->w_cursor.coladd > 0 +! #endif +! ) + && (restart_edit == NUL + || (gchar_cursor() == NUL && !VIsual_active)) + #ifdef FEAT_RIGHTLEFT +--- 8649,8655 ---- + */ + if (!nomove + && (curwin->w_cursor.col != 0 +! || curwin->w_cursor.coladd > 0) + && (restart_edit == NUL + || (gchar_cursor() == NUL && !VIsual_active)) + #ifdef FEAT_RIGHTLEFT +*************** +*** 8676,8682 **** + #endif + ) + { +- #ifdef FEAT_VIRTUALEDIT + if (curwin->w_cursor.coladd > 0 || ve_flags == VE_ALL) + { + oneleft(); +--- 8657,8662 ---- +*************** +*** 8684,8690 **** + ++curwin->w_cursor.coladd; + } + else +- #endif + { + --curwin->w_cursor.col; + /* Correct cursor for multi-byte character. */ +--- 8664,8669 ---- +*************** +*** 8874,8884 **** + restart_edit = 'R'; + else + restart_edit = 'I'; +- #ifdef FEAT_VIRTUALEDIT + if (virtual_active()) + ins_at_eol = FALSE; /* cursor always keeps its column */ + else +- #endif + ins_at_eol = (gchar_cursor() == NUL); + } + +--- 8853,8861 ---- +*************** +*** 9040,9046 **** + inc_cursor(); + #endif + +- #ifdef FEAT_VIRTUALEDIT + /* Virtualedit: + * BACKSPACE_CHAR eats a virtual space + * BACKSPACE_WORD eats all coladd +--- 9017,9022 ---- +*************** +*** 9060,9066 **** + } + curwin->w_cursor.coladd = 0; + } +- #endif + + /* + * Delete newline! +--- 9036,9041 ---- +*************** +*** 9744,9752 **** + if (c == K_C_HOME) + curwin->w_cursor.lnum = 1; + curwin->w_cursor.col = 0; +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + curwin->w_curswant = 0; + start_arrow(&tpos); + } +--- 9719,9725 ---- +*************** +*** 9797,9817 **** + foldOpenCursor(); + #endif + undisplay_dollar(); +! if (gchar_cursor() != NUL +! #ifdef FEAT_VIRTUALEDIT +! || virtual_active() +! #endif +! ) + { + start_arrow_with_change(&curwin->w_cursor, end_change); + if (!end_change) + AppendCharToRedobuff(K_RIGHT); + curwin->w_set_curswant = TRUE; +- #ifdef FEAT_VIRTUALEDIT + if (virtual_active()) + oneright(); + else +- #endif + { + if (has_mbyte) + curwin->w_cursor.col += (*mb_ptr2len)(ml_get_cursor()); +--- 9770,9784 ---- + foldOpenCursor(); + #endif + undisplay_dollar(); +! if (gchar_cursor() != NUL || virtual_active()) + { + start_arrow_with_change(&curwin->w_cursor, end_change); + if (!end_change) + AppendCharToRedobuff(K_RIGHT); + curwin->w_set_curswant = TRUE; + if (virtual_active()) + oneright(); + else + { + if (has_mbyte) + curwin->w_cursor.col += (*mb_ptr2len)(ml_get_cursor()); +*************** +*** 10268,10279 **** + * in open_line(). + */ + +- #ifdef FEAT_VIRTUALEDIT + /* Put cursor on NUL if on the last char and coladd is 1 (happens after + * CTRL-O). */ + if (virtual_active() && curwin->w_cursor.coladd > 0) + coladvance(getviscol()); +- #endif + + #ifdef FEAT_RIGHTLEFT + # ifdef FEAT_FKMAP +--- 10235,10244 ---- +*** ../vim-8.1.0825/src/eval.c 2019-01-25 20:48:29.381157353 +0100 +--- src/eval.c 2019-01-26 16:55:31.845645313 +0100 +*************** +*** 6207,6218 **** + return NULL; /* invalid column number */ + --pos.col; + +- #ifdef FEAT_VIRTUALEDIT + /* Get the virtual offset. Defaults to zero. */ + pos.coladd = list_find_nr(l, 2L, &error); + if (error) + pos.coladd = 0; +- #endif + + return &pos; + } +--- 6207,6216 ---- +*************** +*** 6236,6244 **** + return pp; + } + +- #ifdef FEAT_VIRTUALEDIT + pos.coladd = 0; +- #endif + + if (name[0] == 'w' && dollar_lnum) + { +--- 6234,6240 ---- +*************** +*** 6323,6335 **** + return FAIL; + posp->col = n; + +- #ifdef FEAT_VIRTUALEDIT + n = list_find_nr(l, i, NULL); /* off */ + if (n < 0) + posp->coladd = 0; + else + posp->coladd = n; +- #endif + + if (curswantp != NULL) + *curswantp = list_find_nr(l, i + 1, NULL); /* curswant */ +--- 6319,6329 ---- +*** ../vim-8.1.0825/src/evalfunc.c 2019-01-24 21:57:11.574719854 +0100 +--- src/evalfunc.c 2019-01-26 16:56:16.065336486 +0100 +*************** +*** 2517,2523 **** + else + { + col = fp->col + 1; +- #ifdef FEAT_VIRTUALEDIT + /* col(".") when the cursor is on the NUL at the end of the line + * because of "coladd" can be seen as an extra column. */ + if (virtual_active() && fp == &curwin->w_cursor) +--- 2517,2522 ---- +*************** +*** 2533,2539 **** + col += l; + } + } +- #endif + } + } + rettv->vval.v_number = col; +--- 2532,2537 ---- +*************** +*** 2838,2846 **** + f_cursor(typval_T *argvars, typval_T *rettv) + { + long line, col; +- #ifdef FEAT_VIRTUALEDIT + long coladd = 0; +- #endif + int set_curswant = TRUE; + + rettv->vval.v_number = -1; +--- 2836,2842 ---- +*************** +*** 2856,2864 **** + } + line = pos.lnum; + col = pos.col; +- #ifdef FEAT_VIRTUALEDIT + coladd = pos.coladd; +- #endif + if (curswant >= 0) + { + curwin->w_curswant = curswant - 1; +--- 2852,2858 ---- +*************** +*** 2869,2892 **** + { + line = tv_get_lnum(argvars); + col = (long)tv_get_number_chk(&argvars[1], NULL); +- #ifdef FEAT_VIRTUALEDIT + if (argvars[2].v_type != VAR_UNKNOWN) + coladd = (long)tv_get_number_chk(&argvars[2], NULL); +- #endif + } +! if (line < 0 || col < 0 +! #ifdef FEAT_VIRTUALEDIT +! || coladd < 0 +! #endif +! ) + return; /* type error; errmsg already given */ + if (line > 0) + curwin->w_cursor.lnum = line; + if (col > 0) + curwin->w_cursor.col = col - 1; +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = coladd; +- #endif + + /* Make sure the cursor is in a valid position. */ + check_cursor(); +--- 2863,2878 ---- + { + line = tv_get_lnum(argvars); + col = (long)tv_get_number_chk(&argvars[1], NULL); + if (argvars[2].v_type != VAR_UNKNOWN) + coladd = (long)tv_get_number_chk(&argvars[2], NULL); + } +! if (line < 0 || col < 0 || coladd < 0) + return; /* type error; errmsg already given */ + if (line > 0) + curwin->w_cursor.lnum = line; + if (col > 0) + curwin->w_cursor.col = col - 1; + curwin->w_cursor.coladd = coladd; + + /* Make sure the cursor is in a valid position. */ + check_cursor(); +*************** +*** 4810,4818 **** + return; + dict_add_number(d, "lnum", (long)buf->b_changelist[i].lnum); + dict_add_number(d, "col", (long)buf->b_changelist[i].col); +- # ifdef FEAT_VIRTUALEDIT + dict_add_number(d, "coladd", (long)buf->b_changelist[i].coladd); +- # endif + } + #endif + } +--- 4796,4802 ---- +*************** +*** 5304,5312 **** + return; + dict_add_number(d, "lnum", (long)wp->w_jumplist[i].fmark.mark.lnum); + dict_add_number(d, "col", (long)wp->w_jumplist[i].fmark.mark.col); +- # ifdef FEAT_VIRTUALEDIT + dict_add_number(d, "coladd", (long)wp->w_jumplist[i].fmark.mark.coladd); +- # endif + dict_add_number(d, "bufnr", (long)wp->w_jumplist[i].fmark.fnum); + if (wp->w_jumplist[i].fname != NULL) + dict_add_string(d, "filename", wp->w_jumplist[i].fname); +--- 5288,5294 ---- +*************** +*** 5483,5492 **** + list_append_number(l, (fp != NULL) + ? (varnumber_T)(fp->col == MAXCOL ? MAXCOL : fp->col + 1) + : (varnumber_T)0); +! list_append_number(l, +! #ifdef FEAT_VIRTUALEDIT +! (fp != NULL) ? (varnumber_T)fp->coladd : +! #endif + (varnumber_T)0); + if (getcurpos) + { +--- 5465,5471 ---- + list_append_number(l, (fp != NULL) + ? (varnumber_T)(fp->col == MAXCOL ? MAXCOL : fp->col + 1) + : (varnumber_T)0); +! list_append_number(l, (fp != NULL) ? (varnumber_T)fp->coladd : + (varnumber_T)0); + if (getcurpos) + { +*************** +*** 6574,6582 **** + "viminfo", + #endif + "vertsplit", +- #ifdef FEAT_VIRTUALEDIT + "virtualedit", +- #endif + "visual", + "visualextra", + "vreplace", +--- 6553,6559 ---- +*************** +*** 14611,14620 **** + curwin->w_cursor.lnum = (linenr_T)dict_get_number(dict, (char_u *)"lnum"); + if (dict_find(dict, (char_u *)"col", -1) != NULL) + curwin->w_cursor.col = (colnr_T)dict_get_number(dict, (char_u *)"col"); +- #ifdef FEAT_VIRTUALEDIT + if (dict_find(dict, (char_u *)"coladd", -1) != NULL) + curwin->w_cursor.coladd = (colnr_T)dict_get_number(dict, (char_u *)"coladd"); +- #endif + if (dict_find(dict, (char_u *)"curswant", -1) != NULL) + { + curwin->w_curswant = (colnr_T)dict_get_number(dict, (char_u *)"curswant"); +--- 14588,14595 ---- +*************** +*** 14661,14669 **** + + dict_add_number(dict, "lnum", (long)curwin->w_cursor.lnum); + dict_add_number(dict, "col", (long)curwin->w_cursor.col); +- #ifdef FEAT_VIRTUALEDIT + dict_add_number(dict, "coladd", (long)curwin->w_cursor.coladd); +- #endif + update_curswant(); + dict_add_number(dict, "curswant", (long)curwin->w_curswant); + +--- 14636,14642 ---- +*** ../vim-8.1.0825/src/ex_cmds.c 2019-01-24 15:04:44.666887862 +0100 +--- src/ex_cmds.c 2019-01-26 16:56:25.545270146 +0100 +*************** +*** 4332,4340 **** + /* 'sol' is off: Use last known column. */ + curwin->w_cursor.col = solcol; + check_cursor_col(); +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + curwin->w_set_curswant = TRUE; + } + else +--- 4332,4338 ---- +*** ../vim-8.1.0825/src/ex_docmd.c 2019-01-24 15:54:17.782847030 +0100 +--- src/ex_docmd.c 2019-01-26 16:56:43.125146996 +0100 +*************** +*** 4650,4658 **** + pos.col = MAXCOL; + else + pos.col = 0; +- #ifdef FEAT_VIRTUALEDIT + pos.coladd = 0; +- #endif + if (searchit(curwin, curbuf, &pos, NULL, + *cmd == '?' ? BACKWARD : FORWARD, + (char_u *)"", 1L, SEARCH_MSG, +--- 4650,4656 ---- +*************** +*** 9421,9429 **** + oa.end.lnum = eap->line2; + oa.line_count = eap->line2 - eap->line1 + 1; + oa.motion_type = MLINE; +- #ifdef FEAT_VIRTUALEDIT + virtual_op = FALSE; +- #endif + if (eap->cmdidx != CMD_yank) /* position cursor for undo */ + { + setpcmark(); +--- 9419,9425 ---- +*************** +*** 9460,9468 **** + op_shift(&oa, FALSE, eap->amount); + break; + } +- #ifdef FEAT_VIRTUALEDIT + virtual_op = MAYBE; +- #endif + ex_may_print(eap); + } + +--- 9456,9462 ---- +*** ../vim-8.1.0825/src/feature.h 2019-01-24 18:20:14.436543394 +0100 +--- src/feature.h 2019-01-26 17:08:35.436071531 +0100 +*************** +*** 199,208 **** + + /* + * +virtualedit 'virtualedit' option and its implementation + */ +- #ifdef FEAT_NORMAL +- # define FEAT_VIRTUALEDIT +- #endif + + /* + * +cmdline_info 'showcmd' and 'ruler' options. +--- 199,206 ---- + + /* + * +virtualedit 'virtualedit' option and its implementation ++ * Now always included. + */ + + /* + * +cmdline_info 'showcmd' and 'ruler' options. +*** ../vim-8.1.0825/src/globals.h 2019-01-26 16:20:44.264683546 +0100 +--- src/globals.h 2019-01-26 17:08:47.047987932 +0100 +*************** +*** 771,777 **** + + EXTERN pos_T saved_cursor /* w_cursor before formatting text. */ + #ifdef DO_INIT +! = INIT_POS_T(0, 0, 0) + #endif + ; + +--- 771,777 ---- + + EXTERN pos_T saved_cursor /* w_cursor before formatting text. */ + #ifdef DO_INIT +! = {0, 0, 0} + #endif + ; + +*************** +*** 1066,1072 **** + EXTERN int did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */ + EXTERN pos_T last_cursormoved /* for CursorMoved event */ + # ifdef DO_INIT +! = INIT_POS_T(0, 0, 0) + # endif + ; + +--- 1066,1072 ---- + EXTERN int did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */ + EXTERN pos_T last_cursormoved /* for CursorMoved event */ + # ifdef DO_INIT +! = {0, 0, 0} + # endif + ; + +*************** +*** 1335,1345 **** + EXTERN char pseps[2] INIT(= {'\\' COMMA 0}); + #endif + +- #ifdef FEAT_VIRTUALEDIT + /* Set to TRUE when an operator is being executed with virtual editing, MAYBE + * when no operator is being executed, FALSE otherwise. */ + EXTERN int virtual_op INIT(= MAYBE); +- #endif + + #ifdef FEAT_SYN_HL + /* Display tick, incremented for each call to update_screen() */ +--- 1335,1343 ---- +*** ../vim-8.1.0825/src/gui.c 2019-01-24 15:04:44.670887836 +0100 +--- src/gui.c 2019-01-26 16:56:48.273110907 +0100 +*************** +*** 4599,4612 **** + longest_lnum = gui_find_longest_lnum(); + max = scroll_line_len(longest_lnum); + +- #ifdef FEAT_VIRTUALEDIT + if (virtual_active()) + { + /* May move the cursor even further to the right. */ + if (curwin->w_virtcol >= (colnr_T)max) + max = curwin->w_virtcol; + } +- #endif + + #ifndef SCROLL_PAST_END + max += curwin->w_width - 1; +--- 4599,4610 ---- +*** ../vim-8.1.0825/src/if_py_both.h 2019-01-24 17:18:37.599462306 +0100 +--- src/if_py_both.h 2019-01-26 17:08:58.951902215 +0100 +*************** +*** 4033,4041 **** + self->win->w_cursor.lnum = lnum; + self->win->w_cursor.col = col; + self->win->w_set_curswant = TRUE; +- #ifdef FEAT_VIRTUALEDIT + self->win->w_cursor.coladd = 0; +- #endif + /* When column is out of range silently correct it. */ + check_cursor_col_win(self->win); + +--- 4033,4039 ---- +*** ../vim-8.1.0825/src/macros.h 2019-01-24 17:18:37.599462306 +0100 +--- src/macros.h 2019-01-26 17:09:21.635738827 +0100 +*************** +*** 21,47 **** + /* + * Position comparisons + */ +! #ifdef FEAT_VIRTUALEDIT +! # define LT_POS(a, b) (((a).lnum != (b).lnum) \ + ? (a).lnum < (b).lnum \ + : (a).col != (b).col \ + ? (a).col < (b).col \ + : (a).coladd < (b).coladd) +! # define LT_POSP(a, b) (((a)->lnum != (b)->lnum) \ + ? (a)->lnum < (b)->lnum \ + : (a)->col != (b)->col \ + ? (a)->col < (b)->col \ + : (a)->coladd < (b)->coladd) +! # define EQUAL_POS(a, b) (((a).lnum == (b).lnum) && ((a).col == (b).col) && ((a).coladd == (b).coladd)) +! # define CLEAR_POS(a) {(a)->lnum = 0; (a)->col = 0; (a)->coladd = 0;} +! #else +! # define LT_POS(a, b) (((a).lnum != (b).lnum) \ +! ? ((a).lnum < (b).lnum) : ((a).col < (b).col)) +! # define LT_POSP(a, b) (((a)->lnum != (b)->lnum) \ +! ? ((a)->lnum < (b)->lnum) : ((a)->col < (b)->col)) +! # define EQUAL_POS(a, b) (((a).lnum == (b).lnum) && ((a).col == (b).col)) +! # define CLEAR_POS(a) {(a)->lnum = 0; (a)->col = 0;} +! #endif + + #define LTOREQ_POS(a, b) (LT_POS(a, b) || EQUAL_POS(a, b)) + +--- 21,38 ---- + /* + * Position comparisons + */ +! #define LT_POS(a, b) (((a).lnum != (b).lnum) \ + ? (a).lnum < (b).lnum \ + : (a).col != (b).col \ + ? (a).col < (b).col \ + : (a).coladd < (b).coladd) +! #define LT_POSP(a, b) (((a)->lnum != (b)->lnum) \ + ? (a)->lnum < (b)->lnum \ + : (a)->col != (b)->col \ + ? (a)->col < (b)->col \ + : (a)->coladd < (b)->coladd) +! #define EQUAL_POS(a, b) (((a).lnum == (b).lnum) && ((a).col == (b).col) && ((a).coladd == (b).coladd)) +! #define CLEAR_POS(a) {(a)->lnum = 0; (a)->col = 0; (a)->coladd = 0;} + + #define LTOREQ_POS(a, b) (LT_POS(a, b) || EQUAL_POS(a, b)) + +*** ../vim-8.1.0825/src/mark.c 2019-01-19 17:43:03.417449145 +0100 +--- src/mark.c 2019-01-26 16:57:22.132873211 +0100 +*************** +*** 414,422 **** + pos_copy.col = 0; + else + pos_copy.col = MAXCOL; +- #ifdef FEAT_VIRTUALEDIT + pos_copy.coladd = 0; +- #endif + } + } + else if (ASCII_ISLOWER(c)) /* normal named mark */ +--- 414,420 ---- +*************** +*** 651,659 **** + buf->b_op_end.lnum = 0; + buf->b_last_cursor.lnum = 1; /* '" mark cleared */ + buf->b_last_cursor.col = 0; +- #ifdef FEAT_VIRTUALEDIT + buf->b_last_cursor.coladd = 0; +- #endif + buf->b_last_insert.lnum = 0; /* '^ mark cleared */ + buf->b_last_change.lnum = 0; /* '. mark cleared */ + #ifdef FEAT_JUMPLIST +--- 649,655 ---- +*************** +*** 1052,1058 **** + linenr_T *lp; + win_T *win; + tabpage_T *tab; +! static pos_T initpos = INIT_POS_T(1, 0, 0); + + if (line2 < line1 && amount_after == 0L) /* nothing to do */ + return; +--- 1048,1054 ---- + linenr_T *lp; + win_T *win; + tabpage_T *tab; +! static pos_T initpos = {1, 0, 0}; + + if (line2 < line1 && amount_after == 0L) /* nothing to do */ + return; +*************** +*** 1451,1459 **** + fm->fmark.mark.lnum = getdigits(&str); + str = skipwhite(str); + fm->fmark.mark.col = getdigits(&str); +- #ifdef FEAT_VIRTUALEDIT + fm->fmark.mark.coladd = 0; +- #endif + fm->fmark.fnum = 0; + str = skipwhite(str); + vim_free(fm->fname); +--- 1447,1453 ---- +*************** +*** 1641,1649 **** + { + fm->fmark.mark.lnum = lnum; + fm->fmark.mark.col = col; +- #ifdef FEAT_VIRTUALEDIT + fm->fmark.mark.coladd = 0; +- #endif + fm->fmark.fnum = 0; + vim_free(fm->fname); + if (vp[4].bv_allocated) +--- 1635,1641 ---- +*************** +*** 2146,2154 **** + } + vim_free(str); + +- #ifdef FEAT_VIRTUALEDIT + pos.coladd = 0; +- #endif + while (!(eof = viminfo_readline(virp)) && line[0] == TAB) + { + if (load_marks) +--- 2138,2144 ---- +*** ../vim-8.1.0825/src/mbyte.c 2019-01-24 15:54:17.790846972 +0100 +--- src/mbyte.c 2019-01-26 16:57:48.512687656 +0100 +*************** +*** 3994,4002 **** + convert_setup(&vimconv, p_enc, curbuf->b_p_fenc); + } + +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + for (;;) + { + p = ml_get_cursor(); +--- 3994,4000 ---- +*************** +*** 4118,4135 **** + { + char_u *p; + +! if (lp->col > 0 +! #ifdef FEAT_VIRTUALEDIT +! || lp->coladd > 1 +! #endif +! ) + { + p = ml_get_buf(buf, lp->lnum, FALSE); + if (*p == NUL || (int)STRLEN(p) < lp->col) + lp->col = 0; + else + lp->col -= (*mb_head_off)(p, p + lp->col); +- #ifdef FEAT_VIRTUALEDIT + /* Reset "coladd" when the cursor would be on the right half of a + * double-wide character. */ + if (lp->coladd == 1 +--- 4116,4128 ---- + { + char_u *p; + +! if (lp->col > 0 || lp->coladd > 1) + { + p = ml_get_buf(buf, lp->lnum, FALSE); + if (*p == NUL || (int)STRLEN(p) < lp->col) + lp->col = 0; + else + lp->col -= (*mb_head_off)(p, p + lp->col); + /* Reset "coladd" when the cursor would be on the right half of a + * double-wide character. */ + if (lp->coladd == 1 +*************** +*** 4137,4143 **** + && vim_isprintc((*mb_ptr2char)(p + lp->col)) + && ptr2cells(p + lp->col) > 1) + lp->coladd = 0; +- #endif + } + } + +--- 4130,4135 ---- +*** ../vim-8.1.0825/src/memline.c 2019-01-24 15:54:17.790846972 +0100 +--- src/memline.c 2019-01-26 16:57:59.360611264 +0100 +*************** +*** 5667,5675 **** + { + curwin->w_cursor.lnum = lnum; + curwin->w_cursor.col = (colnr_T)boff; +- # ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- # endif + curwin->w_set_curswant = TRUE; + } + check_cursor(); +--- 5667,5673 ---- +*** ../vim-8.1.0825/src/menu.c 2019-01-19 19:54:17.141981393 +0100 +--- src/menu.c 2019-01-26 16:58:09.392540578 +0100 +*************** +*** 2318,2326 **** + curwin->w_cursor.col = 1; + tpos.lnum = eap->line2; + tpos.col = MAXCOL; +- #ifdef FEAT_VIRTUALEDIT + tpos.coladd = 0; +- #endif + } + + /* Activate visual mode */ +--- 2318,2324 ---- +*** ../vim-8.1.0825/src/misc1.c 2019-01-24 15:54:17.790846972 +0100 +--- src/misc1.c 2019-01-26 16:58:37.044345517 +0100 +*************** +*** 622,630 **** + { + pos.lnum = lnum; + pos.col = (colnr_T)(*regmatch.endp - ml_get(lnum)); +- #ifdef FEAT_VIRTUALEDIT + pos.coladd = 0; +- #endif + } + vim_regfree(regmatch.regprog); + } +--- 622,628 ---- +*************** +*** 1708,1716 **** + changed_lines(curwin->w_cursor.lnum, 0, curwin->w_cursor.lnum, 1L); + + curwin->w_cursor.col = newcol; +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + + #if defined(FEAT_LISP) || defined(FEAT_CINDENT) + /* +--- 1706,1712 ---- +*************** +*** 1781,1789 **** + + /* Insert new stuff into line again */ + curwin->w_cursor.col = 0; +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + ins_bytes(p_extra); /* will call changed_bytes() */ + vim_free(p_extra); + next_line = NULL; +--- 1777,1783 ---- +*************** +*** 2354,2364 **** + linenr_T lnum = curwin->w_cursor.lnum; + int i; + +- #ifdef FEAT_VIRTUALEDIT + /* Break tabs if needed. */ + if (virtual_active() && curwin->w_cursor.coladd > 0) + coladvance_force(getviscol()); +- #endif + + col = curwin->w_cursor.col; + oldp = ml_get(lnum); +--- 2348,2356 ---- +*************** +*** 2499,2508 **** + colnr_T col; + linenr_T lnum = curwin->w_cursor.lnum; + +- #ifdef FEAT_VIRTUALEDIT + if (virtual_active() && curwin->w_cursor.coladd > 0) + coladvance_force(getviscol()); +- #endif + + col = curwin->w_cursor.col; + oldp = ml_get(lnum); +--- 2491,2498 ---- +*************** +*** 2637,2651 **** + * unless "restart_edit" is set or 'virtualedit' contains "onemore". + */ + if (col > 0 && fixpos && restart_edit == 0 +! #ifdef FEAT_VIRTUALEDIT +! && (ve_flags & VE_ONEMORE) == 0 +! #endif +! ) + { + --curwin->w_cursor.col; +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + if (has_mbyte) + curwin->w_cursor.col -= + (*mb_head_off)(oldp, oldp + curwin->w_cursor.col); +--- 2627,2636 ---- + * unless "restart_edit" is set or 'virtualedit' contains "onemore". + */ + if (col > 0 && fixpos && restart_edit == 0 +! && (ve_flags & VE_ONEMORE) == 0) + { + --curwin->w_cursor.col; + curwin->w_cursor.coladd = 0; + if (has_mbyte) + curwin->w_cursor.col -= + (*mb_head_off)(oldp, oldp + curwin->w_cursor.col); +*** ../vim-8.1.0825/src/misc2.c 2019-01-24 15:54:17.790846972 +0100 +--- src/misc2.c 2019-01-26 17:00:00.739753344 +0100 +*************** +*** 16,22 **** + + static char_u *ff_expand_buffer = NULL; /* used for expanding filenames */ + +- #if defined(FEAT_VIRTUALEDIT) || defined(PROTO) + static int coladvance2(pos_T *pos, int addspaces, int finetune, colnr_T wcol); + + /* +--- 16,21 ---- +*************** +*** 67,73 **** + } + return rc; + } +- #endif + + /* + * Get the screen position of character col with a coladd in the cursor line. +--- 66,71 ---- +*************** +*** 80,88 **** + + pos.lnum = curwin->w_cursor.lnum; + pos.col = col; +- #ifdef FEAT_VIRTUALEDIT + pos.coladd = coladd; +- #endif + getvvcol(curwin, &pos, &x, NULL, NULL); + return (int)x; + } +--- 78,84 ---- +*************** +*** 119,125 **** + int + getvpos(pos_T *pos, colnr_T wcol) + { +- #ifdef FEAT_VIRTUALEDIT + return coladvance2(pos, FALSE, virtual_active(), wcol); + } + +--- 115,120 ---- +*************** +*** 130,136 **** + int finetune, /* change char offset for the exact column */ + colnr_T wcol) /* column to move to */ + { +- #endif + int idx; + char_u *ptr; + char_u *line; +--- 125,130 ---- +*************** +*** 144,153 **** + one_more = (State & INSERT) + || restart_edit != NUL + || (VIsual_active && *p_sel != 'o') +! #ifdef FEAT_VIRTUALEDIT +! || ((ve_flags & VE_ONEMORE) && wcol < MAXCOL) +! #endif +! ; + line = ml_get_buf(curbuf, pos->lnum, FALSE); + + if (wcol >= MAXCOL) +--- 138,144 ---- + one_more = (State & INSERT) + || restart_edit != NUL + || (VIsual_active && *p_sel != 'o') +! || ((ve_flags & VE_ONEMORE) && wcol < MAXCOL) ; + line = ml_get_buf(curbuf, pos->lnum, FALSE); + + if (wcol >= MAXCOL) +*************** +*** 155,172 **** + idx = (int)STRLEN(line) - 1 + one_more; + col = wcol; + +- #ifdef FEAT_VIRTUALEDIT + if ((addspaces || finetune) && !VIsual_active) + { + curwin->w_curswant = linetabsize(line) + one_more; + if (curwin->w_curswant > 0) + --curwin->w_curswant; + } +- #endif + } + else + { +- #ifdef FEAT_VIRTUALEDIT + int width = curwin->w_width - win_col_off(curwin); + + if (finetune +--- 146,160 ---- +*************** +*** 188,194 **** + wcol = (csize / width + 1) * width - 1; + } + } +- #endif + + ptr = line; + while (col <= wcol && *ptr != NUL) +--- 176,181 ---- +*************** +*** 219,225 **** + col -= csize; + } + +- #ifdef FEAT_VIRTUALEDIT + if (virtual_active() + && addspaces + && ((col != wcol && col != wcol + 1) || csize > 1)) +--- 206,211 ---- +*************** +*** 283,289 **** + col += correct; + } + } +- #endif + } + + if (idx < 0) +--- 269,274 ---- +*************** +*** 291,297 **** + else + pos->col = idx; + +- #ifdef FEAT_VIRTUALEDIT + pos->coladd = 0; + + if (finetune) +--- 276,281 ---- +*************** +*** 318,324 **** + col += b; + } + } +- #endif + + /* prevent from moving onto a trail byte */ + if (has_mbyte) +--- 302,307 ---- +*************** +*** 364,372 **** + return ((p[l] != NUL) ? 0 : 2); + } + lp->col++; +- #ifdef FEAT_VIRTUALEDIT + lp->coladd = 0; +- #endif + return ((p[1] != NUL) ? 0 : 2); + } + } +--- 347,353 ---- +*************** +*** 374,382 **** + { + lp->col = 0; + lp->lnum++; +- #ifdef FEAT_VIRTUALEDIT + lp->coladd = 0; +- #endif + return 1; + } + return -1; +--- 355,361 ---- +*************** +*** 412,420 **** + { + char_u *p; + +- #ifdef FEAT_VIRTUALEDIT + lp->coladd = 0; +- #endif + if (lp->col == MAXCOL) + { + /* past end of line */ +--- 391,397 ---- +*************** +*** 574,583 **** + check_cursor_col_win(win_T *win) + { + colnr_T len; +- #ifdef FEAT_VIRTUALEDIT + colnr_T oldcol = win->w_cursor.col; + colnr_T oldcoladd = win->w_cursor.col + win->w_cursor.coladd; +- #endif + + len = (colnr_T)STRLEN(ml_get_buf(win->w_buffer, win->w_cursor.lnum, FALSE)); + if (len == 0) +--- 551,558 ---- +*************** +*** 590,598 **** + * - 'virtualedit' is set */ + if ((State & INSERT) || restart_edit + || (VIsual_active && *p_sel != 'o') +- #ifdef FEAT_VIRTUALEDIT + || (ve_flags & VE_ONEMORE) +- #endif + || virtual_active()) + win->w_cursor.col = len; + else +--- 565,571 ---- +*************** +*** 606,612 **** + else if (win->w_cursor.col < 0) + win->w_cursor.col = 0; + +- #ifdef FEAT_VIRTUALEDIT + /* If virtual editing is on, we can leave the cursor on the old position, + * only we must set it to virtual. But don't do it when at the end of the + * line. */ +--- 579,584 ---- +*************** +*** 634,640 **** + /* avoid weird number when there is a miscalculation or overflow */ + win->w_cursor.coladd = 0; + } +- #endif + } + + /* +--- 606,611 ---- +*************** +*** 2172,2178 **** + #endif + + /* +! * Concatenate a string to a growarray which contains characters. + * When "s" is NULL does not do anything. + * Note: Does NOT copy the NUL at the end! + */ +--- 2143,2149 ---- + #endif + + /* +! * Concatenate a string to a growarray which contains bytes. + * When "s" is NULL does not do anything. + * Note: Does NOT copy the NUL at the end! + */ +*** ../vim-8.1.0825/src/move.c 2019-01-24 15:54:17.790846972 +0100 +--- src/move.c 2019-01-26 17:00:19.695618884 +0100 +*************** +*** 508,524 **** + } + else if (wp->w_cursor.col != wp->w_valid_cursor.col + || wp->w_leftcol != wp->w_valid_leftcol +! #ifdef FEAT_VIRTUALEDIT +! || wp->w_cursor.coladd != wp->w_valid_cursor.coladd +! #endif +! ) + { + wp->w_valid &= ~(VALID_WROW|VALID_WCOL|VALID_VIRTCOL); + wp->w_valid_cursor.col = wp->w_cursor.col; + wp->w_valid_leftcol = wp->w_leftcol; +- #ifdef FEAT_VIRTUALEDIT + wp->w_valid_cursor.coladd = wp->w_cursor.coladd; +- #endif + } + } + +--- 508,519 ---- + } + else if (wp->w_cursor.col != wp->w_valid_cursor.col + || wp->w_leftcol != wp->w_valid_leftcol +! || wp->w_cursor.coladd != wp->w_valid_cursor.coladd) + { + wp->w_valid &= ~(VALID_WROW|VALID_WCOL|VALID_VIRTCOL); + wp->w_valid_cursor.col = wp->w_cursor.col; + wp->w_valid_leftcol = wp->w_leftcol; + wp->w_valid_cursor.coladd = wp->w_cursor.coladd; + } + } + +*************** +*** 2800,2808 **** + { + linenr_T line = curwin->w_cursor.lnum; + colnr_T col = curwin->w_cursor.col; +- # ifdef FEAT_VIRTUALEDIT + colnr_T coladd = curwin->w_cursor.coladd; +- # endif + colnr_T curswant = curwin->w_curswant; + int set_curswant = curwin->w_set_curswant; + win_T *old_curwin = curwin; +--- 2795,2801 ---- +*************** +*** 2829,2837 **** + # endif + curwin->w_cursor.lnum = line; + curwin->w_cursor.col = col; +- # ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = coladd; +- # endif + curwin->w_curswant = curswant; + curwin->w_set_curswant = set_curswant; + +--- 2822,2828 ---- +*** ../vim-8.1.0825/src/netbeans.c 2019-01-19 17:43:03.413449172 +0100 +--- src/netbeans.c 2019-01-26 17:00:33.087523823 +0100 +*************** +*** 3344,3352 **** + + pos.lnum = 0; + pos.col = 0; +- #ifdef FEAT_VIRTUALEDIT + pos.coladd = 0; +- #endif + + if (!(buf->b_ml.ml_flags & ML_EMPTY)) + { +--- 3344,3350 ---- +*************** +*** 3378,3386 **** + mypos.lnum = (linenr_T)off; + ++*argp; + mypos.col = strtol((char *)*argp, (char **)argp, 10); +- #ifdef FEAT_VIRTUALEDIT + mypos.coladd = 0; +- #endif + return &mypos; + } + return off2pos(buf, off); +--- 3376,3382 ---- +*** ../vim-8.1.0825/src/normal.c 2019-01-24 15:54:17.794846944 +0100 +--- src/normal.c 2019-01-26 17:02:50.254547145 +0100 +*************** +*** 1340,1348 **** + static colnr_T redo_VIsual_vcol; /* number of cols or end column */ + static long redo_VIsual_count; /* count for Visual operator */ + static int redo_VIsual_arg; /* extra argument */ +- #ifdef FEAT_VIRTUALEDIT + int include_line_break = FALSE; +- #endif + + #if defined(FEAT_CLIPBOARD) + /* +--- 1340,1346 ---- +*************** +*** 1527,1546 **** + /* If 'selection' is "exclusive", backup one character for + * charwise selections. */ + else if (VIsual_mode == 'v') +! { +! # ifdef FEAT_VIRTUALEDIT +! include_line_break = +! # endif +! unadjust_for_sel(); +! } + + oap->start = VIsual; + if (VIsual_mode == 'V') + { + oap->start.col = 0; +- # ifdef FEAT_VIRTUALEDIT + oap->start.coladd = 0; +- # endif + } + } + +--- 1525,1537 ---- + /* If 'selection' is "exclusive", backup one character for + * charwise selections. */ + else if (VIsual_mode == 'v') +! include_line_break = unadjust_for_sel(); + + oap->start = VIsual; + if (VIsual_mode == 'V') + { + oap->start.col = 0; + oap->start.coladd = 0; + } + } + +*************** +*** 1590,1599 **** + check_pos(curwin->w_buffer, &oap->end); + oap->line_count = oap->end.lnum - oap->start.lnum + 1; + +- #ifdef FEAT_VIRTUALEDIT + /* Set "virtual_op" before resetting VIsual_active. */ + virtual_op = virtual_active(); +- #endif + + if (VIsual_active || redo_VIsual_busy) + { +--- 1581,1588 ---- +*************** +*** 1685,1694 **** + { + oap->motion_type = MCHAR; + if (VIsual_mode != Ctrl_V && *ml_get_pos(&(oap->end)) == NUL +! #ifdef FEAT_VIRTUALEDIT +! && (include_line_break || !virtual_op) +! #endif +! ) + { + oap->inclusive = FALSE; + /* Try to include the newline, unless it's an operator +--- 1674,1680 ---- + { + oap->motion_type = MCHAR; + if (VIsual_mode != Ctrl_V && *ml_get_pos(&(oap->end)) == NUL +! && (include_line_break || !virtual_op)) + { + oap->inclusive = FALSE; + /* Try to include the newline, unless it's an operator +*************** +*** 1699,1707 **** + { + ++oap->end.lnum; + oap->end.col = 0; +- #ifdef FEAT_VIRTUALEDIT + oap->end.coladd = 0; +- #endif + ++oap->line_count; + } + } +--- 1685,1691 ---- +*************** +*** 1759,1768 **** + || (oap->op_type == OP_YANK + && gchar_pos(&oap->end) == NUL)) + && EQUAL_POS(oap->start, oap->end) +! #ifdef FEAT_VIRTUALEDIT +! && !(virtual_op && oap->start.coladd != oap->end.coladd) +! #endif +! ); + /* + * For delete, change and yank, it's an error to operate on an + * empty region, when 'E' included in 'cpoptions' (Vi compatible). +--- 1743,1749 ---- + || (oap->op_type == OP_YANK + && gchar_pos(&oap->end) == NUL)) + && EQUAL_POS(oap->start, oap->end) +! && !(virtual_op && oap->start.coladd != oap->end.coladd)); + /* + * For delete, change and yank, it's an error to operate on an + * empty region, when 'E' included in 'cpoptions' (Vi compatible). +*************** +*** 2097,2105 **** + default: + clearopbeep(oap); + } +- #ifdef FEAT_VIRTUALEDIT + virtual_op = MAYBE; +- #endif + if (!gui_yank) + { + /* +--- 2078,2084 ---- +*************** +*** 2198,2206 **** + { + #ifdef FEAT_EVAL + typval_T argv[2]; +- # ifdef FEAT_VIRTUALEDIT + int save_virtual_op = virtual_op; +- # endif + + if (*p_opfunc == NUL) + emsg(_("E774: 'operatorfunc' is empty")); +--- 2177,2183 ---- +*************** +*** 2222,2238 **** + argv[0].vval.v_string = (char_u *)"char"; + argv[1].v_type = VAR_UNKNOWN; + +- # ifdef FEAT_VIRTUALEDIT + /* Reset virtual_op so that 'virtualedit' can be changed in the + * function. */ + virtual_op = MAYBE; +- # endif + + (void)call_func_retnr(p_opfunc, 1, argv); + +- # ifdef FEAT_VIRTUALEDIT + virtual_op = save_virtual_op; +- # endif + } + #else + emsg(_("E775: Eval feature not available")); +--- 2199,2211 ---- +*************** +*** 3290,3299 **** + #ifdef FEAT_EVAL + curbuf->b_visual_mode_eval = VIsual_mode; + #endif +- #ifdef FEAT_VIRTUALEDIT + if (!virtual_active()) + curwin->w_cursor.coladd = 0; +- #endif + may_clear_cmdline(); + + adjust_cursor_eol(); +--- 3263,3270 ---- +*************** +*** 5944,5957 **** + cap->oap->inclusive = FALSE; + past_line = (VIsual_active && *p_sel != 'o'); + +- #ifdef FEAT_VIRTUALEDIT + /* + * In virtual edit mode, there's no such thing as "past_line", as lines + * are (theoretically) infinitely long. + */ + if (virtual_active()) + past_line = 0; +- #endif + + for (n = cap->count1; n > 0; --n) + { +--- 5915,5926 ---- +*************** +*** 5983,5991 **** + { + ++curwin->w_cursor.lnum; + curwin->w_cursor.col = 0; +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + curwin->w_set_curswant = TRUE; + cap->oap->inclusive = FALSE; + } +--- 5952,5958 ---- +*************** +*** 6007,6017 **** + else if (past_line) + { + curwin->w_set_curswant = TRUE; +- #ifdef FEAT_VIRTUALEDIT + if (virtual_active()) + oneright(); + else +- #endif + { + if (has_mbyte) + curwin->w_cursor.col += +--- 5974,5982 ---- +*************** +*** 6242,6254 **** + { + cap->oap->motion_type = MCHAR; + cap->oap->inclusive = TRUE; +- #ifdef FEAT_VIRTUALEDIT + /* In virtual mode when off the edge of a line and an operator + * is pending (whew!) keep the cursor where it is. + * Otherwise, send it to the end of the line. */ + if (!virtual_active() || gchar_cursor() != NUL + || cap->oap->op_type == OP_NOP) +- #endif + curwin->w_curswant = MAXCOL; /* so we stay at the end */ + if (cursor_down((long)(cap->count1 - 1), + cap->oap->op_type == OP_NOP) == FAIL) +--- 6207,6217 ---- +*************** +*** 6341,6349 **** + { + if (i == 2) + cap->oap->motion_type = MLINE; +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + #ifdef FEAT_FOLDING + if (cap->oap->op_type == OP_NOP && (fdo_flags & FDO_SEARCH) && KeyTyped) + foldOpenCursor(); +--- 6304,6310 ---- +*************** +*** 6378,6384 **** + else + { + curwin->w_set_curswant = TRUE; +- #ifdef FEAT_VIRTUALEDIT + /* Include a Tab for "tx" and for "dfx". */ + if (gchar_cursor() == TAB && virtual_active() && cap->arg == FORWARD + && (t_cmd || cap->oap->op_type != OP_NOP)) +--- 6339,6344 ---- +*************** +*** 6390,6396 **** + } + else + curwin->w_cursor.coladd = 0; +- #endif + adjust_for_sel(cap); + #ifdef FEAT_FOLDING + if ((fdo_flags & FDO_HOR) && KeyTyped && cap->oap->op_type == OP_NOP) +--- 6350,6355 ---- +*************** +*** 6406,6412 **** + static void + nv_brackets(cmdarg_T *cap) + { +! pos_T new_pos = INIT_POS_T(0, 0, 0); + pos_T prev_pos; + pos_T *pos = NULL; /* init for GCC */ + pos_T old_pos; /* cursor position before command */ +--- 6365,6371 ---- + static void + nv_brackets(cmdarg_T *cap) + { +! pos_T new_pos = {0, 0, 0}; + pos_T prev_pos; + pos_T *pos = NULL; /* init for GCC */ + pos_T old_pos; /* cursor position before command */ +*************** +*** 6418,6426 **** + cap->oap->motion_type = MCHAR; + cap->oap->inclusive = FALSE; + old_pos = curwin->w_cursor; +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; // TODO: don't do this for an error. +- #endif + + #ifdef FEAT_SEARCHPATH + /* +--- 6377,6383 ---- +*************** +*** 6815,6823 **** + setpcmark(); + curwin->w_cursor = *pos; + curwin->w_set_curswant = TRUE; +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + adjust_for_sel(cap); + } + } +--- 6772,6778 ---- +*************** +*** 6849,6857 **** + { + /* Don't leave the cursor on the NUL past end of line. */ + adjust_cursor(cap->oap); +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + #ifdef FEAT_FOLDING + if ((fdo_flags & FDO_BLOCK) && KeyTyped && cap->oap->op_type == OP_NOP) + foldOpenCursor(); +--- 6804,6810 ---- +*************** +*** 6887,6895 **** + clearopbeep(cap->oap); + else + { +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + #ifdef FEAT_FOLDING + if ((fdo_flags & FDO_BLOCK) && KeyTyped && cap->oap->op_type == OP_NOP) + foldOpenCursor(); +--- 6840,6846 ---- +*************** +*** 6991,6997 **** + return; + } + +- #ifdef FEAT_VIRTUALEDIT + /* Break tabs, etc. */ + if (virtual_active()) + { +--- 6942,6947 ---- +*************** +*** 7006,7012 **** + else if (gchar_cursor() == TAB) + coladvance_force(getviscol()); + } +- #endif + + /* Abort if not enough characters to replace. */ + ptr = ml_get_cursor(); +--- 6956,6961 ---- +*************** +*** 7172,7182 **** + ++curwin->w_curswant; + coladvance(curwin->w_curswant); + if (curwin->w_cursor.col == old_cursor.col +- #ifdef FEAT_VIRTUALEDIT + && (!virtual_active() +! || curwin->w_cursor.coladd == old_cursor.coladd) +! #endif +! ) + { + curwin->w_cursor.lnum = VIsual.lnum; + if (old_cursor.lnum <= VIsual.lnum && *p_sel == 'e') +--- 7121,7128 ---- + ++curwin->w_curswant; + coladvance(curwin->w_curswant); + if (curwin->w_cursor.col == old_cursor.col + && (!virtual_active() +! || curwin->w_cursor.coladd == old_cursor.coladd)) + { + curwin->w_cursor.lnum = VIsual.lnum; + if (old_cursor.lnum <= VIsual.lnum && *p_sel == 'e') +*************** +*** 7218,7227 **** + emsg(_(e_modifiable)); + else + { +- #ifdef FEAT_VIRTUALEDIT + if (virtual_active()) + coladvance(getviscol()); +- #endif + invoke_edit(cap, FALSE, cap->arg ? 'V' : 'R', FALSE); + } + } +--- 7164,7171 ---- +*************** +*** 7249,7258 **** + cap->extra_char = get_literal(); + stuffcharReadbuff(cap->extra_char); + stuffcharReadbuff(ESC); +- #ifdef FEAT_VIRTUALEDIT + if (virtual_active()) + coladvance(getviscol()); +- #endif + invoke_edit(cap, TRUE, 'v', FALSE); + } + } +--- 7193,7200 ---- +*************** +*** 7524,7534 **** + else + nv_cursormark(cap, cap->arg, pos); + +- #ifdef FEAT_VIRTUALEDIT + /* May need to clear the coladd that a mark includes. */ + if (!virtual_active()) + curwin->w_cursor.coladd = 0; +- #endif + check_cursor_col(); + #ifdef FEAT_FOLDING + if (cap->oap->op_type == OP_NOP +--- 7466,7474 ---- +*************** +*** 7761,7776 **** + VIsual_mode = c; + VIsual_active = TRUE; + VIsual_reselect = TRUE; +! #ifdef FEAT_VIRTUALEDIT +! /* Corner case: the 0 position in a tab may change when going into +! * virtualedit. Recalculate curwin->w_cursor to avoid bad hilighting. +! */ + if (c == Ctrl_V && (ve_flags & VE_BLOCK) && gchar_cursor() == TAB) + { + validate_virtcol(); + coladvance(curwin->w_virtcol); + } +- #endif + VIsual = curwin->w_cursor; + + #ifdef FEAT_FOLDING +--- 7701,7714 ---- + VIsual_mode = c; + VIsual_active = TRUE; + VIsual_reselect = TRUE; +! +! // Corner case: the 0 position in a tab may change when going into +! // virtualedit. Recalculate curwin->w_cursor to avoid bad hilighting. + if (c == Ctrl_V && (ve_flags & VE_BLOCK) && gchar_cursor() == TAB) + { + validate_virtcol(); + coladvance(curwin->w_virtcol); + } + VIsual = curwin->w_cursor; + + #ifdef FEAT_FOLDING +*************** +*** 8212,8221 **** + i = (int)STRLEN(ml_get_curline()); + if (curwin->w_cursor.col > (colnr_T)i) + { +- #ifdef FEAT_VIRTUALEDIT + if (virtual_active()) + curwin->w_cursor.coladd += curwin->w_cursor.col - i; +- #endif + curwin->w_cursor.col = i; + } + } +--- 8150,8157 ---- +*************** +*** 8773,8782 **** + */ + if (curwin->w_cursor.col > 0 && gchar_cursor() == NUL + && (!VIsual_active || *p_sel == 'o') +! #ifdef FEAT_VIRTUALEDIT +! && !virtual_active() && (ve_flags & VE_ONEMORE) == 0 +! #endif +! ) + { + --curwin->w_cursor.col; + /* prevent cursor from moving on the trail byte */ +--- 8709,8715 ---- + */ + if (curwin->w_cursor.col > 0 && gchar_cursor() == NUL + && (!VIsual_active || *p_sel == 'o') +! && !virtual_active() && (ve_flags & VE_ONEMORE) == 0) + { + --curwin->w_cursor.col; + /* prevent cursor from moving on the trail byte */ +*************** +*** 8837,8847 **** + pp = &curwin->w_cursor; + else + pp = &VIsual; +- #ifdef FEAT_VIRTUALEDIT + if (pp->coladd > 0) + --pp->coladd; + else +- #endif + if (pp->col > 0) + { + --pp->col; +--- 8770,8778 ---- +*************** +*** 9077,9083 **** + { + case 'A': /* "A"ppend after the line */ + curwin->w_set_curswant = TRUE; +- #ifdef FEAT_VIRTUALEDIT + if (ve_flags == VE_ALL) + { + int save_State = State; +--- 9008,9013 ---- +*************** +*** 9089,9095 **** + State = save_State; + } + else +- #endif + curwin->w_cursor.col += (colnr_T)STRLEN(ml_get_cursor()); + break; + +--- 9019,9024 ---- +*************** +*** 9108,9114 **** + /* FALLTHROUGH */ + + case 'a': /* "a"ppend is like "i"nsert on the next character. */ +- #ifdef FEAT_VIRTUALEDIT + /* increment coladd when in virtual space, increment the + * column otherwise, also to append after an unprintable char */ + if (virtual_active() +--- 9037,9042 ---- +*************** +*** 9116,9129 **** + || *ml_get_cursor() == NUL + || *ml_get_cursor() == TAB)) + curwin->w_cursor.coladd++; +! else +! #endif +! if (*ml_get_cursor() != NUL) + inc_cursor(); + break; + } + +- #ifdef FEAT_VIRTUALEDIT + if (curwin->w_cursor.coladd && cap->cmdchar != 'A') + { + int save_State = State; +--- 9044,9054 ---- + || *ml_get_cursor() == NUL + || *ml_get_cursor() == TAB)) + curwin->w_cursor.coladd++; +! else if (*ml_get_cursor() != NUL) + inc_cursor(); + break; + } + + if (curwin->w_cursor.coladd && cap->cmdchar != 'A') + { + int save_State = State; +*************** +*** 9134,9140 **** + coladvance(getviscol()); + State = save_State; + } +- #endif + + invoke_edit(cap, FALSE, cap->cmdchar, FALSE); + } +--- 9059,9064 ---- +*** ../vim-8.1.0825/src/ops.c 2019-01-24 15:54:17.794846944 +0100 +--- src/ops.c 2019-01-26 17:05:11.897533838 +0100 +*************** +*** 1802,1813 **** + * It's an error to operate on an empty region, when 'E' included in + * 'cpoptions' (Vi compatible). + */ +- #ifdef FEAT_VIRTUALEDIT + if (virtual_op) + /* Virtual editing: Nothing gets deleted, but we set the '[ and '] + * marks as if it happened. */ + goto setmarks; +- #endif + if (vim_strchr(p_cpo, CPO_EMPTYREGION) != NULL) + beep_flush(); + return OK; +--- 1802,1811 ---- +*************** +*** 1909,1917 **** + if (lnum == curwin->w_cursor.lnum) + { + curwin->w_cursor.col = bd.textcol + bd.startspaces; +- # ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- # endif + } + + /* n == number of chars deleted +--- 1907,1913 ---- +*************** +*** 1979,1985 **** + } + else + { +- #ifdef FEAT_VIRTUALEDIT + if (virtual_op) + { + int endcol = 0; +--- 1975,1980 ---- +*************** +*** 2016,2022 **** + curwin->w_cursor = oap->start; + } + } +- #endif + + if (oap->line_count == 1) /* delete characters within one line */ + { +--- 2011,2016 ---- +*************** +*** 2032,2038 **** + + n = oap->end.col - oap->start.col + 1 - !oap->inclusive; + +- #ifdef FEAT_VIRTUALEDIT + if (virtual_op) + { + /* fix up things for virtualedit-delete: +--- 2026,2031 ---- +*************** +*** 2053,2059 **** + if (gchar_cursor() != NUL) + curwin->w_cursor.coladd = 0; + } +- #endif + (void)del_bytes((long)n, !virtual_op, + oap->op_type == OP_DELETE && !oap->is_VIsual); + } +--- 2046,2051 ---- +*************** +*** 2084,2092 **** + + msgmore(curbuf->b_ml.ml_line_count - old_lcount); + +- #ifdef FEAT_VIRTUALEDIT + setmarks: +- #endif + if (oap->block_mode) + { + curbuf->b_op_end.lnum = oap->end.lnum; +--- 2076,2082 ---- +*************** +*** 2183,2189 **** + * If we split a TAB, it may be replaced by several characters. + * Thus the number of characters may increase! + */ +- #ifdef FEAT_VIRTUALEDIT + /* If the range starts in virtual space, count the initial + * coladd offset as part of "startspaces" */ + if (virtual_op && bd.is_short && *bd.textstart == NUL) +--- 2173,2178 ---- +*************** +*** 2196,2210 **** + n = bd.startspaces; + } + else +- #endif + /* allow for pre spaces */ + n = (bd.startspaces ? bd.start_char_vcols - 1 : 0); + + /* allow for post spp */ + n += (bd.endspaces +- #ifdef FEAT_VIRTUALEDIT + && !bd.is_oneChar +- #endif + && bd.end_char_vcols > 0) ? bd.end_char_vcols - 1 : 0; + /* Figure out how many characters to replace. */ + numc = oap->end_vcol - oap->start_vcol + 1; +--- 2185,2196 ---- +*************** +*** 2311,2317 **** + } + else + { +- #ifdef FEAT_VIRTUALEDIT + if (n == TAB) + { + int end_vcol = 0; +--- 2297,2302 ---- +*************** +*** 2327,2337 **** + if (curwin->w_cursor.lnum == oap->end.lnum) + getvpos(&oap->end, end_vcol); + } +- #endif + PBYTE(curwin->w_cursor, c); + } + } +- #ifdef FEAT_VIRTUALEDIT + else if (virtual_op && curwin->w_cursor.lnum == oap->end.lnum) + { + int virtcols = oap->end.coladd; +--- 2312,2320 ---- +*************** +*** 2355,2361 **** + break; + } + } +- #endif + + /* Advance to next character, stop at the end of the file. */ + if (inc_cursor() == -1) +--- 2338,2343 ---- +*************** +*** 2609,2615 **** + + if (oap->block_mode) + { +- #ifdef FEAT_VIRTUALEDIT + /* When 'virtualedit' is used, need to insert the extra spaces before + * doing block_prep(). When only "block" is used, virtual edit is + * already disabled, but still need it when calling +--- 2591,2596 ---- +*************** +*** 2627,2633 **** + --curwin->w_cursor.col; + ve_flags = old_ve_flags; + } +- #endif + /* Get the info about the block before entering the text */ + block_prep(oap, &bd, oap->start.lnum, TRUE); + /* Get indent information */ +--- 2608,2613 ---- +*************** +*** 2641,2651 **** + + if (oap->op_type == OP_APPEND) + { +! if (oap->block_mode +! #ifdef FEAT_VIRTUALEDIT +! && curwin->w_cursor.coladd == 0 +! #endif +! ) + { + /* Move the cursor to the character right of the block. */ + curwin->w_set_curswant = TRUE; +--- 2621,2627 ---- + + if (oap->op_type == OP_APPEND) + { +! if (oap->block_mode && curwin->w_cursor.coladd == 0) + { + /* Move the cursor to the character right of the block. */ + curwin->w_set_curswant = TRUE; +*************** +*** 2715,2759 **** + && !bd.is_MAX && !did_indent) + { + if (oap->op_type == OP_INSERT +! && oap->start.col +! #ifdef FEAT_VIRTUALEDIT +! + oap->start.coladd +! #endif + != curbuf->b_op_start_orig.col +! #ifdef FEAT_VIRTUALEDIT +! + curbuf->b_op_start_orig.coladd +! #endif +! ) + { + int t = getviscol2(curbuf->b_op_start_orig.col, +! #ifdef FEAT_VIRTUALEDIT +! curbuf->b_op_start_orig.coladd +! #else +! 0 +! #endif +! ); + oap->start.col = curbuf->b_op_start_orig.col; + pre_textlen -= t - oap->start_vcol; + oap->start_vcol = t; + } + else if (oap->op_type == OP_APPEND +! && oap->end.col +! #ifdef FEAT_VIRTUALEDIT +! + oap->end.coladd +! #endif + >= curbuf->b_op_start_orig.col +! #ifdef FEAT_VIRTUALEDIT +! + curbuf->b_op_start_orig.coladd +! #endif +! ) + { + int t = getviscol2(curbuf->b_op_start_orig.col, +! #ifdef FEAT_VIRTUALEDIT +! curbuf->b_op_start_orig.coladd +! #else +! 0 +! #endif +! ); + oap->start.col = curbuf->b_op_start_orig.col; + /* reset pre_textlen to the value of OP_INSERT */ + pre_textlen += bd.textlen; +--- 2691,2713 ---- + && !bd.is_MAX && !did_indent) + { + if (oap->op_type == OP_INSERT +! && oap->start.col + oap->start.coladd + != curbuf->b_op_start_orig.col +! + curbuf->b_op_start_orig.coladd) + { + int t = getviscol2(curbuf->b_op_start_orig.col, +! curbuf->b_op_start_orig.coladd); + oap->start.col = curbuf->b_op_start_orig.col; + pre_textlen -= t - oap->start_vcol; + oap->start_vcol = t; + } + else if (oap->op_type == OP_APPEND +! && oap->end.col + oap->end.coladd + >= curbuf->b_op_start_orig.col +! + curbuf->b_op_start_orig.coladd) + { + int t = getviscol2(curbuf->b_op_start_orig.col, +! curbuf->b_op_start_orig.coladd); + oap->start.col = curbuf->b_op_start_orig.col; + /* reset pre_textlen to the value of OP_INSERT */ + pre_textlen += bd.textlen; +*************** +*** 2865,2876 **** + /* skip blank lines too */ + if (oap->block_mode) + { +- #ifdef FEAT_VIRTUALEDIT + /* Add spaces before getting the current line length. */ + if (virtual_op && (curwin->w_cursor.coladd > 0 + || gchar_cursor() == NUL)) + coladvance_force(getviscol()); +- #endif + firstline = ml_get(oap->start.lnum); + pre_textlen = (long)STRLEN(firstline); + pre_indent = (long)getwhitecols(firstline); +--- 2819,2828 ---- +*************** +*** 2916,2922 **** + block_prep(oap, &bd, linenr, TRUE); + if (!bd.is_short || virtual_op) + { +- #ifdef FEAT_VIRTUALEDIT + pos_T vpos; + + /* If the block starts in virtual space, count the +--- 2868,2873 ---- +*************** +*** 2928,2949 **** + } + else + vpos.coladd = 0; +- #endif + oldp = ml_get(linenr); + newp = alloc_check((unsigned)(STRLEN(oldp) +! #ifdef FEAT_VIRTUALEDIT +! + vpos.coladd +! #endif +! + ins_len + 1)); + if (newp == NULL) + continue; + /* copy up to block start */ + mch_memmove(newp, oldp, (size_t)bd.textcol); + offset = bd.textcol; +- #ifdef FEAT_VIRTUALEDIT + vim_memset(newp + offset, ' ', (size_t)vpos.coladd); + offset += vpos.coladd; +- #endif + mch_memmove(newp + offset, ins_text, (size_t)ins_len); + offset += ins_len; + oldp += bd.textcol; +--- 2879,2894 ---- + } + else + vpos.coladd = 0; + oldp = ml_get(linenr); + newp = alloc_check((unsigned)(STRLEN(oldp) +! + vpos.coladd + ins_len + 1)); + if (newp == NULL) + continue; + /* copy up to block start */ + mch_memmove(newp, oldp, (size_t)bd.textcol); + offset = bd.textcol; + vim_memset(newp + offset, ' ', (size_t)vpos.coladd); + offset += vpos.coladd; + mch_memmove(newp + offset, ins_text, (size_t)ins_len); + offset += ins_len; + oldp += bd.textcol; +*************** +*** 3148,3157 **** + case MCHAR: + { + colnr_T startcol = 0, endcol = MAXCOL; +- #ifdef FEAT_VIRTUALEDIT + int is_oneChar = FALSE; + colnr_T cs, ce; +! #endif + p = ml_get(lnum); + bd.startspaces = 0; + bd.endspaces = 0; +--- 3093,3101 ---- + case MCHAR: + { + colnr_T startcol = 0, endcol = MAXCOL; + int is_oneChar = FALSE; + colnr_T cs, ce; +! + p = ml_get(lnum); + bd.startspaces = 0; + bd.endspaces = 0; +*************** +*** 3159,3165 **** + if (lnum == oap->start.lnum) + { + startcol = oap->start.col; +- #ifdef FEAT_VIRTUALEDIT + if (virtual_op) + { + getvcol(curwin, &oap->start, &cs, NULL, &ce); +--- 3103,3108 ---- +*************** +*** 3172,3184 **** + startcol++; + } + } +- #endif + } + + if (lnum == oap->end.lnum) + { + endcol = oap->end.col; +- #ifdef FEAT_VIRTUALEDIT + if (virtual_op) + { + getvcol(curwin, &oap->end, &cs, NULL, &ce); +--- 3115,3125 ---- +*************** +*** 3205,3219 **** + } + } + } +- #endif + } + if (endcol == MAXCOL) + endcol = (colnr_T)STRLEN(p); +! if (startcol > endcol +! #ifdef FEAT_VIRTUALEDIT +! || is_oneChar +! #endif +! ) + bd.textlen = 0; + else + { +--- 3146,3155 ---- + } + } + } + } + if (endcol == MAXCOL) + endcol = (colnr_T)STRLEN(p); +! if (startcol > endcol || is_oneChar) + bd.textlen = 0; + else + { +*************** +*** 3661,3667 **** + + yanklen = (int)STRLEN(y_array[0]); + +- #ifdef FEAT_VIRTUALEDIT + if (ve_flags == VE_ALL && y_type == MCHAR) + { + if (gchar_cursor() == TAB) +--- 3597,3602 ---- +*************** +*** 3687,3693 **** + else if (curwin->w_cursor.coladd > 0 || gchar_cursor() == NUL) + coladvance_force(getviscol() + (dir == FORWARD)); + } +- #endif + + lnum = curwin->w_cursor.lnum; + col = curwin->w_cursor.col; +--- 3622,3627 ---- +*************** +*** 3702,3728 **** + + if (dir == FORWARD && c != NUL) + { +- #ifdef FEAT_VIRTUALEDIT + if (ve_flags == VE_ALL) + getvcol(curwin, &curwin->w_cursor, &col, NULL, &endcol2); + else +- #endif + getvcol(curwin, &curwin->w_cursor, NULL, NULL, &col); + + if (has_mbyte) + /* move to start of next multi-byte character */ + curwin->w_cursor.col += (*mb_ptr2len)(ml_get_cursor()); + else +- #ifdef FEAT_VIRTUALEDIT + if (c != TAB || ve_flags != VE_ALL) +- #endif + ++curwin->w_cursor.col; + ++col; + } + else + getvcol(curwin, &curwin->w_cursor, &col, NULL, &endcol2); + +- #ifdef FEAT_VIRTUALEDIT + col += curwin->w_cursor.coladd; + if (ve_flags == VE_ALL + && (curwin->w_cursor.coladd > 0 +--- 3636,3657 ---- +*************** +*** 3741,3747 **** + } + } + curwin->w_cursor.coladd = 0; +- #endif + bd.textcol = 0; + for (i = 0; i < y_size; ++i) + { +--- 3670,3675 ---- +*************** +*** 3850,3858 **** + /* adjust '] mark */ + curbuf->b_op_end.lnum = curwin->w_cursor.lnum - 1; + curbuf->b_op_end.col = bd.textcol + totlen - 1; +- # ifdef FEAT_VIRTUALEDIT + curbuf->b_op_end.coladd = 0; +- # endif + if (flags & PUT_CURSEND) + { + colnr_T len; +--- 3778,3784 ---- +*************** +*** 4144,4158 **** + { + if (curwin->w_cursor.col > 0 + && gchar_cursor() == NUL +- #ifdef FEAT_VIRTUALEDIT + && (ve_flags & VE_ONEMORE) == 0 +- #endif + && !(restart_edit || (State & INSERT))) + { + /* Put the cursor on the last character in the line. */ + dec_cursor(); + +- #ifdef FEAT_VIRTUALEDIT + if (ve_flags == VE_ALL) + { + colnr_T scol, ecol; +--- 4070,4081 ---- +*************** +*** 4161,4167 **** + getvcol(curwin, &curwin->w_cursor, &scol, NULL, &ecol); + curwin->w_cursor.coladd = ecol - scol + 1; + } +- #endif + } + } + +--- 4084,4089 ---- +*************** +*** 4704,4712 **** + (vim_strchr(p_cpo, CPO_JOINCOL) != NULL ? currsize : col); + check_cursor_col(); + +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + curwin->w_set_curswant = TRUE; + + theend: +--- 4626,4632 ---- +*************** +*** 7394,7406 **** + switch (VIsual_mode) + { + case Ctrl_V: +- #ifdef FEAT_VIRTUALEDIT + virtual_op = virtual_active(); +- #endif + block_prep(&oparg, &bd, lnum, 0); +- #ifdef FEAT_VIRTUALEDIT + virtual_op = MAYBE; +- #endif + s = bd.textstart; + len = (long)bd.textlen; + break; +--- 7314,7322 ---- +*** ../vim-8.1.0825/src/option.c 2019-01-24 20:30:49.329537911 +0100 +--- src/option.c 2019-01-26 17:05:29.437408083 +0100 +*************** +*** 2939,2951 **** + SCTX_INIT}, + {"virtualedit", "ve", P_STRING|P_ONECOMMA|P_NODUP|P_VI_DEF + |P_VIM|P_CURSWANT, +- #ifdef FEAT_VIRTUALEDIT + (char_u *)&p_ve, PV_NONE, + {(char_u *)"", (char_u *)""} +- #else +- (char_u *)NULL, PV_NONE, +- {(char_u *)0L, (char_u *)0L} +- #endif + SCTX_INIT}, + {"visualbell", "vb", P_BOOL|P_VI_DEF, + (char_u *)&p_vb, PV_NONE, +--- 2939,2946 ---- +*************** +*** 5526,5534 **** + #endif + (void)opt_strings_flags(p_dy, p_dy_values, &dy_flags, TRUE); + (void)opt_strings_flags(p_tc, p_tc_values, &tc_flags, FALSE); +- #ifdef FEAT_VIRTUALEDIT + (void)opt_strings_flags(p_ve, p_ve_values, &ve_flags, TRUE); +- #endif + #if defined(FEAT_MOUSE) && (defined(UNIX) || defined(VMS)) + (void)opt_strings_flags(p_ttym, p_ttym_values, &ttym_flags, FALSE); + #endif +--- 5521,5527 ---- +*************** +*** 7374,7380 **** + } + #endif + +- #ifdef FEAT_VIRTUALEDIT + /* 'virtualedit' */ + else if (varp == &p_ve) + { +--- 7367,7372 ---- +*************** +*** 7388,7394 **** + coladvance(curwin->w_virtcol); + } + } +- #endif + + #if defined(FEAT_CSCOPE) && defined(FEAT_QUICKFIX) + else if (varp == &p_csqf) +--- 7380,7385 ---- +*** ../vim-8.1.0825/src/option.h 2019-01-24 17:18:37.599462306 +0100 +--- src/option.h 2019-01-26 17:09:57.939477219 +0100 +*************** +*** 908,924 **** + EXTERN unsigned vop_flags; /* uses SSOP_ flags */ + #endif + EXTERN int p_vb; /* 'visualbell' */ +- #ifdef FEAT_VIRTUALEDIT + EXTERN char_u *p_ve; /* 'virtualedit' */ + EXTERN unsigned ve_flags; +! # ifdef IN_OPTION_C + static char *(p_ve_values[]) = {"block", "insert", "all", "onemore", NULL}; +- # endif +- # define VE_BLOCK 5 /* includes "all" */ +- # define VE_INSERT 6 /* includes "all" */ +- # define VE_ALL 4 +- # define VE_ONEMORE 8 + #endif + EXTERN long p_verbose; /* 'verbose' */ + #ifdef IN_OPTION_C + char_u *p_vfile = (char_u *)""; /* used before options are initialized */ +--- 908,922 ---- + EXTERN unsigned vop_flags; /* uses SSOP_ flags */ + #endif + EXTERN int p_vb; /* 'visualbell' */ + EXTERN char_u *p_ve; /* 'virtualedit' */ + EXTERN unsigned ve_flags; +! #ifdef IN_OPTION_C + static char *(p_ve_values[]) = {"block", "insert", "all", "onemore", NULL}; + #endif ++ #define VE_BLOCK 5 /* includes "all" */ ++ #define VE_INSERT 6 /* includes "all" */ ++ #define VE_ALL 4 ++ #define VE_ONEMORE 8 + EXTERN long p_verbose; /* 'verbose' */ + #ifdef IN_OPTION_C + char_u *p_vfile = (char_u *)""; /* used before options are initialized */ +*** ../vim-8.1.0825/src/screen.c 2019-01-25 22:29:54.139821894 +0100 +--- src/screen.c 2019-01-26 17:06:13.673090691 +0100 +*************** +*** 1622,1635 **** + if (VIsual_mode == Ctrl_V) + { + colnr_T fromc, toc; +! #if defined(FEAT_VIRTUALEDIT) && defined(FEAT_LINEBREAK) + int save_ve_flags = ve_flags; + + if (curwin->w_p_lbr) + ve_flags = VE_ALL; + #endif + getvcols(wp, &VIsual, &curwin->w_cursor, &fromc, &toc); +! #if defined(FEAT_VIRTUALEDIT) && defined(FEAT_LINEBREAK) + ve_flags = save_ve_flags; + #endif + ++toc; +--- 1622,1635 ---- + if (VIsual_mode == Ctrl_V) + { + colnr_T fromc, toc; +! #if defined(FEAT_LINEBREAK) + int save_ve_flags = ve_flags; + + if (curwin->w_p_lbr) + ve_flags = VE_ALL; + #endif + getvcols(wp, &VIsual, &curwin->w_cursor, &fromc, &toc); +! #if defined(FEAT_LINEBREAK) + ve_flags = save_ve_flags; + #endif + ++toc; +*************** +*** 3342,3352 **** + } + if (VIsual_mode != 'V' && lnum == bot->lnum) + { +! if (*p_sel == 'e' && bot->col == 0 +! #ifdef FEAT_VIRTUALEDIT +! && bot->coladd == 0 +! #endif +! ) + { + fromcol = -10; + tocol = MAXCOL; +--- 3342,3348 ---- + } + if (VIsual_mode != 'V' && lnum == bot->lnum) + { +! if (*p_sel == 'e' && bot->col == 0 && bot->coladd == 0) + { + fromcol = -10; + tocol = MAXCOL; +*************** +*** 3545,3553 **** + #ifdef FEAT_SYN_HL + wp->w_p_cuc || draw_color_col || + #endif +- #ifdef FEAT_VIRTUALEDIT + virtual_active() || +- #endif + (VIsual_active && wp->w_buffer == curwin->w_buffer))) + { + vcol = v; +--- 3541,3547 ---- +*************** +*** 5033,5046 **** + ) + #endif + { +- #ifdef FEAT_VIRTUALEDIT + /* In virtualedit, visual selections may extend + * beyond end of line. */ + if (area_highlighting && virtual_active() + && tocol != MAXCOL && vcol < tocol) + n_extra = 0; + else +- #endif + { + p_extra = at_end_str; + n_extra = 1; +--- 5027,5038 ---- +*************** +*** 5107,5113 **** + } + mb_utf8 = FALSE; /* don't draw as UTF-8 */ + } +- #ifdef FEAT_VIRTUALEDIT + else if (VIsual_active + && (VIsual_mode == Ctrl_V + || VIsual_mode == 'v') +--- 5099,5104 ---- +*************** +*** 5115,5129 **** + && tocol != MAXCOL + && vcol < tocol + && ( +! # ifdef FEAT_RIGHTLEFT + wp->w_p_rl ? (col >= 0) : +! # endif + (col < wp->w_width))) + { + c = ' '; + --ptr; /* put it back at the NUL */ + } +- #endif + #if defined(LINE_ATTR) + else if (( + # ifdef FEAT_DIFF +--- 5106,5119 ---- + && tocol != MAXCOL + && vcol < tocol + && ( +! #ifdef FEAT_RIGHTLEFT + wp->w_p_rl ? (col >= 0) : +! #endif + (col < wp->w_width))) + { + c = ' '; + --ptr; /* put it back at the NUL */ + } + #if defined(LINE_ATTR) + else if (( + # ifdef FEAT_DIFF +*************** +*** 10866,10874 **** + || wp->w_cursor.lnum != wp->w_ru_cursor.lnum + || wp->w_cursor.col != wp->w_ru_cursor.col + || wp->w_virtcol != wp->w_ru_virtcol +- #ifdef FEAT_VIRTUALEDIT + || wp->w_cursor.coladd != wp->w_ru_cursor.coladd +- #endif + || wp->w_topline != wp->w_ru_topline + || wp->w_buffer->b_ml.ml_line_count != wp->w_ru_line_count + #ifdef FEAT_DIFF +--- 10856,10862 ---- +*** ../vim-8.1.0825/src/search.c 2019-01-24 17:18:37.591462362 +0100 +--- src/search.c 2019-01-26 17:06:44.472869513 +0100 +*************** +*** 1029,1039 **** + end_pos->col = endpos.col; + } + } +- #ifdef FEAT_VIRTUALEDIT + pos->coladd = 0; + if (end_pos != NULL) + end_pos->coladd = 0; +- #endif + found = 1; + first_match = FALSE; + +--- 1029,1037 ---- +*************** +*** 1919,1927 **** + #endif + + pos = curwin->w_cursor; +- #ifdef FEAT_VIRTUALEDIT + pos.coladd = 0; +- #endif + linep = ml_get(pos.lnum); + + cpo_match = (vim_strchr(p_cpo, CPO_MATCH) != NULL); +--- 1917,1923 ---- +*************** +*** 3027,3035 **** + int i; + int last_line; + +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + cls_bigword = bigword; + while (--count >= 0) + { +--- 3023,3029 ---- +*************** +*** 3094,3102 **** + { + int sclass; /* starting class */ + +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + cls_bigword = bigword; + while (--count >= 0) + { +--- 3088,3094 ---- +*************** +*** 3163,3171 **** + { + int sclass; /* starting class */ + +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + cls_bigword = bigword; + while (--count >= 0) + { +--- 3155,3161 ---- +*************** +*** 3233,3241 **** + int sclass; /* starting class */ + int i; + +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + cls_bigword = bigword; + while (--count >= 0) + { +--- 3223,3229 ---- +*** ../vim-8.1.0825/src/spell.c 2019-01-24 17:18:37.591462362 +0100 +--- src/spell.c 2019-01-26 17:06:53.100807527 +0100 +*************** +*** 1652,1660 **** + found_one = TRUE; + found_pos.lnum = lnum; + found_pos.col = (int)(p - buf); +- #ifdef FEAT_VIRTUALEDIT + found_pos.coladd = 0; +- #endif + if (dir == FORWARD) + { + /* No need to search further. */ +--- 1652,1658 ---- +*** ../vim-8.1.0825/src/structs.h 2019-01-24 17:59:35.135217476 +0100 +--- src/structs.h 2019-01-26 17:10:06.495415544 +0100 +*************** +*** 21,50 **** + #endif + + /* +! * position in file or buffer + */ + typedef struct + { +! linenr_T lnum; /* line number */ +! colnr_T col; /* column number */ +! #ifdef FEAT_VIRTUALEDIT +! colnr_T coladd; +! #endif + } pos_T; + +- #ifdef FEAT_VIRTUALEDIT +- # define INIT_POS_T(l, c, ca) {l, c, ca} +- #else +- # define INIT_POS_T(l, c, ca) {l, c} +- #endif + + /* + * Same, but without coladd. + */ + typedef struct + { +! linenr_T lnum; /* line number */ +! colnr_T col; /* column number */ + } lpos_T; + + /* +--- 21,43 ---- + #endif + + /* +! * Position in file or buffer. + */ + typedef struct + { +! linenr_T lnum; // line number +! colnr_T col; // column number +! colnr_T coladd; // extra virtual column + } pos_T; + + + /* + * Same, but without coladd. + */ + typedef struct + { +! linenr_T lnum; // line number +! colnr_T col; // column number + } lpos_T; + + /* +*************** +*** 395,403 **** + u_entry_T *uh_entry; /* pointer to first entry */ + u_entry_T *uh_getbot_entry; /* pointer to where ue_bot must be set */ + pos_T uh_cursor; /* cursor position before saving */ +- #ifdef FEAT_VIRTUALEDIT + long uh_cursor_vcol; +- #endif + int uh_flags; /* see below */ + pos_T uh_namedm[NMARKS]; /* marks before undo/after redo */ + visualinfo_T uh_visual; /* Visual areas before undo/after redo */ +--- 388,394 ---- +*** ../vim-8.1.0825/src/tag.c 2019-01-24 17:18:37.595462334 +0100 +--- src/tag.c 2019-01-26 16:50:03.575895716 +0100 +*************** +*** 85,91 **** + * Tag for preview window is remembered separately, to avoid messing up the + * normal tagstack. + */ +! static taggy_T ptag_entry = {NULL, {INIT_POS_T(0, 0, 0), 0}, 0, 0}; + #endif + + /* +--- 85,91 ---- + * Tag for preview window is remembered separately, to avoid messing up the + * normal tagstack. + */ +! static taggy_T ptag_entry = {NULL, {{0, 0, 0}, 0}, 0, 0}; + #endif + + /* +*** ../vim-8.1.0825/src/ui.c 2019-01-24 17:18:37.595462334 +0100 +--- src/ui.c 2019-01-26 17:07:03.456733114 +0100 +*************** +*** 3184,3192 **** + + if (mpos->col > 0) + --mpos->col; +- #ifdef FEAT_VIRTUALEDIT + mpos->coladd = 0; +- #endif + return IN_BUFFER; + } + #endif +--- 3184,3190 ---- +*** ../vim-8.1.0825/src/undo.c 2019-01-19 17:43:03.429449066 +0100 +--- src/undo.c 2019-01-26 17:07:37.328489616 +0100 +*************** +*** 548,559 **** + uhp->uh_entry = NULL; + uhp->uh_getbot_entry = NULL; + uhp->uh_cursor = curwin->w_cursor; /* save cursor pos. for undo */ +- #ifdef FEAT_VIRTUALEDIT + if (virtual_active() && curwin->w_cursor.coladd > 0) + uhp->uh_cursor_vcol = getviscol(); + else + uhp->uh_cursor_vcol = -1; +- #endif + + /* save changed and buffer empty flag for undo */ + uhp->uh_flags = (curbuf->b_changed ? UH_CHANGED : 0) + +--- 548,557 ---- +*************** +*** 1250,1260 **** + put_header_ptr(bi, uhp->uh_alt_prev.ptr); + undo_write_bytes(bi, uhp->uh_seq, 4); + serialize_pos(bi, uhp->uh_cursor); +- #ifdef FEAT_VIRTUALEDIT + undo_write_bytes(bi, (long_u)uhp->uh_cursor_vcol, 4); +- #else +- undo_write_bytes(bi, (long_u)0, 4); +- #endif + undo_write_bytes(bi, (long_u)uhp->uh_flags, 2); + /* Assume NMARKS will stay the same. */ + for (i = 0; i < NMARKS; ++i) +--- 1248,1254 ---- +*************** +*** 1309,1319 **** + return NULL; + } + unserialize_pos(bi, &uhp->uh_cursor); +- #ifdef FEAT_VIRTUALEDIT + uhp->uh_cursor_vcol = undo_read_4c(bi); +- #else +- (void)undo_read_4c(bi); +- #endif + uhp->uh_flags = undo_read_2c(bi); + for (i = 0; i < NMARKS; ++i) + unserialize_pos(bi, &uhp->uh_namedm[i]); +--- 1303,1309 ---- +*************** +*** 1458,1468 **** + { + undo_write_bytes(bi, (long_u)pos.lnum, 4); + undo_write_bytes(bi, (long_u)pos.col, 4); +- #ifdef FEAT_VIRTUALEDIT + undo_write_bytes(bi, (long_u)pos.coladd, 4); +- #else +- undo_write_bytes(bi, (long_u)0, 4); +- #endif + } + + /* +--- 1448,1454 ---- +*************** +*** 1477,1489 **** + pos->col = undo_read_4c(bi); + if (pos->col < 0) + pos->col = 0; +- #ifdef FEAT_VIRTUALEDIT + pos->coladd = undo_read_4c(bi); + if (pos->coladd < 0) + pos->coladd = 0; +- #else +- (void)undo_read_4c(bi); +- #endif + } + + /* +--- 1463,1471 ---- +*************** +*** 2855,2866 **** + if (curhead->uh_cursor.lnum == curwin->w_cursor.lnum) + { + curwin->w_cursor.col = curhead->uh_cursor.col; +- #ifdef FEAT_VIRTUALEDIT + if (virtual_active() && curhead->uh_cursor_vcol >= 0) + coladvance((colnr_T)curhead->uh_cursor_vcol); + else + curwin->w_cursor.coladd = 0; +- #endif + } + else + beginline(BL_SOL | BL_FIX); +--- 2837,2846 ---- +*************** +*** 2872,2880 **** + * check_cursor() will move the cursor to the last line. Move it to + * the first column here. */ + curwin->w_cursor.col = 0; +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + } + + /* Make sure the cursor is on an existing line and column. */ +--- 2852,2858 ---- +*** ../vim-8.1.0825/src/userfunc.c 2019-01-23 23:00:27.425682956 +0100 +--- src/userfunc.c 2019-01-26 17:07:50.264396582 +0100 +*************** +*** 3178,3186 **** + } + curwin->w_cursor.lnum = lnum; + curwin->w_cursor.col = 0; +- #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; +- #endif + } + arg = startarg; + if (get_func_tv(name, (int)STRLEN(name), &rettv, &arg, +--- 3178,3184 ---- +*** ../vim-8.1.0825/src/version.c 2019-01-26 16:20:44.264683546 +0100 +--- src/version.c 2019-01-26 17:26:58.193155997 +0100 +*************** +*** 695,705 **** + "-vartabs", + #endif + "+vertsplit", +- #ifdef FEAT_VIRTUALEDIT + "+virtualedit", +- #else +- "-virtualedit", +- #endif + "+visual", + "+visualextra", + #ifdef FEAT_VIMINFO +--- 695,701 ---- +*** ../vim-8.1.0825/src/vim.h 2019-01-24 23:11:44.635650160 +0100 +--- src/vim.h 2019-01-26 17:10:40.183172636 +0100 +*************** +*** 2136,2147 **** + + #include "globals.h" /* global variables and messages */ + +- #ifndef FEAT_VIRTUALEDIT +- # define getvvcol(w, p, s, c, e) getvcol((w), (p), (s), (c), (e)) +- # define virtual_active() FALSE +- # define virtual_op FALSE +- #endif +- + /* + * If console dialog not supported, but GUI dialog is, use the GUI one. + */ +--- 2136,2141 ---- +*** ../vim-8.1.0825/src/window.c 2019-01-24 17:18:37.599462306 +0100 +--- src/window.c 2019-01-26 17:08:16.564207364 +0100 +*************** +*** 3439,3447 **** + wp->w_lines_valid = 0; + wp->w_cursor.lnum = 1; + wp->w_curswant = wp->w_cursor.col = 0; +- #ifdef FEAT_VIRTUALEDIT + wp->w_cursor.coladd = 0; +- #endif + wp->w_pcmark.lnum = 1; /* pcmark not cleared but set to line 1 */ + wp->w_pcmark.col = 0; + wp->w_prev_pcmark.lnum = 0; +--- 3439,3445 ---- +*************** +*** 4418,4427 **** + curwin = wp; + curbuf = wp->w_buffer; + check_cursor(); +- #ifdef FEAT_VIRTUALEDIT + if (!virtual_active()) + curwin->w_cursor.coladd = 0; +- #endif + changed_line_abv_curs(); /* assume cursor position needs updating */ + + if (curwin->w_localdir != NULL) +--- 4416,4423 ---- +*** ../vim-8.1.0825/src/version.c 2019-01-26 16:20:44.264683546 +0100 +--- src/version.c 2019-01-26 17:26:58.193155997 +0100 +*************** +*** 789,790 **** +--- 785,788 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 826, + /**/ + +-- +GUARD #1: Where'd you get the coconut? +ARTHUR: We found them. +GUARD #1: Found them? In Mercea? The coconut's tropical! +ARTHUR: What do you mean? +GUARD #1: Well, this is a temperate zone. + The Quest for the Holy Grail (Monty Python) + + /// 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 /// |