Skip to content

Commit 946ce5a

Browse files
committed
updated for version 7.4.082
Problem: Using "gf" in a changed buffer suggests adding "!", which is not possible. (Tim Chase) Solution: Pass a flag to check_changed() wether adding ! make sense.
1 parent bac6698 commit 946ce5a

File tree

7 files changed

+53
-21
lines changed

7 files changed

+53
-21
lines changed

src/ex_cmds.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3253,8 +3253,10 @@ do_ecmd(fnum, ffname, sfname, eap, newlnum, flags, oldwin)
32533253
if ( ((!other_file && !(flags & ECMD_OLDBUF))
32543254
|| (curbuf->b_nwindows == 1
32553255
&& !(flags & (ECMD_HIDE | ECMD_ADDBUF))))
3256-
&& check_changed(curbuf, p_awa, !other_file,
3257-
(flags & ECMD_FORCEIT), FALSE))
3256+
&& check_changed(curbuf, (p_awa ? CCGD_AW : 0)
3257+
| (other_file ? 0 : CCGD_MULTWIN)
3258+
| ((flags & ECMD_FORCEIT) ? CCGD_FORCEIT : 0)
3259+
| (eap == NULL ? 0 : CCGD_EXCMD)))
32583260
{
32593261
if (fnum == 0 && other_file && ffname != NULL)
32603262
(void)setaltfname(ffname, sfname, newlnum < 0 ? 0 : newlnum);
@@ -7664,7 +7666,7 @@ ex_drop(eap)
76647666
# ifdef FEAT_WINDOWS
76657667
++emsg_off;
76667668
# endif
7667-
split = check_changed(curbuf, TRUE, FALSE, FALSE, FALSE);
7669+
split = check_changed(curbuf, CCGD_AW | CCGD_EXCMD);
76687670
# ifdef FEAT_WINDOWS
76697671
--emsg_off;
76707672
# else

src/ex_cmds2.c

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1436,28 +1436,28 @@ autowrite_all()
14361436
}
14371437

14381438
/*
1439-
* return TRUE if buffer was changed and cannot be abandoned.
1439+
* Return TRUE if buffer was changed and cannot be abandoned.
1440+
* For flags use the CCGD_ values.
14401441
*/
14411442
int
1442-
check_changed(buf, checkaw, mult_win, forceit, allbuf)
1443+
check_changed(buf, flags)
14431444
buf_T *buf;
1444-
int checkaw; /* do autowrite if buffer was changed */
1445-
int mult_win; /* check also when several wins for the buf */
1446-
int forceit;
1447-
int allbuf UNUSED; /* may write all buffers */
1445+
int flags;
14481446
{
1447+
int forceit = (flags & CCGD_FORCEIT);
1448+
14491449
if ( !forceit
14501450
&& bufIsChanged(buf)
1451-
&& (mult_win || buf->b_nwindows <= 1)
1452-
&& (!checkaw || autowrite(buf, forceit) == FAIL))
1451+
&& ((flags & CCGD_MULTWIN) || buf->b_nwindows <= 1)
1452+
&& (!(flags & CCGD_AW) || autowrite(buf, forceit) == FAIL))
14531453
{
14541454
#if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
14551455
if ((p_confirm || cmdmod.confirm) && p_write)
14561456
{
14571457
buf_T *buf2;
14581458
int count = 0;
14591459

1460-
if (allbuf)
1460+
if (flags & CCGD_ALLBUF)
14611461
for (buf2 = firstbuf; buf2 != NULL; buf2 = buf2->b_next)
14621462
if (bufIsChanged(buf2)
14631463
&& (buf2->b_ffname != NULL
@@ -1480,7 +1480,10 @@ check_changed(buf, checkaw, mult_win, forceit, allbuf)
14801480
return bufIsChanged(buf);
14811481
}
14821482
#endif
1483-
EMSG(_(e_nowrtmsg));
1483+
if (flags & CCGD_EXCMD)
1484+
EMSG(_(e_nowrtmsg));
1485+
else
1486+
EMSG(_(e_nowrtmsg_nobang));
14841487
return TRUE;
14851488
}
14861489
return FALSE;
@@ -1690,7 +1693,9 @@ check_changed_any(hidden)
16901693
{
16911694
/* Try auto-writing the buffer. If this fails but the buffer no
16921695
* longer exists it's not changed, that's OK. */
1693-
if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
1696+
if (check_changed(buf, (p_awa ? CCGD_AW : 0)
1697+
| CCGD_MULTWIN
1698+
| CCGD_ALLBUF) && buf_valid(buf))
16941699
break; /* didn't save - still changes */
16951700
}
16961701
}
@@ -2274,7 +2279,10 @@ do_argfile(eap, argn)
22742279
vim_free(p);
22752280
}
22762281
if ((!P_HID(curbuf) || !other)
2277-
&& check_changed(curbuf, TRUE, !other, eap->forceit, FALSE))
2282+
&& check_changed(curbuf, CCGD_AW
2283+
| (other ? 0 : CCGD_MULTWIN)
2284+
| (eap->forceit ? CCGD_FORCEIT : 0)
2285+
| CCGD_EXCMD))
22782286
return;
22792287
}
22802288

