Mirror of the Vim source from https://github.com/vim/vim
Revision | b60a569eb708bc6563cc1104335cf56bb38ea901 (tree) |
---|---|
Time | 2008-07-23 01:58:47 |
Author | vimboss |
Commiter | vimboss |
updated for version 7.2b-010
@@ -4539,7 +4539,7 @@ | ||
4539 | 4539 | buf_T *buf; /* buffer for local mappings or NULL */ |
4540 | 4540 | { |
4541 | 4541 | mapblock_T *mp; |
4542 | - char_u c1, c2; | |
4542 | + char_u c1, c2, c3; | |
4543 | 4543 | char_u *p; |
4544 | 4544 | char *cmd; |
4545 | 4545 | int abbr; |
@@ -4592,8 +4592,12 @@ | ||
4592 | 4592 | if (*p != NUL) |
4593 | 4593 | continue; |
4594 | 4594 | |
4595 | + /* It's possible to create a mapping and then ":unmap" certain | |
4596 | + * modes. We recreate this here by mapping the individual | |
4597 | + * modes, which requires up to three of them. */ | |
4595 | 4598 | c1 = NUL; |
4596 | 4599 | c2 = NUL; |
4600 | + c3 = NUL; | |
4597 | 4601 | if (abbr) |
4598 | 4602 | cmd = "abbr"; |
4599 | 4603 | else |
@@ -4605,9 +4609,6 @@ | ||
4605 | 4609 | case NORMAL: |
4606 | 4610 | c1 = 'n'; |
4607 | 4611 | break; |
4608 | - case VISUAL + SELECTMODE: | |
4609 | - c1 = 'v'; | |
4610 | - break; | |
4611 | 4612 | case VISUAL: |
4612 | 4613 | c1 = 'x'; |
4613 | 4614 | break; |
@@ -4617,18 +4618,47 @@ | ||
4617 | 4618 | case OP_PENDING: |
4618 | 4619 | c1 = 'o'; |
4619 | 4620 | break; |
4621 | + case NORMAL + VISUAL: | |
4622 | + c1 = 'n'; | |
4623 | + c2 = 'x'; | |
4624 | + break; | |
4625 | + case NORMAL + SELECTMODE: | |
4626 | + c1 = 'n'; | |
4627 | + c2 = 's'; | |
4628 | + break; | |
4629 | + case NORMAL + OP_PENDING: | |
4630 | + c1 = 'n'; | |
4631 | + c2 = 'o'; | |
4632 | + break; | |
4633 | + case VISUAL + SELECTMODE: | |
4634 | + c1 = 'v'; | |
4635 | + break; | |
4636 | + case VISUAL + OP_PENDING: | |
4637 | + c1 = 'x'; | |
4638 | + c2 = 'o'; | |
4639 | + break; | |
4640 | + case SELECTMODE + OP_PENDING: | |
4641 | + c1 = 's'; | |
4642 | + c2 = 'o'; | |
4643 | + break; | |
4620 | 4644 | case NORMAL + VISUAL + SELECTMODE: |
4621 | 4645 | c1 = 'n'; |
4622 | 4646 | c2 = 'v'; |
4623 | 4647 | break; |
4648 | + case NORMAL + VISUAL + OP_PENDING: | |
4649 | + c1 = 'n'; | |
4650 | + c2 = 'x'; | |
4651 | + c3 = 'o'; | |
4652 | + break; | |
4653 | + case NORMAL + SELECTMODE + OP_PENDING: | |
4654 | + c1 = 'n'; | |
4655 | + c2 = 's'; | |
4656 | + c3 = 'o'; | |
4657 | + break; | |
4624 | 4658 | case VISUAL + SELECTMODE + OP_PENDING: |
4625 | 4659 | c1 = 'v'; |
4626 | 4660 | c2 = 'o'; |
4627 | 4661 | break; |
4628 | - case NORMAL + OP_PENDING: | |
4629 | - c1 = 'n'; | |
4630 | - c2 = 'o'; | |
4631 | - break; | |
4632 | 4662 | case CMDLINE + INSERT: |
4633 | 4663 | if (!abbr) |
4634 | 4664 | cmd = "map!"; |
@@ -4646,7 +4676,7 @@ | ||
4646 | 4676 | EMSG(_("E228: makemap: Illegal mode")); |
4647 | 4677 | return FAIL; |
4648 | 4678 | } |
4649 | - do /* may do this twice if c2 is set */ | |
4679 | + do /* do this twice if c2 is set, 3 times with c3 */ | |
4650 | 4680 | { |
4651 | 4681 | /* When outputting <> form, need to make sure that 'cpo' |
4652 | 4682 | * is set to the Vim default. */ |
@@ -4693,9 +4723,9 @@ | ||
4693 | 4723 | || put_eol(fd) < 0) |
4694 | 4724 | return FAIL; |
4695 | 4725 | c1 = c2; |
4696 | - c2 = NUL; | |
4697 | - } | |
4698 | - while (c1); | |
4726 | + c2 = c3; | |
4727 | + c3 = NUL; | |
4728 | + } while (c1 != NUL); | |
4699 | 4729 | } |
4700 | 4730 | } |
4701 | 4731 |
@@ -677,6 +677,8 @@ | ||
677 | 677 | static int included_patches[] = |
678 | 678 | { /* Add new patch number below this line */ |
679 | 679 | /**/ |
680 | + 10, | |
681 | +/**/ | |
680 | 682 | 9, |
681 | 683 | /**/ |
682 | 684 | 8, |