From: Richard Stallman <rms@gnu.org>
To: "Juanma Barranquero" <lekktu@gmail.com>
Cc: emacs-devel@gnu.org
Subject: Re: unload-feature questions and thoughts
Date: Mon, 05 Feb 2007 14:10:33 -0500 [thread overview]
Message-ID: <E1HE9EX-0005d0-BR@fencepost.gnu.org> (raw)
In-Reply-To: <f7ccd24b0702041003mf078350n57f8dcbffceb3776@mail.gmail.com> (lekktu@gmail.com)
1.- Currently, `unload-feature' (from loadhist.el) does not expect
entries on `load-history' of the form (autoload . SYMBOL) or (defface
. SYMBOL). Unloading a package which defines either one produces
messages like
Unexpected element (defface . myface) in load-history
which should be reserved, I think, to really unexpected items in the
load-history, not perfectly usual ones like those above.
Since the presence of such entries is normal, `unload-feature' ought
to handle such entries in a useful way.
Would someone like to implement this?
AFAICS, there's no way to delete an existing face, so ignoring the
item is the best option (or, alternatively, giving a more significant
warning, like "Face MYFACE can not be unloaded").
Of these two, it would definitely be better to do nothing.
Signaling an error in circumstances that are normal is perverse.
It should not be hard to add a way to delete a face, but let's leave
that for later.
Autoload entries,
OTOH, can be unloaded like a function; so I propose to commit the
attached patch.
Your patch to handle an `autoload' entry like an `defun' entry seems
correct.
Meanwhile, I think another change is needed to handle `(t . SYMBOL)'
elements correctly. See below. Does anyone else see a problem in it?
2.- `unload-feature' returns `load-history', but this is not
documented, and a PITA when you're using `unload-feature' in a context
that evaluates its result, like IELM. Should we document what it does
now, or (preferred) just force it to return nil?
It is ok to make it return nil.
*** loadhist.el 21 Jan 2007 01:36:08 -0500 1.43
--- loadhist.el 05 Feb 2007 13:30:24 -0500
***************
*** 173,178 ****
--- 173,181 ----
(prin1-to-string dependents) file))))
(let* ((unload-hook-features-list (feature-symbols feature))
(file (pop unload-hook-features-list))
+ ;; If non-nil, this is a symbol for which we should
+ ;; restore a previous autoload if possible.
+ restore-autoload
(unload-hook (intern-soft (concat (symbol-name feature)
"-unload-hook"))))
;; Try to avoid losing badly when hooks installed in critical
***************
*** 209,214 ****
--- 212,218 ----
(dolist (elt unload-hook-features-list)
(when (symbolp elt)
(elp-restore-function elt))))
+
(dolist (x unload-hook-features-list)
(if (consp x)
(case (car x)
***************
*** 221,230 ****
(when (fboundp 'ad-unadvise)
(ad-unadvise fun))
(let ((aload (get fun 'autoload)))
! (if aload
(fset fun (cons 'autoload aload))
(fmakunbound fun))))))
! ((t require) nil)
(t (message "Unexpected element %s in load-history" x)))
;; Kill local values as much as possible.
(dolist (buf (buffer-list))
--- 225,238 ----
(when (fboundp 'ad-unadvise)
(ad-unadvise fun))
(let ((aload (get fun 'autoload)))
! (if (and aload (eq fun restore-autoload))
(fset fun (cons 'autoload aload))
(fmakunbound fun))))))
! ;; (t . SYMBOL) comes before (defun . SYMBOL)
! ;; and says we should restore SYMBOL's autoload
! ;; when we undefine it.
! (t (setq restore-autoload (cdr x)))
! (require nil)
(t (message "Unexpected element %s in load-history" x)))
;; Kill local values as much as possible.
(dolist (buf (buffer-list))
next prev parent reply other threads:[~2007-02-05 19:10 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-02-04 18:03 unload-feature questions and thoughts Juanma Barranquero
2007-02-04 18:32 ` David Kastrup
2007-02-04 19:07 ` Juanma Barranquero
2007-02-04 19:14 ` David Kastrup
2007-02-05 0:10 ` Juanma Barranquero
2007-02-05 7:21 ` David Kastrup
2007-02-05 9:21 ` Juanma Barranquero
2007-02-05 9:32 ` David Kastrup
2007-02-05 11:08 ` Juanma Barranquero
2007-02-05 11:16 ` David Kastrup
2007-02-05 11:40 ` Juanma Barranquero
2007-02-06 0:16 ` Richard Stallman
2007-10-10 11:04 ` Juanma Barranquero
2007-10-10 14:52 ` Davis Herring
2007-10-10 16:08 ` Juanma Barranquero
2007-10-10 17:03 ` Davis Herring
2007-10-10 17:07 ` Juanma Barranquero
2007-10-10 17:56 ` Davis Herring
2007-10-11 5:20 ` Richard Stallman
2007-10-11 6:39 ` David Kastrup
2007-10-11 15:16 ` Juanma Barranquero
2007-10-12 15:59 ` Richard Stallman
2007-10-12 17:01 ` Juanma Barranquero
2007-10-13 6:41 ` Richard Stallman
2007-10-13 10:03 ` Juanma Barranquero
2007-10-14 16:28 ` Richard Stallman
2007-10-14 22:34 ` Juanma Barranquero
2007-10-15 16:03 ` Richard Stallman
2007-10-15 16:22 ` Juanma Barranquero
2007-10-16 4:10 ` Richard Stallman
2007-10-16 8:15 ` Juanma Barranquero
2007-10-17 5:02 ` Richard Stallman
2007-10-17 23:39 ` Juanma Barranquero
2007-10-23 19:27 ` Davis Herring
2007-10-24 8:32 ` Richard Stallman
2007-10-11 16:41 ` Davis Herring
2007-10-12 2:46 ` Richard Stallman
2007-10-25 21:24 ` David Kastrup
2007-10-28 13:51 ` Richard Stallman
2007-10-10 21:03 ` Richard Stallman
2007-10-10 21:42 ` Juanma Barranquero
2007-02-05 19:10 ` Richard Stallman [this message]
2007-02-05 23:27 ` Juanma Barranquero
2007-02-06 17:09 ` Richard Stallman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=E1HE9EX-0005d0-BR@fencepost.gnu.org \
--to=rms@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=lekktu@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.