X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fsound.c;h=02607283fa3b051307be2d247e1a0c453a3e4407;hb=ea1ea793fe6e244ef5555ed983423a204101af13;hp=170efbd9ebe28c80df5cb56157dfd75be2d1fb4b;hpb=399b9f4466f37412410de8ec4a08e3dc5504ad10;p=chise%2Fxemacs-chise.git diff --git a/src/sound.c b/src/sound.c index 170efbd..0260728 100644 --- a/src/sound.c +++ b/src/sound.c @@ -25,6 +25,7 @@ Boston, MA 02111-1307, USA. */ Hacked on quite a bit by various others. */ #include +#include #include "lisp.h" #include "buffer.h" @@ -45,6 +46,7 @@ Boston, MA 02111-1307, USA. */ #endif int bell_volume; +int bell_inhibit_time; Lisp_Object Vsound_alist; Lisp_Object Vsynchronous_sounds; Lisp_Object Vnative_sound_only_on_console; @@ -347,25 +349,28 @@ device). */ (arg, sound, device)) { - struct device *d = decode_device (device); + static time_t last_bell_time = (time_t) 0; + static struct device *last_bell_device = (struct device*) 0; + time_t now; + struct device *d = decode_device (device); XSETDEVICE (device, d); + now = time (0); - /* #### This is utterly disgusting, and is probably a remnant from - legacy code that used `ding'+`message' to signal error instead - calling `error'. As a result, there is no way to beep from Lisp - directly, without also invoking this aspect. Maybe we should - define a `ring-bell' function that simply beeps on the console, - which `ding' should invoke? --hniksic */ if (NILP (arg) && !NILP (Vexecuting_macro)) /* Stop executing a keyboard macro. */ error ("Keyboard macro terminated by a command ringing the bell"); + + if (d == last_bell_device && now-last_bell_time < bell_inhibit_time) + return Qnil; else if (visible_bell && DEVMETH (d, flash, (d))) ; else Fplay_sound (sound, Qnil, device); - - return Qnil; + + last_bell_time = now; + last_bell_device = d; + return Qnil; } DEFUN ("wait-for-sounds", Fwait_for_sounds, 0, 1, 0, /* @@ -532,6 +537,11 @@ vars_of_sound (void) *How loud to be, from 0 to 100. */ ); bell_volume = 50; + + DEFVAR_INT ("bell-inhibit-time", &bell_inhibit_time /* +*Don't ring the bell on the same device more than once within this many seconds. +*/ ); + bell_inhibit_time = 0; DEFVAR_LISP ("sound-alist", &Vsound_alist /* An alist associating names with sounds. @@ -559,8 +569,8 @@ You should probably add things to this list by calling the function load-sound-file. Caveats: - - You can only play audio data if running on the console screen of a - Sun SparcStation, SGI, or HP9000s700. + - XEmacs must be built with sound support for your system. Not all + systems support sound. - The pitch, duration, and volume options are available everywhere, but many X servers ignore the `pitch' option.