aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.builds/freebsd.yml1
-rw-r--r--runtime/doc/map.txt4
-rw-r--r--runtime/doc/vim_diff.txt4
-rw-r--r--src/nvim/api/vim.c2
-rw-r--r--src/nvim/autocmd.c2
-rw-r--r--src/nvim/eval/typval.c21
-rw-r--r--src/nvim/getchar.c7
-rw-r--r--src/nvim/testdir/test_mapping.vim30
8 files changed, 37 insertions, 34 deletions
diff --git a/.builds/freebsd.yml b/.builds/freebsd.yml
index d5809c42cf..8596eb2a7f 100644
--- a/.builds/freebsd.yml
+++ b/.builds/freebsd.yml
@@ -5,7 +5,6 @@ packages:
- gmake
- ninja
- libtool
-- sha
- automake
- pkgconf
- unzip
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index 8715c3231c..b874d6dc61 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -65,8 +65,8 @@ modes.
where the map command applies. Disallow mapping of
{rhs}, to avoid nested and recursive mappings. Often
used to redefine a command.
- Note: A mapping whose {lhs} starts with <Plug> is
- always applied even if mapping is disallowed.
+ Note: When <Plug> appears in the {rhs} this part is
+ always applied even if remapping is disallowed.
:unm[ap] {lhs} |mapmode-nvo| *:unm* *:unmap*
diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt
index 90f56e2566..5ea6a9c5dd 100644
--- a/runtime/doc/vim_diff.txt
+++ b/runtime/doc/vim_diff.txt
@@ -358,10 +358,6 @@ Macro/|recording| behavior
macros and 'keymap' at the same time. This also means you can use |:imap| on
the results of keys from 'keymap'.
-Mappings:
-- A mapping whose {lhs} starts with <Plug> is always applied even if mapping
- is disallowed by |nore|.
-
Motion:
The |jumplist| avoids useless/phantom jumps.
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index 9d0b096a36..c37df45c14 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -1991,7 +1991,7 @@ Array nvim_get_proc_children(Integer pid, Error *err)
size_t proc_count;
int rv = os_proc_children((int)pid, &proc_list, &proc_count);
- if (rv != 0) {
+ if (rv == 2) {
// syscall failed (possibly because of kernel options), try shelling out.
DLOG("fallback to vim._os_proc_children()");
Array a = ARRAY_DICT_INIT;
diff --git a/src/nvim/autocmd.c b/src/nvim/autocmd.c
index a36d61420a..e7e1d5fd1b 100644
--- a/src/nvim/autocmd.c
+++ b/src/nvim/autocmd.c
@@ -2473,7 +2473,7 @@ bool aucmd_exec_is_deleted(AucmdExecutable acc)
case CALLABLE_EX:
return acc.callable.cmd == NULL;
case CALLABLE_CB:
- return callback_is_freed(acc.callable.cb);
+ return acc.callable.cb.type == kCallbackNone;
case CALLABLE_NONE:
return true;
}
diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c
index 44b003d106..d492c67877 100644
--- a/src/nvim/eval/typval.c
+++ b/src/nvim/eval/typval.c
@@ -1155,27 +1155,6 @@ void callback_free(Callback *callback)
callback->data.funcref = NULL;
}
-/// Check if callback is freed
-bool callback_is_freed(Callback callback)
-{
- switch (callback.type) {
- case kCallbackFuncref:
- return false;
- break;
- case kCallbackPartial:
- return false;
- break;
- case kCallbackLua:
- return callback.data.luaref == LUA_NOREF;
- break;
- case kCallbackNone:
- return true;
- break;
- }
-
- return true;
-}
-
/// Copy a callback into a typval_T.
void callback_put(Callback *cb, typval_T *tv)
FUNC_ATTR_NONNULL_ALL
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index 85a5c176bb..8426cdb98c 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -1712,11 +1712,10 @@ static int handle_mapping(int *keylenp, bool *timedout, int *mapdepth)
int local_State = get_real_state();
bool is_plug_map = false;
- // Check if typehead starts with a <Plug> mapping.
- // In that case we will ignore nore flag on it.
+ // 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) {
+ && typebuf.tb_buf[typebuf.tb_off + 1] == KS_EXTRA
+ && typebuf.tb_buf[typebuf.tb_off + 2] == KE_PLUG) {
is_plug_map = true;
}
diff --git a/src/nvim/testdir/test_mapping.vim b/src/nvim/testdir/test_mapping.vim
index 1080a3c85b..98440ccdd7 100644
--- a/src/nvim/testdir/test_mapping.vim
+++ b/src/nvim/testdir/test_mapping.vim
@@ -646,4 +646,34 @@ func Test_abbreviate_multi_byte()
bwipe!
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