changeset 107218:10f33dae12b7

Merge from trunk
author Jan D. <jan.h.d@swipnet.se>
date Wed, 24 Feb 2010 19:10:47 +0100
parents 6f4137affc72 (current diff) 27eb4f088075 (diff)
children 07507204ac6f
files
diffstat 27 files changed, 328 insertions(+), 94 deletions(-) [+]
line wrap: on
line diff
--- a/doc/emacs/ChangeLog	Fri Feb 19 14:11:21 2010 +0100
+++ b/doc/emacs/ChangeLog	Wed Feb 24 19:10:47 2010 +0100
@@ -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	Fri Feb 19 14:11:21 2010 +0100
+++ b/doc/emacs/frames.texi	Wed Feb 24 19:10:47 2010 +0100
@@ -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/lib-src/ChangeLog	Fri Feb 19 14:11:21 2010 +0100
+++ b/lib-src/ChangeLog	Wed Feb 24 19:10:47 2010 +0100
@@ -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	Fri Feb 19 14:11:21 2010 +0100
+++ b/lib-src/etags.c	Wed Feb 24 19:10:47 2010 +0100
@@ -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	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/ChangeLog	Wed Feb 24 19:10:47 2010 +0100
@@ -1,3 +1,59 @@
+2010-02-24  Chong Yidong  <cyd@stupidchicken.com>
+
+	* files.el (hack-local-variables-filter): For eval forms, also
+	check safe-local-variable-p (Bug#5636).
+
+2010-02-24  Eduard Wiebe  <usenet@pusto.de>
+
+	* javascript.el (wisent-javascript-jv-expand-tag): Avoid c(ad)ddr
+	and use c(ad)r of cddr (Bug#5640).
+
+2010-02-22  Michael Albinus  <michael.albinus@gmx.de>
+
+	* net/tramp.el (tramp-do-copy-or-rename-file-out-of-band): Protect
+	setting the modes by `ignore-errors'.  It might fail, for example
+	if the file is not owned by the user but the group.
+	(tramp-handle-write-region): Ensure, that `tmpfile' is always readable.
+
+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
--- a/lisp/calendar/icalendar.el	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/calendar/icalendar.el	Wed Feb 24 19:10:47 2010 +0100
@@ -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/cedet/semantic/wisent/javascript.el	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/cedet/semantic/wisent/javascript.el	Wed Feb 24 19:10:47 2010 +0100
@@ -48,8 +48,8 @@
               elts  (cdr elts)
               clone (semantic-tag-clone tag (car elt))
 	      value (car (cdr elt))
-              start (if elts  (caddr elt) (semantic-tag-start tag))
-              end   (if xpand (cdddr elt) (semantic-tag-end   tag))
+	      start (if elts  (car (cddr elt)) (semantic-tag-start tag))
+	      end   (if xpand (cdr (cddr elt)) (semantic-tag-end   tag))
               xpand (cons clone xpand))
 	;; Set the definition of the cloned tag
 	(semantic-tag-put-attribute clone :default-value value)
--- a/lisp/eshell/eshell.el	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/eshell/eshell.el	Wed Feb 24 19:10:47 2010 +0100
@@ -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	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/files.el	Wed Feb 24 19:10:47 2010 +0100
@@ -2981,6 +2981,7 @@
 		 (push elt all-vars)
 		 (or (eq enable-local-eval t)
 		     (hack-one-local-variable-eval-safep (eval (quote val)))
+		     (safe-local-variable-p var val)
 		     (push elt unsafe-vars))))
 	      ;; Ignore duplicates (except `mode') in the present list.
 	      ((and (assq var all-vars) (not (eq var 'mode))) nil)
@@ -5592,8 +5593,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 +5604,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/gnus/ChangeLog	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/gnus/ChangeLog	Wed Feb 24 19:10:47 2010 +0100
@@ -1,3 +1,13 @@
+2010-02-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* gnus-art.el (gnus-treat-display-x-face): Don't burp if
+	shell-command-to-string signals an error (bug#5299).
+
+2010-02-24  Glenn Morris  <rgm@gnu.org>
+
+	* message.el (message-smtpmail-send-it)
+	(message-send-mail-with-mailclient): Doc fixes.
+
 2010-02-16  Glenn Morris  <rgm@gnu.org>
 
 	* message.el (message-default-mail-headers): Change the default value
--- a/lisp/gnus/gnus-art.el	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/gnus/gnus-art.el	Wed Feb 24 19:10:47 2010 +0100
@@ -1422,8 +1422,12 @@
        (gnus-image-type-available-p 'xbm)
        (if (featurep 'xemacs)
 	   (featurep 'xface)
-	 (and (string-match "^0x" (shell-command-to-string "uncompface"))
-	      (executable-find "icontopbm")))
+	 (condition-case nil
+             (and (string-match "^0x" (shell-command-to-string "uncompface"))
+                  (executable-find "icontopbm"))
+           ;; shell-command-to-string may signal an error, e.g. if
+           ;; shell-file-name is not found.
+           (error nil)))
        'head)
   "Display X-Face headers.
 Valid values are nil and `head'.
--- a/lisp/gnus/message.el	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/gnus/message.el	Wed Feb 24 19:10:47 2010 +0100
@@ -4684,17 +4684,17 @@
 
 (defun message-smtpmail-send-it ()
   "Send the prepared message buffer with `smtpmail-send-it'.
-This only differs from `smtpmail-send-it' that this command evaluates
-`message-send-mail-hook' just before sending a message.  It is useful
-if your ISP requires the POP-before-SMTP authentication.  See the Gnus
-manual for details."
+The only difference from `smtpmail-send-it' is that this command
+evaluates `message-send-mail-hook' just before sending a message.
+It is useful if your ISP requires the POP-before-SMTP
+authentication.  See the Gnus manual for details."
   (run-hooks 'message-send-mail-hook)
   (smtpmail-send-it))
 
 (defun message-send-mail-with-mailclient ()
   "Send the prepared message buffer with `mailclient-send-it'.
-This only differs from `smtpmail-send-it' that this command evaluates
-`message-send-mail-hook' just before sending a message."
+The only difference from `mailclient-send-it' is that this
+command evaluates `message-send-mail-hook' just before sending a message."
   (run-hooks 'message-send-mail-hook)
   (mailclient-send-it))
 
--- a/lisp/htmlfontify.el	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/htmlfontify.el	Wed Feb 24 19:10:47 2010 +0100
@@ -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	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/isearch.el	Wed Feb 24 19:10:47 2010 +0100
@@ -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/net/tramp.el	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/net/tramp.el	Wed Feb 24 19:10:47 2010 +0100
@@ -3926,7 +3926,8 @@
 
 	;; Set the mode.
 	(unless (and keep-date copy-keep-date)
-	  (set-file-modes newname (tramp-default-file-modes filename))))
+	  (ignore-errors
+	    (set-file-modes newname (tramp-default-file-modes filename)))))
 
       ;; If the operation was `rename', delete the original file.
       (unless (eq op 'copy)
@@ -5031,7 +5032,10 @@
 	  ;; filename does not exist (eq modes nil) it has been
 	  ;; renamed to the backup file.  This case `save-buffer'
 	  ;; handles permissions.
