changeset 83544:58cf725f5330

Merged from emacs@sv.gnu.org. Patches applied: * emacs@sv.gnu.org/emacs--devo--0--patch-474 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-475 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-476 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-477 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-478 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-150 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-151 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-152 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-584
author Karoly Lorentey <lorentey@elte.hu>
date Sun, 03 Dec 2006 12:15:03 +0000
parents 6b25ef5cc276 (current diff) dd1407b8e8c6 (diff)
children 034f67f59091
files admin/FOR-RELEASE lisp/ChangeLog lisp/help-fns.el lisp/progmodes/ada-mode.el lisp/recentf.el lisp/simple.el lisp/subr.el lisp/term/x-win.el lisp/url/url-http.el lispref/ChangeLog lispref/elisp.texi man/ChangeLog man/emacs.texi src/dispnew.c src/gtkutil.c src/macterm.c src/sysdep.c
diffstat 47 files changed, 565 insertions(+), 241 deletions(-) [+]
line wrap: on
line diff
--- a/admin/ChangeLog	Sat Oct 14 18:40:58 2006 +0000
+++ b/admin/ChangeLog	Sun Dec 03 12:15:03 2006 +0000
@@ -1,3 +1,7 @@
+2006-10-15  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+	* admin.el (set-version): Set version numbers in "mac" subdirectory.
+
 2006-10-03  Kenichi Handa  <handa@m17n.org>
 
 	* FOR-RELEASE (BUGS): "An iso-8859-6 cannot be saved" fixed.
--- a/admin/FOR-RELEASE	Sat Oct 14 18:40:58 2006 +0000
+++ b/admin/FOR-RELEASE	Sun Dec 03 12:15:03 2006 +0000
@@ -43,8 +43,15 @@
 
 * BUGS
 
-** hashiz@tomba.meridiani.jp, Oct 6: bootstrap failure on FreeBSD 6.2
-Can't be reproduced on GNU/Linux.
+** Monnier, Oct 15: Strange behavior of C-u in the presence of sit-for in p-c-h
+
+** miyoshi@meadowy.org, Oct 16: Emacs allocates unnecessary memory
+
+** david.reitter@gmail.com, Oct 16: url-retrieve may cause hang  
+
+** id.brep@gmail.com, Oct 17: `.newsrc.eld' saves chinese group name in wrong coding
+
+** bojohan+mail@dd.chalmers.se, Oct 17: Formatting `interactive' strings.
 
 * DOCUMENTATION
 
--- a/admin/admin.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/admin/admin.el	Sun Dec 03 12:15:03 2006 +0000
@@ -97,12 +97,12 @@
 	 (comma-version
 	  (concat (car version-components) ","
 		  (cadr version-components) ","
-		  (cadr (cdr version-components)) "," 
+		  (cadr (cdr version-components)) ","
 		  (cadr (cdr (cdr version-components)))))
 	 (comma-space-version
 	  (concat (car version-components) ", "
 		  (cadr version-components) ", "
-		  (cadr (cdr version-components)) ", " 
+		  (cadr (cdr version-components)) ", "
 		  (cadr (cdr (cdr version-components))))))
     (set-version-in-file root "nt/emacs.rc" comma-version
 			 (rx (and "FILEVERSION" (1+ space)
@@ -116,7 +116,43 @@
     (set-version-in-file root "nt/emacs.rc" comma-space-version
 			 (rx (and "\"ProductVersion\"" (0+ space) ?,
 				  (0+ space) ?\" (submatch (1+ (in "0-9, ")))
-				  "\\0\"")))))
+				  "\\0\"")))
+    ;; Some files in the "mac" subdirectory also contain the version
+    ;; number.
+    (set-version-in-file
+     root "mac/Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings"
+     version (rx (and "CFBundleShortVersionString" (0+ space) ?= (0+ space) ?\"
+		      (submatch (1+ (in "0-9."))))))
+    (set-version-in-file
+     root "mac/Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings"
+     version (rx (and "CFBundleGetInfoString" (0+ space) ?= (0+ space) ?\"
+		      (submatch (1+ (in "0-9."))))))
+    (set-version-in-file root "mac/src/Emacs.r" (car version-components)
+			 (rx (and "GNU Emacs " (submatch (1+ (in "0-9")))
+				  " for Mac OS")))
+    (set-version-in-file root "mac/src/Emacs.r" (car version-components)
+			 (rx (and (submatch (1+ (in "0-9"))) (0+ space) ?\,
+				  (0+ space) "/* Major revision in BCD */")))
+    (set-version-in-file root "mac/src/Emacs.r" (cadr version-components)
+			 (rx (and (submatch (1+ (in "0-9"))) (0+ space) ?\,
+				  (0+ space) "/* Minor revision in BCD */")))
+    (set-version-in-file root "mac/src/Emacs.r" (cadr (cdr version-components))
+			 (rx (and (submatch (1+ (in "0-9"))) (0+ space) ?\,
+				  (0+ space) "/* Non-final release # */")))
+    (set-version-in-file root "mac/src/Emacs.r" version
+			 (rx (and (submatch (1+ (in "0-9."))) (0+ space) ?\" ?\,
+				  (0+ space) "/* Short version number */")))
+    (set-version-in-file root "mac/src/Emacs.r" version
+			 (rx (and "/* Short version number */" (0+ space) ?\"
+				  (submatch (1+ (in "0-9."))))))
+    (let* ((third-component (string-to-number (cadr (cdr version-components))))
+	   (release (cond ((>= third-component 90) "alpha")
+			  ((>= third-component 50) "development")
+			  (t "final"))))
+      (set-version-in-file
+       root "mac/src/Emacs.r" release
+       (rx (and (submatch (1+ (in "a-z"))) (0+ space) ?\, (0+ space)
+		"/* development, alpha, beta, or final (release) */"))))))
 
 ;;; arch-tag: 4ea83636-2293-408b-884e-ad64f22a3bf5
 ;; admin.el ends here.
