To: [email protected]
Subject: Patch 7.2b.010
Fcc: outbox
From: Bram Moolenaar <[email protected]>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.2b.010
Problem:    ":mksession" doesn't work for ":map , foo", ":sunmap ,". (Ethan
           Mallove)
Solution:   Check for "nxo", "nso" and other strange mapping combinations.
Files:      src/getchar.c


*** ../vim-7.2b.009/src/getchar.c       Tue Jun 24 22:18:17 2008
--- src/getchar.c       Tue Jul 22 18:57:48 2008
***************
*** 4539,4545 ****
     buf_T     *buf;       /* buffer for local mappings or NULL */
 {
     mapblock_T        *mp;
!     char_u    c1, c2;
     char_u    *p;
     char      *cmd;
     int               abbr;
--- 4539,4545 ----
     buf_T     *buf;       /* buffer for local mappings or NULL */
 {
     mapblock_T        *mp;
!     char_u    c1, c2, c3;
     char_u    *p;
     char      *cmd;
     int               abbr;
***************
*** 4592,4599 ****
--- 4592,4603 ----
               if (*p != NUL)
                   continue;

+               /* It's possible to create a mapping and then ":unmap" certain
+                * modes.  We recreate this here by mapping the individual
+                * modes, which requires up to three of them. */
               c1 = NUL;
               c2 = NUL;
+               c3 = NUL;
               if (abbr)
                   cmd = "abbr";
               else
***************
*** 4605,4613 ****
                   case NORMAL:
                       c1 = 'n';
                       break;
-                   case VISUAL + SELECTMODE:
-                       c1 = 'v';
-                       break;
                   case VISUAL:
                       c1 = 'x';
                       break;
--- 4609,4614 ----
***************
*** 4617,4632 ****
                   case OP_PENDING:
                       c1 = 'o';
                       break;
!                   case NORMAL + VISUAL + SELECTMODE:
                       c1 = 'n';
!                       c2 = 'v';
                       break;
!                   case VISUAL + SELECTMODE + OP_PENDING:
                       c1 = 'v';
                       c2 = 'o';
                       break;
!                   case NORMAL + OP_PENDING:
                       c1 = 'n';
                       c2 = 'o';
                       break;
                   case CMDLINE + INSERT:
--- 4618,4662 ----
                   case OP_PENDING:
                       c1 = 'o';
                       break;
!                   case NORMAL + VISUAL:
                       c1 = 'n';
!                       c2 = 'x';
                       break;
!                   case NORMAL + SELECTMODE:
!                       c1 = 'n';
!                       c2 = 's';
!                       break;
!                   case NORMAL + OP_PENDING:
!                       c1 = 'n';
!                       c2 = 'o';
!                       break;
!                   case VISUAL + SELECTMODE:
                       c1 = 'v';
+                       break;
+                   case VISUAL + OP_PENDING:
+                       c1 = 'x';
                       c2 = 'o';
                       break;
!                   case SELECTMODE + OP_PENDING:
!                       c1 = 's';
!                       c2 = 'o';
!                       break;
!                   case NORMAL + VISUAL + SELECTMODE:
!                       c1 = 'n';
!                       c2 = 'v';
!                       break;
!                   case NORMAL + VISUAL + OP_PENDING:
!                       c1 = 'n';
!                       c2 = 'x';
!                       c3 = 'o';
!                       break;
!                   case NORMAL + SELECTMODE + OP_PENDING:
                       c1 = 'n';
+                       c2 = 's';
+                       c3 = 'o';
+                       break;
+                   case VISUAL + SELECTMODE + OP_PENDING:
+                       c1 = 'v';
                       c2 = 'o';
                       break;
                   case CMDLINE + INSERT:
***************
*** 4646,4652 ****
                       EMSG(_("E228: makemap: Illegal mode"));
                       return FAIL;
               }
!               do      /* may do this twice if c2 is set */
               {
                   /* When outputting <> form, need to make sure that 'cpo'
                    * is set to the Vim default. */
--- 4676,4682 ----
                       EMSG(_("E228: makemap: Illegal mode"));
                       return FAIL;
               }
!               do      /* do this twice if c2 is set, 3 times with c3 */
               {
                   /* When outputting <> form, need to make sure that 'cpo'
                    * is set to the Vim default. */
***************
*** 4693,4701 ****
                           || put_eol(fd) < 0)
                       return FAIL;
                   c1 = c2;
!                   c2 = NUL;
!               }
!               while (c1);
           }
       }

--- 4723,4731 ----
                           || put_eol(fd) < 0)
                       return FAIL;
                   c1 = c2;
!                   c2 = c3;
!                   c3 = NUL;
!               } while (c1 != NUL);
           }
       }

*** ../vim-7.2b.009/src/version.c       Fri Jul 18 17:11:39 2008
--- src/version.c       Tue Jul 22 18:54:37 2008
***************
*** 678,679 ****
--- 678,681 ----
 {   /* Add new patch number below this line */
+ /**/
+     10,
 /**/

--
ARTHUR:      Who are you?
TALL KNIGHT: We are the Knights Who Say "Ni"!
BEDEVERE:    No!  Not the Knights Who Say "Ni"!
                "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
\\\            help me help AIDS victims -- http://ICCF-Holland.org    ///