-	  (when modes (set-file-modes tmpfile modes))
+	  ;; Ensure, that it is still readable.
+	  (when modes
+	    (set-file-modes
+	     tmpfile (logior (or modes 0) (tramp-octal-to-decimal "0400"))))
 
 	  ;; This is a bit lengthy due to the different methods
 	  ;; possible for file transfer.  First, we check whether the
--- a/lisp/nxml/TODO	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/nxml/TODO	Wed Feb 24 19:10:47 2010 +0100
@@ -450,7 +450,7 @@
 
 ** Investigate performance on large files all on one line.
 
-* CVS emacs issues
+* Issues for Emacs versions >= 22
 
 ** Take advantage of UTF-8 CJK support.
 
--- a/lisp/progmodes/compile.el	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/progmodes/compile.el	Wed Feb 24 19:10:47 2010 +0100
@@ -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/startup.el	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/startup.el	Wed Feb 24 19:10:47 2010 +0100
@@ -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	Fri Feb 19 14:11:21 2010 +0100
+++ b/lisp/subr.el	Wed Feb 24 19:10:47 2010 +0100
@@ -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	Fri Feb 19 14:11:21 2010 +0100
+++ b/msdos/ChangeLog	Wed Feb 24 19:10:47 2010 +0100
@@ -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	Fri Feb 19 14:11:21 2010 +0100
+++ b/msdos/INSTALL	Wed Feb 24 19:10:47 2010 +0100
@@ -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	Fri Feb 19 14:11:21 2010 +0100
+++ b/src/ChangeLog	Wed Feb 24 19:10:47 2010 +0100
@@ -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	Fri Feb 19 14:11:21 2010 +0100
+++ b/src/dispextern.h	Wed Feb 24 19:10:47 2010 +0100
@@ -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	Fri Feb 19 14:11:21 2010 +0100
+++ b/src/m/arm.h	Wed Feb 24 19:10:47 2010 +0100
@@ -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	Fri Feb 19 14:11:21 2010 +0100
+++ b/src/term.c	Wed Feb 24 19:10:47 2010 +0100
@@ -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	Fri Feb 19 14:11:21 2010 +0100
+++ b/test/ChangeLog	Wed Feb 24 19:10:47 2010 +0100
@@ -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	Fri Feb 19 14:11:21 2010 +0100
+++ b/test/icalendar-testsuite.el	Wed Feb 24 19:10:47 2010 +0100
@@ -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))