mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 11:15: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})
|
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()*
|
getmarklist([{buf}]) *getmarklist()*
|
||||||
Without the {buf} argument returns a |List| with information
|
Without the {buf} argument returns a |List| with information
|
||||||
about all the global marks. |mark|
|
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
|
When {dict} is omitted or zero: Return the rhs of mapping
|
||||||
{name} in mode {mode}. The returned String has special
|
{name} in mode {mode}. The returned String has special
|
||||||
characters translated like in the output of the ":map" command
|
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
|
When there is no mapping for {name}, an empty String is
|
||||||
returned if {dict} is FALSE, otherwise returns an empty Dict.
|
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
|
< This avoids adding the "_vv" mapping when there already is a
|
||||||
mapping for "_v" or for "_vvv".
|
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()*
|
mapnew({expr1}, {expr2}) *mapnew()*
|
||||||
Like |map()| but instead of replacing items in {expr1} a new
|
Like |map()| but instead of replacing items in {expr1} a new
|
||||||
List or Dictionary is created and returned. {expr1} remains
|
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_getlist() get all |digraph|s
|
||||||
digraph_set() register |digraph|
|
digraph_set() register |digraph|
|
||||||
digraph_setlist() register multiple |digraph|s
|
digraph_setlist() register multiple |digraph|s
|
||||||
getmappings() get list of all mappings
|
|
||||||
hasmapto() check if a mapping exists
|
hasmapto() check if a mapping exists
|
||||||
mapcheck() check if a matching mapping exists
|
mapcheck() check if a matching mapping exists
|
||||||
maparg() get rhs of a mapping
|
maparg() get rhs of a mapping
|
||||||
|
maplist() get list of all mappings
|
||||||
mapset() restore a mapping
|
mapset() restore a mapping
|
||||||
menu_info() get information about a menu item
|
menu_info() get information about a menu item
|
||||||
wildmenumode() check if the wildmode is active
|
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
|
--- @return any
|
||||||
function vim.fn.getloclist(nr, what) end
|
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
|
--- Without the {buf} argument returns a |List| with information
|
||||||
--- about all the global marks. |mark|
|
--- 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
|
--- When {dict} is omitted or zero: Return the rhs of mapping
|
||||||
--- {name} in mode {mode}. The returned String has special
|
--- {name} in mode {mode}. The returned String has special
|
||||||
--- characters translated like in the output of the ":map" command
|
--- 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
|
--- When there is no mapping for {name}, an empty String is
|
||||||
--- returned if {dict} is FALSE, otherwise returns an empty Dict.
|
--- 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
|
--- @return any
|
||||||
function vim.fn.mapcheck(name, mode, abbr) end
|
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
|
--- Like |map()| but instead of replacing items in {expr1} a new
|
||||||
--- List or Dictionary is created and returned. {expr1} remains
|
--- List or Dictionary is created and returned. {expr1} remains
|
||||||
--- unchanged. Items can still be changed by {expr2}, if you
|
--- unchanged. Items can still be changed by {expr2}, if you
|
||||||
|
@ -3957,22 +3957,6 @@ M.funcs = {
|
|||||||
params = { { 'nr', 'integer' }, { 'what', 'any' } },
|
params = { { 'nr', 'integer' }, { 'what', 'any' } },
|
||||||
signature = 'getloclist({nr} [, {what}])',
|
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 = {
|
getmarklist = {
|
||||||
args = { 0, 1 },
|
args = { 0, 1 },
|
||||||
base = 1,
|
base = 1,
|
||||||
@ -6158,7 +6142,8 @@ M.funcs = {
|
|||||||
When {dict} is omitted or zero: Return the rhs of mapping
|
When {dict} is omitted or zero: Return the rhs of mapping
|
||||||
{name} in mode {mode}. The returned String has special
|
{name} in mode {mode}. The returned String has special
|
||||||
characters translated like in the output of the ":map" command
|
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
|
When there is no mapping for {name}, an empty String is
|
||||||
returned if {dict} is FALSE, otherwise returns an empty Dict.
|
returned if {dict} is FALSE, otherwise returns an empty Dict.
|
||||||
@ -6271,6 +6256,23 @@ M.funcs = {
|
|||||||
params = { { 'name', 'string' }, { 'mode', 'string' }, { 'abbr', 'any' } },
|
params = { { 'name', 'string' }, { 'mode', 'string' }, { 'abbr', 'any' } },
|
||||||
signature = 'mapcheck({name} [, {mode} [, {abbr}]])',
|
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 = {
|
mapnew = {
|
||||||
args = 2,
|
args = 2,
|
||||||
base = 1,
|
base = 1,
|
||||||
|
@ -2282,9 +2282,10 @@ void f_mapset(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// "maplist()" function
|
/// "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 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);
|
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 buffer_local = 0; buffer_local <= 1; buffer_local++) {
|
||||||
for (int hash = 0; hash < 256; hash++) {
|
for (int hash = 0; hash < 256; hash++) {
|
||||||
mapblock_T *mp;
|
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];
|
mp = curbuf->b_maphash[hash];
|
||||||
} else {
|
} else {
|
||||||
mp = maphash[hash];
|
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.
|
" Also test utf8 map with a 0x80 byte.
|
||||||
|
|
||||||
source shared.vim
|
source shared.vim
|
||||||
@ -372,15 +372,16 @@ func Test_map_restore_negative_sid()
|
|||||||
call delete('Xresult')
|
call delete('Xresult')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_getmappings()
|
func Test_maplist()
|
||||||
new
|
new
|
||||||
func s:ClearMaps()
|
func s:ClearMappingsAbbreviations()
|
||||||
mapclear | nmapclear | vmapclear | xmapclear | smapclear | omapclear
|
mapclear | nmapclear | vmapclear | xmapclear | smapclear | omapclear
|
||||||
mapclear! | imapclear | lmapclear | cmapclear | tmapclear
|
mapclear! | imapclear | lmapclear | cmapclear | tmapclear
|
||||||
mapclear <buffer> | nmapclear <buffer> | vmapclear <buffer>
|
mapclear <buffer> | nmapclear <buffer> | vmapclear <buffer>
|
||||||
xmapclear <buffer> | smapclear <buffer> | omapclear <buffer>
|
xmapclear <buffer> | smapclear <buffer> | omapclear <buffer>
|
||||||
mapclear! <buffer> | imapclear <buffer> | lmapclear <buffer>
|
mapclear! <buffer> | imapclear <buffer> | lmapclear <buffer>
|
||||||
cmapclear <buffer> | tmapclear <buffer>
|
cmapclear <buffer> | tmapclear <buffer>
|
||||||
|
abclear | abclear <buffer>
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func s:AddMaps(new, accum)
|
func s:AddMaps(new, accum)
|
||||||
@ -389,8 +390,9 @@ func Test_getmappings()
|
|||||||
endif
|
endif
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
call s:ClearMaps()
|
call s:ClearMappingsAbbreviations()
|
||||||
call assert_equal(0, len(getmappings()))
|
call assert_equal(0, len(maplist()))
|
||||||
|
call assert_equal(0, len(maplist(v:true)))
|
||||||
|
|
||||||
" Set up some mappings.
|
" Set up some mappings.
|
||||||
map dup bar
|
map dup bar
|
||||||
@ -406,10 +408,16 @@ func Test_getmappings()
|
|||||||
map abc <Nop>
|
map abc <Nop>
|
||||||
nmap <M-j> x
|
nmap <M-j> x
|
||||||
nmap <M-Space> y
|
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.
|
" Get a list of the mappings with the ':map' commands.
|
||||||
" Check getmappings() return a list of the same size.
|
" Check maplist() return a list of the same size.
|
||||||
call assert_equal(13, len(getmappings()))
|
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
|
" collect all the current maps using :map commands
|
||||||
let maps_command = []
|
let maps_command = []
|
||||||
@ -418,20 +426,20 @@ func Test_getmappings()
|
|||||||
call s:AddMaps(split(execute('tmap'), '\n'), maps_command)
|
call s:AddMaps(split(execute('tmap'), '\n'), maps_command)
|
||||||
call s:AddMaps(split(execute('lmap'), '\n'), maps_command)
|
call s:AddMaps(split(execute('lmap'), '\n'), maps_command)
|
||||||
|
|
||||||
" Use getmappings to get all the maps
|
" Use maplist to get all the maps
|
||||||
let maps_getmappings = getmappings()
|
let maps_maplist = maplist()
|
||||||
call assert_equal(len(maps_command), len(maps_getmappings))
|
call assert_equal(len(maps_command), len(maps_maplist))
|
||||||
|
|
||||||
" make sure all the mode-lhs are unique, no duplicates
|
" make sure all the mode-lhs are unique, no duplicates
|
||||||
let map_set = {}
|
let map_set = {}
|
||||||
for d in maps_getmappings
|
for d in maps_maplist
|
||||||
let map_set[d.mode .. "-" .. d.lhs .. "-" .. d.buffer] = 0
|
let map_set[d.mode .. "-" .. d.lhs .. "-" .. d.buffer] = 0
|
||||||
endfor
|
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
|
" 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
|
if d.lhs == 'dup' && d.buffer == 0
|
||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
@ -439,8 +447,16 @@ func Test_getmappings()
|
|||||||
call assert_equal(d_maparg, d)
|
call assert_equal(d_maparg, d)
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
call s:ClearMaps()
|
" Check abbr matches maparg
|
||||||
call assert_equal(0, len(getmappings()))
|
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
|
endfunc
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user