@@ -2315,7 +2323,9 @@ ex_next(eap)
23152323
*/
23162324
if ( P_HID(curbuf)
23172325
|| eap->cmdidx == CMD_snext
2318-
|| !check_changed(curbuf, TRUE, FALSE, eap->forceit, FALSE))
2326+
|| !check_changed(curbuf, CCGD_AW
2327+
| (eap->forceit ? CCGD_FORCEIT : 0)
2328+
| CCGD_EXCMD))
23192329
{
23202330
if (*eap->arg != NUL) /* redefine file list */
23212331
{
@@ -2458,7 +2468,9 @@ ex_listdo(eap)
24582468
if (eap->cmdidx == CMD_windo
24592469
|| eap->cmdidx == CMD_tabdo
24602470
|| P_HID(curbuf)
2461-
|| !check_changed(curbuf, TRUE, FALSE, eap->forceit, FALSE))
2471+
|| !check_changed(curbuf, CCGD_AW
2472+
| (eap->forceit ? CCGD_FORCEIT : 0)
2473+
| CCGD_EXCMD))
24622474
{
24632475
/* start at the first argument/window/buffer */
24642476
i = 0;

src/ex_docmd.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6565,7 +6565,9 @@ ex_quit(eap)
65656565
if (check_more(FALSE, eap->forceit) == OK && only_one_window())
65666566
exiting = TRUE;
65676567
if ((!P_HID(curbuf)
6568-
&& check_changed(curbuf, p_awa, FALSE, eap->forceit, FALSE))
6568+
&& check_changed(curbuf, (p_awa ? CCGD_AW : 0)
6569+
| (eap->forceit ? CCGD_FORCEIT : 0)
6570+
| CCGD_EXCMD))
65696571
|| check_more(TRUE, eap->forceit) == FAIL
65706572
|| (only_one_window() && check_changed_any(eap->forceit)))
65716573
{
@@ -7099,7 +7101,7 @@ handle_drop(filec, filev, split)
70997101
if (!P_HID(curbuf) && !split)
71007102
{
71017103
++emsg_off;
7102-
split = check_changed(curbuf, TRUE, FALSE, FALSE, FALSE);
7104+
split = check_changed(curbuf, CCGD_AW);
71037105
--emsg_off;
71047106
}
71057107
if (split)
@@ -7361,7 +7363,11 @@ ex_recover(eap)
73617363
{
73627364
/* Set recoverymode right away to avoid the ATTENTION prompt. */
73637365
recoverymode = TRUE;
7364-
if (!check_changed(curbuf, p_awa, TRUE, eap->forceit, FALSE)
7366+
if (!check_changed(curbuf, (p_awa ? CCGD_AW : 0)
7367+
| CCGD_MULTWIN
7368+
| (eap->forceit ? CCGD_FORCEIT : 0)
7369+
| CCGD_EXCMD)
7370+
73657371
&& (*eap->arg == NUL
73667372
|| setfname(curbuf, eap->arg, NULL, TRUE) == OK))
73677373
ml_recover();

src/globals.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1490,6 +1490,7 @@ EXTERN char_u e_notmp[] INIT(= N_("E483: Can't get temp file name"));
14901490
EXTERN char_u e_notopen[] INIT(= N_("E484: Can't open file %s"));
14911491
EXTERN char_u e_notread[] INIT(= N_("E485: Can't read file %s"));
14921492
EXTERN char_u e_nowrtmsg[] INIT(= N_("E37: No write since last change (add ! to override)"));
1493+
EXTERN char_u e_nowrtmsg_nobang[] INIT(= N_("E37: No write since last change"));
14931494
EXTERN char_u e_null[] INIT(= N_("E38: Null argument"));
14941495
#ifdef FEAT_DIGRAPHS
14951496
EXTERN char_u e_number_exp[] INIT(= N_("E39: Number expected"));

src/proto/ex_cmds2.pro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ void prof_inchar_exit __ARGS((void));
3535
int prof_def_func __ARGS((void));
3636
int autowrite __ARGS((buf_T *buf, int forceit));
3737
void autowrite_all __ARGS((void));
38-
int check_changed __ARGS((buf_T *buf, int checkaw, int mult_win, int forceit, int allbuf));
38+
int check_changed __ARGS((buf_T *buf, int flags));
3939
void browse_save_fname __ARGS((buf_T *buf));
4040
void dialog_changed __ARGS((buf_T *buf, int checkall));
4141
int can_abandon __ARGS((buf_T *buf, int forceit));

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -738,6 +738,8 @@ static char *(features[]) =
738738

739739
static int included_patches[] =
740740
{ /* Add new patch number below this line */
741+
/**/
742+
82,
741743
/**/
742744
81,
743745
/**/

src/vim.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1175,6 +1175,15 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
11751175
#define RESIZE_HOR 2 /* resize horizontally */
11761176
#define RESIZE_BOTH 15 /* resize in both directions */
11771177

1178+
/*
1179+
* flags for check_changed()
1180+
*/
1181+
#define CCGD_AW 1 /* do autowrite if buffer was changed */
1182+
#define CCGD_MULTWIN 2 /* check also when several wins for the buf */
1183+
#define CCGD_FORCEIT 4 /* ! used */
1184+
#define CCGD_ALLBUF 8 /* may write all buffers */
1185+
#define CCGD_EXCMD 16 /* may suggest using ! */
1186+
11781187
/*
11791188
* "flags" values for option-setting functions.
11801189
* When OPT_GLOBAL and OPT_LOCAL are both missing, set both local and global

0 commit comments

Comments
 (0)