To: vim_dev@googlegroups.com Subject: Patch 8.2.2804 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.2804 Problem: Setting buffer local mapping with mapset() changes global mapping. Solution: Only set the local mapping. (closes #8143) Files: src/map.c, src/testdir/test_maparg.vim *** ../vim-8.2.2803/src/map.c 2021-01-03 19:51:01.396063220 +0100 --- src/map.c 2021-04-24 13:08:36.847124820 +0200 *************** *** 2295,2300 **** --- 2295,2301 ---- int noremap; int expr; int silent; + int buffer; scid_T sid; linenr_T lnum; mapblock_T **map_table = maphash; *************** *** 2336,2353 **** silent = dict_get_number(d, (char_u *)"silent") != 0; sid = dict_get_number(d, (char_u *)"sid"); lnum = dict_get_number(d, (char_u *)"lnum"); ! if (dict_get_number(d, (char_u *)"buffer")) { map_table = curbuf->b_maphash; abbr_table = &curbuf->b_first_abbr; } - nowait = dict_get_number(d, (char_u *)"nowait") != 0; - // mode from the dict is not used // Delete any existing mapping for this lhs and mode. ! arg = vim_strsave(lhs); ! if (arg == NULL) ! return; do_map(1, arg, mode, is_abbr); vim_free(arg); --- 2337,2367 ---- silent = dict_get_number(d, (char_u *)"silent") != 0; sid = dict_get_number(d, (char_u *)"sid"); lnum = dict_get_number(d, (char_u *)"lnum"); ! buffer = dict_get_number(d, (char_u *)"buffer"); ! nowait = dict_get_number(d, (char_u *)"nowait") != 0; ! // mode from the dict is not used ! ! if (buffer) { map_table = curbuf->b_maphash; abbr_table = &curbuf->b_first_abbr; } // Delete any existing mapping for this lhs and mode. ! if (buffer) ! { ! arg = alloc(STRLEN(lhs) + STRLEN("") + 1); ! if (arg == NULL) ! return; ! STRCPY(arg, ""); ! STRCPY(arg + 8, lhs); ! } ! else ! { ! arg = vim_strsave(lhs); ! if (arg == NULL) ! return; ! } do_map(1, arg, mode, is_abbr); vim_free(arg); *** ../vim-8.2.2803/src/testdir/test_maparg.vim 2021-02-20 19:21:31.955986987 +0100 --- src/testdir/test_maparg.vim 2021-04-24 13:09:51.890887805 +0200 *************** *** 254,259 **** --- 254,280 ---- endif endfunc + func Test_map_local() + nmap a global + nmap a local + + let prev_map_list = split(execute('nmap a'), "\n") + call assert_match('n\s*a\s*@local', prev_map_list[0]) + call assert_match('n\s*a\s*global', prev_map_list[1]) + + let mapping = maparg('a', 'n', 0, 1) + call assert_equal(1, mapping.buffer) + let mapping.rhs = 'new_local' + call mapset('n', 0, mapping) + + " Check that the global mapping is left untouched. + let map_list = split(execute('nmap a'), "\n") + call assert_match('n\s*a\s*@new_local', map_list[0]) + call assert_match('n\s*a\s*global', map_list[1]) + + nunmap a + endfunc + func Test_map_restore() " Test restoring map with alternate keycode nmap back *** ../vim-8.2.2803/src/version.c 2021-04-23 21:01:30.649469081 +0200 --- src/version.c 2021-04-24 13:01:02.176510445 +0200 *************** *** 752,753 **** --- 752,755 ---- { /* Add new patch number below this line */ + /**/ + 2804, /**/ -- Microsoft says that MS-Windows is much better for you than Linux. That's like the Pope saying that catholicism is much better for you than protestantism. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///