forked from aniani/vim
patch 8.2.4717: for TextYankPost v:event does not contain all information
Problem: For TextYankPost v:event does not contain information about the operation being inclusive or not. Solution: Add "inclusive" to v:event. (Justn M. Keyes, Yegappan Lakshmanan, closes #10125)
This commit is contained in:
parent
7c7e19cf50
commit
a016eeba7a
@ -1205,6 +1205,9 @@ TextYankPost After text has been yanked or deleted in the
|
|||||||
current buffer. The following values of
|
current buffer. The following values of
|
||||||
|v:event| can be used to determine the operation
|
|v:event| can be used to determine the operation
|
||||||
that triggered this autocmd:
|
that triggered this autocmd:
|
||||||
|
inclusive TRUE if the motion is
|
||||||
|
|inclusive| else the motion is
|
||||||
|
|exclusive|.
|
||||||
operator The operation performed.
|
operator The operation performed.
|
||||||
regcontents Text that was stored in the
|
regcontents Text that was stored in the
|
||||||
register, as a list of lines,
|
register, as a list of lines,
|
||||||
|
@ -1013,20 +1013,28 @@ yank_do_autocmd(oparg_T *oap, yankreg_T *reg)
|
|||||||
list = list_alloc();
|
list = list_alloc();
|
||||||
if (list == NULL)
|
if (list == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// yanked text contents
|
||||||
for (n = 0; n < reg->y_size; n++)
|
for (n = 0; n < reg->y_size; n++)
|
||||||
list_append_string(list, reg->y_array[n], -1);
|
list_append_string(list, reg->y_array[n], -1);
|
||||||
list->lv_lock = VAR_FIXED;
|
list->lv_lock = VAR_FIXED;
|
||||||
(void)dict_add_list(v_event, "regcontents", list);
|
(void)dict_add_list(v_event, "regcontents", list);
|
||||||
|
|
||||||
|
// register name or empty string for unnamed operation
|
||||||
buf[0] = (char_u)oap->regname;
|
buf[0] = (char_u)oap->regname;
|
||||||
buf[1] = NUL;
|
buf[1] = NUL;
|
||||||
(void)dict_add_string(v_event, "regname", buf);
|
(void)dict_add_string(v_event, "regname", buf);
|
||||||
|
|
||||||
|
// motion type: inclusive or exclusive
|
||||||
|
(void)dict_add_bool(v_event, "inclusive", oap->inclusive);
|
||||||
|
|
||||||
|
// kind of operation (yank, delete, change)
|
||||||
buf[0] = get_op_char(oap->op_type);
|
buf[0] = get_op_char(oap->op_type);
|
||||||
buf[1] = get_extra_op_char(oap->op_type);
|
buf[1] = get_extra_op_char(oap->op_type);
|
||||||
buf[2] = NUL;
|
buf[2] = NUL;
|
||||||
(void)dict_add_string(v_event, "operator", buf);
|
(void)dict_add_string(v_event, "operator", buf);
|
||||||
|
|
||||||
|
// register type
|
||||||
buf[0] = NUL;
|
buf[0] = NUL;
|
||||||
buf[1] = NUL;
|
buf[1] = NUL;
|
||||||
switch (get_reg_type(oap->regname, ®len))
|
switch (get_reg_type(oap->regname, ®len))
|
||||||
@ -1040,6 +1048,7 @@ yank_do_autocmd(oparg_T *oap, yankreg_T *reg)
|
|||||||
}
|
}
|
||||||
(void)dict_add_string(v_event, "regtype", buf);
|
(void)dict_add_string(v_event, "regtype", buf);
|
||||||
|
|
||||||
|
// selection type - visual or not
|
||||||
(void)dict_add_bool(v_event, "visual", oap->is_VIsual);
|
(void)dict_add_bool(v_event, "visual", oap->is_VIsual);
|
||||||
|
|
||||||
// Lock the dictionary and its keys
|
// Lock the dictionary and its keys
|
||||||
|
@ -1931,28 +1931,48 @@ func Test_TextYankPost()
|
|||||||
|
|
||||||
norm "ayiw
|
norm "ayiw
|
||||||
call assert_equal(
|
call assert_equal(
|
||||||
\{'regcontents': ['foo'], 'regname': 'a', 'operator': 'y', 'regtype': 'v', 'visual': v:false},
|
\ #{regcontents: ['foo'], regname: 'a', operator: 'y',
|
||||||
\g:event)
|
\ regtype: 'v', visual: v:false, inclusive: v:true},
|
||||||
|
\ g:event)
|
||||||
norm y_
|
norm y_
|
||||||
call assert_equal(
|
call assert_equal(
|
||||||
\{'regcontents': ['foo'], 'regname': '', 'operator': 'y', 'regtype': 'V', 'visual': v:false},
|
\ #{regcontents: ['foo'], regname: '', operator: 'y', regtype: 'V',
|
||||||
\g:event)
|
\ visual: v:false, inclusive: v:false},
|
||||||
|
\ g:event)
|
||||||
norm Vy
|
norm Vy
|
||||||
call assert_equal(
|
call assert_equal(
|
||||||
\{'regcontents': ['foo'], 'regname': '', 'operator': 'y', 'regtype': 'V', 'visual': v:true},
|
\ #{regcontents: ['foo'], regname: '', operator: 'y', regtype: 'V',
|
||||||
\g:event)
|
\ visual: v:true, inclusive: v:true},
|
||||||
|
\ g:event)
|
||||||
call feedkeys("\<C-V>y", 'x')
|
call feedkeys("\<C-V>y", 'x')
|
||||||
call assert_equal(
|
call assert_equal(
|
||||||
\{'regcontents': ['f'], 'regname': '', 'operator': 'y', 'regtype': "\x161", 'visual': v:true},
|
\ #{regcontents: ['f'], regname: '', operator: 'y', regtype: "\x161",
|
||||||
\g:event)
|
\ visual: v:true, inclusive: v:true},
|
||||||
|
\ g:event)
|
||||||
norm "xciwbar
|
norm "xciwbar
|
||||||
call assert_equal(
|
call assert_equal(
|
||||||
\{'regcontents': ['foo'], 'regname': 'x', 'operator': 'c', 'regtype': 'v', 'visual': v:false},
|
\ #{regcontents: ['foo'], regname: 'x', operator: 'c', regtype: 'v',
|
||||||
\g:event)
|
\ visual: v:false, inclusive: v:true},
|
||||||
|
\ g:event)
|
||||||
norm "bdiw
|
norm "bdiw
|
||||||
call assert_equal(
|
call assert_equal(
|
||||||
\{'regcontents': ['bar'], 'regname': 'b', 'operator': 'd', 'regtype': 'v', 'visual': v:false},
|
\ #{regcontents: ['bar'], regname: 'b', operator: 'd', regtype: 'v',
|
||||||
\g:event)
|
\ visual: v:false, inclusive: v:true},
|
||||||
|
\ g:event)
|
||||||
|
|
||||||
|
call setline(1, 'foobar')
|
||||||
|
" exclusive motion
|
||||||
|
norm $"ay0
|
||||||
|
call assert_equal(
|
||||||
|
\ #{regcontents: ['fooba'], regname: 'a', operator: 'y', regtype: 'v',
|
||||||
|
\ visual: v:false, inclusive: v:false},
|
||||||
|
\ g:event)
|
||||||
|
" inclusive motion
|
||||||
|
norm 0"ay$
|
||||||
|
call assert_equal(
|
||||||
|
\ #{regcontents: ['foobar'], regname: 'a', operator: 'y', regtype: 'v',
|
||||||
|
\ visual: v:false, inclusive: v:true},
|
||||||
|
\ g:event)
|
||||||
|
|
||||||
call assert_equal({}, v:event)
|
call assert_equal({}, v:event)
|
||||||
|
|
||||||
@ -1965,15 +1985,17 @@ func Test_TextYankPost()
|
|||||||
set clipboard=autoselect
|
set clipboard=autoselect
|
||||||
exe "norm! ggviw\<Esc>"
|
exe "norm! ggviw\<Esc>"
|
||||||
call assert_equal(
|
call assert_equal(
|
||||||
\{'regcontents': ['foobar'], 'regname': '*', 'operator': 'y', 'regtype': 'v', 'visual': v:true},
|
\ #{regcontents: ['foobar'], regname: '*', operator: 'y',
|
||||||
\g:event)
|
\ regtype: 'v', visual: v:true, inclusive: v:false},
|
||||||
|
\ g:event)
|
||||||
|
|
||||||
let @+ = ''
|
let @+ = ''
|
||||||
set clipboard=autoselectplus
|
set clipboard=autoselectplus
|
||||||
exe "norm! ggviw\<Esc>"
|
exe "norm! ggviw\<Esc>"
|
||||||
call assert_equal(
|
call assert_equal(
|
||||||
\{'regcontents': ['foobar'], 'regname': '+', 'operator': 'y', 'regtype': 'v', 'visual': v:true},
|
\ #{regcontents: ['foobar'], regname: '+', operator: 'y',
|
||||||
\g:event)
|
\ regtype: 'v', visual: v:true, inclusive: v:false},
|
||||||
|
\ g:event)
|
||||||
|
|
||||||
set clipboard&vim
|
set clipboard&vim
|
||||||
endif
|
endif
|
||||||
|
@ -746,6 +746,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
4717,
|
||||||
/**/
|
/**/
|
||||||
4716,
|
4716,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user