--- a/lisp/ChangeLog	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/ChangeLog	Sun Dec 03 12:15:03 2006 +0000
@@ -1,12 +1,97 @@
+2006-10-18  Juanma Barranquero  <lekktu@gmail.com>
+
+	* progmodes/ada-mode.el (ada-83-string-keywords)
+	(ada-last-which-function-line ada-no-auto-case, ada-indent-region)
+	(ada-which-compiler, ada-align-modes, ada-adjust-case-buffer)
+	(ada-looking-at-semi-private, ada-get-body-name):
+	Fix typos in docstrings.
+	(ada-create-case-exception, ada-create-case-exception-substring):
+	Fix typos in error messages.
+	(ada-goto-matching-end, ada-narrow-to-defun): Doc fixes.
+
+2006-10-18  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
+
+	* term/x-win.el (res-geometry): Don't set geometry from Xresources
+	to default-frame-alist if default-frame-alist already contains
+	width/height.
+
+2006-10-18  Richard Stallman  <rms@gnu.org>
+
+	* emacs-lisp/pp.el (pp-eval-expression): Use `X' to read value.
+	Non-interactive arg is the value, not the expression.
+
+	* simple.el (read-expression-map): Just set it, no defvar.
+
+	* subr.el (insert-for-yank-1): If last inserted char has
+	properties, mark them as rear-nonsticky.
+
+	* recentf.el (recentf-mode): Doc fix.
+
+	* facemenu.el (facemenu-add-new-face): Defend against symbol
+	that isn't a face name.
+
+	* dired-aux.el (dired-do-copy): Doc fix.
+
+2006-10-18  Chong Yidong  <cyd@stupidchicken.com>
+
+	* simple.el (line-move-1): Ignore fields when moving to the
+	beginning of line to avoid getting point stuck.
+
+2006-10-18  Martin Rudalics  <rudalics@gmx.at>
+
+	* textmodes/flyspell.el (flyspell-word-search-backward): Set
+	inhibit-point-motion-hooks to avoid looping due to intangibile
+	text.
+
+2006-10-16  Richard Stallman  <rms@gnu.org>
+
+	* help-fns.el (describe-function-1): Special case optimization
+	for self-insert-command.
+
+2006-10-16  Kim F. Storm  <storm@cua.dk>
+
+	* ido.el (ido-reread-directory): Work in `dir' mode too.
+
+2006-10-15  Martin Rudalics  <rudalics@gmx.at>
+
+	* textmodes/table.el: Require 'regexp-opt.
+
+2006-10-15  Lennart Borgman  <lennart.borgman.073@student.lu.se>
+
+	* progmodes/flymake.el (flymake-get-project-include-dirs-imp):
+	Use shell-quote-argument.
+
+	* shell.el (explicit-bash-args): Likewise.
+
+	* progmodes/ada-xref.el (ada-find-in-src-path): Likewise.
+	Use grep -E rather than egrep.
+
+2006-10-15  Micha,Ak(Bl Cadilhac  <michael.cadilhac@lrde.org>
+
+	* ido.el (ido-exhibit): Allow `-', `_', and trailing `$' in user id.
+
+2006-10-15  Kim F. Storm  <storm@cua.dk>
+
+	* filesets.el (filesets-run-cmd--repl-fn): Use shell-quote-argument.
+
+2006-10-14  Lennart Borgman  <lennart.borgman.073@student.lu.se>
+
+	* filesets.el (filesets-cmd-shell-command): Quote buffer-file-name
+	to protect whitespace and metacharacters from the shell.
+
 2006-10-13  Giorgos Keramidas  <keramida@ceid.upatras.gr>  (tiny change)
 
-	* apropos.el (apropos-pattern-quoted): Fix a typo in a doc
-	string.
+	* apropos.el (apropos-pattern-quoted): Fix a typo in a doc string.
 
 2006-10-13  Eli Zaretskii  <eliz@gnu.org>
 
 	* subr.el (start-process-shell-command): Doc fix.
 
+2006-10-13  Andrea Russo  <rastandy@salug.it>  (tiny change)
+
+	* info-look.el <maxima-mode, inferior-maxima-mode>: Allow [0-9] in
+	the regexp for Maxima symbols.
+
 2006-10-13  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* vc-hooks.el (vc-ignore-dir-regexp): Make it into a defcustom.
@@ -19,8 +104,13 @@
 
 2006-10-12  Carsten Dominik  <dominik@science.uva.nl>
 
-	* textmodes/reftex-global.el (reftex-create-tags-file): Quote file
-	arguments.
+	* textmodes/reftex-global.el (reftex-create-tags-file):
+	Quote file arguments.
+
+2006-10-12  Richard Stallman  <rms@gnu.org>
+
+	* files.el (file-name-history): Add defvar.
+	(save-some-buffers-action-alist): Improve description strings.
 
 2006-10-12  Andreas Schwab  <schwab@suse.de>
 
@@ -380,7 +470,7 @@
 		was inverted;
 		Support `comment-column' = 0.
 
-2006-10-11  Martin Rudalics <rudalics@gmx.at>
+2006-10-11  Martin Rudalics  <rudalics@gmx.at>
 
 	* dnd.el (dnd-handle-one-url): Fix typo in doc-string.
 	* help-at-pt.el (scan-buf-move-to-region): Likewise.
@@ -424,8 +514,8 @@
 
 2006-10-08  Nick Roberts  <nickrob@snap.net.nz>
 
-	* progmodes/gdb-ui.el (gdb-speedbar-expand-node): Burp if
-	GUD buffer has been killed.
+	* progmodes/gdb-ui.el (gdb-speedbar-expand-node):
+	Burp if GUD buffer has been killed.
 
 2006-10-07  Stefan Monnier  <monnier@iro.umontreal.ca>
 
--- a/lisp/dired-aux.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/dired-aux.el	Sun Dec 03 12:15:03 2006 +0000
@@ -1560,7 +1560,10 @@
 and new copies of these files are made in that directory
 with the same names that the files currently have.  The default
 suggested for the target directory depends on the value of
-`dired-dwim-target', which see."
+`dired-dwim-target', which see.
+
+This command copies symbolic links by creating new ones,
+like `cp -d'."
   (interactive "P")
   (let ((dired-recursive-copies dired-recursive-copies))
     (dired-do-create-files 'copy (function dired-copy-file)
--- a/lisp/emacs-lisp/pp.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/emacs-lisp/pp.el	Sun Dec 03 12:15:03 2006 +0000
@@ -97,13 +97,16 @@
   (princ (pp-to-string object) (or stream standard-output)))
 
 ;;;###autoload
-(defun pp-eval-expression (expression)
-  "Evaluate EXPRESSION and pretty-print value into a new display buffer.
-If the pretty-printed value fits on one line, the message line is used
-instead.  The value is also consed onto the front of the list
-in the variable `values'."
-  (interactive "xPp-eval: ")
-  (setq values (cons (eval expression) values))
+(defun pp-eval-expression (expval)
+  "Evaluate an expression, then pretty-print value EXPVAL into a new buffer.
+If pretty-printed EXPVAL fits on one line, display it in the echo
+area instead.  Also add EXPVAL to the front of the list
+in the variable `values'.
+
+Non-interactively, the argument is the value, EXPVAL, not the expression
+to evaluate."
+  (interactive "XPp-eval: ")
+  (setq values (cons expval values))
   (let* ((old-show-function temp-buffer-show-function)
 	 ;; Use this function to display the buffer.
 	 ;; This function either decides not to display it at all
--- a/lisp/facemenu.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/facemenu.el	Sun Dec 03 12:15:03 2006 +0000
@@ -690,6 +690,9 @@
     (cond ((facemenu-iterate ; check if equivalent face is already in the menu
 	    (lambda (m) (and (listp m)
 			     (symbolp (car m))
+			     ;; Avoid error in face-equal
+			     ;; when a non-face is erroneously present.
+			     (facep (car m))
 			     (face-equal (car m) symbol)))
 	    (cdr (symbol-function menu))))
 	  ;; Faces with a keyboard equivalent.  These go at the front.
--- a/lisp/filesets.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/filesets.el	Sun Dec 03 12:15:03 2006 +0000
@@ -1603,7 +1603,7 @@
 		      ((equal arg "<file-name>")
 		       (buffer-file-name))
 		      ((equal arg "<<file-name>>")
-		       (filesets-quote (buffer-file-name)))
+		       (shell-quote-argument (buffer-file-name)))
 		      (t
 		       arg))))
 
@@ -1701,7 +1701,7 @@
 		  ok)
 	      t)))
     (when ok
-      (let ((cmd (format txt (buffer-file-name))))
+      (let ((cmd (format txt (shell-quote-argument (buffer-file-name)))))
 	(message "Filesets: %s" cmd)
 	(filesets-cmd-show-result cmd
 				  (shell-command-to-string cmd))))))
--- a/lisp/gnus/ChangeLog	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/gnus/ChangeLog	Sun Dec 03 12:15:03 2006 +0000
@@ -1,3 +1,23 @@
+2006-10-13  Andreas Seltenreich  <uwi7@rz.uni-karlsruhe.de>
+
+	* mm-uu.el (mm-uu-pgp-signed-extract-1): Use RFC 2440 definition of
+	"blank line" when searching for end of armor headers.
+
+2006-10-11  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* gmm-utils.el (gmm-write-region): Fix variable name.
+
+2006-10-10  Reiner Steib  <Reiner.Steib@gmx.de>
+
+	* gmm-utils.el (gmm-write-region): New function based on compatibility
+	code from `mm-make-temp-file'.
+
+	* mm-util.el (mm-make-temp-file): Use `gmm-write-region'.
+
+	* nnmaildir.el (nnmaildir--update-nov)
+	(nnmaildir-request-replace-article, nnmaildir-request-accept-article):
+	Use `gmm-write-region'.
+
 2006-10-04  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* gnus-sum.el (gnus-summary-make-menu-bar): Clarify
--- a/lisp/gnus/gmm-utils.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/gnus/gmm-utils.el	Sun Dec 03 12:15:03 2006 +0000
@@ -401,6 +401,21 @@
 		 (string-match "^\\(.+\\)-mode$" mode)
 		 (match-string 1 mode))))))
 
+(defun gmm-write-region (start end filename &optional append visit
+			       lockname mustbenew)
+  "Compatibility function for `write-region'.
+
+In XEmacs, the seventh argument of `write-region' specifies the
+coding-system."
+  (if (and mustbenew
+	   (or (featurep 'xemacs)
+	       (= emacs-major-version 20)))
+      (if (file-exists-p filename)
+	  (signal 'file-already-exists
+		  (list "File exists" filename))
+	(write-region start end filename append visit lockname))
+    (write-region start end filename append visit lockname mustbenew)))
+
 (provide 'gmm-utils)
 
 ;; arch-tag: e0b60920-2ce6-40c1-bfc0-cadbbe26b602
--- a/lisp/gnus/mm-util.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/gnus/mm-util.el	Sun Dec 03 12:15:03 2006 +0000
@@ -1126,17 +1126,11 @@
 			     (setq file (concat file suffix)))
 			 (if dir-flag
 			     (make-directory file)
-			   (if (or (featurep 'xemacs)
-				   (= emacs-major-version 20))
-			       ;; NOTE: This is unsafe if Emacs 20
-			       ;; users and XEmacs users don't use
-			       ;; a secure temp directory.
-			       (if (file-exists-p file)
-				   (signal 'file-already-exists
-					   (list "File exists" file))
-				 (write-region "" nil file nil 'silent))
-			     (write-region "" nil file nil 'silent
-					   nil 'excl)))
+			   ;; NOTE: This is unsafe if Emacs 20
+			   ;; users and XEmacs users don't use
+			   ;; a secure temp directory.
+			   (gmm-write-region "" nil file nil 'silent
+					     nil 'excl))
 			 nil)
 		     (file-already-exists t)
 		     ;; The Emacs 20 and XEmacs versions of
--- a/lisp/gnus/mm-uu.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/gnus/mm-uu.el	Sun Dec 03 12:15:03 2006 +0000
@@ -373,7 +373,7 @@
 	   mm-security-handle 'gnus-details
 	   (format "Clear verification not supported by `%s'.\n" mml2015-use))))
       (goto-char (point-min))
-      (if (search-forward "\n\n" nil t)
+      (if (re-search-forward "\n[\t ]*\n" nil t)
 	  (delete-region (point-min) (point)))
       (if (re-search-forward mm-uu-pgp-beginning-signature nil t)
 	  (delete-region (match-beginning 0) (point-max)))
--- a/lisp/gnus/nnmaildir.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/gnus/nnmaildir.el	Sun Dec 03 12:15:03 2006 +0000
@@ -428,7 +428,8 @@
 	(prin1 (vector storage-version num msgid nov) (current-buffer))
 	(setq file (concat novfile ":"))
 	(nnmaildir--unlink file)
-	(write-region (point-min) (point-max) file nil 'no-message nil 'excl))
+	(gmm-write-region (point-min) (point-max) file nil 'no-message nil
+			  'excl))
       (rename-file file novfile 'replace)
       (setf (nnmaildir--art-msgid article) msgid)
       nov)))
