lisp/emacs-lisp/edebug.el: Fix bug#13163.
authorJuanma Barranquero <lekktu@gmail.com>
Thu, 13 Dec 2012 09:45:54 +0000 (10:45 +0100)
committerJuanma Barranquero <lekktu@gmail.com>
Thu, 13 Dec 2012 09:45:54 +0000 (10:45 +0100)
(edebug--require-cl-read): New function.
(edebug-setup-hook, cl-read-load-hooks): Use it.
(edebug-unload-function): New function.

lisp/ChangeLog
lisp/emacs-lisp/edebug.el

index 2206940..0f4eaff 100644 (file)
@@ -1,3 +1,9 @@
+2012-12-13  Juanma Barranquero  <lekktu@gmail.com>
+
+       * emacs-lisp/edebug.el (edebug--require-cl-read): New function.
+       (edebug-setup-hook, cl-read-load-hooks): Use it.
+       (edebug-unload-function): New function.  (Bug#13163)
+
 2012-12-13  Michael Albinus  <michael.albinus@gmx.de>
 
        * net/tramp-adb.el (tramp-adb-file-name-p): Make it a defsubst.
index 1231171..c2ff812 100644 (file)
@@ -4258,12 +4258,13 @@ With prefix argument, make it a temporary breakpoint."
 ;;; Autoloading of Edebug accessories
 
 ;; edebug-cl-read and cl-read are available from liberte@cs.uiuc.edu
+(defun edebug--require-cl-read ()
+  (require 'edebug-cl-read))
+
 (if (featurep 'cl-read)
-    (add-hook 'edebug-setup-hook
-             (function (lambda () (require 'edebug-cl-read))))
+    (add-hook 'edebug-setup-hook #'edebug--require-cl-read)
   ;; The following causes edebug-cl-read to be loaded when you load cl-read.el.
-  (add-hook 'cl-read-load-hooks
-           (function (lambda () (require 'edebug-cl-read)))))
+  (add-hook 'cl-read-load-hooks #'edebug--require-cl-read))
 
 \f
 ;;; Finalize Loading
@@ -4289,6 +4290,24 @@ With prefix argument, make it a temporary breakpoint."
 ;; Install edebug read and eval functions.
 (edebug-install-read-eval-functions)
 
+(defun edebug-unload-function ()
+  "Unload the Edebug source level debugger."
+  (when edebug-active
+    (unwind-protect
+        (abort-recursive-edit)
+      (setq edebug-active nil)
+      (edebug-unload-function)))
+  (save-current-buffer
+    (dolist (buffer (buffer-list))
+      (set-buffer buffer)
+      (when (eq major-mode 'edebug-mode) (emacs-lisp-mode))))
+  (remove-hook 'called-interactively-p-functions
+               'edebug--called-interactively-skip)
+  (remove-hook 'cl-read-load-hooks 'edebug--require-cl-read)
+  (edebug-uninstall-read-eval-functions)
+  ;; continue standard unloading
+  nil)
+
 (provide 'edebug)
 
 ;;; edebug.el ends here