{props} is a dictionary with these fields:
id remove text properties with this ID
type remove text properties with this type name
+ both "id" and "type" must both match
bufnr use this buffer instead of the current one
all when TRUE remove all matching text properties,
not just the first one
call DeletePropTypes()
bwipe!
+
+ new
+ call AddPropTypes()
+ call SetupPropsInFirstLine()
+ call prop_add(1, 6, {'length': 2, 'id': 11, 'type': 'three'})
+ let props = Get_expected_props()
+ call insert(props, {'col': 6, 'length': 2, 'id': 11, 'type': 'three', 'start': 1, 'end': 1}, 3)
+ call assert_equal(props, prop_list(1))
+ call assert_equal(1, prop_remove({'type': 'three', 'id': 11, 'both': 1, 'all': 1}, 1))
+ unlet props[3]
+ call assert_equal(props, prop_list(1))
+
+ call assert_fails("call prop_remove({'id': 11, 'both': 1})", 'E860')
+ call assert_fails("call prop_remove({'type': 'three', 'both': 1})", 'E860')
+
+ call DeletePropTypes()
+ bwipe!
endfunc
func SetupOneLine()
int do_all = FALSE;
int id = -1;
int type_id = -1;
+ int both = FALSE;
rettv->vval.v_number = 0;
if (argvars[0].v_type != VAR_DICT || argvars[0].vval.v_dict == NULL)
return;
type_id = type->pt_id;
}
+ if (dict_find(dict, (char_u *)"both", -1) != NULL)
+ both = dict_get_number(dict, (char_u *)"both");
if (id == -1 && type_id == -1)
{
emsg(_("E968: Need at least one of 'id' or 'type'"));
return;
}
+ if (both && (id == -1 || type_id == -1))
+ {
+ emsg(_("E860: Need 'id' and 'type' with 'both'"));
+ return;
+ }
if (end == 0)
end = buf->b_ml.ml_line_count;
size_t taillen;
mch_memmove(&textprop, cur_prop, sizeof(textprop_T));
- if (textprop.tp_id == id || textprop.tp_type == type_id)
+ if (both ? textprop.tp_id == id && textprop.tp_type == type_id
+ : textprop.tp_id == id || textprop.tp_type == type_id)
{
if (!(buf->b_ml.ml_flags & ML_LINE_DIRTY))
{
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 357,
/**/
356,
/**/