mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
commit
bac6fb41b2
@ -921,7 +921,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
|
||||
*'backupcopy'* *'bkc'*
|
||||
'backupcopy' 'bkc' string (Vi default for Unix: "yes", otherwise: "auto")
|
||||
global
|
||||
global or local to buffer |global-local|
|
||||
{not in Vi}
|
||||
When writing a file and a backup is made, this option tells how it's
|
||||
done. This is a comma separated list of words.
|
||||
|
@ -1530,6 +1530,7 @@ void free_buf_options(buf_T *buf, int free_p_ff)
|
||||
buf->b_p_ar = -1;
|
||||
buf->b_p_ul = NO_LOCAL_UNDOLEVEL;
|
||||
clear_string_option(&buf->b_p_lw);
|
||||
clear_string_option(&buf->b_p_bkc);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -596,6 +596,8 @@ struct file_buffer {
|
||||
|
||||
int b_p_ai; /* 'autoindent' */
|
||||
int b_p_ai_nopaste; /* b_p_ai saved for paste mode */
|
||||
char_u *b_p_bkc; ///< 'backupcopy'
|
||||
unsigned int b_bkc_flags; ///< flags for 'backupcopy'
|
||||
int b_p_ci; /* 'copyindent' */
|
||||
int b_p_bin; /* 'binary' */
|
||||
int b_p_bomb; /* 'bomb' */
|
||||
|
@ -2313,6 +2313,7 @@ buf_write (
|
||||
#endif
|
||||
int write_undo_file = FALSE;
|
||||
context_sha256_T sha_ctx;
|
||||
unsigned int bkc = get_bkc_value(buf);
|
||||
|
||||
if (fname == NULL || *fname == NUL) /* safety check */
|
||||
return FAIL;
|
||||
@ -2701,9 +2702,9 @@ buf_write (
|
||||
if (!(append && *p_pm == NUL) && !filtering && perm >= 0 && dobackup) {
|
||||
FileInfo file_info;
|
||||
|
||||
if ((bkc_flags & BKC_YES) || append) { /* "yes" */
|
||||
if ((bkc & BKC_YES) || append) { /* "yes" */
|
||||
backup_copy = TRUE;
|
||||
} else if ((bkc_flags & BKC_AUTO)) { /* "auto" */
|
||||
} else if ((bkc & BKC_AUTO)) { /* "auto" */
|
||||
int i;
|
||||
|
||||
# ifdef UNIX
|
||||
@ -2758,19 +2759,19 @@ buf_write (
|
||||
/*
|
||||
* Break symlinks and/or hardlinks if we've been asked to.
|
||||
*/
|
||||
if ((bkc_flags & BKC_BREAKSYMLINK) || (bkc_flags & BKC_BREAKHARDLINK)) {
|
||||
if ((bkc & BKC_BREAKSYMLINK) || (bkc & BKC_BREAKHARDLINK)) {
|
||||
# ifdef UNIX
|
||||
bool file_info_link_ok = os_fileinfo_link((char *)fname, &file_info);
|
||||
|
||||
/* Symlinks. */
|
||||
if ((bkc_flags & BKC_BREAKSYMLINK)
|
||||
if ((bkc & BKC_BREAKSYMLINK)
|
||||
&& file_info_link_ok
|
||||
&& !os_fileinfo_id_equal(&file_info, &file_info_old)) {
|
||||
backup_copy = FALSE;
|
||||
}
|
||||
|
||||
/* Hardlinks. */
|
||||
if ((bkc_flags & BKC_BREAKHARDLINK)
|
||||
if ((bkc & BKC_BREAKHARDLINK)
|
||||
&& os_fileinfo_hardlinks(&file_info_old) > 1
|
||||
&& (!file_info_link_ok
|
||||
|| os_fileinfo_id_equal(&file_info, &file_info_old))) {
|
||||
|
@ -103,6 +103,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))
|
||||
# define PV_BH OPT_BUF(BV_BH)
|
||||
# define PV_BT OPT_BUF(BV_BT)
|
||||
# define PV_EFM OPT_BOTH(OPT_BUF(BV_EFM))
|
||||
@ -438,7 +439,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
|
||||
@ -3526,6 +3527,7 @@ void check_buf_options(buf_T *buf)
|
||||
check_string_option(&buf->b_p_dict);
|
||||
check_string_option(&buf->b_p_tsr);
|
||||
check_string_option(&buf->b_p_lw);
|
||||
check_string_option(&buf->b_p_bkc);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -3782,14 +3784,24 @@ did_set_string_option (
|
||||
redraw_later_clear();
|
||||
}
|
||||
/* 'backupcopy' */
|
||||
else if (varp == &p_bkc) {
|
||||
if (opt_strings_flags(p_bkc, p_bkc_values, &bkc_flags, TRUE) != OK)
|
||||
else if (gvarp == &p_bkc) {
|
||||
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 (((*flags & BKC_AUTO) != 0)
|
||||
+ ((*flags & BKC_YES) != 0)
|
||||
+ ((*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;
|
||||
}
|
||||
}
|
||||
@ -6518,6 +6530,10 @@ void unset_global_local_option(char *name, void *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;
|
||||
@ -6581,6 +6597,7 @@ static char_u *get_varp_scope(struct vimoption *p, int opt_flags)
|
||||
case PV_STL: return (char_u *)&(curwin->w_p_stl);
|
||||
case PV_UL: return (char_u *)&(curbuf->b_p_ul);
|
||||
case PV_LW: return (char_u *)&(curbuf->b_p_lw);
|
||||
case PV_BKC: return (char_u *)&(curbuf->b_p_bkc);
|
||||
}
|
||||
return NULL; /* "cannot happen" */
|
||||
}
|
||||
@ -6610,6 +6627,8 @@ static char_u *get_varp(struct vimoption *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;
|
||||
case PV_DEF: return *curbuf->b_p_def != NUL
|
||||
? (char_u *)&(curbuf->b_p_def) : p->var;
|
||||
case PV_INC: return *curbuf->b_p_inc != NUL
|
||||
@ -6975,6 +6994,8 @@ void buf_copy_options(buf_T *buf, int 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;
|
||||
buf->b_p_gp = empty_option;
|
||||
buf->b_p_mp = empty_option;
|
||||
buf->b_p_efm = empty_option;
|
||||
@ -8116,3 +8137,10 @@ static bool briopt_check(win_T *wp)
|
||||
return true;
|
||||
}
|
||||
|
||||
/// Get the local or global value of 'backupcopy'.
|
||||
///
|
||||
/// @param buf The buffer.
|
||||
unsigned int get_bkc_value(buf_T *buf)
|
||||
{
|
||||
return buf->b_bkc_flags ? buf->b_bkc_flags : bkc_flags;
|
||||
}
|
||||
|
@ -292,7 +292,7 @@ EXTERN char_u *p_bs; /* 'backspace' */
|
||||
EXTERN char_u *p_bg; /* 'background' */
|
||||
EXTERN int p_bk; /* 'backup' */
|
||||
EXTERN char_u *p_bkc; /* 'backupcopy' */
|
||||
EXTERN unsigned bkc_flags;
|
||||
EXTERN unsigned int bkc_flags; ///< flags from 'backupcopy'
|
||||
#ifdef IN_OPTION_C
|
||||
static char *(p_bkc_values[]) =
|
||||
{"yes", "auto", "no", "breaksymlink", "breakhardlink", NULL};
|
||||
@ -643,6 +643,7 @@ enum {
|
||||
BV_AI = 0
|
||||
, BV_AR
|
||||
, BV_BH
|
||||
, BV_BKC
|
||||
, BV_BT
|
||||
, BV_EFM
|
||||
, BV_GP
|
||||
|
@ -281,7 +281,7 @@ static int included_patches[] = {
|
||||
//459 NA
|
||||
//458,
|
||||
//457,
|
||||
//456,
|
||||
456,
|
||||
455,
|
||||
454,
|
||||
//453 NA
|
||||
|
Loading…
Reference in New Issue
Block a user