Use @samp{diff -u} to make your diffs. Diffs without context are hard
to install reliably. More than that, they are hard to study; we must
always study a patch to decide whether we want to install it. Context
-format is better than contextless diffs, but we prefer we unified format.
+format is better than contextless diffs, but we prefer the unified
+format.
If you have GNU diff, use @samp{diff -u -F'^[_a-zA-Z0-9$]\+ *('} when
making diffs of C code. This shows the name of the function that each
@c %**end of header
@c Version of the software and manual.
-@set VERSION 8.5
+@set VERSION 8.6
@c Edition of the manual. It is either empty for the first edition or
@c has the form ", nth Edition" (without the quotes).
@set EDITION
-@set UPDATED 2013-03-02
-@set UPDATE-MONTH March, 2013
+@set UPDATED 2016-04-29
+@set UPDATE-MONTH April, 2016
@c Other variables.
@set MH-BOOK-HOME http://rand-mh.sourceforge.net/book/mh
@cindex HTML
@cindex Gnus
-MH-E can display messages that have been sent in HTML@footnote{This
-feature depends on a version of Gnus that is at least 5.10.}. The
+MH-E can display messages that have been sent in HTML. The
content of the message will appear in the MH-Show buffer as you would
expect if the entire message is HTML, or there is an inline HTML body
part. However, if there is an HTML body part that is an attachment,
to use a different browser, then set this option accordingly. See the
documentation for the browser you use for additional information on
how to use it. In particular, find and disable the option to render
-images as this can tip off spammers that the email address they have
-used is valid.
+images, as displaying remote images can tip off spammers that the
+email address they have used is valid.
@vindex mm-text-html-renderer
If you're confused about which @code{mm-text-html-renderer} to use,
-here's a brief description of each, sorted by popularity, that
-includes the results of a quick poll of MH-E users from 2005-12-23.
+here's a brief description of each, sorted by name.
@table @asis
+@cindex browser, @samp{gnus-w3m}
+@cindex @samp{gnus-w3m}
@cindex browser, @samp{w3m}
@cindex @samp{w3m}
-@kindex mouse-2
-@item @samp{w3m} 7
-The @samp{w3m} browser requires an external program. It's quick,
-produces pretty nice output, and best of all, it's the only browser
-that highlights links. These can be clicked with @kbd{mouse-2} to view
-the content of the link in @samp{w3m}. The @samp{w3m} browser handles
-tables well and actually respects the table's width parameter (which
-can cause text to wrap if the author didn't anticipate that the page
-would be viewed in Emacs).
+@item @samp{gnus-w3m}
+The @samp{gnus-w3m} browser requires an external program. It's quick,
+produces pretty nice output, and it highlights links. It renders
+@samp{–} and @samp{®} okay. It sometimes fails to wrap lines
+properly. It always downloads remote images.
@c -------------------------
-@cindex browser, @samp{w3m-standalone}
-@cindex @samp{w3m-standalone}
-@item @samp{w3m-standalone} 3
-This browser, along with @samp{nil} for the external browser, are the
-only choices that work without having to download a separate lisp
-package or external program. This browser is quick, but does not show
-links. It handles simple tables but some tables get rendered much
-wider than the Emacs frame. This browser was the only one not to
-handle the escape @samp{–} (it printed a @samp{?}), but it did
-render @samp{®}.
+@cindex browser, @samp{html2text}
+@cindex @samp{html2text}
+@item @samp{html2text}
+The @samp{html2text} browser requires an external program. Some users
+have reported problems with it, such as filling the entire message as
+if it were one paragraph, or displaying chunks of raw HTML.
@c -------------------------
@cindex browser, @samp{links}
@cindex @samp{links}
-@item @samp{links} 1
+@item @samp{links}
The @samp{links} browser requires an external program. It's quick, and
produces nicer output than @samp{lynx} on single column mails in
tables. However, it doesn't show links and it doesn't do as nice a job
-on multi-column tables as some lines wrap. At least it fits in 80
-columns and thus seems better than @samp{w3} and
-@samp{w3m-standalone}. Converts escapes such as @samp{®} to (R).
+on multi-column tables as some lines wrap. It does do a good job of
+fitting text within 80 columns. It appears to render special
+characters using ASCII equivalents. For example, @samp{®} appears
+as (R). It does not download images.
@c -------------------------
@cindex browser, @samp{lynx}
@cindex @samp{lynx}
-@item @samp{lynx} 1
+@item @samp{lynx}
The @samp{lynx} browser requires an external program. It's quick and
produces pretty decent output but it doesn't show links. It doesn't
seem to do multi-column tables which makes output much cleaner. It
-centers the output and wraps long lines more than most. Handles
-@samp{®}.
+centers the output and wraps long lines more than most. It does not
+always handle special characters like @samp{®} or @samp{–}.
+It does not download images.
@c -------------------------
-@item @samp{nil} 1
-This choice obviously requires an external browser. Like
-@samp{w3m-standalone}, it works out of the box. With this setting,
+@item @samp{nil}
+This choice obviously requires an external browser. With this setting,
HTML messages have a button for the body part which you can view with
-@kbd{K v} (@code{mh-folder-toggle-mime-part}).
-@c -------------------------
-@cindex browser, @samp{w3}
-@cindex @samp{w3}
-@item @samp{w3} 0
-This choice does not require an external program as all of the
-rendering is done in lisp. You do need to get the package separately.
-This browser is @strong{slow}, and doesn't appear to have been updated
-since 2001 and the author hasn't responded to my emails. It displays
-unknown tags instead of hiding them, so you get to see all the
-Microsoft crap in certain messages. Tends to make multi-column tables
-wider than even a full-screen Emacs can handle. Like @samp{w3m}, you
-can follow links, but you have to find them first as they are not
-highlighted. Performs well on single-column tables and handles escapes
-such as @samp{®}.
+@kbd{K v} (@code{mh-folder-toggle-mime-part}). Rendering of special
+characters and handling of remote images depends on your choice of
+browser.
+@c -------------------------
+@item @samp{shr}
+@cindex @samp{shr}
+This choice does not require an external program, but it does require
+that Emacs be configured at build time to use @samp{libxml2}. It is
+fairly quick, it highlights links, and it supports HTML color
+declarations. It renders @samp{–} and @samp{®} okay. It
+sometimes truncates text, particularly if the message tries to have
+fancy text layout. By default it does not download images; this
+behavior is controlled by the options @code{mm-html-blocked-images}
+and @code{mm-html-inhibit-images}
+@ifinfo
+(@pxref{Display Customization,,,emacs-mime}).
+@end ifinfo
+@ifnotinfo
+(see section @uref{http://www.gnus.org/manual/emacs-mime_6.html,
+Display Customization} in the @cite{The Emacs MIME Manual}).
+@end ifnotinfo
@c -------------------------
-@cindex browser, @samp{html2text}
-@cindex @samp{html2text}
-@item @samp{html2text} 0
-The @samp{html2text} browser requires an external program. I noticed
-that it can do some nasty things with simple HTML mails (like filling
-the entire message as if it were one paragraph, including signature).
-On another message, it displayed half of the HTML tags for some
-reason.
+@cindex browser, @samp{w3m}
+@cindex @samp{w3m}
+@kindex mouse-2
+@item @samp{w3m}
+The @samp{w3m} browser requires an external program. It's quick,
+produces pretty nice output, and it highlights links. These can be
+clicked with @kbd{mouse-2} to view the content of the link in
+@samp{w3m}. The @samp{w3m} browser handles tables well and actually
+respects the table's width parameter (which can cause text to wrap if
+the author didn't anticipate that the page would be viewed in Emacs).
+It does not download images by default; this behavior is controlled by
+the option @code{mm-w3m-safe-url-regexp}
+@ifinfo
+(@pxref{Display Customization,,,emacs-mime}).
+@end ifinfo
+@ifnotinfo
+(see section @uref{http://www.gnus.org/manual/emacs-mime_6.html,
+Display Customization} in the @cite{The Emacs MIME Manual}).
+@end ifnotinfo
+@c -------------------------
+@cindex browser, @samp{w3m-standalone}
+@cindex @samp{w3m-standalone}
+@cindex browser, @samp{w3m}
+@cindex @samp{w3m}
+@item @samp{w3m-standalone}
+This browser is quick, but does not show links. It handles simple
+tables but some tables get rendered much wider than the Emacs frame.
+This browser renders @samp{–} and @samp{®} okay. It does not
+download images.
@end table
@vindex mm-text-html-renderer
@code{mm-text-html-renderer},
@ifinfo
@xref{Display Customization,,,emacs-mime}, and the documentation for
-the Gnus command @kbd{W h} (@pxref{Article Washing,,,gnus},).
+the Gnus command @kbd{W h} (@pxref{Article Washing,,,gnus}).
@end ifinfo
@ifnotinfo
see section @uref{http://www.gnus.org/manual/emacs-mime_6.html,
Display Customization} in the @cite{The Emacs MIME Manual} and the
documentation for the Gnus command @kbd{W h} (see section
-@uref{http://www.gnus.org/manual/gnus_99.html, Article Washing} in the
+@uref{http://www.gnus.org/manual/gnus_48.html#Article-Washing, Article
+Washing} in the
@cite{The Gnus Manual}).
@end ifnotinfo
25.1 (or later). Should you ever need to downgrade your desktop file
to version 206, you can do this with 'C-u C-u M-x desktop-save'.
+---
+*** desktop-restore-in-current-display now defaults to t, not nil.
+That is, Emacs by default now restores frames into the current display.
+
+++
** New function 'bookmark-set-no-overwrite' bound to 'C-x r M'.
It raises an error if a bookmark of that name already exists,
**** In rng-valid, instead of using modification-hooks and
insert-behind-hooks on dependent overlays, use same technique as nxml-mode.
-**** Port to XEmacs. Issues include: Unicode (XEmacs seems to be based on
-Mule-UCS); overlays/text properties vs extents; absence of
-fontification-functions hook.
-
*** Fontification
**** Allow face to depend on element qname, attribute qname, attribute
* net/tramp.el (tramp-read-passwd): Ignore errors from `auth-source-*'.
* net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band): Use "\n"
- as end-of-line delimeter for passwords, when running on MS Windows.
+ as end-of-line delimiter for passwords, when running on MS Windows.
2014-12-27 Stefan Monnier <monnier@iro.umontreal.ca>
:group 'desktop
:version "24.4")
-(defcustom desktop-restore-in-current-display nil
+(defcustom desktop-restore-in-current-display t
"Controls how restoring of frames treats displays.
If t, restores frames into the current display.
If nil, restores frames into their original displays (if possible).
If VERBOSE is non-nil, and FUNCTION is an alias, display a
message about the whole chain of aliases."
- (let ((def (if (symbolp function)
- (find-function-advised-original function)))
+ (let ((def (when (symbolp function)
+ (or (fboundp function)
+ (signal 'void-function (list function)))
+ (find-function-advised-original function)))
aliases)
;; FIXME for completeness, it might be nice to print something like:
;; foo (which is advised), which is an alias for bar (which is advised).
(defun file-name-sans-extension (filename)
"Return FILENAME sans final \"extension\".
-The extension, in a file name, is the part that follows the last `.',
-except that a leading `.', if any, doesn't count."
+The extension, in a file name, is the part that begins with the last `.',
+except that a leading `.' of the file name, if there is one, doesn't count."
(save-match-data
(let ((file (file-name-sans-versions (file-name-nondirectory filename)))
directory)
(defun file-name-extension (filename &optional period)
"Return FILENAME's final \"extension\".
-The extension, in a file name, is the part that follows the last `.',
-excluding version numbers and backup suffixes,
-except that a leading `.', if any, doesn't count.
+The extension, in a file name, is the part that begins with the last `.',
+excluding version numbers and backup suffixes, except that a leading `.'
+of the file name, if there is one, doesn't count.
Return nil for extensionless file names such as `foo'.
Return the empty string for file names such as `foo.'.
-If PERIOD is non-nil, then the returned value includes the period
-that delimits the extension, and if FILENAME has no extension,
-the value is \"\"."
+By default, the returned value excludes the period that starts the
+extension, but if the optional argument PERIOD is non-nil, the period
+is included in the value, and in that case, if FILENAME has no
+extension, the value is \"\"."
(save-match-data
(let ((file (file-name-sans-versions (file-name-nondirectory filename))))
(if (and (string-match "\\.[^.]*\\'" file)
'cancel-timer
'delete-itimer))
-;; Emacs 24 renamed flet to cl-flet.
-(defalias 'mh-cl-flet
- (if (fboundp 'cl-flet)
- 'cl-flet
- 'flet))
+;; Emacs 24 made flet obsolete and suggested either cl-flet or
+;; cl-letf. This macro is based upon gmm-flet from Gnus.
+(defmacro mh-flet (bindings &rest body)
+ "Make temporary overriding function definitions.
+This is an analogue of a dynamically scoped `let' that operates on
+the function cell of FUNCs rather than their value cell.
+
+\(fn ((FUNC ARGLIST BODY...) ...) FORM...)"
+ (if (fboundp 'cl-letf)
+ `(cl-letf ,(mapcar (lambda (binding)
+ `((symbol-function ',(car binding))
+ (lambda ,@(cdr binding))))
+ bindings)
+ ,@body)
+ `(flet ,bindings ,@body)))
+(put 'mh-flet 'lisp-indent-function 1)
+(put 'mh-flet 'edebug-form-spec
+ '((&rest (sexp sexp &rest form)) &rest form))
(defun mh-display-color-cells (&optional display)
"Return the number of color cells supported by DISPLAY.
(buffer-read-only nil))
(when (string-match "^[^% \t]+$" method)
(setq method (concat method " %s")))
- (mh-cl-flet
+ (mh-flet
((mm-handle-set-external-undisplayer
(handle function)
(mh-handle-set-external-undisplayer folder handle function)))
(let ((handles ())
(folder mh-show-folder-buffer)
(raw-message-data (buffer-string)))
- (mh-cl-flet
+ (mh-flet
((mm-handle-set-external-undisplayer
(handle function)
(mh-handle-set-external-undisplayer folder handle function)))
(function (get-text-property (point) 'mh-callback))
(buffer-read-only nil)
(folder mh-show-folder-buffer))
- (mh-cl-flet
+ (mh-flet
((mm-handle-set-external-undisplayer
(handle function)
(mh-handle-set-external-undisplayer folder handle function)))
(mm-inline-media-tests mh-mm-inline-media-tests)
(data (get-text-property (point) 'mh-data))
(function (get-text-property (point) 'mh-callback)))
- (mh-cl-flet
+ (mh-flet
((mm-handle-set-external-undisplayer
(handle func)
(mh-handle-set-external-undisplayer folder handle func)))
(defun mh-display-emphasis ()
"Display graphical emphasis."
(when (and mh-graphical-emphasis-flag (mh-small-show-buffer-p))
- (mh-cl-flet
+ (mh-flet
((article-goto-body ())) ; shadow this function to do nothing
(save-excursion
(goto-char (point-min))
(interactive)
;; Don't allow Gnus to create buttons while highlighting, maybe this is bad
;; style?
- (mh-cl-flet
+ (mh-flet
((gnus-article-add-button (&rest args) nil))
(let* ((modified (buffer-modified-p))
(gnus-article-buffer (buffer-name))
(defun mh-thread-set-tables (folder)
"Use the tables of FOLDER in current buffer."
- (mh-cl-flet
+ (mh-flet
((mh-get-table (symbol)
(with-current-buffer folder
(symbol-value symbol))))
ARGLIST is either a string, or a list of strings or symbols."
(let ((str (cond ((stringp arglist) arglist)
((not (listp arglist)) nil)
- (t (help--make-usage-docstring 'toto arglist)))))
+ (t (substitute-command-keys
+ (help--make-usage-docstring 'toto arglist))))))
(if (and str (string-match "\\`([^ )]+ ?" str))
(replace-match "(" t t str)
str)))
:format "%[%t\n%]"
:help-echo ,(concat "Open " (cdr menu-element))
:action recentf-open-files-action
+ ;; Override the (problematic) follow-link property of the
+ ;; `link' widget (bug#22434).
+ :follow-link nil
,(cdr menu-element))))
(defun recentf-open-files-items (files)
(list from)
(or inc (setq inc 1))
(when (zerop inc) (error "The increment can not be zero"))
- (let (seq (n 0) (next from))
+ (let (seq (n 0) (next from) (last from))
(if (> inc 0)
- (while (<= next to)
+ ;; The (>= next last) condition protects against integer
+ ;; overflow in computing NEXT.
+ (while (and (>= next last) (<= next to))
(setq seq (cons next seq)
n (1+ n)
+ last next
next (+ from (* n inc))))
- (while (>= next to)
+ (while (and (<= next last) (>= next to))
(setq seq (cons next seq)
n (1+ n)
next (+ from (* n inc)))))
/^[Aa][Mm]_/s/@AM_V@/$(V)/
/^[Aa][Mm]_/s/@AM_DEFAULT_V@/$(AM_DEFAULT_VERBOSITY)/
/^AUTO_DEPEND *=/s/@AUTO_DEPEND@/yes/
-/^PAXCTL_if_present *=/s/=.*$/=@Rem/
+/^PAXCTL_dumped *=/s/=.*$/=/
+/^PAXCTL_notdumped *=/s/=.*$/=/
/^lisp\.mk:/,/^$/c\
lisp.mk: $(lispsource)/loadup.el\
@rm -f $@\
/^\$(leimdir)\/leim-list.el: /s/bootstrap-emacs\$(EXEEXT)/b-emacs$(EXEEXT)/
/^ if test -f/,/^ fi$/c\
command.com /c if exist .gdbinit rm -f _gdbinit
-/^ *\$(PAXCTL_if_present) -zex/d
+/^ *ifneq (\$(PAXCTL_notdumped),)/,/^ *endif/d
+/^ *ifneq (\$(PAXCTL_dumped),)/,/^ *endif/d
/^ *ln /s/ln /cp /
/^ *\$(SETFATTR_if_present) -n/d
/^ fi/d
These are all file names in directory DIRECTORY which begin with FILE.
This function ignores some of the possible completions as determined
-by the variables `completion-regexp-list' and
-`completion-ignored-extensions', which see. `completion-regexp-list'
+by `completion-regexp-list', which see. `completion-regexp-list'
is matched against file and directory names relative to DIRECTORY. */)
(Lisp_Object file, Lisp_Object directory)
{
(let (
;; Viper just turns itself off during batch use.
(noninteractive nil)
- ;; Switch off start up message or it will chew the key presses
+ ;; Switch off start up message or it will chew the key presses.
(viper-inhibit-startup-message 't)
;; Select an expert-level for the same reason.
(viper-expert-level 5)
(before-buffer (current-buffer)))
(unwind-protect
(progn
- ;; viper-mode is essentially global, so set it here
+ ;; viper-mode is essentially global, so set it here.
(viper-mode)
;; We must switch to buffer because we are using a keyboard macro
;; which appears to not go to the current-buffer but what ever is
(erase-buffer)
;; The new buffer fails to enter vi state so set it.
(viper-change-state-to-vi)
- ;; Run the macro
+ ;; Run the macro.
(execute-kbd-macro kmacro)
(let ((rtn
(buffer-substring-no-properties
(point-min)
(point-max))))
- ;; Kill the buffer iff the macro succeeds
+ ;; Kill the buffer iff the macro succeeds.
(kill-buffer)
rtn))
- ;; switch everthing off and restore the buffer
+ ;; Switch everything off and restore the buffer.
(toggle-viper-mode)
(switch-to-buffer before-buffer))))
(quote
(0 font-lock-keyword-face))))))))
+(ert-deftest number-sequence-test ()
+ (should (= (length
+ (number-sequence (1- most-positive-fixnum) most-positive-fixnum))
+ 2))
+ (should (= (length
+ (number-sequence
+ (1+ most-negative-fixnum) most-negative-fixnum -1))
+ 2)))
+
(ert-deftest string-comparison-test ()
(should (string-lessp "abc" "acb"))
(should (string-lessp "aBc" "abc"))