@@ -1246,8 +1247,8 @@
 	(throw 'return nil))
       (save-excursion
 	(set-buffer buffer)
-	(write-region (point-min) (point-max) tmpfile nil 'no-message nil
-		      'excl))
+	(gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil
+			  'excl))
       (unix-sync) ;; no fsync :(
       (rename-file tmpfile (concat (nnmaildir--cur dir) file suffix) 'replace)
       t)))
@@ -1341,8 +1342,8 @@
       (condition-case nil
 	  (add-name-to-file nnmaildir--file tmpfile)
 	(error
-	 (write-region (point-min) (point-max) tmpfile nil 'no-message nil
-		       'excl)
+	 (gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil
+			   'excl)
 	 (unix-sync))) ;; no fsync :(
       (nnheader-cancel-timer 24h)
       (condition-case err
--- a/lisp/help-fns.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/help-fns.el	Sun Dec 03 12:15:03 2006 +0000
@@ -383,35 +383,40 @@
     (princ ".")
     (terpri)
     (when (commandp function)
-      (let* ((remapped (command-remapping function))
-	     (keys (where-is-internal
-		    (or remapped function) overriding-local-map nil nil))
-	     non-modified-keys)
-	;; Which non-control non-meta keys run this command?
-	(dolist (key keys)
-	  (if (member (event-modifiers (aref key 0)) '(nil (shift)))
-	      (push key non-modified-keys)))
-	(when remapped
-	  (princ "It is remapped to `")
-	  (princ (symbol-name remapped))
-	  (princ "'"))
+      (if (and (eq function 'self-insert-command)
+	       (eq (key-binding "a") 'self-insert-command)
+	       (eq (key-binding "b") 'self-insert-command)
+	       (eq (key-binding "c") 'self-insert-command))
+	  (princ "It is bound to many ordinary text characters.\n")
+	(let* ((remapped (command-remapping function))
+	       (keys (where-is-internal
+		      (or remapped function) overriding-local-map nil nil))
+	       non-modified-keys)
+	  ;; Which non-control non-meta keys run this command?
+	  (dolist (key keys)
+	    (if (member (event-modifiers (aref key 0)) '(nil (shift)))
+		(push key non-modified-keys)))
+	  (when remapped
+	    (princ "It is remapped to `")
+	    (princ (symbol-name remapped))
+	    (princ "'"))
 
-	(when keys
-	  (princ (if remapped " which is bound to " "It is bound to "))
-	  ;; FIXME: This list can be very long (f.ex. for self-insert-command).
-	  ;; If there are many, remove them from KEYS.
-	  (if (< (length non-modified-keys) 10)
-	      (princ (mapconcat 'key-description keys ", "))
-	    (dolist (key non-modified-keys)
-	      (setq keys (delq key keys)))
-	    (if keys
-		(progn
-		  (princ (mapconcat 'key-description keys ", "))
-		  (princ ", and many ordinary text characters"))
-	      (princ "many ordinary text characters"))))
-	(when (or remapped keys non-modified-keys)
-	  (princ ".")
-	  (terpri))))
+	  (when keys
+	    (princ (if remapped " which is bound to " "It is bound to "))
+	    ;; If lots of ordinary text characters run this command,
+	    ;; don't mention them one by one.
+	    (if (< (length non-modified-keys) 10)
+		(princ (mapconcat 'key-description keys ", "))
+	      (dolist (key non-modified-keys)
+		(setq keys (delq key keys)))
+	      (if keys
+		  (progn
+		    (princ (mapconcat 'key-description keys ", "))
+		    (princ ", and many ordinary text characters"))
+		(princ "many ordinary text characters"))))
+	  (when (or remapped keys non-modified-keys)
+	    (princ ".")
+	    (terpri)))))
     (let* ((arglist (help-function-arglist def))
 	   (doc (documentation function))
 	   (usage (help-split-fundoc doc function)))
--- a/lisp/ido.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/ido.el	Sun Dec 03 12:15:03 2006 +0000
@@ -2611,7 +2611,7 @@
 May be useful if cached version is no longer valid, but directory
 timestamp has not changed (e.g. with ftp or on Windows)."
   (interactive)
-  (if (and ido-mode (eq ido-cur-item 'file))
+  (if (and ido-mode (memq ido-cur-item '(file dir)))
       (progn
 	(if (ido-is-unc-root)
 	    (setq ido-unc-hosts-cache t)
@@ -4168,7 +4168,7 @@
 	    (setq refresh t))
 	   ((string-equal contents "./")
 	    (setq refresh t))
-	   ((string-match "\\`~[a-zA-Z0-9]+/\\'" contents)
+	   ((string-match "\\`~[-_a-zA-Z0-9]+[$]?/\\'" contents)
 	    (ido-trace "new home" contents)
 	    (ido-set-current-home contents)
 	    (setq refresh t))
--- a/lisp/mail/smtpmail.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/mail/smtpmail.el	Sun Dec 03 12:15:03 2006 +0000
@@ -541,6 +541,17 @@
 		 (decoded (base64-decode-string challenge))
 		 (hash (rfc2104-hash 'md5 64 16 passwd decoded))
 		 (response (concat (smtpmail-cred-user cred) " " hash))
+		 ;; Osamu Yamane <yamane@green.ocn.ne.jp>:
+		 ;; SMTP auth fails because the SMTP server identifies
+		 ;; only the first part of the string (delimited by
+		 ;; new line characters) as a response from the
+		 ;; client, and the rest as distinct commands.
+
+		 ;; In my case, the response string is 80 characters
+		 ;; long.  Without the no-line-break option for
+		 ;; base64-encode-sting, only the first 76 characters
+		 ;; are taken as a response to the server, and the
+		 ;; authentication fails.
 		 (encoded (base64-encode-string response t)))
 	    (smtpmail-send-command process (format "%s" encoded))
 	    (if (or (null (car (setq ret (smtpmail-read-response process))))
--- a/lisp/progmodes/ada-mode.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/progmodes/ada-mode.el	Sun Dec 03 12:15:03 2006 +0000
@@ -218,8 +218,8 @@
 to be used for that word in Ada files.  If the line starts with the
 character *, then the exception will be used for substrings that either
 start at the beginning of a word or after a _ character, and end either
-at the end of the word or at a _ character.  Each line can be terminated by
-a comment."
+at the end of the word or at a _ character.  Each line can be terminated
+by a comment."
   :type '(repeat (file))
   :group 'ada)
 
@@ -439,10 +439,10 @@
 (defcustom ada-which-compiler 'gnat
   "*Name of the compiler to use.
 This will determine what features are made available through the Ada mode.
-The possible choices are :
+The possible choices are:
 `gnat': Use Ada Core Technologies' Gnat compiler.  Add some cross-referencing
-    features
-`generic': Use a generic compiler"
+    features.
+`generic': Use a generic compiler."
   :type '(choice (const gnat)
                  (const generic))
   :group 'ada)
@@ -485,7 +485,7 @@
       "reverse" "select" "separate" "subtype" "task" "terminate" "then"
       "type" "use" "when" "while" "with" "xor")
     "List of Ada keywords.
-This variable is used to define `ada-83-keywords' and `ada-95-keywords'"))
+This variable is used to define `ada-83-keywords' and `ada-95-keywords'."))
 
 (defvar ada-ret-binding nil
   "Variable to save key binding of RET when casing is activated.")
@@ -532,7 +532,7 @@
      (valid   . (lambda() (not (ada-in-comment-p))))
      (modes   . '(ada-mode)))
     )
-  "Ada support for align.el >= 2.8
+  "Ada support for align.el >= 2.8.
 This variable defines several rules to use to align different lines.")
 
 (defconst ada-align-region-separate
@@ -1439,7 +1439,7 @@
           ((listp ada-case-exception-file)
            (setq file-name (car ada-case-exception-file)))
           (t
-           (error (concat "No exception file specified. "
+           (error (concat "No exception file specified.  "
 			  "See variable ada-case-exception-file"))))
 
     (set-syntax-table ada-mode-symbol-syntax-table)
@@ -1478,7 +1478,7 @@
 	       ((listp ada-case-exception-file)
 		(car ada-case-exception-file))
 	       (t
-		(error (concat "No exception file specified. "
+		(error (concat "No exception file specified.  "
 			       "See variable ada-case-exception-file"))))))
 
     ;;  Find the substring to define as an exception. Order is: the parameter,
@@ -1593,8 +1593,8 @@
 
 (defun ada-adjust-case-identifier ()
   "Adjust case of the previous identifier.
-The auto-casing is done according to the value of `ada-case-identifier' and
-the exceptions defined in `ada-case-exception-file'."
+The auto-casing is done according to the value of `ada-case-identifier'
+and the exceptions defined in `ada-case-exception-file'."
   (interactive)
   (if (or (equal ada-case-exception '())
           (equal (char-after) ?_))
@@ -1743,7 +1743,7 @@
 (defun ada-no-auto-case (&optional arg)
   "Do nothing.
 This function can be used for the auto-casing variables in the Ada mode, to
-adapt to unusal auto-casing schemes. Since it does nothing, you can for
+adapt to unusal auto-casing schemes.  Since it does nothing, you can for
 instance use it for `ada-case-identifier' if you don't want any special
 auto-casing for identifiers, whereas keywords have to be lower-cased.
 See also `ada-auto-case' to disable auto casing altogether."
@@ -1806,7 +1806,7 @@
       (set-syntax-table previous-syntax-table))))
 
 (defun ada-adjust-case-buffer ()
-  "Adjusts the case of all words in the whole buffer.
+  "Adjust the case of all words in the whole buffer.
 ATTENTION: This function might take very long for big buffers!"
   (interactive "*")
   (ada-adjust-case-region (point-min) (point-max)))
@@ -2138,7 +2138,7 @@
         (ada-indent-current))
       (forward-line 1)
       (setq block-done      (1+ block-done)))
-    (message "indenting ... done")))
+    (message "Indenting ... done")))
 
 (defun ada-indent-newline-indent ()
   "Indent the current line, insert a newline and then indent the new line."
@@ -3841,7 +3841,7 @@
 (defun ada-goto-matching-end (&optional nest-level noerror)
   "Move point to the end of a block.
 Which block depends on the value of NEST-LEVEL, which defaults to zero.
-If NOERROR is non-nil, it only returns nil if found no matching start."
+If NOERROR is non-nil, it only returns nil if no matching start found."
   (let ((nest-count (or nest-level 0))
 	(regex (eval-when-compile
 		 (concat "\\<"
@@ -4058,7 +4058,7 @@
 
 (defun ada-looking-at-semi-private ()
   "Return t if looking at the start of a private section in a package.
-Returns nil if the private is part of the package name, as in
+Return nil if the private is part of the package name, as in
 'private package A is...' (this can only happen at top level)."
   (save-excursion
     (and (looking-at "\\<private\\>")
@@ -4968,7 +4968,7 @@
 
 
 (defvar ada-last-which-function-line -1
-  "Last on which `ada-which-function' was called.")
+  "Last line on which `ada-which-function' was called.")
 (defvar ada-last-which-function-subprog 0
   "Last subprogram name returned by `ada-which-function'.")
 (make-variable-buffer-local 'ada-last-which-function-subprog)
@@ -5062,7 +5062,7 @@
 (defun ada-get-body-name (&optional spec-name)
   "Return the file name for the body of SPEC-NAME.
 If SPEC-NAME is nil, return the body for the current package.
-Returns nil if no body was found."
+Return nil if no body was found."
   (interactive)
 
   (unless spec-name (setq spec-name (buffer-file-name)))
@@ -5223,7 +5223,7 @@
   "Make text outside current subprogram invisible.
 The subprogram visible is the one that contains or follow point.
 Optional ARG is ignored.
-Use `M-x widen' to go back to the full visibility for the buffer."
+Use \\[widen] to go back to the full visibility for the buffer."
 
   (interactive)
   (save-excursion
--- a/lisp/progmodes/ada-xref.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/progmodes/ada-xref.el	Sun Dec 03 12:15:03 2006 +0000
@@ -1916,8 +1916,12 @@
       (set-buffer (get-buffer-create "*grep*"))
       (while dirs
 	(insert (shell-command-to-string
-		 (concat "egrep -i -h '^X|" regexp "( |$)' "
-			 (file-name-as-directory (car dirs)) "*.ali")))
+		 (concat
+		  "grep -E -i -h "
+		  (shell-quote-argument (concat "^X|" regexp "( |$)"))
+		  " "
+		  (shell-quote-argument (file-name-as-directory (car dirs)))
+		  "*.ali")))
 	(set 'dirs (cdr dirs)))
 
       ;;  Now parse the output
--- a/lisp/progmodes/flymake.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/progmodes/flymake.el	Sun Dec 03 12:15:03 2006 +0000
@@ -1021,7 +1021,9 @@
       (progn
 	(flymake-get-project-include-dirs-from-cache basedir))
     ;;else
-    (let* ((command-line  (concat "make -C\"" basedir "\" DUMPVARS=INCLUDE_DIRS dumpvars"))
+    (let* ((command-line  (concat "make -C "
+				  (shell-quote-argument basedir)
+				  " DUMPVARS=INCLUDE_DIRS dumpvars"))
 	   (output        (shell-command-to-string command-line))
 	   (lines         (flymake-split-string output "\n"))
 	   (count         (length lines))
--- a/lisp/recentf.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/recentf.el	Sun Dec 03 12:15:03 2006 +0000
@@ -1318,9 +1318,7 @@
 Returns non-nil if the new state is enabled.
 
 When recentf mode is enabled, it maintains a menu for visiting files
-that were operated on recently.
-
-\\{recentf-mode-map}"
+that were operated on recently."
   :global t
   :group 'recentf
   :keymap recentf-mode-map
--- a/lisp/shell.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/shell.el	Sun Dec 03 12:15:03 2006 +0000
@@ -298,7 +298,9 @@
 	     (equal name "bash")
 	     (file-executable-p prog)
 	     (string-match "bad option"
-			   (shell-command-to-string (concat prog " --noediting"))))
+			   (shell-command-to-string
+			    (concat (shell-quote-argument prog)
+				    " --noediting"))))
 	'("-i")
       '("--noediting" "-i")))
   "Args passed to inferior shell by \\[shell], if the shell is bash.
--- a/lisp/simple.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/simple.el	Sun Dec 03 12:15:03 2006 +0000
@@ -985,12 +985,11 @@
 		     (single-key-description char))
 		   encoding-msg pos total percent col hscroll))))))
 
-(defvar read-expression-map
-  (let ((m (make-sparse-keymap)))
-    (define-key m "\M-\t" 'lisp-complete-symbol)
-    (set-keymap-parent m minibuffer-local-map)
-    m)
-  "Minibuffer keymap used for reading Lisp expressions.")
+;; Initialize read-expression-map.  It is defined at C level.
+(let ((m (make-sparse-keymap)))
+  (define-key m "\M-\t" 'lisp-complete-symbol)
+  (set-keymap-parent m minibuffer-local-map)
+  (setq read-expression-map m))
 
 (defvar read-expression-history nil)
 
@@ -3617,7 +3616,14 @@
 	      ;; The logic of this is the same as the loop above,
 	      ;; it just goes in the other direction.
 	      (while (and (< arg 0) (not done))
-		(beginning-of-line)
+		;; For completely consistency with the forward-motion
+		;; case, we should call beginning-of-line here.
+		;; However, if point is inside a field and on a
+		;; continued line, the call to (vertical-motion -1)
+		;; below won't move us back far enough; then we return
+		;; to the same column in line-move-finish, and point
+		;; gets stuck -- cyd
+		(forward-line 0)
 		(cond
 		 ((bobp)
 		  (if (not noerror)
--- a/lisp/subr.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/subr.el	Sun Dec 03 12:15:03 2006 +0000
@@ -2195,6 +2195,12 @@
 
     (unless (nth 2 handler) ;; NOEXCLUDE
       (remove-yank-excluded-properties opoint (point)))
+
+    ;; If last inserted char has properties, mark them as rear-nonsticky.
+    (if (and (> end opoint)
+	     (text-properties-at (1- end)))
+	(put-text-property (1- end) end 'rear-nonsticky t))
+
     (if (eq yank-undo-function t)  ;; not set by FUNCTION
 	(setq yank-undo-function (nth 3 handler))) ;; UNDO
     (if (nth 4 handler) ;; COMMAND
--- a/lisp/term/x-win.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/term/x-win.el	Sun Dec 03 12:15:03 2006 +0000
@@ -2477,12 +2477,15 @@
 				 (cons '(user-size . t) parsed))))
 	  ;; All geometry parms apply to the initial frame.
 	  (setq initial-frame-alist (append initial-frame-alist parsed))
-	  ;; The size parms apply to all frames.
-	  (if (assq 'height parsed)
+	  ;; The size parms apply to all frames.  Don't set it if there are 
+	  ;; sizes there already (from command line).
+	  (if (and (assq 'height parsed)
+		   (not (assq 'height default-frame-alist)))
 	      (setq default-frame-alist
 		    (cons (cons 'height (cdr (assq 'height parsed)))
 			  default-frame-alist)))
-	  (if (assq 'width parsed)
+	  (if (and (assq 'width parsed)
+		   (not (assq 'width default-frame-alist)))
 	      (setq default-frame-alist
 		    (cons (cons 'width (cdr (assq 'width parsed)))
 			  default-frame-alist))))))
--- a/lisp/textmodes/flyspell.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/textmodes/flyspell.el	Sun Dec 03 12:15:03 2006 +0000
@@ -959,6 +959,7 @@
 (defun flyspell-word-search-backward (word bound)
   (save-excursion
     (let ((r '())
+	  (inhibit-point-motion-hooks t)
 	  p)
       (while (and (not r) (setq p (search-backward word bound t)))
 	(let ((lw (flyspell-get-word '())))
@@ -973,6 +974,7 @@
 (defun flyspell-word-search-forward (word bound)
   (save-excursion
     (let ((r '())
+	  (inhibit-point-motion-hooks t)
 	  p)
       (while (and (not r) (setq p (search-forward word bound t)))
 	(let ((lw (flyspell-get-word '())))
--- a/lisp/textmodes/table.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/textmodes/table.el	Sun Dec 03 12:15:03 2006 +0000
@@ -614,6 +614,7 @@
 ;;; Code:
 
 
+(require 'regexp-opt)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;
--- a/lisp/url/ChangeLog	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/url/ChangeLog	Sun Dec 03 12:15:03 2006 +0000
@@ -1,3 +1,8 @@
+2006-10-16  Magnus Henoch  <mange@freemail.hu>
+
+	* url-http.el (url-https-create-secure-wrapper): Always use tls
+	gateway method.
+
 2006-10-12  Magnus Henoch  <mange@freemail.hu>
 
 	* url-http.el (url-http-find-free-connection): Handle
--- a/lisp/url/url-http.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/url/url-http.el	Sun Dec 03 12:15:03 2006 +0000
@@ -1261,9 +1261,7 @@
 (defmacro url-https-create-secure-wrapper (method args)
   `(defun ,(intern (format (if method "url-https-%s" "url-https") method)) ,args
     ,(format "HTTPS wrapper around `%s' call." (or method "url-http"))
-    (let ((url-gateway-method (condition-case ()
-				  (require 'ssl)
-				(error 'tls))))
+    (let ((url-gateway-method 'tls))
       (,(intern (format (if method "url-http-%s" "url-http") method))
        ,@(remove '&rest (remove '&optional args))))))
 
--- a/lisp/woman.el	Sat Oct 14 18:40:58 2006 +0000
+++ b/lisp/woman.el	Sun Dec 03 12:15:03 2006 +0000
@@ -4121,7 +4121,11 @@
 	       (eolp)
 	       (skip-syntax-forward " ")
 	       (setq woman-leave-blank-lines 1))
-	  (beginning-of-line)
+	  ;; This shouldn't happen, but in case it does (e.g. for
+	  ;; badly-formatted manfiles with no terminating newline),
+	  ;; avoid an infinite loop.
+	  (unless (and (eolp) (eobp))
+	    (beginning-of-line))
 	  ;; If a single short line then just leave it.
 	  ;; This is necessary to preserve some table layouts.
 	  ;; PROBABLY NOT NECESSARY WITH SQUEEZE MODIFICATION !!!!!
--- a/lispref/ChangeLog	Sat Oct 14 18:40:58 2006 +0000
+++ b/lispref/ChangeLog	Sun Dec 03 12:15:03 2006 +0000
@@ -1,3 +1,32 @@
+2006-10-18  Juanma Barranquero  <lekktu@gmail.com>
+
+	* control.texi (Processing of Errors): Use @var for an argument,
+	not @code.
+
+2006-10-16  Richard Stallman  <rms@gnu.org>
+
+	* edebug.texi (Edebug Recursive Edit): Minor cleanup.
+
+	* keymaps.texi (Format of Keymaps): Show all the keymap element
+	patterns that result from menu items.
+	(Key Lookup): Minor cleanups.
+
+	* modes.texi (Precalculated Fontification): Don't say that
+	not setting font-lock-defaults avoids loading font-lock.
+
+	* help.texi (Documentation): Move xref to Emacs Manual here.
+	(Documentation Basics): From here.
+	Also doc emacs-lisp-docstring-fill-column.
+
+	* elisp.texi: Update version and ISBN.
+
+	* commands.texi (Interactive Call): Clarify KEYS arg to
+	call-interactively is a vector.
+	(Command Loop Info): Delete anchor in this-command-keys.
+	Add anchor in this-command-keys-vector.
+	(Recursive Editing): Document how recursive-edit
+	handles the current buffer.
+
 2006-10-13  Chong Yidong  <cyd@stupidchicken.com>
 
 	* frames.texi (Frame Titles): %c and %l are ignored in
@@ -2179,7 +2208,7 @@
 	* elisp.texi (Top): Update detailed menu for node changes.
 
 	* modes.texi (Modes): Update Menu.
-	(Hooks):  Move to beginning of chapter.
+	(Hooks): Move to beginning of chapter.
 	Most minor modes run mode hooks too.
 	`add-hook' can handle void hooks or hooks whose value is a single
 	function.
@@ -3444,7 +3473,7 @@
 	(Quoted Character Input): Clarify description of
 	`read-quoted-char' and fix example.
 	(Quitting): Add `with-local-quit'.
-	(Disabling Commands):  Correct and clarify descriptions of
+	(Disabling Commands): Correct and clarify descriptions of
 	`enable-command' and `disable-command'.
 	Mention what happens if `disabled-command-hook' is nil.
 	(Keyboard Macros): Mention LOOPFUNC arg to `execute-kbd-macro'.
@@ -3758,7 +3787,7 @@
 
 2004-04-04  Luc Teirlinck  <teirllm@auburn.edu>
 
-	* backups.texi:  Various small changes in addition to:
+	* backups.texi: Various small changes in addition to:
 	(Making Backups): Mention return value of `backup-buffer'.
 	(Auto-Saving): Mention optional FORCE argument to
 	`delete-auto-save-file-if-necessary'.
@@ -5339,7 +5368,7 @@
 
 Tue Jun 26 09:57:26 1990  David Lawrence  (tale@geech)
 
-	* files.texi:  Noted that completion-ignored-extensions is ignored
+	* files.texi: Noted that completion-ignored-extensions is ignored
 	when making *Completions*.
 
 Fri Jun  8 16:44:44 EDT 1990 Jay Fenlason (hack@ai.mit.edu)
@@ -5374,7 +5403,7 @@
 
 Mon Apr 17 18:56:50 1989  Robert J. Chassell  (bob@rice-chex.ai.mit.edu)
 
-	* texinfo.tex:  temporarily added
+	* texinfo.tex: Temporarily added
 		\let\result=\dblarrow
 		\def\error{{\it ERROR} \longdblarrow}
 	We need to do this better soon.
--- a/lispref/commands.texi	Sat Oct 14 18:40:58 2006 +0000
+++ b/lispref/commands.texi	Sun Dec 03 12:15:03 2006 +0000
@@ -575,10 +575,11 @@
 Otherwise, the command is added only if it uses the minibuffer to read
 an argument.  @xref{Command History}.
 
-The argument @var{keys}, if given, specifies the sequence of events to
-supply if the command inquires which events were used to invoke it.
-If @var{keys} is omitted or @code{nil}, the return value of
-@code{this-command-keys} is used.  @xref{Definition of this-command-keys}.
+The argument @var{keys}, if given, should be a vector which specifies
+the sequence of events to supply if the command inquires which events
+were used to invoke it.  If @var{keys} is omitted or @code{nil}, the
+default is the return value of @code{this-command-keys-vector}.
+@xref{Definition of this-command-keys-vector}.
 @end defun
 
 @defun command-execute command &optional record-flag keys special
@@ -785,7 +786,6 @@
 @end defvar
 
 @defun this-command-keys
-@anchor{Definition of this-command-keys}
 This function returns a string or vector containing the key sequence
 that invoked the present command, plus any previous commands that
 generated the prefix argument for this command.  Any events read by the
@@ -806,6 +806,7 @@
 @end defun
 
 @defun this-command-keys-vector
+@anchor{Definition of this-command-keys-vector}
 Like @code{this-command-keys}, except that it always returns the events
 in a vector, so you don't need to deal with the complexities of storing
 input events in a string (@pxref{Strings of Events}).
@@ -3021,7 +3022,12 @@
 editing.  When called from a Lisp program, it enters a recursive editing
 level.
 
-  In the following example, the function @code{simple-rec} first
+If the current buffer is not the same as the selected window's buffer,
+@code{recursive-edit} saves and restores the current buffer.  Otherwise,
+if you switch buffers, the buffer you switched to is current after
+@code{recursive-edit} returns.
+
+In the following example, the function @code{simple-rec} first
 advances point one word, then enters a recursive edit, printing out a
 message in the echo area.  The user can then do any editing desired, and
 then type @kbd{C-M-c} to exit and continue executing @code{simple-rec}.
--- a/lispref/control.texi	Sat Oct 14 18:40:58 2006 +0000
+++ b/lispref/control.texi	Sun Dec 03 12:15:03 2006 +0000
@@ -862,7 +862,7 @@
 function should take three arguments: @var{data}, a list of the same
 form that @code{condition-case} would bind to its variable;
 @var{context}, a string describing the situation in which the error
-occurred, or (more often) @code{nil}; and @code{caller}, the Lisp
+occurred, or (more often) @code{nil}; and @var{caller}, the Lisp
 function which called the primitive that signaled the error.
 @end defvar
 
--- a/lispref/edebug.texi	Sat Oct 14 18:40:58 2006 +0000
+++ b/lispref/edebug.texi	Sun Dec 03 12:15:03 2006 +0000
@@ -1044,9 +1044,9 @@
 @code{track-mouse}.  Commands used within Edebug do not affect these
 variables outside of Edebug.
 
-The key sequence returned by @code{this-command-keys} is changed by
-executing commands within Edebug and there is no way to reset
-the key sequence from Lisp.
+Executing commands within Edebug can change the key sequence that
+would be returned by @code{this-command-keys}, and there is no way to
+reset the key sequence from Lisp.
 
 Edebug cannot save and restore the value of
 @code{unread-command-events}.  Entering Edebug while this variable has a
--- a/lispref/elisp.texi	Sat Oct 14 18:40:58 2006 +0000
+++ b/lispref/elisp.texi	Sun Dec 03 12:15:03 2006 +0000
@@ -7,7 +7,7 @@
 @c Version of the manual and of Emacs.
 @c Please remember to update the edition number in README as well.
 @set VERSION  2.9
-@set EMACSVER 22.0.51
+@set EMACSVER 22.1
 
 @dircategory Emacs
 @direntry
@@ -74,7 +74,7 @@
 51 Franklin St, Fifth Floor @*
 Boston, MA 02110-1301 @*
 USA @*
-ISBN 1-882114-73-6
+ISBN 1-882114-74-4
 
 @sp 1
 Cover art by Etienne Suvasa.
--- a/lispref/help.texi	Sat Oct 14 18:40:58 2006 +0000
+++ b/lispref/help.texi	Sun Dec 03 12:15:03 2006 +0000
@@ -22,6 +22,9 @@
 manual is not organized in that fashion; it is organized in terms of
 topics of discussion.
 
+  For commands to access documentation strings, see @ref{Help, ,
+Help, emacs, The GNU Emacs Manual}.
+
 @menu
 * Documentation Basics::      Good style for doc strings.
                                 Where to put them.  How Emacs stores them.
@@ -63,6 +66,10 @@
 to the keys for related commands and be accurate even when a user
 rearranges the key bindings.  (@xref{Keys in Documentation}.)
 
+@vindex emacs-lisp-docstring-fill-column
+  Emacs Lisp mode fills documentation strings to the width
+specified by @code{emacs-lisp-docstring-fill-column}.
+
   In Emacs Lisp, a documentation string is accessible through the
 function or variable that it describes:
 
@@ -100,9 +107,6 @@
 documentation string from the appropriate file; this is transparent to
 the user.
 
-  For information on the uses of documentation strings, see @ref{Help, ,
-Help, emacs, The GNU Emacs Manual}.
-
 @c Wordy to prevent overfull hbox.  --rjc 15mar92
   The @file{emacs/lib-src} directory contains two utilities that you can
 use to print nice-looking hardcopy for the file
--- a/lispref/keymaps.texi	Sat Oct 14 18:40:58 2006 +0000
+++ b/lispref/keymaps.texi	Sun Dec 03 12:15:03 2006 +0000
@@ -174,13 +174,18 @@
 which is always a character or a symbol.  @xref{Classifying Events}.
 In this kind of binding, @var{binding} is a command.
 
-@item (@var{type} @var{item-name} .@: @var{binding})
-This specifies a binding which is also a menu item
-named @var{item-name}.  @xref{Simple Menu Items}.
+@item (@var{type} @var{item-name} @r{[}@var{cache}@r{]} .@: @var{binding})
+This specifies a binding which is also a simple menu item that
+displays as @var{item-name} in the menu.  @var{cache}, if present,
+caches certain information for display in the menu.  @xref{Simple Menu
+Items}.
+
+@item (@var{type} @var{item-name} @var{help-string} @r{[}@var{cache}@r{]} .@: @var{binding})
+This is a simple menu item with help string @var{help-string}.
 
 @item (@var{type} menu-item .@: @var{details})
-This specifies a binding which is also a menu item and allows use of
-other features.  @xref{Extended Menu Items}.
+This specifies a binding which is also an extended menu item.  This
+allows use of other features.  @xref{Extended Menu Items}.
 
 @item (t .@: @var{binding})
 @cindex default key binding
@@ -203,9 +208,10 @@
 @cindex keymap prompt string
 @cindex overall prompt string
 @cindex prompt string of keymap
-Aside from bindings, a keymap can also have a string as an element.
-This is called the @dfn{overall prompt string} and makes it possible to
-use the keymap as a menu.  @xref{Defining Menus}.
+Aside from elements that specify bindings for keys, a keymap can also
+have a string as an element.  This is called the @dfn{overall prompt
+string} and makes it possible to use the keymap as a menu.
+@xref{Defining Menus}.
 @end table
 
 When the binding is @code{nil}, it doesn't constitute a definition
@@ -932,11 +938,11 @@
 
   Let's use the term @dfn{keymap entry} to describe the value found by
 looking up an event type in a keymap.  (This doesn't include the item
-string and other extra elements in menu key bindings, because
+string and other extra elements in a keymap element for a menu item, because
 @code{lookup-key} and other key lookup functions don't include them in
-the returned value.)  While any Lisp object may be stored in a keymap as
-a keymap entry, not all make sense for key lookup.  Here is a table of
-the meaningful kinds of keymap entries:
+the returned value.)  While any Lisp object may be stored in a keymap
+as a keymap entry, not all make sense for key lookup.  Here is a table
+of the meaningful types of keymap entries:
 
 @table @asis
 @item @code{nil}
@@ -964,7 +970,7 @@
 
 @item @var{list}
 @cindex list in keymap
-The meaning of a list depends on the types of the elements of the list.
+The meaning of a list depends on what it contains:
 
 @itemize @bullet
 @item
--- a/lispref/modes.texi	Sat Oct 14 18:40:58 2006 +0000
+++ b/lispref/modes.texi	Sun Dec 03 12:15:03 2006 +0000
@@ -2816,8 +2816,7 @@
 
 If your mode does not use any of the other machinery of Font Lock
 (i.e. it only uses the @code{font-lock-face} property), it should not
-set the variable @code{font-lock-defaults}.  That way, it will not
-cause loading of the @file{font-lock} library.
+set the variable @code{font-lock-defaults}.
 
 @node Faces for Font Lock
 @subsection Faces for Font Lock
--- a/man/ChangeLog	Sat Oct 14 18:40:58 2006 +0000
+++ b/man/ChangeLog	Sun Dec 03 12:15:03 2006 +0000
@@ -1,3 +1,16 @@
+2006-10-16  Richard Stallman  <rms@gnu.org>
+
+	* widget.texi: Use @var instead of capitalization.
+	Clarify many widget type descriptions.
+
+	* emacs.texi: Update ISBN.
+
+2006-10-13  Andreas Seltenreich  <uwi7@rz.uni-karlsruhe.de>
+
+	* gnus.texi (Other modes): Fix typo.  Add alternative index entry for
+	gnus-dired-attach.
+	(Selecting a Group): Fix typo.
+
 2006-10-12  Roberto Rodr,Am(Bguez  <lanubeblanca@googlemail.com>
 
 	* widget.texi: Fix typos (tiny change)
--- a/man/emacs.texi	Sat Oct 14 18:40:58 2006 +0000
+++ b/man/emacs.texi	Sun Dec 03 12:15:03 2006 +0000
@@ -71,7 +71,7 @@
 @insertcopying
 
 @sp 2
-ISBN 1-882114-06-X @*
+ISBN 1-882114-86-8*
 Published by the Free Software Foundation @*
 51 Franklin Street, Fifth Floor @*
 Boston, MA 02110-1301 USA
--- a/man/gnus.texi	Sat Oct 14 18:40:58 2006 +0000
+++ b/man/gnus.texi	Sun Dec 03 12:15:03 2006 +0000
@@ -2139,7 +2139,7 @@
 automatically when entering a group with the @kbd{SPACE} command.
 Which article this is is controlled by the
 @code{gnus-auto-select-subject} variable.  Valid values for this
-variable is:
+variable are:
 
 @table @code
 
@@ -24471,7 +24471,7 @@
 @subsection Dired
 @cindex dired
 
-@code{gnus-dired-minor-mode} provided some useful functions for dired
+@code{gnus-dired-minor-mode} provides some useful functions for dired
 buffers.  It is enabled with
 @lisp
 (add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode)
@@ -24480,6 +24480,7 @@
 @table @kbd
 @item C-c C-m C-a
 @findex gnus-dired-attach
+@cindex attachments, selection via dired
 Send dired's marked files as an attachment (@code{gnus-dired-attach}).
 You will be prompted for a message buffer.
 
--- a/man/widget.texi	Sat Oct 14 18:40:58 2006 +0000
+++ b/man/widget.texi	Sun Dec 03 12:15:03 2006 +0000
@@ -480,11 +480,11 @@
 @comment  node-name,  next,  previous,  up
 @section Basic Types
 
-The syntax of a type specification is given below:
+This is the general syntax of a type specification:
 
 @example
-NAME ::= (NAME [KEYWORD ARGUMENT]... ARGS)
-     |   NAME
+@var{name} ::= (@var{name} [@var{keyword} @var{argument}]... @var{args})
+     |   @var{name}
 @end example
 
 Where, @var{name} is a widget name, @var{keyword} is the name of a
@@ -724,7 +724,7 @@
 Syntax:
 
 @example
-TYPE ::= (link [KEYWORD ARGUMENT]...  [ VALUE ])
+@var{type} ::= (link [@var{keyword} @var{argument}]...  [ @var{value} ])
 @end example
 
 The @var{value}, if present, is used to initialize the @code{:value}
@@ -749,7 +749,7 @@
 Syntax:
 
 @example
-TYPE ::= (url-link [KEYWORD ARGUMENT]...  URL)
+@var{type} ::= (url-link [@var{keyword} @var{argument}]...  @var{url})
 @end example
 
 @findex browse-url-browser-function@r{, and @code{url-link} widget}
@@ -764,7 +764,7 @@
 Syntax:
 
 @example
-TYPE ::= (info-link [KEYWORD ARGUMENT]...  ADDRESS)
+@var{type} ::= (info-link [@var{keyword} @var{argument}]...  @var{address})
 @end example
 
 When this link is invoked, the built-in Info reader is started on
@@ -778,7 +778,7 @@
 Syntax:
 
 @example
-TYPE ::= (push-button [KEYWORD ARGUMENT]...  [ VALUE ])
+@var{type} ::= (push-button [@var{keyword} @var{argument}]...  [ @var{value} ])
 @end example
 
 The @var{value}, if present, is used to initialize the @code{:value}
@@ -803,7 +803,7 @@
 Syntax:
 
 @example
-TYPE ::= (editable-field [KEYWORD ARGUMENT]... [ VALUE ])
+@var{type} ::= (editable-field [@var{keyword} @var{argument}]... [ @var{value} ])
 @end example
 
 The @var{value}, if present, is used to initialize the @code{:value}
@@ -863,7 +863,7 @@
 Syntax:
 
 @example
-TYPE ::= (menu-choice [KEYWORD ARGUMENT]... TYPE ... )
+@var{type} ::= (menu-choice [@var{keyword} @var{argument}]... @var{type} ... )
 @end example
 
 The @var{type} argument represents each possible choice.  The widget's
@@ -904,13 +904,13 @@
 Syntax:
 
 @example
-TYPE ::= (radio-button-choice [KEYWORD ARGUMENT]...  TYPE ... )
+@var{type} ::= (radio-button-choice [@var{keyword} @var{argument}]...  @var{type} ... )
 @end example
 
-The @var{type} argument represents each possible choice.  The widget's
-value will be that of the chosen @var{type} argument.  This widget will
-match any value matching at least one of the specified @var{type}
-arguments.
+The component types specify the choices, with one radio button for
+each.  The widget's value will be that of the chosen @var{type}
+argument.  This widget matches any value that matching at least one of
+the specified @var{type} arguments.
 
 The following extra properties are recognized.
 
@@ -971,7 +971,7 @@
 Syntax:
 
 @example
-ITEM ::= (item [KEYWORD ARGUMENT]... VALUE)
+@var{item} ::= (item [@var{keyword} @var{argument}]... @var{value})
 @end example
 
 The @var{value}, if present, is used to initialize the @code{:value}
@@ -986,7 +986,7 @@
 Syntax:
 
 @example
-ITEM ::= (choice-item [KEYWORD ARGUMENT]... VALUE)
+@var{item} ::= (choice-item [@var{keyword} @var{argument}]... @var{value})
 @end example
 
 The @var{value}, if present, is used to initialize the @code{:value}
@@ -1003,7 +1003,7 @@
 Syntax:
 
 @example
-TYPE ::= (toggle [KEYWORD ARGUMENT]...)
+@var{type} ::= (toggle [@var{keyword} @var{argument}]...)
 @end example
 
 The widget has two possible states, @samp{on} and @samp{off}, which
@@ -1039,7 +1039,7 @@
 Syntax:
 
 @example
-TYPE ::= (checkbox [KEYWORD ARGUMENT]...)
+@var{type} ::= (checkbox [@var{keyword} @var{argument}]...)
 @end example
 
 @node checklist, editable-list, checkbox, Basic Types
@@ -1050,7 +1050,7 @@
 Syntax:
 
 @example
-TYPE ::= (checklist [KEYWORD ARGUMENT]...  TYPE ... )
+@var{type} ::= (checklist [@var{keyword} @var{argument}]...  @var{type} ... )
 @end example
 
 The @var{type} arguments represent each checklist item.  The widget's
@@ -1108,7 +1108,7 @@
 Syntax:
 
 @example
-TYPE ::= (editable-list [KEYWORD ARGUMENT]... TYPE)
+@var{type} ::= (editable-list [@var{keyword} @var{argument}]... @var{type})
 @end example
 
 The value is a list, where each member represents one widget of type
@@ -1168,7 +1168,7 @@
 Syntax:
 
 @example
-TYPE ::= (group [KEYWORD ARGUMENT]... TYPE...)
+@var{type} ::= (group [@var{keyword} @var{argument}]... @var{type}...)
 @end example
 
 The value is a list, with one member for each @var{type}.
@@ -1201,7 +1201,7 @@
 The syntax for the @code{const} widget is:
 
 @example
-TYPE ::= (const [KEYWORD ARGUMENT]...  [ VALUE ])
+@var{type} ::= (const [@var{keyword} @var{argument}]...  [ @var{value} ])
 @end example
 
 The @var{value}, if present, is used to initialize the @code{:value}
@@ -1237,7 +1237,7 @@
 The syntax for the @code{sexp} widget is:
 
 @example
-TYPE ::= (sexp [KEYWORD ARGUMENT]...  [ VALUE ])
+@var{type} ::= (sexp [@var{keyword} @var{argument}]...  [ @var{value} ])
 @end example
 
 @deffn Widget sexp
@@ -1261,7 +1261,7 @@
 The syntax for all the atoms are:
 
 @example
-TYPE ::= (NAME [KEYWORD ARGUMENT]...  [ VALUE ])
+@var{type} ::= (@var{construct} [@var{keyword} @var{argument}]...  [ @var{value} ])
 @end example
 
 The @var{value}, if present, is used to initialize the @code{:value}
@@ -1331,10 +1331,10 @@
 @subsection Composite Sexp Widgets
 @cindex composite sexp widgets
 
-The syntax for the composite widget is:
+The syntax for the composite widget construct is:
 
 @example
-TYPE ::= (NAME [KEYWORD ARGUMENT]...  COMPONENT...)
+@var{type} ::= (@var{construct} [@var{keyword} @var{argument}]...  @var{component}...)
 @end example
 
 @noindent
@@ -1342,19 +1342,43 @@
 will be displayed in the buffer, and will be editable by the user.
 
 @deffn Widget cons
-The value of a @code{cons} widget is a cons-cell where the @sc{car} is
-the value of the first component and the @sc{cdr} is the value of the
-second component.  There must be exactly two components.
+The value of a @code{cons} widget must be a cons-cell whose @sc{car} 
+and @sc{cdr} have two specified types.  It uses this syntax:
+
+@example
+@var{type} ::= (cons [@var{keyword} @var{argument}]...  @var{car-type} @var{cdr-type})
+@end example
+@end deffn
+
+@deffn Widget choice
+The @code{choice} widget specifies a set of values that match any one
+of a fixed set of types.  Its syntax is as follows:
+
+@example
+@var{type} ::= (choice [@var{keyword} @var{argument}]...  @var{type} ... )
+@end example
+
+The value of a @code{choice} widget can be anything that matches any of the
+@var{types}.
 @end deffn
 
 @deffn Widget list
-The value of a @code{list} widget is a list containing the value of
-each of its components.
+The value of a @code{list} widget must be a list whose element types
+match the specified component types:
+
+@example
+@var{type} ::= (list [@var{keyword} @var{argument}]...  @var{component-type}...)
+@end example
+
+Thus, @code{(list string number)} matches lists of two elements,
+the first being a string and the second being a number.
 @end deffn
 
 @deffn Widget vector
-The value of a @code{vector} widget is a vector containing the value of
-each of its component.
+The @code{vector} widget is like the @code{list} widget but matches
+vectors instead of lists.  Thus, @code{(vector string number)} matches
+vectors of two elements, the first being a string and the second being
+a number.
 @end deffn
 
 The above suffice for specifying fixed size lists and vectors.  To get
@@ -1363,7 +1387,7 @@
 keyword.  If any component of a composite widget has the @code{:inline}
 keyword set, its value must be a list which will then be spliced into
 the composite.  For example, to specify a list whose first element must
-be a file name, and whose remaining arguments should either be the
+be a file name, and whose remaining elements should either be the
 symbol @code{t} or two files, you can use the following widget
 specification:
 
@@ -1376,29 +1400,32 @@
 @end example
 
 The value of a widget of this type will either have the form
-@code{(file t)} or @code{(file string string)}.
-
-This concept of inline is probably hard to understand.  It was certainly
-hard to implement, so instead of confusing you more by trying to explain
-it here, I'll just suggest you meditate over it for a while.
+@code{(file t)} or @code{(file @var{string} @var{string})}.
 
-@deffn Widget choice
-Allows you to edit a sexp which may have one of a fixed set of types.
-It is currently implemented with the @code{choice-menu} basic widget,
-and has a similar syntax.
-@end deffn
+This concept of @code{:inline} may be hard to understand.  It was
+certainly hard to implement, so instead of confusing you more by
+trying to explain it here, I'll just suggest you meditate over it for
+a while.
 
 @deffn Widget set
-Allows you to specify a type which must be a list whose elements all
-belong to the given set.  The elements of the list are not significant.
-This is implemented on top of the @code{checklist} basic widget, and has
-a similar syntax.
+Specifies a type whose values are the lists whose elements all belong
+to a given set.  The order of elements of the list is not significant.
+Here's the syntax:
+
+@example
+@var{type} ::= (set [@var{keyword} @var{argument}]...  @var{permitted-element} ... )
+@end example
+
+Use @code{const} to specify each permitted element, like this:
+@code{(set (const a) (const b))}.
 @end deffn
 
 @deffn Widget repeat
-Allows you to specify a variable length list whose members are all of
-the same type.  Implemented on top of the @code{editable-list} basic
-widget, and has a similar syntax.
+Specifies a list of any number of elements that fit a certain type.
+
+@example
+@var{type} ::= (repeat [@var{keyword} @var{argument}]...  @var{type})
+@end example
 @end deffn
 
 @node Widget Properties, Defining New Widgets, Sexp Types, Top
--- a/src/ChangeLog	Sat Oct 14 18:40:58 2006 +0000
+++ b/src/ChangeLog	Sun Dec 03 12:15:03 2006 +0000
@@ -1,3 +1,26 @@
+2006-10-16  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
+
+	* gtkutil.c (get_utf8_string): Remove warnings with casts.
+	(xg_tool_bar_button_cb): Ditto
+	(xg_tool_bar_callback): Ditto.
+
+2006-10-16  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+	* dispnew.c (adjust_frame_glyphs_for_frame_redisplay): Remove unused
+	variable ch_dim.
+	(adjust_frame_glyphs_for_window_redisplay): Likewise.  Don't allocate
+	menu bar window matrices on non-X systems.
+
+	* mac.c (Fmac_get_preference, Fmac_code_convert_string): Add GCPROs.
+
+	* macterm.c (mac_query_char_extents): Don't return glyph ID if layout
+	adjustment is needed.
+	(mac_load_query_font): Check if width and height are positive.
+
+2006-10-14  Richard Stallman  <rms@gnu.org>
+
+	* sysdep.c (init_sys_modes): Delete DEFVAR_LISP in the wrong place.
+
 2006-10-13  Chong Yidong  <cyd@stupidchicken.com>
 
 	* xdisp.c (decode_mode_spec): Ignore %c and %l constructs in frame
--- a/src/dispnew.c	Sat Oct 14 18:40:58 2006 +0000
+++ b/src/dispnew.c	Sun Dec 03 12:15:03 2006 +0000
@@ -1786,11 +1786,9 @@
 
    X and Y are column/row within the frame glyph matrix where
    sub-matrices for the window tree rooted at WINDOW must be
-   allocated.  CH_DIM contains the dimensions of the smallest
-   character that could be used during display.  DIM_ONLY_P non-zero
-   means that the caller of this function is only interested in the
-   result matrix dimension, and matrix adjustments should not be
-   performed.
+   allocated.  DIM_ONLY_P non-zero means that the caller of this
+   function is only interested in the result matrix dimension, and
+   matrix adjustments should not be performed.
 
    The function returns the total width/height of the sub-matrices of
    the window tree.  If called on a frame root window, the computation
@@ -2038,8 +2036,7 @@
 
 
 /* Allocate window matrices for window-based redisplay.  W is the
-   window whose matrices must be allocated/reallocated.  CH_DIM is the
-   size of the smallest character that could potentially be used on W.  */
+   window whose matrices must be allocated/reallocated.  */
 
 static void
 allocate_matrices_for_window_redisplay (w)
@@ -2272,7 +2269,6 @@
 adjust_frame_glyphs_for_frame_redisplay (f)
      struct frame *f;
 {
-  struct dim ch_dim;
   struct dim matrix_dim;
   int pool_changed_p;
   int window_change_flags;
@@ -2281,10 +2277,6 @@
   if (!FRAME_LIVE_P (f))
     return;
 
-  /* Determine the smallest character in any font for F.  On
-     console windows, all characters have dimension (1, 1).  */
-  ch_dim.width = ch_dim.height = 1;
-
   top_window_y = FRAME_TOP_MARGIN (f);
 
   /* Allocate glyph pool structures if not already done.  */
@@ -2373,22 +2365,14 @@
 adjust_frame_glyphs_for_window_redisplay (f)
      struct frame *f;
 {
-  struct dim ch_dim;
   struct window *w;
 
   xassert (FRAME_WINDOW_P (f) && FRAME_LIVE_P (f));
 
-  /* Get minimum sizes.  */
-#ifdef HAVE_WINDOW_SYSTEM
-  ch_dim.width = FRAME_SMALLEST_CHAR_WIDTH (f);
-  ch_dim.height = FRAME_SMALLEST_FONT_HEIGHT (f);
-#else
-  ch_dim.width = ch_dim.height = 1;
-#endif
-
   /* Allocate/reallocate window matrices.  */
   allocate_matrices_for_window_redisplay (XWINDOW (FRAME_ROOT_WINDOW (f)));
 
+#ifdef HAVE_X_WINDOWS
   /* Allocate/ reallocate matrices of the dummy window used to display
      the menu bar under X when no X toolkit support is available.  */
 #if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
@@ -2412,7 +2396,8 @@
     XSETFASTINT (w->total_cols, FRAME_TOTAL_COLS (f));
     allocate_matrices_for_window_redisplay (w);
   }
-#endif /* not USE_X_TOOLKIT */
+#endif /* not USE_X_TOOLKIT && not USE_GTK */
+#endif /* HAVE_X_WINDOWS */
 
 #ifndef USE_GTK
   /* Allocate/ reallocate matrices of the tool bar window.  If we
--- a/src/gtkutil.c	Sat Oct 14 18:40:58 2006 +0000
+++ b/src/gtkutil.c	Sun Dec 03 12:15:03 2006 +0000
@@ -523,8 +523,8 @@
       char *cp, *up;
       GError *error = NULL;
 
-      while (! (cp = g_locale_to_utf8 (p, -1, &bytes_read,
-                                             &bytes_written, &error))
+      while (! (cp = g_locale_to_utf8 ((char *)p, -1, &bytes_read,
+                                       &bytes_written, &error))
              && error->code == G_CONVERT_ERROR_ILLEGAL_SEQUENCE)
         {
           ++nr_bad;
@@ -541,13 +541,13 @@
       if (cp) g_free (cp);
 
       up = utf8_str = xmalloc (strlen (str) + nr_bad * 4 + 1);
-      p = str;
-
-      while (! (cp = g_locale_to_utf8 (p, -1, &bytes_read,
+      p = (unsigned char *)str;
+
+      while (! (cp = g_locale_to_utf8 ((char *)p, -1, &bytes_read,
                                        &bytes_written, &error))
              && error->code == G_CONVERT_ERROR_ILLEGAL_SEQUENCE)
         {
-          strncpy (up, p, bytes_written);
+          strncpy (up, (char *)p, bytes_written);
           sprintf (up + bytes_written, "\\%03o", p[bytes_written]);
           up[bytes_written+4] = '\0';
           up += bytes_written+4;
@@ -3362,8 +3362,9 @@
     GdkEventButton *event;
     gpointer        user_data;
 {
-  g_object_set_data (G_OBJECT (user_data), XG_TOOL_BAR_LAST_MODIFIER,
-                     (gpointer) event->state);
+  /* Casts to avoid warnings when gpointer is 64 bits and int is 32 bits */
+  gpointer ptr = (gpointer) (EMACS_INT) event->state;
+  g_object_set_data (G_OBJECT (user_data), XG_TOOL_BAR_LAST_MODIFIER, ptr);
   return FALSE;
 }
 
@@ -3375,7 +3376,8 @@
 {
   /* The EMACS_INT cast avoids a warning. */
   int idx = (int) (EMACS_INT) client_data;
-  int mod = (int) g_object_get_data (G_OBJECT (w), XG_TOOL_BAR_LAST_MODIFIER);
+  int mod = (int) (EMACS_INT) g_object_get_data (G_OBJECT (w),
+                                                 XG_TOOL_BAR_LAST_MODIFIER);
 
   FRAME_PTR f = (FRAME_PTR) g_object_get_data (G_OBJECT (w), XG_FRAME_DATA);
   Lisp_Object key, frame;
--- a/src/mac.c	Sat Oct 14 18:40:58 2006 +0000
+++ b/src/mac.c	Sun Dec 03 12:15:03 2006 +0000
@@ -4611,6 +4611,7 @@
   CFStringRef app_id, key_str;
   CFPropertyListRef app_plist = NULL, plist;
   Lisp_Object result = Qnil, tmp;
+  struct gcpro gcpro1, gcpro2;
 
   if (STRINGP (key))
     key = Fcons (key, Qnil);
@@ -4627,6 +4628,8 @@
   if (!NILP (hash_bound))
     CHECK_NUMBER (hash_bound);
 
+  GCPRO2 (key, format);
+
   BLOCK_INPUT;
 
   app_id = kCFPreferencesCurrentApplication;
@@ -4681,6 +4684,8 @@
 
   UNBLOCK_INPUT;
 
+  UNGCPRO;
+
   return result;
 }
 
@@ -4846,6 +4851,7 @@
      Lisp_Object string, source, target, normalization_form;
 {
   Lisp_Object result = Qnil;
+  struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
   CFStringEncoding src_encoding, tgt_encoding;
   CFStringRef str = NULL;
 
@@ -4856,6 +4862,8 @@
     CHECK_SYMBOL (target);
   CHECK_SYMBOL (normalization_form);
 
+  GCPRO4 (string, source, target, normalization_form);
+
   BLOCK_INPUT;
 
   src_encoding = get_cfstring_encoding_from_lisp (source);
@@ -4896,6 +4904,8 @@
 
   UNBLOCK_INPUT;
 
+  UNGCPRO;
+
   return result;
 }
 
--- a/src/macterm.c	Sat Oct 14 18:40:58 2006 +0000
+++ b/src/macterm.c	Sun Dec 03 12:15:03 2006 +0000
@@ -1198,7 +1198,12 @@
 		err1 = ATSUGetGlyphInfo (text_layout, kATSUFromTextBeginning,
 					 kATSUToTextEnd, &count,
 					 &glyph_info_array);
-	      if (err1 == noErr)
+	      if (err1 == noErr
+		  /* Make sure that we don't have to make layout
+		     adjustments.  */
+		  && glyph_info_array.glyphs[0].deltaY == 0.0f
+		  && glyph_info_array.glyphs[0].idealX == 0.0f
+		  && glyph_info_array.glyphs[0].screenX == 0)
 		{
 		  xassert (glyph_info_array.glyphs[0].glyphID);
 		  *cg_glyph = glyph_info_array.glyphs[0].glyphID;
@@ -7963,7 +7968,8 @@
 				    NULL
 #endif
 				    );
-      if (err != noErr)
+      if (err != noErr
+	  || space_bounds->width <= 0 || FONT_HEIGHT (font) <= 0)
 	{
 	  mac_unload_font (&one_mac_display_info, font);
 	  return NULL;
--- a/src/sysdep.c	Sat Oct 14 18:40:58 2006 +0000
+++ b/src/sysdep.c	Sun Dec 03 12:15:03 2006 +0000
@@ -1421,16 +1421,6 @@
 {
   struct emacs_tty tty;
 
-#ifdef MAC_OS8
-/* cus-start.el complains if delete-exited-processes is not defined */
-#ifndef subprocesses
-  DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes,
-	       doc: /* *Non-nil means delete processes immediately when they exit.
-nil means don't delete them until `list-processes' is run.  */);
-  delete_exited_processes = 0;
-#endif
-#endif /* MAC_OS8 */
-
 #ifdef VMS
 #if 0
   static int oob_chars[2] = {0, 1 << 7}; /* catch C-g's */