# HG changeset patch # User Glenn Morris # Date 1187077319 0 # Node ID 99a839ccec78cc2c51b9739b43f0af3e27fb3e53 # Parent e7e8c92628aebc20d872a9ae5d308ce46074f255 (bad-packages-alist): New constant. (bad-package-check): New function. Together, these two add elements to `after-load-alist' to check for problematic external packages. diff -r e7e8c92628ae -r 99a839ccec78 lisp/simple.el --- a/lisp/simple.el Tue Aug 14 07:41:16 2007 +0000 +++ b/lisp/simple.el Tue Aug 14 07:41:59 2007 +0000 @@ -5797,6 +5797,57 @@ ; 'insert-in-front-hooks '(minibuffer-prompt-insertion))) ; + +;;;; Problematic external packages. + +;; rms says this should be done by specifying symbols that define +;; versions together with bad values. This is therefore not as +;; flexible as it could be. See the thread: +;; http://lists.gnu.org/archive/html/emacs-devel/2007-08/msg00300.html +(defconst bad-packages-alist + ;; Not sure exactly which semantic versions have problems. + ;; Definitely 2.0pre3, probably all 2.0pre's before this. + '((semantic semantic-version "2\.0pre[1-3]" + "The version of `semantic' loaded does not work in Emacs 22. +It can cause constant high CPU load. Upgrade to at least 2.0pre4.") + ;; CUA-mode does not work with GNU Emacs version 22.1 and newer. + ;; Except for version 1.2, all of the 1.x and 2.x version of cua-mode + ;; provided the `CUA-mode' feature. Since this is no longer true, + ;; we can warn the user if the `CUA-mode' feature is ever provided. + (CUA-mode t nil +"CUA-mode is now part of the standard GNU Emacs distribution, +so you can now enable CUA via the Options menu or by customizing `cua-mode'. + +You have loaded an older version of CUA-mode which does not work +correctly with this version of Emacs. You should remove the old +version and use the one distributed with Emacs.")) + "Alist of packages known to cause problems in this version of Emacs. +Each element has the form (PACKAGE SYMBOL REGEXP STRING). +PACKAGE is either a regular expression to match file names, or a +symbol (a feature name); see the documentation of +`after-load-alist', to which this variable adds functions. +SYMBOL is either the name of a string variable, or `t'. Upon +loading PACKAGE, if SYMBOL is t or matches REGEXP, display a +warning using STRING as the message.") + +(defun bad-package-check (package) + "Run a check using the element from `bad-packages-alist' matching PACKAGE." + (condition-case nil + (let* ((list (assoc package bad-packages-alist)) + (symbol (nth 1 list))) + (and list + (boundp symbol) + (or (eq symbol t) + (and (stringp (setq symbol (eval symbol))) + (string-match (nth 2 list) symbol))) + (display-warning :warning (nth 3 list)))) + (error nil))) + +(mapc (lambda (elem) + (eval-after-load (car elem) `(bad-package-check ',(car elem)))) + bad-packages-alist) + + (provide 'simple) ;; arch-tag: 24af67c0-2a49-44f6-b3b1-312d8b570dfd