From 165bc69d1b7f70ca9d5b657f35d0584ecb7b5183 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 21 Jul 2015 17:53:25 +0200 Subject: patch 7.4.793 Problem: Can't specify when not to ring the bell. Solution: Add the 'belloff' option. (Christian Brabandt) --- src/edit.c | 38 +++++++++++++++++++------------------- src/ex_getln.c | 4 ++-- src/hangulin.c | 2 +- src/if_lua.c | 2 +- src/if_mzsch.c | 2 +- src/if_tcl.c | 2 +- src/message.c | 6 +++--- src/misc1.c | 52 ++++++++++++++++++++++++++++------------------------ src/normal.c | 18 +++++++++--------- src/option.c | 9 +++++++++ src/option.h | 31 +++++++++++++++++++++++++++++++ src/proto/misc1.pro | 2 +- src/search.c | 2 +- src/spell.c | 2 +- src/version.c | 2 ++ 15 files changed, 110 insertions(+), 64 deletions(-) (limited to 'src') diff --git a/src/edit.c b/src/edit.c index ca11fd940..5d3bd8279 100644 --- a/src/edit.c +++ b/src/edit.c @@ -982,7 +982,7 @@ do_intr: got_int = FALSE; } else - vim_beep(); + vim_beep(BO_IM); break; } doESCkey: @@ -2210,7 +2210,7 @@ has_compl_option(dict_opt) hl_attr(HLF_E)); if (emsg_silent == 0) { - vim_beep(); + vim_beep(BO_COMPL); setcursor(); out_flush(); ui_delay(2000L, FALSE); @@ -8263,7 +8263,7 @@ ins_reg() } if (regname == NUL || !valid_yank_reg(regname, FALSE)) { - vim_beep(); + vim_beep(BO_REG); need_redraw = TRUE; /* remove the '"' */ } else @@ -8281,7 +8281,7 @@ ins_reg() } else if (insert_reg(regname, literally) == FAIL) { - vim_beep(); + vim_beep(BO_REG); need_redraw = TRUE; /* remove the '"' */ } else if (stop_insert_mode) @@ -8355,7 +8355,7 @@ ins_ctrl_g() break; /* Unknown CTRL-G command, reserved for future expansion. */ - default: vim_beep(); + default: vim_beep(BO_CTRLG); } } @@ -8781,12 +8781,12 @@ ins_del() temp = curwin->w_cursor.col; if (!can_bs(BS_EOL) /* only if "eol" included */ || do_join(2, FALSE, TRUE, FALSE, FALSE) == FAIL) - vim_beep(); + vim_beep(BO_BS); else curwin->w_cursor.col = temp; } - else if (del_char(FALSE) == FAIL) /* delete char under cursor */ - vim_beep(); + else if (del_char(FALSE) == FAIL) /* delete char under cursor */ + vim_beep(BO_BS); did_ai = FALSE; #ifdef FEAT_SMARTINDENT did_si = FALSE; @@ -8861,7 +8861,7 @@ ins_bs(c, mode, inserted_space_p) && curwin->w_cursor.col <= ai_col) || (!can_bs(BS_EOL) && curwin->w_cursor.col == 0)))) { - vim_beep(); + vim_beep(BO_BS); return FALSE; } @@ -9473,7 +9473,7 @@ ins_left() curwin->w_set_curswant = TRUE; /* so we stay at the end */ } else - vim_beep(); + vim_beep(BO_CRSR); } static void @@ -9533,7 +9533,7 @@ ins_s_left() curwin->w_set_curswant = TRUE; } else - vim_beep(); + vim_beep(BO_CRSR); } static void @@ -9583,7 +9583,7 @@ ins_right() curwin->w_cursor.col = 0; } else - vim_beep(); + vim_beep(BO_CRSR); } static void @@ -9602,7 +9602,7 @@ ins_s_right() curwin->w_set_curswant = TRUE; } else - vim_beep(); + vim_beep(BO_CRSR); } static void @@ -9633,7 +9633,7 @@ ins_up(startcol) #endif } else - vim_beep(); + vim_beep(BO_CRSR); } static void @@ -9665,7 +9665,7 @@ ins_pageup() #endif } else - vim_beep(); + vim_beep(BO_CRSR); } static void @@ -9696,7 +9696,7 @@ ins_down(startcol) #endif } else - vim_beep(); + vim_beep(BO_CRSR); } static void @@ -9728,7 +9728,7 @@ ins_pagedown() #endif } else - vim_beep(); + vim_beep(BO_CRSR); } #ifdef FEAT_DND @@ -10146,7 +10146,7 @@ ins_copychar(lnum) if (lnum < 1 || lnum > curbuf->b_ml.ml_line_count) { - vim_beep(); + vim_beep(BO_COPY); return NUL; } @@ -10169,7 +10169,7 @@ ins_copychar(lnum) c = *ptr; #endif if (c == NUL) - vim_beep(); + vim_beep(BO_COPY); return c; } diff --git a/src/ex_getln.c b/src/ex_getln.c index 610ac862e..d7700c8c8 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -900,7 +900,7 @@ getcmdline(firstc, count, indent) firstc != '@'); } else - vim_beep(); + vim_beep(BO_WILD); } #ifdef FEAT_WILDMENU else if (xpc.xp_numfiles == -1) @@ -3710,7 +3710,7 @@ ExpandOne(xp, str, orig, options, mode) if (i < xp->xp_numfiles) { if (!(options & WILD_NO_BEEP)) - vim_beep(); + vim_beep(BO_WILD); break; } } diff --git a/src/hangulin.c b/src/hangulin.c index 4ae16a18e..24cf18002 100644 --- a/src/hangulin.c +++ b/src/hangulin.c @@ -824,7 +824,7 @@ hangul_input_process(s, len) } else if (n == AUTOMATA_ERROR) { - vim_beep(); + vim_beep(BO_HANGUL); return 0; } return len; diff --git a/src/if_lua.c b/src/if_lua.c index 571dd6223..167e86517 100644 --- a/src/if_lua.c +++ b/src/if_lua.c @@ -1354,7 +1354,7 @@ luaV_eval(lua_State *L) static int luaV_beep(lua_State *L UNUSED) { - vim_beep(); + vim_beep(BO_LANG); return 0; } diff --git a/src/if_mzsch.c b/src/if_mzsch.c index 2135446ed..287ab1a1c 100644 --- a/src/if_mzsch.c +++ b/src/if_mzsch.c @@ -1569,7 +1569,7 @@ get_range_end(void *data UNUSED, int argc UNUSED, Scheme_Object **argv UNUSED) static Scheme_Object * mzscheme_beep(void *data UNUSED, int argc UNUSED, Scheme_Object **argv UNUSED) { - vim_beep(); + vim_beep(BO_LANG); return scheme_void; } diff --git a/src/if_tcl.c b/src/if_tcl.c index b798ea59a..1f37e1277 100644 --- a/src/if_tcl.c +++ b/src/if_tcl.c @@ -337,7 +337,7 @@ beepcmd(dummy, interp, objc, objv) Tcl_WrongNumArgs(interp, 1, objv, NULL); return TCL_ERROR; } - vim_beep(); + vim_beep(BO_LANG); return TCL_OK; } diff --git a/src/message.c b/src/message.c index 2ab0a831d..a5fb7e50d 100644 --- a/src/message.c +++ b/src/message.c @@ -2119,8 +2119,8 @@ msg_puts_display(str, maxlen, attr, recurse) msg_screen_putchar(' ', attr); while (msg_col & 7); } - else if (*s == BELL) /* beep (from ":sh") */ - vim_beep(); + else if (*s == BELL) /* beep (from ":sh") */ + vim_beep(BO_SH); else { #ifdef FEAT_MBYTE @@ -2363,7 +2363,7 @@ show_sb_text() * weird, typing a command without output results in one line. */ mp = msg_sb_start(last_msgchunk); if (mp == NULL || mp->sb_prev == NULL) - vim_beep(); + vim_beep(BO_MESS); else { do_more_prompt('G'); diff --git a/src/misc1.c b/src/misc1.c index ceaf36fcb..3c68f8de0 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -3699,46 +3699,50 @@ beep_flush() if (emsg_silent == 0) { flush_buffers(FALSE); - vim_beep(); + vim_beep(BO_ERROR); } } /* - * give a warning for an error + * Give a warning for an error. */ void -vim_beep() +vim_beep(val) + unsigned val; /* one of the BO_ values, e.g., BO_OPER */ { if (emsg_silent == 0) { - if (p_vb + if (!((bo_flags & val) || (bo_flags & BO_ALL))) + { + if (p_vb #ifdef FEAT_GUI - /* While the GUI is starting up the termcap is set for the GUI - * but the output still goes to a terminal. */ - && !(gui.in_use && gui.starting) + /* While the GUI is starting up the termcap is set for the + * GUI but the output still goes to a terminal. */ + && !(gui.in_use && gui.starting) #endif - ) - { - out_str(T_VB); - } - else - { -#ifdef MSDOS - /* - * The number of beeps outputted is reduced to avoid having to wait - * for all the beeps to finish. This is only a problem on systems - * where the beeps don't overlap. - */ - if (beep_count == 0 || beep_count == 10) + ) { - out_char(BELL); - beep_count = 1; + out_str(T_VB); } else - ++beep_count; + { +#ifdef MSDOS + /* + * The number of beeps outputted is reduced to avoid having to + * wait for all the beeps to finish. This is only a problem on + * systems where the beeps don't overlap. + */ + if (beep_count == 0 || beep_count == 10) + { + out_char(BELL); + beep_count = 1; + } + else + ++beep_count; #else - out_char(BELL); + out_char(BELL); #endif + } } /* When 'verbose' is set and we are sourcing a script or executing a diff --git a/src/normal.c b/src/normal.c index d5a011d18..599b12ac1 100644 --- a/src/normal.c +++ b/src/normal.c @@ -1880,7 +1880,7 @@ do_pending_operator(cap, old_col, gui_yank) VIsual_reselect = FALSE; /* don't reselect now */ if (empty_region_error) { - vim_beep(); + vim_beep(BO_OPER); CancelRedo(); } else @@ -1897,7 +1897,7 @@ do_pending_operator(cap, old_col, gui_yank) { if (!gui_yank) { - vim_beep(); + vim_beep(BO_OPER); CancelRedo(); } } @@ -1915,7 +1915,7 @@ do_pending_operator(cap, old_col, gui_yank) VIsual_reselect = FALSE; /* don't reselect now */ if (empty_region_error) { - vim_beep(); + vim_beep(BO_OPER); CancelRedo(); } else @@ -1989,7 +1989,7 @@ do_pending_operator(cap, old_col, gui_yank) case OP_ROT13: if (empty_region_error) { - vim_beep(); + vim_beep(BO_OPER); CancelRedo(); } else @@ -2023,7 +2023,7 @@ do_pending_operator(cap, old_col, gui_yank) #ifdef FEAT_VISUALEXTRA if (empty_region_error) { - vim_beep(); + vim_beep(BO_OPER); CancelRedo(); } else @@ -2056,7 +2056,7 @@ do_pending_operator(cap, old_col, gui_yank) restart_edit = restart_edit_save; } #else - vim_beep(); + vim_beep(BO_OPER); #endif break; @@ -2066,7 +2066,7 @@ do_pending_operator(cap, old_col, gui_yank) if (empty_region_error) #endif { - vim_beep(); + vim_beep(BO_OPER); CancelRedo(); } #ifdef FEAT_VISUALEXTRA @@ -5359,7 +5359,7 @@ nv_exmode(cap) * Ignore 'Q' in Visual mode, just give a beep. */ if (VIsual_active) - vim_beep(); + vim_beep(BO_EX); else if (!checkclearop(cap->oap)) do_exmode(FALSE); } @@ -9055,7 +9055,7 @@ nv_esc(cap) redraw_curbuf_later(INVERTED); } else if (no_reason) - vim_beep(); + vim_beep(BO_ESC); clearop(cap->oap); /* A CTRL-C is often used at the start of a menu. When 'insertmode' is diff --git a/src/option.c b/src/option.c index a356f9613..b0f28d259 100644 --- a/src/option.c +++ b/src/option.c @@ -632,6 +632,9 @@ static struct vimoption {"beautify", "bf", P_BOOL|P_VI_DEF, (char_u *)NULL, PV_NONE, {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"belloff", "bo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_bo, PV_NONE, + {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, {"binary", "bin", P_BOOL|P_VI_DEF|P_RSTAT, (char_u *)&p_bin, PV_BIN, {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, @@ -5323,6 +5326,7 @@ didset_options() (void)opt_strings_flags(p_cmp, p_cmp_values, &cmp_flags, TRUE); #endif (void)opt_strings_flags(p_bkc, p_bkc_values, &bkc_flags, TRUE); + (void)opt_strings_flags(p_bo, p_bo_values, &bo_flags, TRUE); #ifdef FEAT_SESSION (void)opt_strings_flags(p_ssop, p_ssop_values, &ssop_flags, TRUE); (void)opt_strings_flags(p_vop, p_ssop_values, &vop_flags, TRUE); @@ -6997,6 +7001,11 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf, else if (check_opt_strings(p_bs, p_bs_values, TRUE) != OK) errmsg = e_invarg; } + else if (varp == &p_bo) + { + if (opt_strings_flags(p_bo, p_bo_values, &bo_flags, TRUE) != OK) + errmsg = e_invarg; + } #ifdef FEAT_MBYTE /* 'casemap' */ diff --git a/src/option.h b/src/option.h index 819473bef..5e655bba1 100644 --- a/src/option.h +++ b/src/option.h @@ -338,6 +338,37 @@ static char *(p_bkc_values[]) = {"yes", "auto", "no", "breaksymlink", "breakhard # define BKC_BREAKHARDLINK 0x010 EXTERN char_u *p_bdir; /* 'backupdir' */ EXTERN char_u *p_bex; /* 'backupext' */ +EXTERN char_u *p_bo; /* 'belloff' */ +EXTERN unsigned bo_flags; +# ifdef IN_OPTION_C +static char *(p_bo_values[]) = {"all", "backspace", "cursor", "complete", + "copy", "ctrlg", "error", "esc", "ex", + "hangul", "insertmode", "lang", "mess", + "showmatch", "operator", "register", "shell", + "spell", "wildmode", NULL}; +# endif + +/* values for the 'beepon' option */ +#define BO_ALL 0x0001 +#define BO_BS 0x0002 +#define BO_CRSR 0x0004 +#define BO_COMPL 0x0008 +#define BO_COPY 0x0010 +#define BO_CTRLG 0x0020 +#define BO_ERROR 0x0040 +#define BO_ESC 0x0080 +#define BO_EX 0x0100 +#define BO_HANGUL 0x0200 +#define BO_IM 0x0400 +#define BO_LANG 0x0800 +#define BO_MESS 0x1000 +#define BO_MATCH 0x2000 +#define BO_OPER 0x4000 +#define BO_REG 0x8000 +#define BO_SH 0x10000 +#define BO_SPELL 0x20000 +#define BO_WILD 0x40000 + #ifdef FEAT_WILDIGN EXTERN char_u *p_bsk; /* 'backupskip' */ #endif diff --git a/src/proto/misc1.pro b/src/proto/misc1.pro index 5df81c928..96b05723a 100644 --- a/src/proto/misc1.pro +++ b/src/proto/misc1.pro @@ -49,7 +49,7 @@ int get_number __ARGS((int colon, int *mouse_used)); int prompt_for_number __ARGS((int *mouse_used)); void msgmore __ARGS((long n)); void beep_flush __ARGS((void)); -void vim_beep __ARGS((void)); +void vim_beep __ARGS((unsigned val)); void init_homedir __ARGS((void)); void free_homedir __ARGS((void)); void free_users __ARGS((void)); diff --git a/src/search.c b/src/search.c index c9614ea52..4905a49d7 100644 --- a/src/search.c +++ b/src/search.c @@ -2469,7 +2469,7 @@ showmatch(c) } if ((lpos = findmatch(NULL, NUL)) == NULL) /* no match, so beep */ - vim_beep(); + vim_beep(BO_MATCH); else if (lpos->lnum >= curwin->w_topline && lpos->lnum < curwin->w_botline) { if (!curwin->w_p_wrap) diff --git a/src/spell.c b/src/spell.c index 80a7d18fe..5d9c0cceb 100644 --- a/src/spell.c +++ b/src/spell.c @@ -10201,7 +10201,7 @@ spell_suggest(count) * a multi-line selection. */ if (curwin->w_cursor.lnum != VIsual.lnum) { - vim_beep(); + vim_beep(BO_SPELL); return; } badlen = (int)curwin->w_cursor.col - (int)VIsual.col; diff --git a/src/version.c b/src/version.c index c649b6547..fa4cabf8e 100644 --- a/src/version.c +++ b/src/version.c @@ -741,6 +741,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 793, /**/ 792, /**/ -- cgit v1.2.1