mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 18:55:14 -07:00
vim-patch:8.2.4825: can only get a list of mappings
Problem: Can only get a list of mappings.
Solution: Add the optional {abbr} argument. (Ernie Rael, closes vim/vim#10277)
Rename to maplist(). Rename test file.
09661203ec
Co-authored-by: Ernie Rael <errael@raelity.com>
This commit is contained in:
parent
2dfcd5a22b
commit
d4dbfb092b
24
runtime/doc/builtin.txt
generated
24
runtime/doc/builtin.txt
generated
@ -2612,16 +2612,6 @@ getloclist({nr} [, {what}]) *getloclist()*
|
||||
echo getloclist(5, {'filewinid': 0})
|
||||
<
|
||||
|
||||
getmappings() *getmappings()*
|
||||
Returns a |List| of all mappings. Each List item is a |Dict|,
|
||||
the same as what is returned by |maparg()|, see
|
||||
|mapping-dict|.
|
||||
|
||||
Example to show all mappings with "MultiMatch" in rhs: >
|
||||
echo getmappings()->filter({_, m ->
|
||||
\ match(get(m, 'rhs', ''), 'MultiMatch') >= 0
|
||||
\ })
|
||||
|
||||
getmarklist([{buf}]) *getmarklist()*
|
||||
Without the {buf} argument returns a |List| with information
|
||||
about all the global marks. |mark|
|
||||
@ -4143,7 +4133,8 @@ maparg({name} [, {mode} [, {abbr} [, {dict}]]]) *maparg()*
|
||||
When {dict} is omitted or zero: Return the rhs of mapping
|
||||
{name} in mode {mode}. The returned String has special
|
||||
characters translated like in the output of the ":map" command
|
||||
listing.
|
||||
listing. When {dict} is TRUE a dictionary is returned, see
|
||||
below. To get a list of all mappings see |maplist()|.
|
||||
|
||||
When there is no mapping for {name}, an empty String is
|
||||
returned if {dict} is FALSE, otherwise returns an empty Dict.
|
||||
@ -4237,6 +4228,17 @@ mapcheck({name} [, {mode} [, {abbr}]]) *mapcheck()*
|
||||
< This avoids adding the "_vv" mapping when there already is a
|
||||
mapping for "_v" or for "_vvv".
|
||||
|
||||
maplist([{abbr}]) *maplist()*
|
||||
Returns a |List| of all mappings. Each List item is a |Dict|,
|
||||
the same as what is returned by |maparg()|, see
|
||||
|mapping-dict|. When {abbr} is there and it is |TRUE| use
|
||||
abbreviations instead of mappings.
|
||||
|
||||
Example to show all mappings with "MultiMatch" in rhs: >vim
|
||||
echo maplist()->filter({_, m ->
|
||||
\ match(get(m, 'rhs', ''), 'MultiMatch') >= 0
|
||||
\ })
|
||||
|
||||
mapnew({expr1}, {expr2}) *mapnew()*
|
||||
Like |map()| but instead of replacing items in {expr1} a new
|
||||
List or Dictionary is created and returned. {expr1} remains
|
||||
|
@ -1012,10 +1012,10 @@ Mappings and Menus: *mapping-functions*
|
||||
digraph_getlist() get all |digraph|s
|
||||
digraph_set() register |digraph|
|
||||
digraph_setlist() register multiple |digraph|s
|
||||
getmappings() get list of all mappings
|
||||
hasmapto() check if a mapping exists
|
||||
mapcheck() check if a matching mapping exists
|
||||
maparg() get rhs of a mapping
|
||||
maplist() get list of all mappings
|
||||
mapset() restore a mapping
|
||||
menu_info() get information about a menu item
|
||||
wildmenumode() check if the wildmode is active
|
||||
|
28
runtime/lua/vim/_meta/vimfn.lua
generated
28
runtime/lua/vim/_meta/vimfn.lua
generated
@ -3175,18 +3175,6 @@ function vim.fn.getline(lnum, end_) end
|
||||
--- @return any
|
||||
function vim.fn.getloclist(nr, what) end
|
||||
|
||||
--- Returns a |List| of all mappings. Each List item is a |Dict|,
|
||||
--- the same as what is returned by |maparg()|, see
|
||||
--- |mapping-dict|.
|
||||
---
|
||||
--- Example to show all mappings with "MultiMatch" in rhs: >
|
||||
--- echo getmappings()->filter({_, m ->
|
||||
--- \ match(get(m, 'rhs', ''), 'MultiMatch') >= 0
|
||||
--- \ })
|
||||
---
|
||||
--- @return any
|
||||
function vim.fn.getmappings() end
|
||||
|
||||
--- Without the {buf} argument returns a |List| with information
|
||||
--- about all the global marks. |mark|
|
||||
---
|
||||
@ -5006,7 +4994,8 @@ function vim.fn.map(expr1, expr2) end
|
||||
--- When {dict} is omitted or zero: Return the rhs of mapping
|
||||
--- {name} in mode {mode}. The returned String has special
|
||||
--- characters translated like in the output of the ":map" command
|
||||
--- listing.
|
||||
--- listing. When {dict} is TRUE a dictionary is returned, see
|
||||
--- below. To get a list of all mappings see |maplist()|.
|
||||
---
|
||||
--- When there is no mapping for {name}, an empty String is
|
||||
--- returned if {dict} is FALSE, otherwise returns an empty Dict.
|
||||
@ -5112,6 +5101,19 @@ function vim.fn.maparg(name, mode, abbr, dict) end
|
||||
--- @return any
|
||||
function vim.fn.mapcheck(name, mode, abbr) end
|
||||
|
||||
--- Returns a |List| of all mappings. Each List item is a |Dict|,
|
||||
--- the same as what is returned by |maparg()|, see
|
||||
--- |mapping-dict|. When {abbr} is there and it is |TRUE| use
|
||||
--- abbreviations instead of mappings.
|
||||
---
|
||||
--- Example to show all mappings with "MultiMatch" in rhs: >vim
|
||||
--- echo maplist()->filter({_, m ->
|
||||
--- \ match(get(m, 'rhs', ''), 'MultiMatch') >= 0
|
||||
--- \ })
|
||||
---
|
||||
--- @return any
|
||||
function vim.fn.maplist() end
|
||||
|
||||
--- Like |map()| but instead of replacing items in {expr1} a new
|
||||
--- List or Dictionary is created and returned. {expr1} remains
|
||||
--- unchanged. Items can still be changed by {expr2}, if you
|
||||
|
@ -3957,22 +3957,6 @@ M.funcs = {
|
||||
params = { { 'nr', 'integer' }, { 'what', 'any' } },
|
||||
signature = 'getloclist({nr} [, {what}])',
|
||||
},
|
||||
getmappings = {
|
||||
args = 0,
|
||||
desc = [[
|
||||
Returns a |List| of all mappings. Each List item is a |Dict|,
|
||||
the same as what is returned by |maparg()|, see
|
||||
|mapping-dict|.
|
||||
|
||||
Example to show all mappings with "MultiMatch" in rhs: >
|
||||
echo getmappings()->filter({_, m ->
|
||||
\ match(get(m, 'rhs', ''), 'MultiMatch') >= 0
|
||||
\ })
|
||||
]],
|
||||
name = 'getmappings',
|
||||
params = {},
|
||||
signature = 'getmappings()'
|
||||
},
|
||||
getmarklist = {
|
||||
args = { 0, 1 },
|
||||
base = 1,
|
||||
@ -6158,7 +6142,8 @@ M.funcs = {
|
||||
When {dict} is omitted or zero: Return the rhs of mapping
|
||||
{name} in mode {mode}. The returned String has special
|
||||
characters translated like in the output of the ":map" command
|
||||
listing.
|
||||
listing. When {dict} is TRUE a dictionary is returned, see
|
||||
below. To get a list of all mappings see |maplist()|.
|
||||
|
||||
When there is no mapping for {name}, an empty String is
|
||||
returned if {dict} is FALSE, otherwise returns an empty Dict.
|
||||
@ -6271,6 +6256,23 @@ M.funcs = {
|
||||
params = { { 'name', 'string' }, { 'mode', 'string' }, { 'abbr', 'any' } },
|
||||
signature = 'mapcheck({name} [, {mode} [, {abbr}]])',
|
||||
},
|
||||
maplist = {
|
||||
args = { 0, 1 },
|
||||
desc = [[
|
||||
Returns a |List| of all mappings. Each List item is a |Dict|,
|
||||
the same as what is returned by |maparg()|, see
|
||||
|mapping-dict|. When {abbr} is there and it is |TRUE| use
|
||||
abbreviations instead of mappings.
|
||||
|
||||
Example to show all mappings with "MultiMatch" in rhs: >vim
|
||||
echo maplist()->filter({_, m ->
|
||||
\ match(get(m, 'rhs', ''), 'MultiMatch') >= 0
|
||||
\ })
|
||||
]],
|
||||
name = 'maplist',
|
||||
params = {},
|
||||
signature = 'maplist([{abbr}])'
|
||||
},
|
||||
mapnew = {
|
||||
args = 2,
|
||||
base = 1,
|
||||
|
@ -2282,9 +2282,10 @@ void f_mapset(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
|
||||
}
|
||||
|
||||
/// "maplist()" function
|
||||
void f_getmappings(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
|
||||
void f_maplist(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
|
||||
{
|
||||
const int flags = REPTERM_FROM_PART | REPTERM_DO_LT;
|
||||
const bool abbr = argvars[0].v_type != VAR_UNKNOWN && tv_get_bool(&argvars[0]);
|
||||
|
||||
tv_list_alloc_ret(rettv, kListLenUnknown);
|
||||
|
||||
@ -2292,7 +2293,16 @@ void f_getmappings(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
|
||||
for (int buffer_local = 0; buffer_local <= 1; buffer_local++) {
|
||||
for (int hash = 0; hash < 256; hash++) {
|
||||
mapblock_T *mp;
|
||||
if (buffer_local) {
|
||||
if (abbr) {
|
||||
if (hash > 0) { // there is only one abbr list
|
||||
break;
|
||||
}
|
||||
if (buffer_local) {
|
||||
mp = curbuf->b_first_abbr;
|
||||
} else {
|
||||
mp = first_abbr;
|
||||
}
|
||||
} else if (buffer_local) {
|
||||
mp = curbuf->b_maphash[hash];
|
||||
} else {
|
||||
mp = maphash[hash];
|
||||
|
@ -1,4 +1,4 @@
|
||||
" Tests for maparg(), mapcheck() and mapset().
|
||||
" Tests for maparg(), mapcheck(), mapset(), maplist()
|
||||
" Also test utf8 map with a 0x80 byte.
|
||||
|
||||
source shared.vim
|
||||
@ -372,15 +372,16 @@ func Test_map_restore_negative_sid()
|
||||
call delete('Xresult')
|
||||
endfunc
|
||||
|
||||
func Test_getmappings()
|
||||
func Test_maplist()
|
||||
new
|
||||
func s:ClearMaps()
|
||||
func s:ClearMappingsAbbreviations()
|
||||
mapclear | nmapclear | vmapclear | xmapclear | smapclear | omapclear
|
||||
mapclear! | imapclear | lmapclear | cmapclear | tmapclear
|
||||
mapclear <buffer> | nmapclear <buffer> | vmapclear <buffer>
|
||||
xmapclear <buffer> | smapclear <buffer> | omapclear <buffer>
|
||||
mapclear! <buffer> | imapclear <buffer> | lmapclear <buffer>
|
||||
cmapclear <buffer> | tmapclear <buffer>
|
||||
abclear | abclear <buffer>
|
||||
endfunc
|
||||
|
||||
func s:AddMaps(new, accum)
|
||||
@ -389,8 +390,9 @@ func Test_getmappings()
|
||||
endif
|
||||
endfunc
|
||||
|
||||
call s:ClearMaps()
|
||||
call assert_equal(0, len(getmappings()))
|
||||
call s:ClearMappingsAbbreviations()
|
||||
call assert_equal(0, len(maplist()))
|
||||
call assert_equal(0, len(maplist(v:true)))
|
||||
|
||||
" Set up some mappings.
|
||||
map dup bar
|
||||
@ -406,10 +408,16 @@ func Test_getmappings()
|
||||
map abc <Nop>
|
||||
nmap <M-j> x
|
||||
nmap <M-Space> y
|
||||
" And abbreviations
|
||||
abbreviate xy he
|
||||
abbreviate xx she
|
||||
abbreviate <buffer> x they
|
||||
|
||||
" Get a list of the mappings with the ':map' commands.
|
||||
" Check getmappings() return a list of the same size.
|
||||
call assert_equal(13, len(getmappings()))
|
||||
" Check maplist() return a list of the same size.
|
||||
call assert_equal(13, len(maplist()))
|
||||
call assert_equal(3, len(maplist(v:true)))
|
||||
call assert_equal(13, len(maplist(v:false)))
|
||||
|
||||
" collect all the current maps using :map commands
|
||||
let maps_command = []
|
||||
@ -418,20 +426,20 @@ func Test_getmappings()
|
||||
call s:AddMaps(split(execute('tmap'), '\n'), maps_command)
|
||||
call s:AddMaps(split(execute('lmap'), '\n'), maps_command)
|
||||
|
||||
" Use getmappings to get all the maps
|
||||
let maps_getmappings = getmappings()
|
||||
call assert_equal(len(maps_command), len(maps_getmappings))
|
||||
" Use maplist to get all the maps
|
||||
let maps_maplist = maplist()
|
||||
call assert_equal(len(maps_command), len(maps_maplist))
|
||||
|
||||
" make sure all the mode-lhs are unique, no duplicates
|
||||
let map_set = {}
|
||||
for d in maps_getmappings
|
||||
for d in maps_maplist
|
||||
let map_set[d.mode .. "-" .. d.lhs .. "-" .. d.buffer] = 0
|
||||
endfor
|
||||
call assert_equal(len(maps_getmappings), len(map_set))
|
||||
call assert_equal(len(maps_maplist), len(map_set))
|
||||
|
||||
" For everything returned by getmappings, should be the same as from maparg.
|
||||
" For everything returned by maplist, should be the same as from maparg.
|
||||
" Except for "map dup", bacause maparg returns the <buffer> version
|
||||
for d in maps_getmappings
|
||||
for d in maps_maplist
|
||||
if d.lhs == 'dup' && d.buffer == 0
|
||||
continue
|
||||
endif
|
||||
@ -439,8 +447,16 @@ func Test_getmappings()
|
||||
call assert_equal(d_maparg, d)
|
||||
endfor
|
||||
|
||||
call s:ClearMaps()
|
||||
call assert_equal(0, len(getmappings()))
|
||||
" Check abbr matches maparg
|
||||
for d in maplist(v:true)
|
||||
" Note, d.mode is '!', but can't use that with maparg
|
||||
let d_maparg = maparg(d.lhs, 'i', v:true, v:true)
|
||||
call assert_equal(d_maparg, d)
|
||||
endfor
|
||||
|
||||
call s:ClearMappingsAbbreviations()
|
||||
call assert_equal(0, len(maplist()))
|
||||
call assert_equal(0, len(maplist(v:true)))
|
||||
endfunc
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user