Mercurial > vim
changeset 3431:8e21ac7f2d6e v7.3.481
updated for version 7.3.481
Problem: Changing 'virtualedit' in an operator function to "all" does not
have the desired effect. (Aaron Bohannon)
Solution: Save, reset and restore virtual_op when executing an operator
function.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 28 Mar 2012 12:59:57 +0200 |
parents | bfdab0bcf4f5 |
children | d579aeb3ac8d |
files | src/normal.c src/version.c |
diffstat | 2 files changed, 10 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/normal.c +++ b/src/normal.c @@ -2279,6 +2279,7 @@ op_function(oap) { #ifdef FEAT_EVAL char_u *(argv[1]); + int save_virtual_op = virtual_op; if (*p_opfunc == NUL) EMSG(_("E774: 'operatorfunc' is empty")); @@ -2297,7 +2298,14 @@ op_function(oap) argv[0] = (char_u *)"line"; else argv[0] = (char_u *)"char"; + + /* Reset virtual_op so that 'virtualedit' can be changed in the + * function. */ + virtual_op = MAYBE; + (void)call_func_retnr(p_opfunc, 1, argv, FALSE); + + virtual_op = save_virtual_op; } #else EMSG(_("E775: Eval feature not available"));