mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 9.0.0133: virtual text after line moves to joined line
Problem: Virtual text after line moves to joined line. (Yegappan Lakshmanan) Solution: When joining lines only keep virtual text after the last line.
This commit is contained in:
parent
09ff4b54fb
commit
e175dc6911
@ -2012,7 +2012,8 @@ do_join(
|
|||||||
{
|
{
|
||||||
curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
|
curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
|
||||||
#ifdef FEAT_PROP_POPUP
|
#ifdef FEAT_PROP_POPUP
|
||||||
propcount += count_props((linenr_T) (curwin->w_cursor.lnum + t), t > 0);
|
propcount += count_props((linenr_T) (curwin->w_cursor.lnum + t),
|
||||||
|
t > 0, t + 1 == count);
|
||||||
#endif
|
#endif
|
||||||
if (t == 0 && setmark && (cmdmod.cmod_flags & CMOD_LOCKMARKS) == 0)
|
if (t == 0 && setmark && (cmdmod.cmod_flags & CMOD_LOCKMARKS) == 0)
|
||||||
{
|
{
|
||||||
@ -2147,7 +2148,6 @@ do_join(
|
|||||||
curwin->w_cursor.lnum + t, t == count - 1,
|
curwin->w_cursor.lnum + t, t == count - 1,
|
||||||
(long)(cend - newp), spaces_removed);
|
(long)(cend - newp), spaces_removed);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (t == 0)
|
if (t == 0)
|
||||||
break;
|
break;
|
||||||
curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
|
curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
|
||||||
|
@ -4,7 +4,7 @@ void f_prop_add(typval_T *argvars, typval_T *rettv);
|
|||||||
void f_prop_add_list(typval_T *argvars, typval_T *rettv);
|
void f_prop_add_list(typval_T *argvars, typval_T *rettv);
|
||||||
int prop_add_common(linenr_T start_lnum, colnr_T start_col, dict_T *dict, buf_T *default_buf, typval_T *dict_arg);
|
int prop_add_common(linenr_T start_lnum, colnr_T start_col, dict_T *dict, buf_T *default_buf, typval_T *dict_arg);
|
||||||
int get_text_props(buf_T *buf, linenr_T lnum, char_u **props, int will_change);
|
int get_text_props(buf_T *buf, linenr_T lnum, char_u **props, int will_change);
|
||||||
int count_props(linenr_T lnum, int only_starting);
|
int count_props(linenr_T lnum, int only_starting, int last_line);
|
||||||
int find_visible_prop(win_T *wp, int type_id, int id, textprop_T *prop, linenr_T *found_lnum);
|
int find_visible_prop(win_T *wp, int type_id, int id, textprop_T *prop, linenr_T *found_lnum);
|
||||||
proptype_T *text_prop_type_by_id(buf_T *buf, int id);
|
proptype_T *text_prop_type_by_id(buf_T *buf, int id);
|
||||||
void f_prop_clear(typval_T *argvars, typval_T *rettv);
|
void f_prop_clear(typval_T *argvars, typval_T *rettv);
|
||||||
@ -20,5 +20,5 @@ void clear_global_prop_types(void);
|
|||||||
void clear_buf_prop_types(buf_T *buf);
|
void clear_buf_prop_types(buf_T *buf);
|
||||||
int adjust_prop_columns(linenr_T lnum, colnr_T col, int bytes_added, int flags);
|
int adjust_prop_columns(linenr_T lnum, colnr_T col, int bytes_added, int flags);
|
||||||
void adjust_props_for_split(linenr_T lnum_props, linenr_T lnum_top, int kept, int deleted);
|
void adjust_props_for_split(linenr_T lnum_props, linenr_T lnum_top, int kept, int deleted);
|
||||||
void prepend_joined_props(char_u *new_props, int propcount, int *props_remaining, linenr_T lnum, int add_all, long col, int removed);
|
void prepend_joined_props(char_u *new_props, int propcount, int *props_remaining, linenr_T lnum, int last_line, long col, int removed);
|
||||||
/* vim: set ft=c : */
|
/* vim: set ft=c : */
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
|o+0&#ffffff0|n|e| |t|w|o| @52
|
||||||
|
|t|h|r|e@1| |f|o|u|r| +0&#ffff4012|F|O|U|R| +0&#ffffff0@44
|
||||||
|
|a| |b| |c| |d| |e> |f| +0&#ffff4012|F@2| +0&#ffffff0@44
|
||||||
|
|~+0#4040ff13&| @58
|
||||||
|
|~| @58
|
||||||
|
| +0#0000000&@41|3|,|1|0| @9|A|l@1|
|
@ -2243,6 +2243,32 @@ func Test_props_with_text_after()
|
|||||||
call delete('XscriptPropsWithTextAfter')
|
call delete('XscriptPropsWithTextAfter')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_props_with_text_after_joined()
|
||||||
|
CheckRunVimInTerminal
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
call setline(1, ['one', 'two', 'three', 'four'])
|
||||||
|
call prop_type_add('afterprop', #{highlight: 'Search'})
|
||||||
|
call prop_add(1, 0, #{type: 'afterprop', text: ' ONE', text_align: 'after'})
|
||||||
|
call prop_add(4, 0, #{type: 'afterprop', text: ' FOUR', text_align: 'after'})
|
||||||
|
normal ggJ
|
||||||
|
normal GkJ
|
||||||
|
|
||||||
|
call setline(3, ['a', 'b', 'c', 'd', 'e', 'f'])
|
||||||
|
call prop_add(3, 0, #{type: 'afterprop', text: ' AAA', text_align: 'after'})
|
||||||
|
call prop_add(5, 0, #{type: 'afterprop', text: ' CCC', text_align: 'after'})
|
||||||
|
call prop_add(7, 0, #{type: 'afterprop', text: ' EEE', text_align: 'after'})
|
||||||
|
call prop_add(8, 0, #{type: 'afterprop', text: ' FFF', text_align: 'after'})
|
||||||
|
normal 3G6J
|
||||||
|
END
|
||||||
|
call writefile(lines, 'XscriptPropsWithTextAfterJoined')
|
||||||
|
let buf = RunVimInTerminal('-S XscriptPropsWithTextAfterJoined', #{rows: 6, cols: 60})
|
||||||
|
call VerifyScreenDump(buf, 'Test_prop_with_text_after_joined_1', {})
|
||||||
|
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
call delete('XscriptPropsWithTextAfterJoined')
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_removed_prop_with_text_cleans_up_array()
|
func Test_removed_prop_with_text_cleans_up_array()
|
||||||
new
|
new
|
||||||
call setline(1, 'some text here')
|
call setline(1, 'some text here')
|
||||||
|
@ -600,7 +600,7 @@ get_text_props(buf_T *buf, linenr_T lnum, char_u **props, int will_change)
|
|||||||
* be considered.
|
* be considered.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
count_props(linenr_T lnum, int only_starting)
|
count_props(linenr_T lnum, int only_starting, int last_line)
|
||||||
{
|
{
|
||||||
char_u *props;
|
char_u *props;
|
||||||
int proplen = get_text_props(curbuf, lnum, &props, 0);
|
int proplen = get_text_props(curbuf, lnum, &props, 0);
|
||||||
@ -608,13 +608,16 @@ count_props(linenr_T lnum, int only_starting)
|
|||||||
int i;
|
int i;
|
||||||
textprop_T prop;
|
textprop_T prop;
|
||||||
|
|
||||||
if (only_starting)
|
for (i = 0; i < proplen; ++i)
|
||||||
for (i = 0; i < proplen; ++i)
|
{
|
||||||
{
|
mch_memmove(&prop, props + i * sizeof(prop), sizeof(prop));
|
||||||
mch_memmove(&prop, props + i * sizeof(prop), sizeof(prop));
|
// A prop is droppend when in the first line and it continues from the
|
||||||
if (prop.tp_flags & TP_FLAG_CONT_PREV)
|
// previous line, or when not in the last line and it is virtual text
|
||||||
--result;
|
// after the line.
|
||||||
}
|
if ((only_starting && (prop.tp_flags & TP_FLAG_CONT_PREV))
|
||||||
|
|| (!last_line && prop.tp_col == MAXCOL))
|
||||||
|
--result;
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2024,7 +2027,7 @@ prepend_joined_props(
|
|||||||
int propcount,
|
int propcount,
|
||||||
int *props_remaining,
|
int *props_remaining,
|
||||||
linenr_T lnum,
|
linenr_T lnum,
|
||||||
int add_all,
|
int last_line,
|
||||||
long col,
|
long col,
|
||||||
int removed)
|
int removed)
|
||||||
{
|
{
|
||||||
@ -2038,12 +2041,14 @@ prepend_joined_props(
|
|||||||
int end;
|
int end;
|
||||||
|
|
||||||
mch_memmove(&prop, props + i * sizeof(prop), sizeof(prop));
|
mch_memmove(&prop, props + i * sizeof(prop), sizeof(prop));
|
||||||
|
if (prop.tp_col == MAXCOL && !last_line)
|
||||||
|
continue; // drop property with text after the line
|
||||||
end = !(prop.tp_flags & TP_FLAG_CONT_NEXT);
|
end = !(prop.tp_flags & TP_FLAG_CONT_NEXT);
|
||||||
|
|
||||||
adjust_prop(&prop, 0, -removed, 0); // Remove leading spaces
|
adjust_prop(&prop, 0, -removed, 0); // Remove leading spaces
|
||||||
adjust_prop(&prop, -1, col, 0); // Make line start at its final column
|
adjust_prop(&prop, -1, col, 0); // Make line start at its final column
|
||||||
|
|
||||||
if (add_all || end)
|
if (last_line || end)
|
||||||
mch_memmove(new_props + --(*props_remaining) * sizeof(prop),
|
mch_memmove(new_props + --(*props_remaining) * sizeof(prop),
|
||||||
&prop, sizeof(prop));
|
&prop, sizeof(prop));
|
||||||
else
|
else
|
||||||
|
@ -735,6 +735,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 */
|
||||||
|
/**/
|
||||||
|
133,
|
||||||
/**/
|
/**/
|
||||||
132,
|
132,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user