aboutsummaryrefslogtreecommitdiff
path: root/src/nvim
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim')
-rw-r--r--src/nvim/eval.lua36
-rw-r--r--src/nvim/mapping.c14
2 files changed, 31 insertions, 19 deletions
diff --git a/src/nvim/eval.lua b/src/nvim/eval.lua
index 5aa4d65362..de7fb53455 100644
--- a/src/nvim/eval.lua
+++ b/src/nvim/eval.lua
@@ -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,
diff --git a/src/nvim/mapping.c b/src/nvim/mapping.c
index 2cc469feec..905e742f51 100644
--- a/src/nvim/mapping.c
+++ b/src/nvim/mapping.c
@@ -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];