* riece-signal.el (riece-connect-signal): Fixed doc.
[riece] / lisp / riece-signal.el
index 7fedd2f..c239a02 100644 (file)
@@ -29,6 +29,8 @@
 
 ;;; Code:
 
+(require 'riece-options)
+
 (defvar riece-signal-slot-obarray
   (make-vector 31 0))
 
@@ -70,12 +72,23 @@ This function is for internal use only."
   (aref signal 1))
 
 (defun riece-connect-signal (signal-name function &optional filter handback)
-  "Add SLOT as a listener of a signal identified by SIGNAL-NAME."
+  "Add FUNCTION as a listener of a signal identified by SIGNAL-NAME."
   (let ((symbol (intern (symbol-name signal-name) riece-signal-slot-obarray)))
     (set symbol (cons (riece-make-slot function filter handback)
                      (if (boundp symbol)
                          (symbol-value symbol))))))
 
+(defun riece-disconnect-signal (signal-name function)
+  "Remove FUNCTION from the listener of the signal identified by SIGNAL-NAME."
+  (let* ((symbol (intern-soft (symbol-name signal-name)
+                            riece-signal-slot-obarray))
+        (slots (symbol-value symbol)))
+    (while slots
+      (if (eq (riece-slot-function (car slots))
+             function)
+         (set symbol (delq (car slots) (symbol-value symbol))))
+      (setq slots (cdr slots)))))
+
 (defun riece-emit-signal (signal-name &rest args)
   "Emit SIGNAL."
   (let ((symbol (intern-soft (symbol-name signal-name)
@@ -93,14 +106,14 @@ This function is for internal use only."
                      (error
                       (if riece-debug
                           (message
-                           "Error occurred in signal filter for \"%S\": %S"
+                           "Error in signal filter for \"%S\": %S"
                            signal-name error)))
                      nil))
                (funcall (riece-slot-function (car slots))
                         signal (riece-slot-handback (car slots))))
          (error
           (if riece-debug
-              (message "Error occurred in slot function for \"%S\": %S"
+              (message "Error in slot function for \"%S\": %S"
                        signal-name error))))
        (setq slots (cdr slots))))))