1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-30 19:53:09 +00:00

(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.
This commit is contained in:
Glenn Morris 2007-08-14 07:45:48 +00:00
parent 6dbb1e769f
commit 0b964e141e
2 changed files with 55 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2007-08-14 Glenn Morris <rgm@gnu.org>
* NEWS: Mention `bad-packages-alist'.
2007-08-08 Glenn Morris <rgm@gnu.org>
* TODO: `iff' item is dealt with.

View File

@ -5605,6 +5605,57 @@ works by saving the value of `buffer-invisibility-spec' and setting it to nil."
; '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