]> granicus.if.org Git - vim/commitdiff
patch 7.4.793 v7.4.793
authorBram Moolenaar <Bram@vim.org>
Tue, 21 Jul 2015 15:53:25 +0000 (17:53 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 21 Jul 2015 15:53:25 +0000 (17:53 +0200)
Problem:    Can't specify when not to ring the bell.
Solution:   Add the 'belloff' option. (Christian Brabandt)

16 files changed:
runtime/doc/options.txt
src/edit.c
src/ex_getln.c
src/hangulin.c
src/if_lua.c
src/if_mzsch.c
src/if_tcl.c
src/message.c
src/misc1.c
src/normal.c
src/option.c
src/option.h
src/proto/misc1.pro
src/search.c
src/spell.c
src/version.c

index 3b3e10405ff642bdde0236b37d3da51942924f0c..8a6316fab35215ec4ba7d6b18c852e99aceeaaca 100644 (file)
@@ -1124,6 +1124,47 @@ A jump table for the options with a short description can be found at |Q_op|.
        expression evaluates to a |List| this is equal to using each List item
        as a string and putting "\n" in between them.
 
+                                               *'belloff'* *'bo'*
+'belloff' 'bo'         string  (default "")
+                       global
+                       {not in Vi}
+       Specifies for which events the bell will not be rung. It is a comma
+       separated list of items. For each item that is present, the bell
+       will be silenced. This is most useful to specify specific events in
+       insert mode to be silenced.
+
+       item        meaning when present        ~
+       all         All events.
+       backspace   When hitting <BS> or <Del> and deleting results in an
+                   error.
+       cursor      Fail to move around using the cursor keys or
+                   <PageUp>/<PageDown> in |Insert-mode|.
+       complete    Error occurred when using |i_CTRL-X_CTRL-K| or
+                   |i_CTRL-X_CTRL-T|.
+       copy        Cannot copy char from insert mode using |i_CTRL-Y| or
+                   |i_CTRL-E|.
+       ctrlg       Unknown Char after <C-G> in Insert mode.
+       error       Other Error occurred (e.g. try to join last line)
+                   (mostly used in |Normal-mode| or |Cmdline-mode|).
+       esc         hitting <Esc> in |Normal-mode|.
+       ex          In |Visual-mode|, hitting |Q| results in an error.
+       hangul      Error occurred when using hangul input.
+       insertmode  Pressing <Esc> in 'insertmode'.
+       lang        Calling the beep module for Lua/Mzscheme/TCL.
+       mess        No output available for |g<|.
+       showmatch   Error occurred for 'showmatch' function.
+       operator    Empty region error |cpo-E|.
+       register    Unknown register after <C-R> in |Insert-mode|.
+       shell       Bell from shell output |:!|.
+       spell       Error happened on spell suggest.
+       wildmode    More matches in |cmdline-completion| available
+                   (depends on the 'wildmode' setting).
+
+       This is most useful, to fine tune when in insert mode the bell should
+       be rung. For normal mode and ex commands, the bell is often rung to
+       indicate that an error occurred. It can be silenced by adding the
+       "error" keyword.
+
                                     *'binary'* *'bin'* *'nobinary'* *'nobin'*
 'binary' 'bin'         boolean (default off)
                        local to buffer
@@ -2721,7 +2762,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        makes a difference for error messages, the bell will be used always
        for a lot of errors without a message (e.g., hitting <Esc> in Normal
        mode).  See 'visualbell' on how to make the bell behave like a beep,
-       screen flash or do nothing.
+       screen flash or do nothing. See 'belloff' to finetune when to ring the
+       bell.
 
                                                *'errorfile'* *'ef'*
 'errorfile' 'ef'       string  (Amiga default: "AztecC.Err",
index ca11fd94048a91900bea9616c74b654637748a60..5d3bd827908266ad7794bfb1776250d303970d9d 100644 (file)
@@ -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;
 }
 
index 610ac862e6f5f0d25fc36b3ac2f59409993445c3..d7700c8c8774ec2cf9ff57cde17f3765ddc7ca45 100644 (file)
@@ -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;
            }
        }
index 4ae16a18eefb01dfed62705fe1acefe684ae50ef..24cf18002d840c6f325d3b166c79b6a81cd69f0f 100644 (file)
@@ -824,7 +824,7 @@ hangul_input_process(s, len)
     }
     else if (n == AUTOMATA_ERROR)
     {
-       vim_beep();
+       vim_beep(BO_HANGUL);
        return 0;
     }
     return len;
index 571dd622315309c5e0ea63aca909459906a9df29..167e86517aa15ac419c1152db45dc8920b144fbd 100644 (file)
@@ -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;
 }
 
index 2135446edaffdb774c7213a2a36ddabbec527c36..287ab1a1c38de27a52968a70867b8b18ccbe2a1f 100644 (file)
@@ -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;
 }
 
index b798ea59abcda322522d43f0ae578ad26c33de10..1f37e1277801028126a95aa342e8bcddda2bd1d9 100644 (file)
@@ -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;
 }
 
index 2ab0a831d3abea98b14883c813ee0b59e21ef8b8..a5fb7e50d525304d7ef59c674a2f845b6e8f4388 100644 (file)
@@ -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');
index ceaf36fcbdf192d387b90f60b87187234b48c119..3c68f8de0506ffb4840a344338a6c271d881e3af 100644 (file)
@@ -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
index d5a011d18d4e4fd6112ed26d0ce7fbf3723b22e3..599b12ac1f467d9c36f65325be0b201f60fb0640 100644 (file)
@@ -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
index a356f961355800ed636c979fea5c53bc380c1a9d..b0f28d2593c07fb73b90bd1c4d7ad530fe10bbae 100644 (file)
@@ -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' */
index 819473befa1082e877f37eb28faf703277cb06bc..5e655bba1cd91f18abdc7df70eb7e44be1c4390c 100644 (file)
@@ -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
index 5df81c9280dd4f956e96eca097d5cc0037f8b48a..96b05723a5543778b119fcb4ace6b9df2aa309ad 100644 (file)
@@ -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));
index c9614ea525f0abf26798e177820441195c540caf..4905a49d7f79c1c9ec481ad83fc2266cc7032de5 100644 (file)
@@ -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)
index 80a7d18fe70b1c5e86954de78df46e8d53455c6f..5d9c0cceb09c2c27c21041c8f210456c7eae3c31 100644 (file)
@@ -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;
index c649b65472938b6cdd34ac76a8f890f048da4048..fa4cabf8ec81ebeccb48ff15169b1237bbfee306 100644 (file)
@@ -741,6 +741,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    793,
 /**/
     792,
 /**/