]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.534 v7.3.534
authorBram Moolenaar <Bram@vim.org>
Fri, 1 Jun 2012 12:57:51 +0000 (14:57 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 1 Jun 2012 12:57:51 +0000 (14:57 +0200)
Problem:    When using an InsertCharPre autocommand autoindent fails.
Solution:   Proper handling of v:char. (Alexey Radkov)

src/edit.c
src/version.c

index badebb0bd69b2756ecaf21af62df45b5bcc390e5..39985bdd57a3bd074818bc638abc4e9066053e1e 100644 (file)
@@ -10108,22 +10108,40 @@ get_nolist_virtcol()
 do_insert_char_pre(c)
     int c;
 {
-    char_u *res;
+    char_u     *res;
+#ifdef FEAT_MBYTE
+    char_u     buf[MB_MAXBYTES + 1];
+#else
+    char_u     buf[2];
+#endif
 
     /* Return quickly when there is nothing to do. */
     if (!has_insertcharpre())
        return NULL;
 
+#ifdef FEAT_MBYTE
+    if (has_mbyte)
+       buf[(*mb_char2bytes)(c, buf)] = NUL;
+    else
+#endif
+    {
+       buf[0] = c;
+       buf[1] = NUL;
+    }
+
     /* Lock the text to avoid weird things from happening. */
     ++textlock;
-    set_vim_var_char(c);  /* set v:char */
+    set_vim_var_string(VV_CHAR, buf, -1);  /* set v:char */
 
+    res = NULL;
     if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL, FALSE, curbuf))
-       /* Get the new value of v:char.  It may be empty or more than one
-        * character. */
-       res = vim_strsave(get_vim_var_str(VV_CHAR));
-    else
-       res = NULL;
+    {
+       /* Get the value of v:char.  It may be empty or more than one
+        * character.  Only use it when changed, otherwise continue with the
+        * original character to avoid breaking autoindent. */
+       if (STRCMP(buf, get_vim_var_str(VV_CHAR)) != 0)
+           res = vim_strsave(get_vim_var_str(VV_CHAR));
+    }
 
     set_vim_var_string(VV_CHAR, NULL, -1);  /* clear v:char */
     --textlock;
index 13c59e2087f0a9f247354d05a489eebcb783d1a4..9dd4001848a8c1eab41e5e36697bbf51c282e103 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    534,
 /**/
     533,
 /**/