]> git.eshelyaron.com Git - emacs.git/commitdiff
(Vring_bell_function): New variable.
authorRichard M. Stallman <rms@gnu.org>
Thu, 29 Aug 1996 20:50:15 +0000 (20:50 +0000)
committerRichard M. Stallman <rms@gnu.org>
Thu, 29 Aug 1996 20:50:15 +0000 (20:50 +0000)
(syms_of_term): Set up Lisp variable.
(ring_bell): Use Vring_bell_function.

src/term.c

index 0a58c4b8dcd2f8f7ff66a91e039a0c31cdbb823c..a9533ece45a9a2ba0931c5bff674fe94567105b3 100644 (file)
@@ -43,6 +43,9 @@ extern Lisp_Object Fmake_sparse_keymap ();
 #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 @@ extern char *tgetstr ();
 
 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 @@ This variable can be used by terminal emulator packages.");
 #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;
 }