automatically by putting the following in your init file:
@example
-(eval-after-load "outline" '(require 'foldout))
+(with-eval-after-load "outline"
+ (require 'foldout))
@end example
@node Org Mode
@end ifclear
@item
-Avoid using @code{defadvice} or @code{eval-after-load} for Lisp code
+Avoid using @code{defadvice} or @code{with-eval-after-load} for Lisp code
to be included in Emacs.
@item
@end defmac
Normally, well-designed Lisp programs should not use
-@code{eval-after-load}. If you need to examine and set the variables
-defined in another library (those meant for outside use), you can do
-it immediately---there is no need to wait until the library is loaded.
-If you need to call functions defined by that library, you should load
-the library, preferably with @code{require} (@pxref{Named Features}).
+@code{with-eval-after-load}. If you need to examine and set the
+variables defined in another library (those meant for outside use),
+you can do it immediately---there is no need to wait until the library
+is loaded. If you need to call functions defined by that library, you
+should load the library, preferably with @code{require} (@pxref{Named
+Features}).
@node Dynamic Modules
@section Emacs Dynamic Modules
another Lisp package (@pxref{Advising Functions}).
@item
-Avoid using @code{eval-after-load} in libraries and packages
-(@pxref{Hooks for Loading}). This feature is meant for personal
-customizations; using it in a Lisp program is unclean, because it
-modifies the behavior of another Lisp file in a way that's not visible
-in that file. This is an obstacle for debugging, much like advising a
-function in the other package.
+Avoid using @code{eval-after-load} and @code{with-eval-after-load} in
+libraries and packages (@pxref{Hooks for Loading}). This feature is
+meant for personal customizations; using it in a Lisp program is
+unclean, because it modifies the behavior of another Lisp file in a
+way that's not visible in that file. This is an obstacle for
+debugging, much like advising a function in the other package.
@item
If a file does replace any of the standard functions or library
email composition buffers (@pxref{Inline Query Expansion})
@lisp
-(eval-after-load
- "message"
- '(define-key message-mode-map [(control ?c) (tab)] 'eudc-expand-inline))
-(eval-after-load
- "sendmail"
- '(define-key mail-mode-map [(control ?c) (tab)] 'eudc-expand-inline))
+(with-eval-after-load "message"
+ (define-key message-mode-map [(control ?c) (tab)] 'eudc-expand-inline))
+(with-eval-after-load "sendmail"
+ (define-key mail-mode-map [(control ?c) (tab)] 'eudc-expand-inline))
@end lisp
@menu
@vindex eudc-server-hotlist
@vindex ldap-host-parameters-alist
@lisp
-(eval-after-load "message"
- '(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
+(with-eval-after-load "message"
+ (define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
(customize-set-variable 'eudc-server-hotlist
'(("" . bbdb)
("ldaps://ldap.gnu.org" . ldap)))
@vindex eudc-server-hotlist
@vindex ldap-host-parameters-alist
@lisp
-(eval-after-load "message"
- '(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
+(with-eval-after-load "message"
+ (define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
(customize-set-variable 'eudc-server-hotlist
'(("" . bbdb)
("ldaps://ldap.gnu.org" . ldap)))
@vindex eudc-server-hotlist
@vindex ldap-host-parameters-alist
@lisp
-(eval-after-load "message"
- '(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
+(with-eval-after-load "message"
+ (define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
(customize-set-variable 'eudc-server-hotlist
'(("" . bbdb) ("" . ldap)))
(customize-set-variable 'ldap-host-parameters-alist
it's a POP3 server, then you need something like this:
@example
-(eval-after-load "mail-source"
- '(add-to-list 'mail-sources '(pop :server "pop.YourProvider.net"
- :user "yourUserName"
- :password "yourPassword")))
+(with-eval-after-load "mail-source"
+ (add-to-list 'mail-sources '(pop :server "pop.YourProvider.net"
+ :user "yourUserName"
+ :password "yourPassword")))
@end example
@noindent
traditional spool file on your local machine, it's
@example
-(eval-after-load "mail-source"
- '(add-to-list 'mail-sources '(file :path "/path/to/spool/file"))
+(with-eval-after-load "mail-source"
+ (add-to-list 'mail-sources '(file :path "/path/to/spool/file"))
@end example
@noindent
postfix, Qmail and (optionally) fetchmail it's
@example
-(eval-after-load "mail-source"
- '(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/"
- :subdirs ("cur" "new")))
+(with-eval-after-load "mail-source"
+ (add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/"
+ :subdirs ("cur" "new")))
@end example
@noindent
mail, it's
@example
-(eval-after-load "mail-source"
- '(add-to-list 'mail-sources
- '(directory :path "/path/to/procmail-dir/"
- :suffix ".prcml")))
+(with-eval-after-load "mail-source"
+ (add-to-list 'mail-sources
+ '(directory :path "/path/to/procmail-dir/"
+ :suffix ".prcml")))
@end example
@noindent
Say
@example
-(eval-after-load "mm-decode"
- '(progn
- (add-to-list 'mm-discouraged-alternatives "text/html")
- (add-to-list 'mm-discouraged-alternatives "text/richtext")))
+(with-eval-after-load "mm-decode"
+ (add-to-list 'mm-discouraged-alternatives "text/html")
+ (add-to-list 'mm-discouraged-alternatives "text/richtext"))
@end example
@noindent
5.9 try this instead:
@example
-(eval-after-load "gnus-msg"
- '(unless (boundp 'gnus-confirm-mail-reply-to-news)
- (defadvice gnus-summary-reply (around reply-in-news activate)
- "Request confirmation when replying to news."
- (interactive)
- (when (or (not (gnus-news-group-p gnus-newsgroup-name))
- (y-or-n-p "Really reply by mail to article author? "))
- ad-do-it))))
+(with-eval-after-load "gnus-msg"
+ (unless (boundp 'gnus-confirm-mail-reply-to-news)
+ (defadvice gnus-summary-reply (around reply-in-news activate)
+ "Request confirmation when replying to news."
+ (interactive)
+ (when (or (not (gnus-news-group-p gnus-newsgroup-name))
+ (y-or-n-p "Really reply by mail to article author? "))
+ ad-do-it))))
@end example
@noindent
default. For older Gnus' try this in @file{~/.gnus.el}:
@example
-(eval-after-load "message"
- '(add-to-list 'message-syntax-checks '(sender . disabled)))
+(with-eval-after-load "message"
+ (add-to-list 'message-syntax-checks '(sender . disabled)))
@end example
@noindent
instead (works for newer versions as well):
@example
-(eval-after-load "message"
- '(let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this!
- (if (boundp 'message-user-fqdn)
- (setq message-user-fqdn fqdn)
- (gnus-message 1 "Redefining `message-make-fqdn'.")
- (defun message-make-fqdn ()
- "Return user's fully qualified domain name."
- fqdn))))
+(with-eval-after-load "message"
+ (let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this!
+ (if (boundp 'message-user-fqdn)
+ (setq message-user-fqdn fqdn)
+ (gnus-message 1 "Redefining `message-make-fqdn'.")
+ (defun message-make-fqdn ()
+ "Return user's fully qualified domain name."
+ fqdn))))
@end example
@noindent
@samp{M-x byte-compile-file RET ~/.gnus.el
RET} to do it). Finally, if you have require
statements in your .gnus, you could replace them with
-eval-after-load, which loads the stuff not at startup
+@code{with-eval-after-load}, which loads the stuff not at startup
time, but when it's needed. Say you've got this in your
@file{~/.gnus.el}:
you replace it with
@example
-(eval-after-load "message"
- '(add-to-list 'message-syntax-checks '(sender . disabled)))
+(with-eval-after-load "message"
+ (add-to-list 'message-syntax-checks '(sender . disabled)))
@end example
@noindent
(gnus-summary-mark-as-read-forward 1))
(gnus-summary-scroll-up arg))))
-(eval-after-load "gnus"
- #'(define-key gnus-summary-mode-map
- (kbd "<RET>") 'browse-nnrss-url))
+(with-eval-after-load "gnus"
+ (define-key gnus-summary-mode-map
+ (kbd "<RET>") 'browse-nnrss-url))
(add-to-list 'nnmail-extra-headers nnrss-url-field)
@end lisp
@lisp
;; @r{Set the default value of @code{mm-discouraged-alternatives}.}
-(eval-after-load "gnus-sum"
- '(add-to-list
- 'gnus-newsgroup-variables
- '(mm-discouraged-alternatives
- . '("text/html" "image/.*"))))
+(with-eval-after-load "gnus-sum"
+ (add-to-list
+ 'gnus-newsgroup-variables
+ '(mm-discouraged-alternatives
+ . '("text/html" "image/.*"))))
;; @r{Display @samp{text/html} parts in @code{nnrss} groups.}
(add-to-list
@code{rcirc} loaded, the command wouldn't do us much good anyway.
@smallexample
-(eval-after-load 'rcirc
- '(defun-rcirc-command sv (arg)
- "Boast about rcirc."
- (interactive "i")
- (rcirc-send-message process target
+(with-eval-after-load 'rcirc
+ (defun-rcirc-command sv (arg)
+ "Boast about rcirc."
+ (interactive "i")
+ (rcirc-send-message process target
(concat "I use " rcirc-id-string))))
@end smallexample
The real answer, therefore, is a @code{/reconnect} command:
@smallexample
-(eval-after-load 'rcirc
- '(defun-rcirc-command reconnect (arg)
- "Reconnect the server process."
- (interactive "i")
- (unless process
- (error "There's no process for this target"))
- (let* ((server (car (process-contact process)))
- (port (process-contact process :service))
- (nick (rcirc-nick process))
- channels query-buffers)
- (dolist (buf (buffer-list))
- (with-current-buffer buf
- (when (eq process (rcirc-buffer-process))
- (remove-hook 'change-major-mode-hook
- 'rcirc-change-major-mode-hook)
- (if (rcirc-channel-p rcirc-target)
- (setq channels (cons rcirc-target channels))
- (setq query-buffers (cons buf query-buffers))))))
- (delete-process process)
- (rcirc-connect server port nick
- rcirc-default-user-name
- rcirc-default-full-name
- channels))))
+(with-eval-after-load 'rcirc
+ (defun-rcirc-command reconnect (arg)
+ "Reconnect the server process."
+ (interactive "i")
+ (unless process
+ (error "There's no process for this target"))
+ (let* ((server (car (process-contact process)))
+ (port (process-contact process :service))
+ (nick (rcirc-nick process))
+ channels query-buffers)
+ (dolist (buf (buffer-list))
+ (with-current-buffer buf
+ (when (eq process (rcirc-buffer-process))
+ (remove-hook 'change-major-mode-hook
+ 'rcirc-change-major-mode-hook)
+ (if (rcirc-channel-p rcirc-target)
+ (setq channels (cons rcirc-target channels))
+ (setq query-buffers (cons buf query-buffers))))))
+ (delete-process process)
+ (rcirc-connect server port nick
+ rcirc-default-user-name
+ rcirc-default-full-name
+ channels))))
@end smallexample
@node GNU Free Documentation License
directory to the cache:
@lisp
-(eval-after-load "filecache"
- '(file-cache-add-directory
- "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}"))
+(with-eval-after-load "filecache"
+ (file-cache-add-directory
+ "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}"))
@end lisp
Then use directory completion in the minibuffer with @kbd{C-x C-f