Mercurial > vim
diff src/misc1.c @ 11601:0a5d405e2520 v8.0.0683
patch 8.0.0683: visual bell flashes too quickly
commit https://github.com/vim/vim/commit/2e147caa14f622dfd1c1def8e07c113b9b85d4b2
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Jun 27 17:09:37 2017 +0200
patch 8.0.0683: visual bell flashes too quickly
Problem: When using a visual bell there is no delay, causing the flash to
be very short, possibly unnoticeable. Also, the flash and the
beep can lockup the UI when repeated often.
Solution: Do the delay in Vim or flush the output before the delay. Limit the
bell to once per half a second. (Ozaki Kiichi, closes #1789)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 27 Jun 2017 17:15:03 +0200 |
parents | b200e14e7836 |
children | 6bbc7bc0f3dd |
line wrap: on
line diff
--- a/src/misc1.c +++ b/src/misc1.c @@ -3685,16 +3685,30 @@ vim_beep( { if (!((bo_flags & val) || (bo_flags & BO_ALL))) { - if (p_vb +#ifdef ELAPSED_FUNC + static int did_init = FALSE; + static ELAPSED_TYPE start_tv; + + /* Only beep once per half a second, otherwise a sequence of beeps + * would freeze Vim. */ + if (!did_init || ELAPSED_FUNC(start_tv) > 500) + { + did_init = TRUE; + ELAPSED_INIT(start_tv); +#endif + 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) -#endif - ) - out_str(T_VB); - else - out_char(BELL); + /* 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_cf(T_VB); + else + out_char(BELL); +#ifdef ELAPSED_FUNC + } +#endif } /* When 'verbose' is set and we are sourcing a script or executing a