emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/dict-tree dca8bcd 070/154: Advised edebug-prin1 and ede


From: Stefan Monnier
Subject: [elpa] externals/dict-tree dca8bcd 070/154: Advised edebug-prin1 and edebug-prin1-to-string to prevent edebug hanging
Date: Mon, 14 Dec 2020 12:21:47 -0500 (EST)

branch: externals/dict-tree
commit dca8bcdb34cb55846d3c449ba60eb8508e3452ef
Author: Toby Cubitt <toby-predictive@dr-qubit.org>
Commit: Toby S. Cubitt <toby-predictive@dr-qubit.org>

    Advised edebug-prin1 and edebug-prin1-to-string to prevent edebug hanging
    whilst printing large data structures - finally!
---
 dict-tree.el | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 56 insertions(+), 5 deletions(-)

diff --git a/dict-tree.el b/dict-tree.el
index ad84b26..a5bf170 100644
--- a/dict-tree.el
+++ b/dict-tree.el
@@ -5,7 +5,7 @@
 ;; Copyright (C) 2004-2009 Toby Cubitt
 
 ;; Author: Toby Cubitt <toby-predictive@dr-qubit.org>
-;; Version: 0.12
+;; Version: 0.12.1
 ;; Keywords: dictionary, tree
 ;; URL: http://www.dr-qubit.org/emacs.php
 
@@ -53,6 +53,10 @@
 
 ;;; Change log:
 ;;
+;; Version 0.12.1
+;; * added `edebug-prin1' and `edebug-prin1-to-string' advice to prevent
+;;   edebug hanging whilst printing large dictionaries
+;;
 ;; Version 0.12
 ;; * complete rewrite using new trie.el library
 ;;
@@ -3268,10 +3272,10 @@ supplied, only complete on dictionaries in that list.
 
 If ALLOW-UNLOADED is non-nil, also complete on the names of
 unloaded dictionaries (actually, on any Elisp file in the current
-`load-path' restricted to subdirectories of your home
-directory). If an unloaded dictionary is read, the name of the
-Elisp file will be returned, without extension, suitable for
-passing to `load-library'."
+`load-path' restricted to subdirectories of your home directory
+whose file name starts with \"dict-\"). If an unloaded dictionary
+is read, the name of the Elisp file will be returned, without
+extension, suitable for passing to `load-library'."
 
   (let (dictname paths)
     ;; when allowing unloaded dictionaries...
@@ -3327,6 +3331,53 @@ passing to `load-library'."
 
 
 
+;; ----------------------------------------------------------------
+;;            Pretty-print dictionaries during edebug
+
+;; We advise the `edebug-prin1' and `edebug-prin1-to-string' functions
+;; (actually, aliases) so that they pring "#<dict-tree NAME>" instead of
+;; the full print form for dictionaries.
+;;
+;; This is because, if left to its own devices, edebug hangs for ages
+;; whilst printing large dictionaries, and you either have to wait for a
+;; *very* long time for it to finish, or kill Emacs entirely. (Even C-g
+;; C-g fails!)
+;;
+;; Since the print form of a dictionary is practically incomprehensible
+;; anyway, we don't lose much by doing this. If you *really* want to
+;; print dictionaries in full whilst edebugging, despite this warning,
+;; disable the advice.
+;;
+;; FIXME: Should use `cedet-edebug-prin1-extensions' instead of advice
+;;        when `cedet-edebug' is loaded, though I believe this still
+;;        works in that case.
+
+
+(eval-when-compile (require 'edebug))
+
+
+(ad-define-subr-args 'edebug-prin1 '(object &optional printcharfun))
+
+(defadvice edebug-prin1
+  (around dictree activate compile preactivate)
+  (if (dictree-p object)
+      (let ((pretty (concat "#<dict-tree " (dictree-name object) ">")))
+       (prin1 pretty printcharfun)
+       (setq ad-return-value pretty))
+    ad-do-it))
+
+
+(ad-define-subr-args 'edebug-prin1-to-string '(object &optional noescape))
+
+(defadvice edebug-prin1-to-string
+  (around dictree activate compile preactivate)
+  (if (dictree-p object)
+      (setq ad-return-value
+           (concat "#<dict-tree " (dictree-name object) ">"))
+    ad-do-it))
+
+
+
 (provide 'dict-tree)
 
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]