changeset 107284:366dab1d1b3e

Merge from mainline.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sun, 21 Feb 2010 21:56:15 +0000
parents 396dc65ad74c (current diff) 8554c569b8fd (diff)
children edfde380e83e
files
diffstat 24 files changed, 309 insertions(+), 93 deletions(-) [+]
line wrap: on
line diff
--- a/doc/emacs/ChangeLog	Thu Feb 18 21:54:17 2010 +0000
+++ b/doc/emacs/ChangeLog	Sun Feb 21 21:56:15 2010 +0000
@@ -1,3 +1,8 @@
+2010-02-21  Chong Yidong  <cyd@stupidchicken.com>
+
+	* frames.texi (Frame Commands): Note that the last ordinary frame can
+	be deleted in daemon mode (Bug#5616).
+
 2010-02-18  Glenn Morris  <rgm@gnu.org>
 
 	* trouble.texi (Contributing): Repository is no longer CVS.
--- a/doc/emacs/frames.texi	Thu Feb 18 21:54:17 2010 +0000
+++ b/doc/emacs/frames.texi	Sun Feb 21 21:56:15 2010 +0000
@@ -622,18 +622,24 @@
 Delete all frames except the selected one.
 @end table
 
+  The @kbd{C-x 5 0} (@code{delete-frame}) command will never delete
+the last frame, to prevent you from losing the ability to interact
+with the Emacs process.  Note that when Emacs is run as a daemon
+(@pxref{Emacs Server}), there is always a ``virtual frame'' that
+remains after all the ordinary, interactive frames are deleted.  In
+this case, @kbd{C-x 5 0} can delete the last interactive frame; you
+can use @command{emacsclient} to reconnect to the Emacs session.
+
 @vindex focus-follows-mouse
-  To make the command @kbd{C-x 5 o} work properly, you should tell
-Emacs how the system (or the window manager) handles focus-switching
-between windows.  There are two possibilities: either simply moving
-the mouse onto a window selects it (gives it focus), or you have to
-click on it to do so.  On X, this focus policy also affects whether
-the focus is given to a frame that Emacs raises.  Unfortunately there
-is no way Emacs can find out automatically which way the system
-handles this, so you have to explicitly say, by setting the variable
-@code{focus-follows-mouse}.  If just moving the mouse onto a window
-selects it, that variable should be @code{t}; if a click is necessary,
-the variable should be @code{nil}.  The default is @code{t}.
+  On X, you may have to tell Emacs how the system (or the window
+manager) handles focus-switching between windows, in order for the
+command @kbd{C-x 5 o} (@code{other-frame}) to work properly.
+Unfortunately, there is no way for Emacs to detect this automatically,
+so you should set the variable @code{focus-follows-mouse}.  If simply
+moving the mouse onto a window selects it and gives it focus, the
+variable should be @code{t}; if you have to click on the window to
+select it, the variable should be @code{nil}.  The default is
+@code{t}.
 
   The window manager that is part of MS-Windows always gives focus to
 a frame that raises, so this variable has no effect in the native
--- a/doc/emacs/trouble.texi	Thu Feb 18 21:54:17 2010 +0000
+++ b/doc/emacs/trouble.texi	Sun Feb 21 21:56:15 2010 +0000
@@ -1023,7 +1023,7 @@
 rest of Emacs.
 
 The development version of Emacs can be downloaded from the
-repository, where it is actively maintained by a group of developers.
+repository where it is actively maintained by a group of developers.
 See the Emacs project page
 @url{http://savannah.gnu.org/projects/emacs/} for details.
 
--- a/lib-src/ChangeLog	Thu Feb 18 21:54:17 2010 +0000
+++ b/lib-src/ChangeLog	Sun Feb 21 21:56:15 2010 +0000
@@ -1,3 +1,8 @@
+2010-02-20  Kevin Ryde  <user42@zip.com.au>
+
+	* etags.c (Scheme_functions): Don't loop past a null character
+	(Bug#5601).
+
 2010-01-29  Kester Habermann  <kester@linuxtag.org>  (tiny change)
 
 	* etags.c (Fortran_functions): Handle recursive keyword
--- a/lib-src/etags.c	Thu Feb 18 21:54:17 2010 +0000
+++ b/lib-src/etags.c	Sun Feb 21 21:56:15 2010 +0000
@@ -5004,8 +5004,9 @@
       if (strneq (bp, "(def", 4) || strneq (bp, "(DEF", 4))
 	{
 	  bp = skip_non_spaces (bp+4);
-	  /* Skip over open parens and white space */
-	  while (notinname (*bp))
+	  /* Skip over open parens and white space.  Don't continue past
+	     '\0'. */
+	  while (*bp && notinname (*bp))
 	    bp++;
 	  get_tag (bp, NULL);
 	}
--- a/lisp/ChangeLog	Thu Feb 18 21:54:17 2010 +0000
+++ b/lisp/ChangeLog	Sun Feb 21 21:56:15 2010 +0000
@@ -1,3 +1,52 @@
+2010-02-21  Chong Yidong  <cyd@stupidchicken.com>
+
+	* files.el (directory-listing-before-filename-regexp): Use
+	stricter matching for iso-style dates, to avoid false matches with
+	date-like filenames (Bug#5597).
+
+	* htmlfontify.el (htmlfontify): Doc fix.
+
+	* eshell/eshell.el (eshell): Doc fix.
+
+	* startup.el (fancy-about-screen): In mode-line, apply
+	mode-line-buffer-id face only to the buffer name (Bug#5613).
+
+2010-02-20  Kevin Ryde  <user42@zip.com.au>
+
+	* progmodes/compile.el (compilation-error-regexp-alist-alist): In
+	`watcom' anchor regexp to start of line, to avoid slowness
+	(Bug#5599).
+
+2010-02-20  Eli Zaretskii  <eliz@gnu.org>
+
+	* subr.el (remove-yank-excluded-properties): Explain in a comment
+	why `category' property is removed.
+
+2010-02-19  Chong Yidong  <cyd@stupidchicken.com>
+
+	* isearch.el (isearch-update-post-hook, isearch-update): Revert
+	2010-02-17 change.
+
+2010-02-19  Ulf Jasper  <ulf.jasper@web.de>
+
+	* calendar/icalendar.el (icalendar--convert-ordinary-to-ical)
+	(icalendar--convert-weekly-to-ical)
+	(icalendar--convert-yearly-to-ical)
+	(icalendar--convert-block-to-ical)
+	(icalendar--convert-cyclic-to-ical)
+	(icalendar--convert-anniversary-to-ical): Take care of time
+	specifications where hour has 1-digit only (Bug#5549).
+
+2010-02-19  Nick Roberts  <nickrob@snap.net.nz>
+
+	* progmodes/gdb-ui.el (gdb-assembler-handler): Accommodate change
+	of disassemble output in GDB 7.1.
+
+2010-02-19  Glenn Morris  <rgm@gnu.org>
+
+	* progmodes/f90.el (f90-electric-insert): Give it a delete-selection
+	property.  (Bug#5593)
+
 2010-02-18  Sam Steingold  <sds@gnu.org>
 
 	* vc-cvs.el (vc-cvs-merge-news): Yet another fix of message parsing.
--- a/lisp/calendar/icalendar.el	Thu Feb 18 21:54:17 2010 +0000
+++ b/lisp/calendar/icalendar.el	Sun Feb 21 21:56:15 2010 +0000
@@ -1175,9 +1175,9 @@
   (if (string-match
        (concat nonmarker
                "\\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\)\\s-*" ; date
-               "\\(0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?" ; start time
+               "\\(\\([0-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?" ; start time
                "\\("
-               "-0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?" ; end time
+               "-\\([0-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?" ; end time
                "\\)?"
                "\\s-*\\(.*?\\) ?$")
        entry-main)
@@ -1271,10 +1271,10 @@
 entries.  ENTRY-MAIN is the first line of the diary entry."
   (if (and (string-match (concat nonmarker
                                  "\\([a-z]+\\)\\s-+"
-                                 "\\(0?\\([1-9][0-9]?:[0-9][0-9]\\)"
+                                 "\\(\\([0-9][0-9]?:[0-9][0-9]\\)"
                                  "\\([ap]m\\)?"
-                                 "\\(-0?"
-                                 "\\([1-9][0-9]?:[0-9][0-9]\\)"
+                                 "\\(-"
+                                 "\\([0-9][0-9]?:[0-9][0-9]\\)"
                                  "\\([ap]m\\)?\\)?"
                                  "\\)?"
                                  "\\s-*\\(.*?\\) ?$")
@@ -1353,12 +1353,12 @@
 entries.  ENTRY-MAIN is the first line of the diary entry."
   (if (string-match (concat nonmarker
                             (if (eq (icalendar--date-style) 'european)
-                                "0?\\([1-9]+[0-9]?\\)\\s-+\\([a-z]+\\)\\s-+"
-                              "\\([a-z]+\\)\\s-+0?\\([1-9]+[0-9]?\\)\\s-+")
+                                "\\([0-9]+[0-9]?\\)\\s-+\\([a-z]+\\)\\s-+"
+                              "\\([a-z]+\\)\\s-+\\([0-9]+[0-9]?\\)\\s-+")
                             "\\*?\\s-*"
-                            "\\(0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
+                            "\\(\\([0-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
                             "\\("
-                            "-0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?"
+                            "-\\([0-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?"
                             "\\)?"
                             "\\s-*\\([^0-9]+.*?\\) ?$" ; must not match years
                             )
@@ -1461,9 +1461,9 @@
   (if (string-match (concat nonmarker
                             "%%(diary-block \\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\)"
                             " +\\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\))\\s-*"
-                            "\\(0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
+                            "\\(\\([0-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
                             "\\("
-                            "-0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?"
+                            "-\\([0-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?"
                             "\\)?"
                             "\\s-*\\(.*?\\) ?$")
                     entry-main)
@@ -1569,9 +1569,9 @@
   (if (string-match (concat nonmarker
                             "%%(diary-cyclic \\([^ ]+\\) +"
                             "\\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\))\\s-*"
-                            "\\(0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
+                            "\\(\\([0-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
                             "\\("
-                            "-0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?"
+                            "-\\([0-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?"
                             "\\)?"
                             "\\s-*\\(.*?\\) ?$")
                     entry-main)
@@ -1642,9 +1642,9 @@
 entries.  ENTRY-MAIN is the first line of the diary entry."
   (if (string-match (concat nonmarker
                             "%%(diary-anniversary \\([^)]+\\))\\s-*"
-                            "\\(0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
+                            "\\(\\([0-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
                             "\\("
-                            "-0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?"
+                            "-\\([0-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?"
                             "\\)?"
                             "\\s-*\\(.*?\\) ?$")
                     entry-main)
--- a/lisp/eshell/eshell.el	Thu Feb 18 21:54:17 2010 +0000
+++ b/lisp/eshell/eshell.el	Sun Feb 21 21:56:15 2010 +0000
@@ -229,11 +229,10 @@
 (require 'esh-mode)
 
 (defgroup eshell nil
-  "Eshell is a command shell implemented entirely in Emacs Lisp.  It
-invokes no external processes beyond those requested by the user.  It
-is intended to be a functional replacement for command shells such as
-bash, zsh, rc, 4dos; since Emacs itself is capable of handling most of
-the tasks accomplished by such tools."
+  "A command shell implemented entirely in Emacs Lisp.
+It invokes no external processes beyond those requested by the
+user, and is intended to be a functional replacement for command
+shells such as bash, zsh, rc, 4dos."
   :tag "The Emacs shell"
   :link '(info-link "(eshell)Top")
   :version "21.1"
--- a/lisp/files.el	Thu Feb 18 21:54:17 2010 +0000
+++ b/lisp/files.el	Sun Feb 21 21:56:15 2010 +0000
@@ -5592,8 +5592,10 @@
 	 ;; -r--r--r--   1 may      1997        1168 Oct 19 16:49 README
 
 	 ;; The "[BkKMGTPEZY]?" below supports "ls -alh" output.
-	 ;; The ".*" below finds the last match if there are multiple matches.
-	 ;; This avoids recognizing `jservice  10  1024' as a date in the line:
+
+	 ;; For non-iso date formats, we add the ".*" in order to find
+	 ;; the last possible match.  This avoids recognizing
+	 ;; `jservice 10 1024' as a date in the line:
 	 ;; drwxr-xr-x  3 jservice  10  1024 Jul  2  1997 esg-host
 
          ;; vc dired listings provide the state or blanks between file
@@ -5601,9 +5603,10 @@
          ;; parantheses:
          ;; -rw-r--r-- (modified) 2005-10-22 21:25 files.el
          ;; This is not supported yet.
-    (purecopy (concat ".*[0-9][BkKMGTPEZY]?" s
-	    "\\(" western "\\|" western-comma "\\|" east-asian "\\|" iso "\\)"
-	    s "+")))
+    (purecopy (concat "\\([0-9][BkKMGTPEZY]? " iso
+		      "\\|.*[0-9][BkKMGTPEZY]? "
+		      "\\(" western "\\|" western-comma "\\|" east-asian "\\)"
+		      "\\) +")))
   "Regular expression to match up to the file name in a directory listing.
 The default value is designed to recognize dates and times
 regardless of the language.")
--- a/lisp/htmlfontify.el	Thu Feb 18 21:54:17 2010 +0000
+++ b/lisp/htmlfontify.el	Sun Feb 21 21:56:15 2010 +0000
@@ -176,10 +176,9 @@
     (htmlfontify-copy-and-link-dir srcdir destdir \".src\" \".html\")))")
 
 (defgroup htmlfontify nil
-  "Copy and convert buffers and files to HTML, adding hyperlinks between
-files (driven by etags) if requested.\n
-See also `htmlfontify-manual'."
+  "Convert buffers and files to HTML."
   :group  'applications
+  :link '(variable-link htmlfontify-manual)
   :prefix "hfy-")
 
 (defcustom hfy-page-header 'hfy-default-header
--- a/lisp/isearch.el	Thu Feb 18 21:54:17 2010 +0000
+++ b/lisp/isearch.el	Sun Feb 21 21:56:15 2010 +0000
@@ -156,9 +156,6 @@
 (defvar isearch-mode-hook nil
   "Function(s) to call after starting up an incremental search.")
 
-(defvar isearch-update-post-hook nil
-  "Function(s) to call after isearch has found matches in the buffer.")
-
 (defvar isearch-mode-end-hook nil
   "Function(s) to call after terminating an incremental search.
 When these functions are called, `isearch-mode-end-hook-quit'
@@ -871,8 +868,7 @@
     (isearch-lazy-highlight-new-loop))
   ;; We must prevent the point moving to the end of composition when a
   ;; part of the composition has just been searched.
-  (setq disable-point-adjustment t)
-  (run-hooks 'isearch-update-post-hook))
+  (setq disable-point-adjustment t))
 
 (defun isearch-done (&optional nopush edit)
   "Exit Isearch mode.
--- a/lisp/progmodes/compile.el	Thu Feb 18 21:54:17 2010 +0000
+++ b/lisp/progmodes/compile.el	Sun Feb 21 21:56:15 2010 +0000
@@ -350,7 +350,7 @@
      "^\\([^, \n\t]+\\), line \\([0-9]+\\), char \\([0-9]+\\)[:., \(-]" 1 2 3)
 
     (watcom
-     "\\(\\(?:[a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)): ?\
+     "^[ \t]*\\(\\(?:[a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)): ?\
 \\(?:\\(Error! E[0-9]+\\)\\|\\(Warning! W[0-9]+\\)\\):"
      1 2 nil (4))
 
--- a/lisp/progmodes/f90.el	Thu Feb 18 21:54:17 2010 +0000
+++ b/lisp/progmodes/f90.el	Sun Feb 21 21:56:15 2010 +0000
@@ -1356,6 +1356,8 @@
   (if auto-fill-function (f90-do-auto-fill) ; also updates line
     (f90-update-line)))
 
+;; Behave like self-insert-command for delete-selection-mode (bug#5593).
+(put 'f90-electric-insert 'delete-selection t)
 
 (defun f90-get-correct-indent ()
   "Get correct indent for a line starting with line number.
--- a/lisp/progmodes/gdb-ui.el	Thu Feb 18 21:54:17 2010 +0000
+++ b/lisp/progmodes/gdb-ui.el	Sun Feb 21 21:56:15 2010 +0000
@@ -3573,18 +3573,24 @@
   (setq gdb-pending-triggers
 	(delq 'gdb-invalidate-assembler
 	      gdb-pending-triggers))
-     (let ((buf (gdb-get-buffer 'gdb-assembler-buffer)))
-       (and buf
-	    (with-current-buffer buf
-	      (let* ((window (get-buffer-window buf 0))
-		     (p (window-point window))
-		    (buffer-read-only nil))
-		(erase-buffer)
-		(insert-buffer-substring (gdb-get-buffer-create
+  (let ((buf (gdb-get-buffer 'gdb-partial-output-buffer)))
+    (with-current-buffer buf
+      (goto-char (point-min))
+      ;; The disassemble command in GDB 7.1 onwards displays an overlay arrow.
+      (while (re-search-forward "\\(^   0x\\|=> 0x\\)" nil t)
+	(replace-match "0x" nil nil))))
+  (let ((buf (gdb-get-buffer 'gdb-assembler-buffer)))
+    (and buf
+	 (with-current-buffer buf
+	   (let* ((window (get-buffer-window buf 0))
+		  (p (window-point window))
+		  (buffer-read-only nil))
+	     (erase-buffer)
+	     (insert-buffer-substring (gdb-get-buffer-create
 					  'gdb-partial-output-buffer))
-		(set-window-point window p)))))
-     ;; put customisation here
-     (gdb-assembler-custom))
+	     (set-window-point window p)))))
+  ;; put customisation here
+  (gdb-assembler-custom))
 
 (defun gdb-assembler-custom ()
   (let ((buffer (gdb-get-buffer 'gdb-assembler-buffer))
--- a/lisp/startup.el	Thu Feb 18 21:54:17 2010 +0000
+++ b/lisp/startup.el	Sun Feb 21 21:56:15 2010 +0000
@@ -1626,8 +1626,10 @@
       (select-frame frame)
       (switch-to-buffer "*About GNU Emacs*")
       (setq buffer-undo-list t
-	    mode-line-format (propertize "---- %b %-"
-					 'face 'mode-line-buffer-id))
+	    mode-line-format
+	    (concat "----"
+		    (propertize "%b" 'face 'mode-line-buffer-id)
+		    "%-"))
       (let ((inhibit-read-only t))
 	(erase-buffer)
 	(if pure-space-overflow
--- a/lisp/subr.el	Thu Feb 18 21:54:17 2010 +0000
+++ b/lisp/subr.el	Sun Feb 21 21:56:15 2010 +0000
@@ -2442,7 +2442,11 @@
   "Remove `yank-excluded-properties' between START and END positions.
 Replaces `category' properties with their defined properties."
   (let ((inhibit-read-only t))
-    ;; Replace any `category' property with the properties it stands for.
+    ;; Replace any `category' property with the properties it stands
+    ;; for.  This is to remove `mouse-face' properties that are placed
+    ;; on categories in *Help* buffers' buttons.  See
+    ;; http://lists.gnu.org/archive/html/emacs-devel/2002-04/msg00648.html
+    ;; for the details.
     (unless (memq yank-excluded-properties '(t nil))
       (save-excursion
 	(goto-char start)
--- a/msdos/ChangeLog	Thu Feb 18 21:54:17 2010 +0000
+++ b/msdos/ChangeLog	Sun Feb 21 21:56:15 2010 +0000
@@ -1,3 +1,8 @@
+2010-02-19  Eli Zaretskii  <eliz@gnu.org>
+
+	* INSTALL: Remove a CVS-specific note.  Update for latest versions
+	of Windows.
+
 2009-09-17  Eli Zaretskii  <eliz@gnu.org>
 
 	* sed1v2.inp (OTHER_FILES): Edit to empty.
--- a/msdos/INSTALL	Thu Feb 18 21:54:17 2010 +0000
+++ b/msdos/INSTALL	Sun Feb 21 21:56:15 2010 +0000
@@ -5,8 +5,9 @@
 See the end of the file for license conditions.
 
 The DJGPP port of GNU Emacs builds and runs on plain DOS and also on
-all versions of MS-Windows from version 3.X on, including Windows XP
-and Vista.
+all versions of MS-Windows from version 3.X on, including Windows XP,
+Vista, and Windows 7 (however, see below for issues with Windows Vista
+and 7).
 
 To build and install the DJGPP port, you need to have the DJGPP ports
 of GCC (the GNU C compiler), GNU Make, rm, mv, and sed.  See the
@@ -19,28 +20,25 @@
 Bootstrapping Emacs or recompiling Lisp files in the `lisp'
 subdirectory using the various targets in the lisp/Makefile file
 requires additional utilities: `find' (from Findutils), GNU `echo' and
-`test' (from Sh-utils), `ls' and `chmod' (from Fileutils), `grep'
-(from Grep), and a port of Bash.  However, you should not normally
-need to run lisp/Makefile, as all the Lisp files are distributed in
-byte-compiled form as well.  As for bootstrapping, you will only need
-that if you check-out development sources from the Emacs source
-repository.  (Note: If you are checking out of CVS, use the -kb option
-of the `checkout' and `update' commands, to preserve the original
-Unix-style EOL format of the files.  If some files are converted to
-DOS EOL format by the default operation of CVS, the build might fail.)
+`test' (from Sh-utils or Coreutils), `ls' and `chmod' (from Fileutils
+or Coreutils), `grep' (from Grep), and a port of Bash.  However, you
+should not normally need to run lisp/Makefile, as all the Lisp files
+are distributed in byte-compiled form as well.  As for bootstrapping
+itself, you will only need that if you check-out development sources
+from the Emacs source repository.
 
 If you are building the DJGPP version of Emacs on a DOS-like system
 which supports long file names (e.g. Windows 9X or Windows XP), you
 need to make sure that long file names are handled consistently both
-when you unpack the distribution and compile it.  If you intend to
-compile with DJGPP v2.0 or later, and long file names support is
-enabled (LFN=y in the environment), you need to unpack Emacs
-distribution in a way that doesn't truncate the original long
+when you unpack the distribution and compile it.  With DJGPP v2.0 or
+later, long file names support is by default, so you need to unpack
+Emacs distribution in a way that doesn't truncate the original long
 filenames to the DOS 8.3 namespace; the easiest way to do this is to
-use djtar program which comes with DJGPP, since it will note the LFN
-setting and behave accordingly.  You can build Emacs with LFN=n, if
-some of your tools don't support long file names: just ensure that LFN
-is set to `n' during both unpacking and compiling.
+use djtar program which comes with DJGPP, since it will behave
+consistently with the rest of DJGPP tools.  Alternatively, you can
+build Emacs with LFN=n, if some of your tools don't support long file
+names: just ensure that LFN is set to `n' during both unpacking and
+compiling.
 
 (By the time you read this, you have already unpacked the Emacs
 distribution, but if the explanations above imply that you should have
@@ -100,14 +98,14 @@
 should be able to find them in your djdevNNN.zip archive (where NNN is
 the DJGPP version number).
 
-On Windows NT, Windows 2000/XP/Vista, running "config msdos" might
-print an error message like "VDM has been already loaded".  This is
-because those systems have a program called `redir.exe' which is
+On Windows NT and Windows 2000/XP/Vista/7, running "config msdos"
+might print an error message like "VDM has been already loaded".  This
+is because those systems have a program called `redir.exe' which is
 incompatible with a program by the same name supplied with DJGPP,
 which is used by config.bat.  To resolve this, move the DJGPP's `bin'
 subdirectory to the front of your PATH environment variable.
 
-Windows Vista has several bugs in its DPMI server related to memory
+Windows Vista/7 has several bugs in its DPMI server related to memory
 allocation: it fails DPMI resize memory block function, and it
 arbitrarily limits the default amount of DPMI memory to 32MB.  To work
 around these bugs, first configure Emacs to use the `malloc' function
@@ -117,8 +115,8 @@
     config --with-system-malloc msdos
     make install
 
-In addition, you'll need to install Service Pack 1 (SP1) or later to
-Windows Vista and enlarge its DPMI memory limit by setting the value
+In addition, for Windows Vista you'll need to install Service Pack 1
+(SP1) or later and enlarge its DPMI memory limit by setting the value
 of this Registry key:
 
   HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Wow\DpmiLimit
@@ -164,8 +162,8 @@
 
 Emacs features which require asynchronous subprocesses that depend on
 multitasking do not work in the DJGPP port.  Synchronous subprocesses
-do work, so features such as compilation and grep run synchronously,
-unlike opn other platforms.
+do work, so features such as compilation, grep, and Ispell run
+synchronously, unlike on other platforms.
 
 Version 2.0 of djgpp has two bugs that affect Emacs.  We've included
 corrected versions of two files from djgpp in the msdos subdirectory:
--- a/src/ChangeLog	Thu Feb 18 21:54:17 2010 +0000
+++ b/src/ChangeLog	Sun Feb 21 21:56:15 2010 +0000
@@ -1,3 +1,7 @@
+2010-02-21  Chong Yidong  <cyd@stupidchicken.com>
+
+	* m/arm.h: Define the LIB_GCC flag to be -lgcc_s (Bug#5518).
+
 2010-02-18  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* term.c (fatal): Add a final \n if needed (bug#5596).
--- a/src/dispextern.h	Thu Feb 18 21:54:17 2010 +0000
+++ b/src/dispextern.h	Sun Feb 21 21:56:15 2010 +0000
@@ -2257,8 +2257,8 @@
       && ((IT)->c == '\n'				\
 	  || ((IT)->c == '\r' && (IT)->selective)))
 
-/* Call produce_glyphs or produce_glyphs_hook, if set.  Shortcut to
-   avoid the function call overhead.  */
+/* Call produce_glyphs or FRAME_RIF->produce_glyphs, if set.  Shortcut
+   to avoid the function call overhead.  */
 
 #define PRODUCE_GLYPHS(IT)                              \
   do {                                                  \
--- a/src/m/arm.h	Thu Feb 18 21:54:17 2010 +0000
+++ b/src/m/arm.h	Sun Feb 21 21:56:15 2010 +0000
@@ -36,5 +36,11 @@
 
 #define NO_REMAP
 
+/* armin76@gentoo.org reported that the lgcc_s flag is necessary to
+   build on ARM EABI under GNU/Linux (Bug#5518).  */
+#ifdef GNU_LINUX
+#define LIB_GCC -lgcc_s
+#endif
+
 /* arch-tag: 07856f0c-f0c8-4bd8-99af-0b7fa1e5ee42
    (do not change this comment) */
--- a/src/term.c	Thu Feb 18 21:54:17 2010 +0000
+++ b/src/term.c	Sun Feb 21 21:56:15 2010 +0000
@@ -1568,8 +1568,9 @@
    and where in the glyph matrix we currently are (glyph row and hpos).
    produce_glyphs fills in output fields of *IT with information such as the
    pixel width and height of a character, and maybe output actual glyphs at
-   the same time if IT->glyph_row is non-null.  See the explanation of
-   struct display_iterator in dispextern.h for an overview.
+   the same time if IT->glyph_row is non-null.  For an overview, see
+   the explanation in dispextern.h, before the definition of the
+   display_element_type enumeration.
 
    produce_glyphs also stores the result of glyph width, ascent
    etc. computations in *IT.
--- a/test/ChangeLog	Thu Feb 18 21:54:17 2010 +0000
+++ b/test/ChangeLog	Sun Feb 21 21:56:15 2010 +0000
@@ -1,3 +1,16 @@
+2010-02-19  Ulf Jasper  <ulf.jasper@web.de>
+
+	* icalendar-testsuite.el
+	(icalendar-testsuite--run-function-tests): Added new tests.
+	(icalendar-testsuite--test-diarytime-to-isotime): Added another
+	testcase.
+	(icalendar-testsuite--test-convert-ordinary-to-ical): New.
+	(icalendar-testsuite--test-convert-weekly-to-ical): New.
+	(icalendar-testsuite--test-convert-yearly-to-ical): New.
+	(icalendar-testsuite--test-convert-block-to-ical): New.
+	(icalendar-testsuite--test-convert-cyclic-to-ical): New.
+	(icalendar-testsuite--test-convert-anniversary-to-ical): New.
+
 2010-01-18  Juanma Barranquero  <lekktu@gmail.com>
 
 	* cedet/semantic-tests.el (semanticdb-test-gnu-global)
--- a/test/icalendar-testsuite.el	Thu Feb 18 21:54:17 2010 +0000
+++ b/test/icalendar-testsuite.el	Sun Feb 21 21:56:15 2010 +0000
@@ -52,6 +52,12 @@
   (icalendar-testsuite--test-datestring-to-isodate)
   (icalendar-testsuite--test-datetime-to-diary-date)
   (icalendar-testsuite--test-diarytime-to-isotime)
+  (icalendar-testsuite--test-convert-ordinary-to-ical)
+  (icalendar-testsuite--test-convert-weekly-to-ical)
+  (icalendar-testsuite--test-convert-yearly-to-ical)
+  (icalendar-testsuite--test-convert-block-to-ical)
+  (icalendar-testsuite--test-convert-cyclic-to-ical)
+  (icalendar-testsuite--test-convert-anniversary-to-ical)
   (icalendar-testsuite--test-calendar-style)
   (icalendar-testsuite--test-create-uid)
   (icalendar-testsuite--test-parse-vtimezone))
@@ -213,6 +219,12 @@
 
 (defun icalendar-testsuite--test-diarytime-to-isotime ()
   "Test method for `icalendar--diarytime-to-isotime'."
+  (assert (string= (icalendar--diarytime-to-isotime "01:15" "")
+                   "T011500"))
+  (assert (string= (icalendar--diarytime-to-isotime "1:15" "")
+                   "T011500"))
+  (assert (string= (icalendar--diarytime-to-isotime "0:01" "")
+                   "T000100"))
   (assert (string= (icalendar--diarytime-to-isotime "0100" "")
                    "T010000"))
   (assert (string= (icalendar--diarytime-to-isotime "0100" "am")
@@ -236,6 +248,106 @@
   (assert (string= (icalendar--diarytime-to-isotime "1259" "pm")
                    "T125900")))
 
+(defun icalendar-testsuite--test-convert-ordinary-to-ical ()
+  "Test method for `icalendar--convert-ordinary-to-ical'."
+  (let* ((calendar-date-style 'iso)
+         result)
+    ;; without time
+    (setq result (icalendar--convert-ordinary-to-ical "&?" "2010 2 15 subject"))
+    (assert (= 2 (length result)))
+    (assert (string=  "\nDTSTART;VALUE=DATE:20100215\nDTEND;VALUE=DATE:20100216"
+                      (car result)))
+    (assert (string= "subject" (cadr result)))
+  
+    ;; with time
+    (setq result (icalendar--convert-ordinary-to-ical 
+                  "&?" "&2010 2 15 12:34-23:45 s"))
+    (assert (= 2 (length result)))
+    (assert (string=  (concat "\nDTSTART;VALUE=DATE-TIME:20100215T123400"
+                              "\nDTEND;VALUE=DATE-TIME:20100215T234500")
+                      (car result)))
+    (assert (string= "s" (cadr result)))
+
+    ;; with time, again -- test bug#5549
+    (setq result (icalendar--convert-ordinary-to-ical 
+                  "x?" "x2010 2 15 0:34-1:45 s"))
+    (assert (= 2 (length result)))
+    (assert (string=  (concat "\nDTSTART;VALUE=DATE-TIME:20100215T003400"
+                              "\nDTEND;VALUE=DATE-TIME:20100215T014500")
+                      (car result)))
+    (assert (string= "s" (cadr result)))))
+
+(defun icalendar-testsuite--test-convert-weekly-to-ical ()
+  "Test method for `icalendar--convert-weekly-to-ical'."
+  (let* ((calendar-date-style 'iso)
+         result
+         (calendar-day-name-array
+          ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday"
+           "Saturday"]))
+    (setq result (icalendar--convert-weekly-to-ical "" "Monday 8:30 subject"))
+    (assert (= 2 (length result)))
+    (assert (string= (concat "\nDTSTART;VALUE=DATE-TIME:20050103T083000"
+                             "\nDTEND;VALUE=DATE-TIME:20050103T093000"
+                             "\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO")
+                     (car result)))
+    (assert (string= "subject" (cadr result)))))
+
+(defun icalendar-testsuite--test-convert-yearly-to-ical ()
+  "Test method for `icalendar--convert-yearly-to-ical'."
+  (let* ((calendar-date-style 'iso)
+         result
+         (calendar-month-name-array
+          ["January" "February" "March" "April" "May" "June" "July" "August"
+           "September" "October" "November" "December"]))
+    (setq result (icalendar--convert-yearly-to-ical "" "May 1 Tag der Arbeit"))
+    (assert (= 2 (length result)))
+    (assert (string= (concat
+                      "\nDTSTART;VALUE=DATE:19000501"
+                      "\nDTEND;VALUE=DATE:19000502"
+                      "\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYMONTHDAY=1")
+                     (car result)))
+    (assert (string= "Tag der Arbeit" (cadr result)))))
+
+(defun icalendar-testsuite--test-convert-block-to-ical ()
+  "Test method for `icalendar--convert-block-to-ical'."
+  (let* ((calendar-date-style 'iso)
+         result)
+    (setq result (icalendar--convert-block-to-ical 
+                  "" "%%(diary-block 2004 7 19 2004 8 27) Sommerferien"))
+    (assert (= 2 (length result)))
+    (assert (string= (concat
+                      "\nDTSTART;VALUE=DATE:20040719"
+                      "\nDTEND;VALUE=DATE:20040828")
+                     (car result)))
+    (assert (string= "Sommerferien" (cadr result)))))
+
+(defun icalendar-testsuite--test-convert-cyclic-to-ical ()
+  "Test method for `icalendar--convert-cyclic-to-ical'."
+  (let* ((calendar-date-style 'iso)
+         result)
+    (setq result (icalendar--convert-block-to-ical 
+                  "" "%%(diary-block 2004 7 19 2004 8 27) Sommerferien"))
+    (assert (= 2 (length result)))
+    (assert (string= (concat
+                      "\nDTSTART;VALUE=DATE:20040719"
+                      "\nDTEND;VALUE=DATE:20040828")
+                     (car result)))
+    (assert (string= "Sommerferien" (cadr result)))))
+
+(defun icalendar-testsuite--test-convert-anniversary-to-ical ()
+  "Test method for `icalendar--convert-anniversary-to-ical'."
+  (let* ((calendar-date-style 'iso)
+         result)
+    (setq result (icalendar--convert-anniversary-to-ical 
+                  "" "%%(diary-anniversary 1964 6 30) g"))
+    (assert (= 2 (length result)))
+    (assert (string= (concat
+                      "\nDTSTART;VALUE=DATE:19640630"
+                      "\nDTEND;VALUE=DATE:19640701"
+                      "\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=06;BYMONTHDAY=30")
+                     (car result)))
+    (assert (string= "g" (cadr result)))))
+
 (defun icalendar-testsuite--test-calendar-style ()
   "Test method for `icalendar--date-style'."
   (dolist (calendar-date-style '(iso american european))