home *** CD-ROM | disk | FTP | other *** search
- To: vim_dev@googlegroups.com
- Subject: Patch 7.3.1261
- Fcc: outbox
- From: Bram Moolenaar <Bram@moolenaar.net>
- Mime-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- ------------
-
- Patch 7.3.1261 (after patch 7.3.1179)
- Problem: A buffer-local language mapping from a keymap stops a global
- insert mode mapping from working. (Ron Aaron)
- Solution: Do not wait for more characters to be typed only when the mapping
- was defined with <nowait>.
- Files: runtime/doc/map.txt, src/eval.c, src/getchar.c,
- src/testdir/test75.in, src/testdir/test75.ok
-
-
- *** ../vim-7.3.1260/runtime/doc/map.txt 2013-06-12 21:00:18.000000000 +0200
- --- runtime/doc/map.txt 2013-06-29 13:55:01.000000000 +0200
- ***************
- *** 159,167 ****
-
- 1.2 SPECIAL ARGUMENTS *:map-arguments*
-
- ! "<buffer>", "<silent>", "<special>", "<script>", "<expr>" and "<unique>" can
- ! be used in any order. They must appear right after the command, before any
- ! other arguments.
-
- *:map-local* *:map-<buffer>* *E224* *E225*
- If the first argument to one of these commands is "<buffer>" the mapping will
- --- 159,167 ----
-
- 1.2 SPECIAL ARGUMENTS *:map-arguments*
-
- ! "<buffer>", "<nowait>", "<silent>", "<special>", "<script>", "<expr>" and
- ! "<unique>" can be used in any order. They must appear right after the
- ! command, before any other arguments.
-
- *:map-local* *:map-<buffer>* *E224* *E225*
- If the first argument to one of these commands is "<buffer>" the mapping will
- ***************
- *** 169,175 ****
- :map <buffer> ,w /[.,;]<CR>
- Then you can map ",w" to something else in another buffer: >
- :map <buffer> ,w /[#&!]<CR>
- ! The local buffer mappings are used before the global ones.
- The "<buffer>" argument can also be used to clear mappings: >
- :unmap <buffer> ,w
- :mapclear <buffer>
- --- 169,177 ----
- :map <buffer> ,w /[.,;]<CR>
- Then you can map ",w" to something else in another buffer: >
- :map <buffer> ,w /[#&!]<CR>
- ! The local buffer mappings are used before the global ones. See <nowait> below
- ! to make a short local mapping not taking effect when a longer global one
- ! exists.
- The "<buffer>" argument can also be used to clear mappings: >
- :unmap <buffer> ,w
- :mapclear <buffer>
- ***************
- *** 177,182 ****
- --- 179,192 ----
- unloaded. Just like local option values.
- Also see |map-precedence|.
-
- + *:map-<nowait>* *:map-nowait*
- + When defining a buffer-local mapping for "," there may be a global mapping
- + that starts with ",". Then you need to type another character for Vim to know
- + whether to use the "," mapping or the longer one. To avoid this add the
- + <nowait> argument. Then the mapping will be used when it matches, Vim does
- + not wait for more characters to be typed. However, if the characters were
- + already type they are used.
- +
- *:map-<silent>* *:map-silent*
- To define a mapping which will not be echoed on the command line, add
- "<silent>" as the first argument. Example: >
- *** ../vim-7.3.1260/src/eval.c 2013-06-24 22:17:27.000000000 +0200
- --- src/eval.c 2013-06-29 13:32:35.000000000 +0200
- ***************
- *** 13735,13740 ****
- --- 13735,13741 ----
- dict_add_nr_str(dict, "silent", mp->m_silent ? 1L : 0L, NULL);
- dict_add_nr_str(dict, "sid", (long)mp->m_script_ID, NULL);
- dict_add_nr_str(dict, "buffer", (long)buffer_local, NULL);
- + dict_add_nr_str(dict, "nowait", mp->m_nowait ? 1L : 0L, NULL);
- dict_add_nr_str(dict, "mode", 0L, mapmode);
-
- vim_free(lhs);
- *** ../vim-7.3.1260/src/getchar.c 2013-06-12 21:00:18.000000000 +0200
- --- src/getchar.c 2013-06-29 13:43:27.000000000 +0200
- ***************
- *** 1924,1930 ****
- mapblock_T *mp;
- #ifdef FEAT_LOCALMAP
- mapblock_T *mp2;
- - int expecting_global_mappings;
- #endif
- mapblock_T *mp_match;
- int mp_match_len = 0;
- --- 1924,1929 ----
- ***************
- *** 2106,2114 ****
- /* First try buffer-local mappings. */
- mp = curbuf->b_maphash[MAP_HASH(local_State, c1)];
- mp2 = maphash[MAP_HASH(local_State, c1)];
- - expecting_global_mappings = (mp && mp2);
- if (mp == NULL)
- {
- mp = mp2;
- mp2 = NULL;
- }
- --- 2105,2113 ----
- /* First try buffer-local mappings. */
- mp = curbuf->b_maphash[MAP_HASH(local_State, c1)];
- mp2 = maphash[MAP_HASH(local_State, c1)];
- if (mp == NULL)
- {
- + /* There are no buffer-local mappings. */
- mp = mp2;
- mp2 = NULL;
- }
- ***************
- *** 2130,2145 ****
- #endif
- (mp = mp->m_next))
- {
- - #ifdef FEAT_LOCALMAP
- - if (expecting_global_mappings && mp2 == NULL)
- - {
- - /* This is the first global mapping. If we've
- - * got a complete buffer-local match, use it. */
- - if (mp_match)
- - break;
- - expecting_global_mappings = FALSE;
- - }
- - #endif
- /*
- * Only consider an entry if the first character
- * matches and it is for the current state.
- --- 2129,2134 ----
- ***************
- *** 2215,2221 ****
-
- if (keylen > typebuf.tb_len)
- {
- ! if (!timedout)
- {
- /* break at a partly match */
- keylen = KEYLEN_PART_MAP;
- --- 2204,2211 ----
-
- if (keylen > typebuf.tb_len)
- {
- ! if (!timedout && !(mp_match != NULL
- ! && mp_match->m_nowait))
- {
- /* break at a partly match */
- keylen = KEYLEN_PART_MAP;
- ***************
- *** 3207,3212 ****
- --- 3197,3203 ----
- mapblock_T **abbr_table;
- mapblock_T **map_table;
- int unique = FALSE;
- + int nowait = FALSE;
- int silent = FALSE;
- int special = FALSE;
- #ifdef FEAT_EVAL
- ***************
- *** 3225,3231 ****
- else
- noremap = REMAP_YES;
-
- ! /* Accept <buffer>, <silent>, <expr> <script> and <unique> in any order. */
- for (;;)
- {
- #ifdef FEAT_LOCALMAP
- --- 3216,3223 ----
- else
- noremap = REMAP_YES;
-
- ! /* Accept <buffer>, <nowait>, <silent>, <expr> <script> and <unique> in
- ! * any order. */
- for (;;)
- {
- #ifdef FEAT_LOCALMAP
- ***************
- *** 3242,3247 ****
- --- 3234,3249 ----
- #endif
-
- /*
- + * Check for "<nowait>": don't wait for more characters.
- + */
- + if (STRNCMP(keys, "<nowait>", 8) == 0)
- + {
- + keys = skipwhite(keys + 8);
- + nowait = TRUE;
- + continue;
- + }
- +
- + /*
- * Check for "<silent>": don't echo commands.
- */
- if (STRNCMP(keys, "<silent>", 8) == 0)
- ***************
- *** 3607,3612 ****
- --- 3609,3615 ----
- vim_free(mp->m_orig_str);
- mp->m_orig_str = vim_strsave(orig_rhs);
- mp->m_noremap = noremap;
- + mp->m_nowait = nowait;
- mp->m_silent = silent;
- mp->m_mode = mode;
- #ifdef FEAT_EVAL
- ***************
- *** 3695,3700 ****
- --- 3698,3704 ----
- }
- mp->m_keylen = (int)STRLEN(mp->m_keys);
- mp->m_noremap = noremap;
- + mp->m_nowait = nowait;
- mp->m_silent = silent;
- mp->m_mode = mode;
- #ifdef FEAT_EVAL
- ***************
- *** 4173,4178 ****
- --- 4177,4187 ----
- arg = skipwhite(arg + 8);
- continue;
- }
- + if (STRNCMP(arg, "<nowait>", 8) == 0)
- + {
- + arg = skipwhite(arg + 8);
- + continue;
- + }
- if (STRNCMP(arg, "<silent>", 8) == 0)
- {
- arg = skipwhite(arg + 8);
- ***************
- *** 4229,4235 ****
- {
- count = 0;
-
- ! for (i = 0; i < 5; ++i)
- {
- if (i == 0)
- p = (char_u *)"<silent>";
- --- 4238,4244 ----
- {
- count = 0;
-
- ! for (i = 0; i < 6; ++i)
- {
- if (i == 0)
- p = (char_u *)"<silent>";
- ***************
- *** 4245,4250 ****
- --- 4254,4261 ----
- else if (i == 4 && !expand_buffer)
- p = (char_u *)"<buffer>";
- #endif
- + else if (i == 5)
- + p = (char_u *)"<nowait>";
- else
- continue;
-
- ***************
- *** 4857,4862 ****
- --- 4868,4875 ----
- return FAIL;
- if (buf != NULL && fputs(" <buffer>", fd) < 0)
- return FAIL;
- + if (mp->m_nowait && fputs(" <nowait>", fd) < 0)
- + return FAIL;
- if (mp->m_silent && fputs(" <silent>", fd) < 0)
- return FAIL;
- #ifdef FEAT_EVAL
- *** ../vim-7.3.1260/src/testdir/test75.in 2011-08-19 22:28:58.000000000 +0200
- --- src/testdir/test75.in 2013-06-29 13:48:42.000000000 +0200
- ***************
- *** 9,14 ****
- --- 9,16 ----
- :call append('$', maparg('foo<C-V>'))
- :call append('$', string(maparg('foo<C-V>', '', 0, 1)))
- :call append('$', string(maparg('bar', '', 0, 1)))
- + :map <buffer> <nowait> foo bar
- + :call append('$', string(maparg('foo', '', 0, 1)))
- :"
- :map abc x<char-114>x
- :call append('$', maparg('abc'))
- *** ../vim-7.3.1260/src/testdir/test75.ok 2011-08-19 22:28:58.000000000 +0200
- --- src/testdir/test75.ok 2013-06-29 13:50:08.000000000 +0200
- ***************
- *** 1,5 ****
- is<F4>foo
- ! {'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>', 'mode': ' ', 'expr': 0, 'sid': 0, 'rhs': 'is<F4>foo', 'buffer': 0}
- ! {'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v', 'expr': 1, 'sid': 0, 'rhs': 'isbar', 'buffer': 1}
- xrx
- yRy
- --- 1,6 ----
- is<F4>foo
- ! {'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>', 'mode': ' ', 'nowait': 0, 'expr': 0, 'sid': 0, 'rhs': 'is<F4>foo', 'buffer': 0}
- ! {'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v', 'nowait': 0, 'expr': 1, 'sid': 0, 'rhs': 'isbar', 'buffer': 1}
- ! {'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ', 'nowait': 1, 'expr': 0, 'sid': 0, 'rhs': 'bar', 'buffer': 1}
- xrx
- yRy
- *** ../vim-7.3.1260/src/version.c 2013-06-29 12:58:27.000000000 +0200
- --- src/version.c 2013-06-29 13:25:13.000000000 +0200
- ***************
- *** 730,731 ****
- --- 730,733 ----
- { /* Add new patch number below this line */
- + /**/
- + 1261,
- /**/
-
- --
- GUARD #2: It could be carried by an African swallow!
- GUARD #1: Oh, yeah, an African swallow maybe, but not a European swallow,
- that's my point.
- GUARD #2: Oh, yeah, I agree with that...
- 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 ///
-