forked from aniani/vim
updated for version 7.4.456
Problem: 'backupcopy' is global, cannot write only some files in a
different way.
Solution: Make 'backupcopy' global-local. (Christian Brabandt)
This commit is contained in:
53
src/option.c
53
src/option.c
@@ -56,6 +56,7 @@
|
||||
*/
|
||||
#define PV_AI OPT_BUF(BV_AI)
|
||||
#define PV_AR OPT_BOTH(OPT_BUF(BV_AR))
|
||||
#define PV_BKC OPT_BOTH(OPT_BUF(BV_BKC))
|
||||
#ifdef FEAT_QUICKFIX
|
||||
# define PV_BH OPT_BUF(BV_BH)
|
||||
# define PV_BT OPT_BUF(BV_BT)
|
||||
@@ -582,7 +583,7 @@ static struct vimoption
|
||||
(char_u *)&p_bk, PV_NONE,
|
||||
{(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
|
||||
{"backupcopy", "bkc", P_STRING|P_VIM|P_COMMA|P_NODUP,
|
||||
(char_u *)&p_bkc, PV_NONE,
|
||||
(char_u *)&p_bkc, PV_BKC,
|
||||
#ifdef UNIX
|
||||
{(char_u *)"yes", (char_u *)"auto"}
|
||||
#else
|
||||
@@ -5412,6 +5413,7 @@ check_buf_options(buf)
|
||||
#ifdef FEAT_LISP
|
||||
check_string_option(&buf->b_p_lw);
|
||||
#endif
|
||||
check_string_option(&buf->b_p_bkc);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -5729,16 +5731,25 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf,
|
||||
}
|
||||
|
||||
/* 'backupcopy' */
|
||||
else if (varp == &p_bkc)
|
||||
else if (gvarp == &p_bkc)
|
||||
{
|
||||
if (opt_strings_flags(p_bkc, p_bkc_values, &bkc_flags, TRUE) != OK)
|
||||
char_u *bkc = p_bkc;
|
||||
unsigned int *flags = &bkc_flags;
|
||||
|
||||
if (opt_flags & OPT_LOCAL)
|
||||
{
|
||||
bkc = curbuf->b_p_bkc;
|
||||
flags = &curbuf->b_bkc_flags;
|
||||
}
|
||||
|
||||
if (opt_strings_flags(bkc, p_bkc_values, flags, TRUE) != OK)
|
||||
errmsg = e_invarg;
|
||||
if (((bkc_flags & BKC_AUTO) != 0)
|
||||
+ ((bkc_flags & BKC_YES) != 0)
|
||||
+ ((bkc_flags & BKC_NO) != 0) != 1)
|
||||
if ((((int)*flags & BKC_AUTO) != 0)
|
||||
+ (((int)*flags & BKC_YES) != 0)
|
||||
+ (((int)*flags & BKC_NO) != 0) != 1)
|
||||
{
|
||||
/* Must have exactly one of "auto", "yes" and "no". */
|
||||
(void)opt_strings_flags(oldval, p_bkc_values, &bkc_flags, TRUE);
|
||||
(void)opt_strings_flags(oldval, p_bkc_values, flags, TRUE);
|
||||
errmsg = e_invarg;
|
||||
}
|
||||
}
|
||||
@@ -9025,12 +9036,13 @@ get_option_value_strict(name, numval, stringval, opt_type, from)
|
||||
}
|
||||
|
||||
/*
|
||||
* Iterate over options. First argument is a pointer to a pointer to a structure
|
||||
* inside options[] array, second is option type like in the above function.
|
||||
* Iterate over options. First argument is a pointer to a pointer to a
|
||||
* structure inside options[] array, second is option type like in the above
|
||||
* function.
|
||||
*
|
||||
* If first argument points to NULL it is assumed that iteration just started
|
||||
* If first argument points to NULL it is assumed that iteration just started
|
||||
* and caller needs the very first value.
|
||||
* If first argument points to the end marker function returns NULL and sets
|
||||
* If first argument points to the end marker function returns NULL and sets
|
||||
* first argument to NULL.
|
||||
*
|
||||
* Returns full option name for current option on each call.
|
||||
@@ -9856,6 +9868,10 @@ unset_global_local_option(name, from)
|
||||
case PV_AR:
|
||||
buf->b_p_ar = -1;
|
||||
break;
|
||||
case PV_BKC:
|
||||
clear_string_option(&buf->b_p_bkc);
|
||||
buf->b_bkc_flags = 0;
|
||||
break;
|
||||
case PV_TAGS:
|
||||
clear_string_option(&buf->b_p_tags);
|
||||
break;
|
||||
@@ -9961,6 +9977,7 @@ get_varp_scope(p, opt_flags)
|
||||
#ifdef FEAT_LISP
|
||||
case PV_LW: return (char_u *)&(curbuf->b_p_lw);
|
||||
#endif
|
||||
case PV_BKC: return (char_u *)&(curbuf->b_p_bkc);
|
||||
}
|
||||
return NULL; /* "cannot happen" */
|
||||
}
|
||||
@@ -9993,6 +10010,8 @@ get_varp(p)
|
||||
? (char_u *)&(curbuf->b_p_ar) : p->var;
|
||||
case PV_TAGS: return *curbuf->b_p_tags != NUL
|
||||
? (char_u *)&(curbuf->b_p_tags) : p->var;
|
||||
case PV_BKC: return *curbuf->b_p_bkc != NUL
|
||||
? (char_u *)&(curbuf->b_p_bkc) : p->var;
|
||||
#ifdef FEAT_FIND_ID
|
||||
case PV_DEF: return *curbuf->b_p_def != NUL
|
||||
? (char_u *)&(curbuf->b_p_def) : p->var;
|
||||
@@ -10585,6 +10604,8 @@ buf_copy_options(buf, flags)
|
||||
* are not copied, start using the global value */
|
||||
buf->b_p_ar = -1;
|
||||
buf->b_p_ul = NO_LOCAL_UNDOLEVEL;
|
||||
buf->b_p_bkc = empty_option;
|
||||
buf->b_bkc_flags = 0;
|
||||
#ifdef FEAT_QUICKFIX
|
||||
buf->b_p_gp = empty_option;
|
||||
buf->b_p_mp = empty_option;
|
||||
@@ -12052,3 +12073,13 @@ briopt_check(wp)
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Get the local or global value of 'backupcopy'.
|
||||
*/
|
||||
unsigned int
|
||||
get_bkc_value(buf)
|
||||
buf_T *buf;
|
||||
{
|
||||
return buf->b_bkc_flags ? buf->b_bkc_flags : bkc_flags;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user