Patch 8.2.4498
Problem:    Using <Plug> with "noremap" does not work.
Solution:   Always remap <Plug>. (closes #9879, closes #9789)
Files:      runtime/doc/map.txt, src/getchar.c, src/testdir/test_mapping.vim


*** ../vim-8.2.4497/runtime/doc/map.txt 2022-01-15 18:25:04.657419390 +0000
--- runtime/doc/map.txt 2022-03-03 13:49:53.023594306 +0000
***************
*** 78,83 ****
--- 80,87 ----
                        where the map command applies.  Disallow mapping of
                        {rhs}, to avoid nested and recursive mappings.  Often
                        used to redefine a command.
+                       Note: When <Plug> appears in the {rhs} this part is
+                       always applied even if remapping is disallowed.
  
  
  :unm[ap]  {lhs}                       |mapmode-nvo|           *:unm*  *:unmap*
***************
*** 94,99 ****
--- 98,105 ----
                        Remove the mapping of {lhs} for the modes where the
                        map command applies.  The mapping may remain defined
                        for other modes where it applies.
+                       It also works when {lhs} matches the {rhs} of a
+                       mapping. This is for when an abbreviation applied.
                        Note: Trailing spaces are included in the {lhs}.  This
                        unmap does NOT work: >
                                :map @@ foo
*** ../vim-8.2.4497/src/getchar.c       2022-02-20 19:05:06.359955597 +0000
--- src/getchar.c       2022-03-03 13:52:19.295476048 +0000
***************
*** 2424,2429 ****
--- 2424,2436 ----
      int               keylen = *keylenp;
      int               i;
      int               local_State = get_real_state();
+     int               is_plug_map = FALSE;
+ 
+     // If typehead starts with <Plug> then remap, even for a "noremap" 
mapping.
+     if (typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
+           && typebuf.tb_buf[typebuf.tb_off + 1] == KS_EXTRA
+           && typebuf.tb_buf[typebuf.tb_off + 2] == KE_PLUG)
+       is_plug_map = TRUE;
  
      /*
       * Check for a mappable key sequence.
***************
*** 2441,2447 ****
      tb_c1 = typebuf.tb_buf[typebuf.tb_off];
      if (no_mapping == 0 && is_maphash_valid()
            && (no_zero_mapping == 0 || tb_c1 != '0')
!           && (typebuf.tb_maplen == 0
                || (p_remap
                    && (typebuf.tb_noremap[typebuf.tb_off]
                                    & (RM_NONE|RM_ABBR)) == 0))
--- 2448,2454 ----
      tb_c1 = typebuf.tb_buf[typebuf.tb_off];
      if (no_mapping == 0 && is_maphash_valid()
            && (no_zero_mapping == 0 || tb_c1 != '0')
!           && (typebuf.tb_maplen == 0 || is_plug_map
                || (p_remap
                    && (typebuf.tb_noremap[typebuf.tb_off]
                                    & (RM_NONE|RM_ABBR)) == 0))
***************
*** 2562,2568 ****
                    for (n = mlen; --n >= 0; )
                        if (*s++ & (RM_NONE|RM_ABBR))
                            break;
!                   if (n >= 0)
                        continue;
  
                    if (keylen > typebuf.tb_len)
--- 2569,2575 ----
                    for (n = mlen; --n >= 0; )
                        if (*s++ & (RM_NONE|RM_ABBR))
                            break;
!                   if (!is_plug_map && n >= 0)
                        continue;
  
                    if (keylen > typebuf.tb_len)
*** ../vim-8.2.4497/src/testdir/test_mapping.vim        2022-02-16 
18:27:32.583437344 +0000
--- src/testdir/test_mapping.vim        2022-03-03 13:54:22.731369088 +0000
***************
*** 1536,1539 ****
--- 1536,1569 ----
    set encoding=utf-8
  endfunc
  
+ " Test for <Plug> always being mapped, even when used with "noremap".
+ func Test_plug_remap()
+   let g:foo = 0
+   nnoremap <Plug>(Increase_x) <Cmd>let g:foo += 1<CR>
+   nmap <F2> <Plug>(Increase_x)
+   nnoremap <F3> <Plug>(Increase_x)
+   call feedkeys("\<F2>", 'xt')
+   call assert_equal(1, g:foo)
+   call feedkeys("\<F3>", 'xt')
+   call assert_equal(2, g:foo)
+   nnoremap x <Nop>
+   nmap <F4> x<Plug>(Increase_x)x
+   nnoremap <F5> x<Plug>(Increase_x)x
+   call setline(1, 'Some text')
+   normal! gg$
+   call feedkeys("\<F4>", 'xt')
+   call assert_equal(3, g:foo)
+   call assert_equal('Some text', getline(1))
+   call feedkeys("\<F5>", 'xt')
+   call assert_equal(4, g:foo)
+   call assert_equal('Some te', getline(1))
+   nunmap <Plug>(Increase_x)
+   nunmap <F2>
+   nunmap <F3>
+   nunmap <F4>
+   nunmap <F5>
+   unlet g:foo
+   %bw!
+ endfunc
+ 
  " vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.4497/src/version.c       2022-03-03 11:45:37.347173149 +0000
--- src/version.c       2022-03-03 13:48:16.455665942 +0000
***************
*** 756,757 ****
--- 756,759 ----
  {   /* Add new patch number below this line */
+ /**/
+     4498,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
150. You find yourself counting emoticons to get to sleep.

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

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20220303140422.ADF601C0563%40moolenaar.net.

Raspunde prin e-mail lui