diff src/term.c @ 15974:61249a8fe735

(Vring_bell_function): New variable. (syms_of_term): Set up Lisp variable. (ring_bell): Use Vring_bell_function.
author Richard M. Stallman <rms@gnu.org>
date Thu, 29 Aug 1996 20:50:15 +0000
parents 77e6de616e58
children 4c74d7f1cfa6
line wrap: on
line diff
--- a/src/term.c	Thu Aug 29 06:22:28 1996 +0000
+++ b/src/term.c	Thu Aug 29 20:50:15 1996 +0000
@@ -43,6 +43,9 @@
 #define OUTPUT_IF(a) { if (a) tputs (a, FRAME_HEIGHT (selected_frame) - curY, cmputc); }
 #define OUTPUT1_IF(a) { if (a) tputs (a, 1, cmputc); }
 
+/* Function to use to ring the bell.  */
+Lisp_Object Vring_bell_function;
+
 /* Terminal characteristics that higher levels want to look at.
    These are all extern'd in termchar.h */
 
@@ -310,6 +313,26 @@
 
 ring_bell ()
 {
+  if (! NILP (Vring_bell_function))
+    {
+      Lisp_Object function;
+
+      /* Temporarily set the global variable to nil
+	 so that if we get an error, it stays nil
+	 and we don't call it over and over.
+
+	 We don't specbind it, because that would carefully
+	 restore the bad value if there's an error
+	 and make the loop of errors happen anyway.  */
+      function = Vring_bell_function;
+      Vring_bell_function = Qnil;
+
+      call0 (function);
+
+      Vring_bell_function = function;
+      return;
+    }
+
   if (! FRAME_TERMCAP_P (selected_frame))
     {
       (*ring_bell_hook) ();
@@ -1777,4 +1800,9 @@
 #else
   system_uses_terminfo = 0;
 #endif
+
+  DEFVAR_LISP ("ring-bell-function", &Vring_bell_function,
+    "Non-nil means call this function to ring the bell.\n\
+The function should accept no arguments.");
+  Vring_bell_function = Qnil;
 }