changeset 90863:648e6c714c7d

Merge from emacs--devo--0 Patches applied: * emacs--devo--0 (patch 774-780) - Update from CVS - Merge from emacs--rel--22, gnus--rel--5.10 - Merge from emacs--rel--22 - Fix tq.el edge case * emacs--rel--22 (patch 28-32) - Update from CVS * gnus--rel--5.10 (patch 224-225) - Merge from emacs--devo--0, emacs--rel--22 - Update from CVS Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-213
author Miles Bader <miles@gnu.org>
date Wed, 30 May 2007 14:40:46 +0000
parents e4b8d2bccfb0 (current diff) f4d5f1a40875 (diff)
children 834a5e8f248c
files etc/ChangeLog etc/NEWS.22 etc/PROBLEMS lisp/ChangeLog lisp/emacs-lisp/rx.el lisp/emacs-lisp/tq.el lisp/gnus/ChangeLog lisp/gnus/message.el lisp/log-edit.el lisp/net/tramp-ftp.el lisp/net/tramp-smb.el lisp/net/tramp-util.el lisp/net/tramp-uu.el lisp/net/tramp-vc.el lisp/net/tramp.el lisp/net/trampver.el lisp/net/webjump.el lisp/progmodes/idlwave.el lisp/textmodes/sgml-mode.el lisp/textmodes/table.el lispref/ChangeLog lispref/commands.texi man/ChangeLog man/tramp.texi man/trampver.texi oldXMenu/ChangeLog oldXMenu/XMakeAssoc.c src/ChangeLog src/ccl.c src/data.c src/fns.c src/frame.c src/macterm.c src/msdos.c src/sysdep.c src/term.c src/termhooks.h src/window.c src/xdisp.c src/xfaces.c
diffstat 43 files changed, 410 insertions(+), 239 deletions(-) [+]
line wrap: on
line diff
--- a/etc/ChangeLog	Tue May 29 00:15:26 2007 +0000
+++ b/etc/ChangeLog	Wed May 30 14:40:46 2007 +0000
@@ -1,3 +1,7 @@
+2007-05-29  Robert J. Chassell  <bob@rattlesnake.com>
+
+	* NEWS: Fix instances of `allow' without object.
+
 2007-05-22  Glenn Morris  <rgm@gnu.org>
 
 	* NEWS.22: New file with entries for Emacs 22.
--- a/etc/NEWS.22	Tue May 29 00:15:26 2007 +0000
+++ b/etc/NEWS.22	Wed May 30 14:40:46 2007 +0000
@@ -442,7 +442,7 @@
 `help-echo' property, but, in certain cases, it can display a more
 keyboard oriented alternative.
 
-*** New user option `help-at-pt-display-when-idle' allows to
+*** New user option `help-at-pt-display-when-idle' allows you to
 automatically show the help provided by `display-local-help' on
 point-over, after suitable idle time.  The amount of idle time is
 determined by the user option `help-at-pt-timer-delay' and defaults
@@ -1949,11 +1949,11 @@
 
 If point is at the end of a file buffer before reverting, Auto Revert
 mode keeps it at the end after reverting.  Similarly if point is
-displayed at the end of a file buffer in any window, it stays at
-the end of the buffer in that window.  This allows to tail a file:
-just put point at the end of the buffer and it stays there.  This
-rule applies to file buffers.  For non-file buffers, the behavior can
-be mode dependent.
+displayed at the end of a file buffer in any window, it stays at the end
+of the buffer in that window.  This allows you to "tail" a file: just
+put point at the end of the buffer and it stays there.  This rule
+applies to file buffers.  For non-file buffers, the behavior can be mode
+dependent.
 
 If you are sure that the file will only change by growing at the end,
 then you can tail the file more efficiently by using the new minor
@@ -3047,7 +3047,7 @@
 
 *** Support for `movemail' from GNU mailutils was added to Rmail.
 
-This version of `movemail' allows to read mail from a wide range of
+This version of `movemail' allows you to read mail from a wide range of
 mailbox formats, including remote POP3 and IMAP4 mailboxes with or
 without TLS encryption.  If GNU mailutils is installed on the system
 and its version of `movemail' can be found in exec-path, it will be
--- a/etc/PROBLEMS	Tue May 29 00:15:26 2007 +0000
+++ b/etc/PROBLEMS	Wed May 30 14:40:46 2007 +0000
@@ -2456,27 +2456,6 @@
 the problem, install the current version of GNU Sed, then rerun
 Emacs's configure script.
 
-*** Compiling on GNU/Linux fails due to a missing left operand in gnu-linux.h.
-
-The error messages have the form:
-
-  ../src/s/gnu-linux.h:49:24: error: operator '>' has no left operand
-
-This error occurs because your system defines LINUX_VERSION_CODE in
-the standard header file linux/version.h but does not give it a value.
-As a workaround, you can edit the file src/s/gnu-linux.h to add the
-needed definition.  On the line after "#include <linux/version.h>",
-add a line as shown below:
-
-#include <linux/version.h>
-#define LINUX_VERSION_CODE 132626
-
-The number to use depends on your kernel version (the example shown is
-for kernel 2.6.18).  The number can be obtained by running the
-following command in the shell:
-
-uname -r | sed -e 's/\./ /g' -e 's/-.*//' | awk '{print $1*(2^16) + $2*(2^8) + $3}'
-
 *** Building a 32-bit executable on a 64-bit GNU/Linux architecture.
 
 First ensure that the necessary 32-bit system libraries and include
--- a/lisp/ChangeLog	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/ChangeLog	Wed May 30 14:40:46 2007 +0000
@@ -1,3 +1,72 @@
+2007-05-30  Michael Olson  <mwolson@gnu.org>
+
+	* emacs-lisp/tq.el (tq-queue-pop): Stifle error when a process has
+	died and we are trying to send a signal to it.  The program using
+	tq.el should periodically check to see whether the process has
+	died and react appropriately -- this is not the responsibility of
+	tq.el, and is consistent with the rest of the tq.el source code.
+
+2007-05-29  Martin Rudalics  <rudalics@gmx.at>
+
+	* textmodes/table.el (table--point-entered-cell-function)
+	(table--point-left-cell-function): Bind
+	`inhibit-point-motion-hooks' to t.
+
+2007-05-29  Nikolaj Schumacher  <n_schumacher@web.de>  (tiny change)
+
+	* emacs-lisp/rx.el (rx): Doc fix.
+
+2007-05-28  Juanma Barranquero  <lekktu@gmail.com>
+
+	* progmodes/idlwave.el (idlwave-routines): Fix typo in docstring.
+
+2007-05-28  Michael Albinus  <michael.albinus@gmx.de>
+
+	Sync with Tramp 2.0.56.
+
+	* net/tramp.el:
+	* net/tramp-ftp.el:
+	* net/tramp-smb.el:
+	* net/tramp-util.el:
+	* net/tramp-vc.el:
+	Don't load cl.el, because that pollutes the namespace.  Replace cl
+	macros by their implementations where necessary.  Requested by
+	Richard Stallman <rms@gnu.org>.
+
+	* net/tramp.el (top): Make `set-buffer-multibyte' an alias if it
+	doesn't exist.
+	(with-parsed-tramp-file-name): Protect debug spec during
+	compilation.
+	(tramp-handle-insert-directory): Check (featurep 'ls-lisp).
+	(tramp-file-name-p, tramp-file-name-multi-method)
+	(tramp-file-name-method, tramp-file-name-user)
+	(tramp-file-name-host, tramp-file-name-localname): New defuns,
+	replacing defstruct `tramp-file-name'.
+	(tramp-handle-file-remote-p, tramp-completion-dissect-file-name1)
+	(tramp-dissect-file-name, tramp-dissect-multi-file-name): Apply
+	`vector' instead of `make-tramp-file-name'.
+	(tramp-handle-make-auto-save-file-name): Apply
+	`tramp-temporary-file-directory' for compatibility reasons.
+	(tramp-completion-mode): Use `natnump' instead of `wholenump'
+	because of XEmacs.
+	(tramp-completion-mode): `last-input-event' is nil when XEmacs is
+	started.
+
+2007-05-28  Chong Yidong  <cyd@stupidchicken.com>
+
+	* textmodes/sgml-mode.el (sgml-point-entered): Use condition-case.
+
+2007-05-27  Tetsurou Okazaki  <okazaki@be.to>  (tiny change)
+
+	* log-edit.el (log-edit-changelog-paragraph): Return point-max
+	as the end of the ChangeLog paragraph when it ends without a line
+	termination.
+
+2007-05-27  Ryan Yeske  <rcyeske@gmail.com>
+
+	* net/webjump.el (webjump-sample-sites):
+	Add simple Wikipedia query.
+
 2007-05-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* emacs-lisp/derived.el (define-derived-mode): Remove bogus
--- a/lisp/emacs-lisp/rx.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/emacs-lisp/rx.el	Wed May 30 14:40:46 2007 +0000
@@ -725,8 +725,7 @@
      matches the empty string, but only at point.
 
 `word-start', `bow'
-     matches the empty string, but only at the beginning or end of a
-     word.
+     matches the empty string, but only at the beginning of a word.
 
 `word-end', `eow'
      matches the empty string, but only at the end of a word.
@@ -740,6 +739,12 @@
      matches the empty string, but not at the beginning or end of a
      word.
 
+`symbol-start'
+     matches the empty string, but only at the beginning of a symbol.
+
+`symbol-end'
+     matches the empty string, but only at the end of a symbol.
+
 `digit', `numeric', `num'
      matches 0 through 9.
 
--- a/lisp/emacs-lisp/tq.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/emacs-lisp/tq.el	Wed May 30 14:40:46 2007 +0000
@@ -100,8 +100,9 @@
 (defun tq-queue-pop (tq)
   (setcar tq (cdr (car tq)))
   (let ((question (tq-queue-head-question tq)))
-    (when question
-      (process-send-string (tq-process tq) question)))
+    (condition-case nil
+	(process-send-string (tq-process tq) question)
+      (error nil)))
   (null (car tq)))
 
 (defun tq-enqueue (tq question regexp closure fn &optional delay-question)
--- a/lisp/gnus/ChangeLog	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/gnus/ChangeLog	Wed May 30 14:40:46 2007 +0000
@@ -1,3 +1,8 @@
+2007-05-28  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* message.el (message-pop-to-buffer): Add switch-function argument.
+	(message-mail): Pass switch-function argument to it.
+
 2007-05-24  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* message.el (message-narrow-to-headers-or-head): Ignore
--- a/lisp/gnus/message.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/gnus/message.el	Wed May 30 14:40:46 2007 +0000
@@ -5576,7 +5576,7 @@
 	     'car-less-than-car)))
 	  new)))))
 
-(defun message-pop-to-buffer (name)
+(defun message-pop-to-buffer (name &optional switch-function)
   "Pop to buffer NAME, and warn if it already exists and is modified."
   (let ((buffer (get-buffer name)))
     (if (and buffer
@@ -5587,14 +5587,16 @@
 	      (progn
 		(gnus-select-frame-set-input-focus (window-frame window))
 		(select-window window))
-	    (set-buffer (pop-to-buffer buffer)))
+	    (funcall (or switch-function 'pop-to-buffer) buffer)
+	    (set-buffer buffer))
 	  (when (and (buffer-modified-p)
 		     (not (prog1
 			      (y-or-n-p
 			       "Message already being composed; erase? ")
 			    (message nil))))
 	    (error "Message being composed")))
-      (set-buffer (pop-to-buffer name)))
+      (funcall (or switch-function 'pop-to-buffer) name)
+      (set-buffer name))
     (erase-buffer)
     (message-mode)))
 
@@ -5831,15 +5833,15 @@
   (interactive)
   (let ((message-this-is-mail t) replybuffer)
     (unless (message-mail-user-agent)
-      (funcall
-       (or switch-function 'message-pop-to-buffer)
+      (message-pop-to-buffer
        ;; Search for the existing message buffer if `continue' is non-nil.
        (let ((message-generate-new-buffers
 	      (when (or (not continue)
 			(eq message-generate-new-buffers 'standard)
 			(functionp message-generate-new-buffers))
 		message-generate-new-buffers)))
-	 (message-buffer-name "mail" to))))
+	 (message-buffer-name "mail" to))
+       switch-function))
     ;; FIXME: message-mail should do something if YANK-ACTION is not
     ;; insert-buffer.
     (and (consp yank-action) (eq (car yank-action) 'insert-buffer)
--- a/lisp/log-edit.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/log-edit.el	Wed May 30 14:40:46 2007 +0000
@@ -538,7 +538,7 @@
             (point))
           (if (re-search-forward "^[ \t\n]*$" nil t)
               (match-beginning 0)
-            (point)))))
+            (point-max)))))
 
 (defun log-edit-changelog-subparagraph ()
   "Return the bounds of the ChangeLog subparagraph containing point.
--- a/lisp/net/tramp-ftp.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/net/tramp-ftp.el	Wed May 30 14:40:46 2007 +0000
@@ -1,6 +1,7 @@
 ;;; tramp-ftp.el --- Tramp convenience functions for Ange-FTP -*- coding: iso-8859-1; -*-
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006,
+;;   2007 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -31,12 +32,7 @@
 
 (require 'tramp)
 
-(eval-when-compile
-  (require 'cl)
-  (require 'custom)
-  ;; Emacs 19.34 compatibility hack -- is this needed?
-  (or (>= emacs-major-version 20)
-      (load "cl-seq")))
+(eval-when-compile (require 'custom))
 
 ;; Disable Ange-FTP from file-name-handler-alist.
 ;; To handle EFS, the following functions need to be dealt with:
--- a/lisp/net/tramp-smb.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/net/tramp-smb.el	Wed May 30 14:40:46 2007 +0000
@@ -31,12 +31,7 @@
 (require 'tramp)
 
 ;; Pacify byte-compiler
-(eval-when-compile
-  (require 'cl)
-  (require 'custom)
-  ;; Emacs 19.34 compatibility hack -- is this needed?
-  (or (>= emacs-major-version 20)
-      (load "cl-seq")))
+(eval-when-compile (require 'custom))
 
 ;; Avoid byte-compiler warnings if the byte-compiler supports this.
 ;; Currently, XEmacs supports this.
--- a/lisp/net/tramp-util.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/net/tramp-util.el	Wed May 30 14:40:46 2007 +0000
@@ -29,7 +29,6 @@
 
 ;;; Code:
 
-(eval-when-compile (require 'cl))
 (require 'compile)
 (require 'tramp)
 (add-hook 'tramp-util-unload-hook
--- a/lisp/net/tramp-uu.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/net/tramp-uu.el	Wed May 30 14:40:46 2007 +0000
@@ -1,7 +1,8 @@
 ;;; -*- coding: iso-2022-7bit; -*-
 ;;; tramp-uu.el --- uuencode in Lisp
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006,
+;;   2007 Free Software Foundation, Inc.
 
 ;; Author: Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
 ;; Keywords: comm, terminals
--- a/lisp/net/tramp-vc.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/net/tramp-vc.el	Wed May 30 14:40:46 2007 +0000
@@ -31,8 +31,6 @@
 
 ;;; Code:
 
-(eval-when-compile
-  (require 'cl))
 (require 'vc)
 ;; Old VC defines vc-rcs-release in vc.el, new VC requires extra module.
 (unless (boundp 'vc-rcs-release)
--- a/lisp/net/tramp.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/net/tramp.el	Wed May 30 14:40:46 2007 +0000
@@ -151,11 +151,7 @@
 		    (when (featurep 'tramp-smb)
 		      (unload-feature 'tramp-smb 'force)))))))
 
-(require 'cl)
 (require 'custom)
-;; Emacs 19.34 compatibility hack -- is this needed?
-(or (>= emacs-major-version 20)
-    (load "cl-seq"))
 
 (unless (boundp 'custom-print-functions)
   (defvar custom-print-functions nil))	; not autoloaded before Emacs 20.4
@@ -175,6 +171,11 @@
   (when (boundp 'byte-compile-not-obsolete-var)
     (setq byte-compile-not-obsolete-var 'directory-sep-char)))
 
+;; `set-buffer-multibyte' comes from Emacs Leim.
+(eval-and-compile
+  (unless (fboundp 'set-buffer-multibyte)
+    (defalias 'set-buffer-multibyte 'ignore)))
+
 ;;; User Customizable Internal Variables:
 
 (defgroup tramp nil
@@ -2077,7 +2078,9 @@
 
 (put 'with-parsed-tramp-file-name 'lisp-indent-function 2)
 ;; Enable debugging.
-(def-edebug-spec with-parsed-tramp-file-name (form symbolp body))
+(eval-and-compile
+  (when (featurep 'edebug)
+    (def-edebug-spec with-parsed-tramp-file-name (form symbolp body))))
 ;; Highlight as keyword.
 (when (functionp 'font-lock-add-keywords)
   (funcall 'font-lock-add-keywords
@@ -2384,10 +2387,10 @@
 			       "Integer constant overflow in reader")
 			(string-match
 			 "^[0-9]+\\([0-9][0-9][0-9][0-9][0-9]\\)\\'"
-			 (caddr err)))
-	       (let* ((big (read (substring (caddr err) 0
+			 (car (cddr err))))
+	       (let* ((big (read (substring (car (cddr err)) 0
 					    (match-beginning 1))))
-		      (small (read (match-string 1 (caddr err))))
+		      (small (read (match-string 1 (car (cddr err)))))
 		      (twiddle (/ small 65536)))
 		 (cons (+ big twiddle)
 		       (- small (* twiddle 65536))))))))
@@ -2807,7 +2810,7 @@
                                  object)))
                (cell root))
           (while (cdr cell)
-            (if (and match (not (string-match match (caadr cell))))
+            (if (and match (not (string-match match (car (cadr cell)))))
                 ;; Remove from list
                 (setcdr cell (cddr cell))
               ;; Include in list
@@ -3426,10 +3429,10 @@
 (defun tramp-handle-insert-directory
   (filename switches &optional wildcard full-directory-p)
   "Like `insert-directory' for tramp files."
-  (if (and (boundp 'ls-lisp-use-insert-directory-program)
+  (if (and (featurep 'ls-lisp)
            (not (symbol-value 'ls-lisp-use-insert-directory-program)))
-      (tramp-run-real-handler 'insert-directory
-                              (list filename switches wildcard full-directory-p))
+      (tramp-run-real-handler
+       'insert-directory (list filename switches wildcard full-directory-p))
     ;; For the moment, we assume that the remote "ls" program does not
     ;; grok "--dired".  In the future, we should detect this on
     ;; connection setup.
@@ -3869,12 +3872,7 @@
   "Like `file-remote-p' for tramp files."
   (when (tramp-tramp-file-p filename)
     (with-parsed-tramp-file-name filename nil
-      (make-tramp-file-name
-       :multi-method multi-method
-       :method method
-       :user user
-       :host host
-       :localname ""))))
+      (vector multi-method method user host ""))))
 
 (defun tramp-handle-insert-file-contents
   (filename &optional visit beg end replace)
@@ -3919,7 +3917,7 @@
 	(when (boundp 'last-coding-system-used)
 	  (set 'last-coding-system-used coding-system-used))
 	(list (expand-file-name filename)
-	      (second result))))))
+	      (cadr result))))))
 
 
 (defun tramp-handle-find-backup-file-name (filename)
@@ -3978,7 +3976,8 @@
 	  (when (and (string-match (car x) buffer-file-name)
 		     (not (car (cddr x))))
 	    (setq tramp-auto-save-directory
-		  (or tramp-auto-save-directory temporary-file-directory))))
+		  (or tramp-auto-save-directory
+		      (tramp-temporary-file-directory)))))
        (symbol-value 'auto-save-file-name-transforms)))
     ;; Create directory.
     (when tramp-auto-save-directory
@@ -4566,7 +4565,7 @@
     (member (match-string 1 file) (mapcar 'car tramp-methods)))
    ((or (equal last-input-event 'tab)
   	;; Emacs
-  	(and (wholenump last-input-event)
+  	(and (natnump last-input-event)
 	     (or
 	      ;; ?\t has event-modifier 'control
 	      (char-equal last-input-event ?\t)
@@ -4575,6 +4574,10 @@
 		       (char-equal last-input-event ?\ )))))
 	;; XEmacs
 	(and (featurep 'xemacs)
+	     ;; `last-input-event' might be nil.
+	     (not (null last-input-event))
+	     ;; `last-input-event' may have no character approximation.
+	     (funcall (symbol-function 'event-to-character) last-input-event)
 	     (or
 	      ;; ?\t has event-modifier 'control
 	      (char-equal
@@ -4771,24 +4774,14 @@
 			  (match-string (nth 1 structure) name)))
 	(if (and method (member method tramp-multi-methods))
 	    ;; Not handled (yet).
-	    (make-tramp-file-name
-	     :multi-method method
-	     :method nil
-	     :user nil
-	     :host nil
-	     :localname nil)
+	    (vector method nil nil nil nil)
 	  (let ((user   (and (nth 2 structure)
 			     (match-string (nth 2 structure) name)))
 		(host   (and (nth 3 structure)
 			     (match-string (nth 3 structure) name)))
 		(localname   (and (nth 4 structure)
 			     (match-string (nth 4 structure) name))))
-	    (make-tramp-file-name
-	     :multi-method nil
-	     :method method
-	     :user user
-	     :host host
-	     :localname localname)))))))
+	    (vector nil method user host localname)))))))
 
 ;; This function returns all possible method completions, adding the
 ;; trailing method delimeter.
@@ -5191,7 +5184,7 @@
                               (aref user i) (aref host i))
                     (format "%s@%s:" (aref method i) (aref host i)))
                   string-list))
-      (incf i))
+      (setq i (1+ i)))
     (format "*%s/%s %s*"
             prefix multi-method
             (apply 'concat (reverse string-list)))))
@@ -5928,7 +5921,7 @@
             ;; is done here.
             (funcall multi-func p m u h command)
             (erase-buffer)
-            (incf i)))
+            (setq i (1+ i))))
         (tramp-open-connection-setup-interactive-shell
          p multi-method method user host)
         (tramp-post-connection multi-method method user host)))))
@@ -6824,7 +6817,8 @@
 
 (defun tramp-mode-string-to-int (mode-string)
   "Converts a ten-letter `drwxrwxrwx'-style mode string into mode bits."
-  (let* ((mode-chars (string-to-vector mode-string))
+  (let* (case-fold-search
+	 (mode-chars (string-to-vector mode-string))
          (owner-read (aref mode-chars 1))
          (owner-write (aref mode-chars 2))
          (owner-execute-or-setid (aref mode-chars 3))
@@ -6836,45 +6830,61 @@
          (other-execute-or-sticky (aref mode-chars 9)))
     (save-match-data
       (logior
-       (case owner-read
-         (?r (tramp-octal-to-decimal "00400")) (?- 0)
-         (t (error "Second char `%c' must be one of `r-'" owner-read)))
-       (case owner-write
-         (?w (tramp-octal-to-decimal "00200")) (?- 0)
-         (t (error "Third char `%c' must be one of `w-'" owner-write)))
-       (case owner-execute-or-setid
-         (?x (tramp-octal-to-decimal "00100"))
-         (?S (tramp-octal-to-decimal "04000"))
-         (?s (tramp-octal-to-decimal "04100"))
-         (?- 0)
-         (t (error "Fourth char `%c' must be one of `xsS-'"
-                   owner-execute-or-setid)))
-       (case group-read
-         (?r (tramp-octal-to-decimal "00040")) (?- 0)
-         (t (error "Fifth char `%c' must be one of `r-'" group-read)))
-       (case group-write
-         (?w (tramp-octal-to-decimal "00020")) (?- 0)
-         (t (error "Sixth char `%c' must be one of `w-'" group-write)))
-       (case group-execute-or-setid
-         (?x (tramp-octal-to-decimal "00010"))
-         (?S (tramp-octal-to-decimal "02000"))
-         (?s (tramp-octal-to-decimal "02010"))
-         (?- 0)
-         (t (error "Seventh char `%c' must be one of `xsS-'"
-                   group-execute-or-setid)))
-       (case other-read
-         (?r (tramp-octal-to-decimal "00004")) (?- 0)
-         (t (error "Eighth char `%c' must be one of `r-'" other-read)))
-       (case other-write
-         (?w (tramp-octal-to-decimal "00002")) (?- 0)
+       (cond
+	((char-equal owner-read ?r) (tramp-octal-to-decimal "00400"))
+	((char-equal owner-read ?-) 0)
+	(t (error "Second char `%c' must be one of `r-'" owner-read)))
+       (cond
+	((char-equal owner-write ?w) (tramp-octal-to-decimal "00200"))
+	((char-equal owner-write ?-) 0)
+	(t (error "Third char `%c' must be one of `w-'" owner-write)))
+       (cond
+	((char-equal owner-execute-or-setid ?x)
+	 (tramp-octal-to-decimal "00100"))
+	((char-equal owner-execute-or-setid ?S)
+	 (tramp-octal-to-decimal "04000"))
+	((char-equal owner-execute-or-setid ?s)
+	 (tramp-octal-to-decimal "04100"))
+	((char-equal owner-execute-or-setid ?-) 0)
+	(t (error "Fourth char `%c' must be one of `xsS-'"
+		  owner-execute-or-setid)))
+       (cond
+	((char-equal group-read ?r) (tramp-octal-to-decimal "00040"))
+	((char-equal group-read ?-) 0)
+	(t (error "Fifth char `%c' must be one of `r-'" group-read)))
+       (cond
+	((char-equal group-write ?w) (tramp-octal-to-decimal "00020"))
+	((char-equal group-write ?-) 0)
+	(t (error "Sixth char `%c' must be one of `w-'" group-write)))
+       (cond
+	((char-equal group-execute-or-setid ?x)
+	 (tramp-octal-to-decimal "00010"))
+	((char-equal group-execute-or-setid ?S)
+	 (tramp-octal-to-decimal "02000"))
+	((char-equal group-execute-or-setid ?s)
+	 (tramp-octal-to-decimal "02010"))
+	((char-equal group-execute-or-setid ?-) 0)
+	(t (error "Seventh char `%c' must be one of `xsS-'"
+		  group-execute-or-setid)))
+       (cond
+	((char-equal other-read ?r)
+	 (tramp-octal-to-decimal "00004"))
+	((char-equal other-read ?-) 0)
+	(t (error "Eighth char `%c' must be one of `r-'" other-read)))
+       (cond
+         ((char-equal other-write ?w) (tramp-octal-to-decimal "00002"))
+	 ((char-equal other-write ?-) 0)
          (t (error "Nineth char `%c' must be one of `w-'" other-write)))
-       (case other-execute-or-sticky
-         (?x (tramp-octal-to-decimal "00001"))
-         (?T (tramp-octal-to-decimal "01000"))
-         (?t (tramp-octal-to-decimal "01001"))
-         (?- 0)
-         (t (error "Tenth char `%c' must be one of `xtT-'"
-                   other-execute-or-sticky)))))))
+       (cond
+	((char-equal other-execute-or-sticky ?x)
+	 (tramp-octal-to-decimal "00001"))
+	((char-equal other-execute-or-sticky ?T)
+	 (tramp-octal-to-decimal "01000"))
+	((char-equal other-execute-or-sticky ?t)
+	 (tramp-octal-to-decimal "01001"))
+	((char-equal other-execute-or-sticky ?-) 0)
+	(t (error "Tenth char `%c' must be one of `xtT-'"
+		  other-execute-or-sticky)))))))
 
 (defun tramp-convert-file-attributes (multi-method method user host attr)
   "Convert file-attributes ATTR generated by perl script or ls.
@@ -6977,7 +6987,29 @@
 ;; internal data structure.  Convenience functions for internal
 ;; data structure.
 
-(defstruct tramp-file-name multi-method method user host localname)
+(defun tramp-file-name-p (obj)
+  "Check whether TRAMP-FILE-NAME is a Tramp object."
+  (and (vectorp obj) (= 5 (length obj))))
+
+(defun tramp-file-name-multi-method (obj)
+  "Return MULTI-METHOD component of TRAMP-FILE-NAME."
+  (and (tramp-file-name-p obj) (aref obj 0)))
+
+(defun tramp-file-name-method (obj)
+  "Return METHOD component of TRAMP-FILE-NAME."
+  (and (tramp-file-name-p obj) (aref obj 1)))
+
+(defun tramp-file-name-user (obj)
+  "Return USER component of TRAMP-FILE-NAME."
+  (and (tramp-file-name-p obj) (aref obj 2)))
+
+(defun tramp-file-name-host (obj)
+  "Return HOST component of TRAMP-FILE-NAME."
+  (and (tramp-file-name-p obj) (aref obj 3)))
+
+(defun tramp-file-name-localname (obj)
+  "Return LOCALNAME component of TRAMP-FILE-NAME."
+  (and (tramp-file-name-p obj) (aref obj 4)))
 
 (defun tramp-tramp-file-p (name)
   "Return t iff NAME is a tramp file."
@@ -7010,12 +7042,7 @@
 	(let ((user (match-string (nth 2 tramp-file-name-structure) name))
 	      (host (match-string (nth 3 tramp-file-name-structure) name))
 	      (localname (match-string (nth 4 tramp-file-name-structure) name)))
-	  (make-tramp-file-name
-	   :multi-method nil
-	   :method method
-	   :user (or user nil)
-	   :host host
-	   :localname localname))))))
+	  (vector nil method (or user nil) host localname))))))
 
 (defun tramp-find-default-method (user host)
   "Look up the right method to use in `tramp-default-method-alist'."
@@ -7055,7 +7082,7 @@
     (setq method (match-string method-index name))
     (setq hops (match-string hops-index name))
     (setq len (/ (length (match-data t)) 2))
-    (when (< localname-index 0) (incf localname-index len))
+    (when (< localname-index 0) (setq localname-index (+ localname-index len)))
     (setq localname (match-string localname-index name))
     (let ((index 0))
       (while (string-match hop-regexp hops index)
@@ -7066,12 +7093,12 @@
               (cons (match-string hop-user-index hops) hop-users))
         (setq hop-hosts
               (cons (match-string hop-host-index hops) hop-hosts))))
-    (make-tramp-file-name
-     :multi-method method
-     :method       (apply 'vector (reverse hop-methods))
-     :user         (apply 'vector (reverse hop-users))
-     :host         (apply 'vector (reverse hop-hosts))
-     :localname         localname)))
+    (vector
+     method
+     (apply 'vector (reverse hop-methods))
+     (apply 'vector (reverse hop-users))
+     (apply 'vector (reverse hop-hosts))
+     localname)))
 
 (defun tramp-make-tramp-file-name (multi-method method user host localname)
   "Constructs a tramp file name from METHOD, USER, HOST and LOCALNAME."
@@ -7103,7 +7130,7 @@
       (let ((m (aref method i)) (u (aref user i)) (h (aref host i)))
         (setq hops (concat hops (format-spec hop-format
 					     `((?m . ,m) (?u . ,u) (?h . ,h)))))
-        (incf i)))
+        (setq i (1+ i))))
     (concat prefix hops localname)))
 
 (defun tramp-make-copy-program-file-name (user host localname)
@@ -7218,7 +7245,7 @@
 		      (assoc (tramp-find-method multi-method method user host)
 			     tramp-methods))))
     (if entry
-	(second entry)
+	(cadr entry)
       (symbol-value param))))
 
 
--- a/lisp/net/trampver.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/net/trampver.el	Wed May 30 14:40:46 2007 +0000
@@ -30,7 +30,7 @@
 ;; are auto-frobbed from configure.ac, so you should edit that file and run
 ;; "autoconf && ./configure" to change them.
 
-(defconst tramp-version "2.0.55"
+(defconst tramp-version "2.0.56"
   "This version of Tramp.")
 
 (defconst tramp-bug-report-address "tramp-devel@gnu.org"
--- a/lisp/net/webjump.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/net/webjump.el	Wed May 30 14:40:46 2007 +0000
@@ -229,6 +229,8 @@
     ("Yahoo" .
      [simple-query "www.yahoo.com" "search.yahoo.com/search?p=" ""])
     ("Yahoo: Reference" . "www.yahoo.com/Reference/")
+    ("Wikipedia" .
+     [simple-query "wikipedia.org" "wikipedia.org/wiki/" ""])
 
     ;; Misc. general interest.
     ("Interactive Weather Information Network" . webjump-to-iwin)
--- a/lisp/progmodes/idlwave.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/progmodes/idlwave.el	Wed May 30 14:40:46 2007 +0000
@@ -4342,7 +4342,7 @@
 (defvar idlwave-true-path-alist nil
   "Like `idlwave-path-alist', but with true filenames.")
 (defvar idlwave-routines nil
-  "Holds the combinded procedure/function/method routine-info.")
+  "Holds the combined procedure/function/method routine-info.")
 (defvar idlwave-class-alist nil
   "Holds the class names known to IDLWAVE.")
 (defvar idlwave-class-history nil
@@ -4846,7 +4846,7 @@
   ;; Create a sysvar list entry from the xml parsed list.
   (let* ((nameblock (nth 1 xml-entry))
 	 (name (cdr (assq 'name nameblock)))
-	 (sysvar (substring name (progn (string-match "^ *!" name) 
+	 (sysvar (substring name (progn (string-match "^ *!" name)
 					(match-end 0))))
 	 (link (cdr (assq 'link nameblock)))
 	 (params (cddr xml-entry))
--- a/lisp/textmodes/sgml-mode.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/textmodes/sgml-mode.el	Wed May 30 14:40:46 2007 +0000
@@ -894,16 +894,19 @@
   ;; Show preceding or following hidden tag, depending of cursor direction.
   (let ((inhibit-point-motion-hooks t))
     (save-excursion
-      (message "Invisible tag: %s"
-	       ;; Strip properties, otherwise, the text is invisible.
-	       (buffer-substring-no-properties
-		(point)
-		(if (or (and (> x y)
-			     (not (eq (following-char) ?<)))
-			(and (< x y)
-			     (eq (preceding-char) ?>)))
-		    (backward-list)
-		  (forward-list)))))))
+      (condition-case nil
+	  (message "Invisible tag: %s"
+		   ;; Strip properties, otherwise, the text is invisible.
+		   (buffer-substring-no-properties
+		    (point)
+		    (if (or (and (> x y)
+				 (not (eq (following-char) ?<)))
+			    (and (< x y)
+				 (eq (preceding-char) ?>)))
+			(backward-list)
+		      (forward-list))))
+	(error nil)))))
+
 
 
 (defun sgml-validate (command)
--- a/lisp/textmodes/table.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/textmodes/table.el	Wed May 30 14:40:46 2007 +0000
@@ -5333,21 +5333,25 @@
 (defun table--point-entered-cell-function (&optional old-point new-point)
   "Point has entered a cell.
 Refresh the menu bar."
-  (unless table-cell-entered-state
-    (setq table-cell-entered-state t)
-    (setq table-mode-indicator t)
-    (force-mode-line-update)
-    (table--warn-incompatibility)
-    (run-hooks 'table-point-entered-cell-hook)))
+  ;; Avoid calling point-motion-hooks recursively.
+  (let ((inhibit-point-motion-hooks t))
+    (unless table-cell-entered-state
+      (setq table-cell-entered-state t)
+      (setq table-mode-indicator t)
+      (force-mode-line-update)
+      (table--warn-incompatibility)
+      (run-hooks 'table-point-entered-cell-hook))))
 
 (defun table--point-left-cell-function (&optional old-point new-point)
   "Point has left a cell.
 Refresh the menu bar."
-  (when table-cell-entered-state
-    (setq table-cell-entered-state nil)
-    (setq table-mode-indicator nil)
-    (force-mode-line-update)
-    (run-hooks 'table-point-left-cell-hook)))
+  ;; Avoid calling point-motion-hooks recursively.
+  (let ((inhibit-point-motion-hooks t))
+    (when table-cell-entered-state
+      (setq table-cell-entered-state nil)
+      (setq table-mode-indicator nil)
+      (force-mode-line-update)
+      (run-hooks 'table-point-left-cell-hook))))
 
 (defun table--warn-incompatibility ()
   "If called from interactive operation warn the know incompatibilities.
--- a/lisp/url/ChangeLog	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/url/ChangeLog	Wed May 30 14:40:46 2007 +0000
@@ -1,3 +1,9 @@
+2007-05-29  Chong Yidong  <cyd@stupidchicken.com>
+
+	* url-mailto.el (url-mailto): Insert body after
+	mail-header-separator if present, so that it is before signature.
+	Suggested by Leo <sdl.web@gmail.com>.
+
 2007-04-15  Chong Yidong  <cyd@stupidchicken.com>
 
 	* url-parse.el (url-generic-parse-url): Revert 2006-10-09 changes.
--- a/lisp/url/url-mailto.el	Tue May 29 00:15:26 2007 +0000
+++ b/lisp/url/url-mailto.el	Wed May 30 14:40:46 2007 +0000
@@ -100,7 +100,9 @@
     (while args
       (if (string= (caar args) "body")
 	  (progn
-	    (goto-char (point-max))
+	    (goto-char (point-min))
+	    (or (search-forward (concat "\n" mail-header-separator "\n") nil t)
+	    	(goto-char (point-max)))
 	    (insert (mapconcat 
 		     #'(lambda (string)
 			 (replace-regexp-in-string "\r\n" "\n" string))
--- a/lispref/ChangeLog	Tue May 29 00:15:26 2007 +0000
+++ b/lispref/ChangeLog	Wed May 30 14:40:46 2007 +0000
@@ -1,3 +1,9 @@
+2007-05-30  Nick Roberts  <nickrob@snap.net.nz>
+
+	* commands.texi (Click Events): Layout more logically.  Describe
+	width and height.
+	(Drag Events, Motion Events): Update to new format for position.
+
 2007-05-12  Richard Stallman  <rms@gnu.org>
 
 	* text.texi (Margins): indent-to-left-margin is not the default.
--- a/lispref/commands.texi	Tue May 29 00:15:26 2007 +0000
+++ b/lispref/commands.texi	Wed May 30 14:40:46 2007 +0000
@@ -1196,12 +1196,7 @@
 @item @var{position}
 This is the position where the mouse click occurred.  The actual
 format of @var{position} depends on what part of a window was clicked
-on.  The various formats are described below.
-
-@item @var{click-count}
-This is the number of rapid repeated presses so far of the same mouse
-button.  @xref{Repeat Events}.
-@end table
+on.
 
 For mouse click events in the text area, mode line, header line, or in
 the marginal areas, @var{position} has this form:
@@ -1223,6 +1218,12 @@
 @code{header-line}, @code{vertical-line}, @code{left-margin},
 @code{right-margin}, @code{left-fringe}, or @code{right-fringe}.
 
+In one special case, @var{pos-or-area} is a list containing a symbol (one
+of the symbols listed above) instead of just the symbol.  This happens
+after the imaginary prefix keys for the event are inserted into the
+input stream.  @xref{Key Sequence Input}.
+
+
 @item @var{x}, @var{y}
 These are the pixel-denominated coordinates of the click, relative to
 the top left corner of @var{window}, which is @code{(0 . 0)}.
@@ -1238,6 +1239,7 @@
 (@var{string} . @var{string-pos}) when there is a string-type text
 property at the click position.
 
+@table @asis
 @item @var{string}
 This is the string on which the click occurred, including any
 properties.
@@ -1245,6 +1247,7 @@
 @item @var{string-pos}
 This is the position in the string on which the click occurred,
 relevant if properties at the click need to be looked up.
+@end table
 
 @item @var{text-pos}
 For clicks on a marginal area or on a fringe, this is the buffer
@@ -1267,8 +1270,12 @@
 the top left corner of @var{object}, which is @code{(0 . 0)}.  If
 @var{object} is @code{nil}, the coordinates are relative to the top
 left corner of the character glyph clicked on.
+
+@item @var{width}, @var{height}
+These are the pixel-denominated width and height of @var{object}.
 @end table
-
+ 
+@sp 1
 For mouse clicks on a scroll-bar, @var{position} has this form:
 
 @example
@@ -1299,10 +1306,10 @@
 @code{up}, @code{down}, @code{top}, @code{bottom}, and @code{end-scroll}.
 @end table
 
-In one special case, @var{buffer-pos} is a list containing a symbol (one
-of the symbols listed above) instead of just the symbol.  This happens
-after the imaginary prefix keys for the event are inserted into the
-input stream.  @xref{Key Sequence Input}.
+@item @var{click-count}
+This is the number of rapid repeated presses so far of the same mouse
+button.  @xref{Repeat Events}.
+@end table
 
 @node Drag Events
 @subsection Drag Events
@@ -1318,19 +1325,18 @@
 
 @example
 (@var{event-type}
- (@var{window1} @var{buffer-pos1} (@var{x1} . @var{y1}) @var{timestamp1})
- (@var{window2} @var{buffer-pos2} (@var{x2} . @var{y2}) @var{timestamp2})
- @var{click-count})
+ (@var{window1} START-POSITION)
+ (@var{window2} END-POSITION))
 @end example
 
 For a drag event, the name of the symbol @var{event-type} contains the
-prefix @samp{drag-}.  For example, dragging the mouse with button 2 held
-down generates a @code{drag-mouse-2} event.  The second and third
-elements of the event give the starting and ending position of the drag.
-Aside from that, the data have the same meanings as in a click event
-(@pxref{Click Events}).  You can access the second element of any mouse
-event in the same way, with no need to distinguish drag events from
-others.
+prefix @samp{drag-}.  For example, dragging the mouse with button 2
+held down generates a @code{drag-mouse-2} event.  The second and third
+elements of the event give the starting and ending position of the
+drag.  They have the same form as @var{position} in a click event
+(@pxref{Click Events}) that is not on the scroll bar part of the
+window.  You can access the second element of any mouse event in the
+same way, with no need to distinguish drag events from others.
 
 The @samp{drag-} prefix follows the modifier key prefixes such as
 @samp{C-} and @samp{M-}.
@@ -1470,7 +1476,7 @@
 represented by lists that look like this:
 
 @example
-(mouse-movement (@var{window} @var{buffer-pos} (@var{x} . @var{y}) @var{timestamp}))
+(mouse-movement (POSITION))
 @end example
 
 The second element of the list describes the current position of the
--- a/man/ChangeLog	Tue May 29 00:15:26 2007 +0000
+++ b/man/ChangeLog	Wed May 30 14:40:46 2007 +0000
@@ -1,3 +1,14 @@
+2007-05-28  Michael Albinus  <michael.albinus@gmx.de>
+
+	Sync with Tramp 2.0.56.
+
+	* tramp.texi (Frequently Asked Questions): Improve ~/.zshrc
+	settings.  Reported by Ted Zlatanov <tzz@lifelogs.com>.
+
+2007-05-26  Michael Olson  <mwolson@gnu.org>
+
+	* erc.texi (Modules): Fix references to completion modules.
+
 2007-05-09  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* gnus.texi (Running NNDiary): Use ~/.gnus.el instead of gnusrc.
--- a/man/erc.texi	Tue May 29 00:15:26 2007 +0000
+++ b/man/erc.texi	Wed May 30 14:40:46 2007 +0000
@@ -564,7 +564,8 @@
 Mark unidentified users on freenode and other servers supporting CAPAB.
 
 @cindex modules, completion
-@item pcomplete
+@cindex modules, pcomplete
+@item completion (aka pcomplete)
 Complete nicknames and commands (programmable)
 
 @cindex modules, fill
@@ -572,7 +573,7 @@
 Wrap long lines
 
 @cindex modules, hecomplete
-@item completion
+@item hecomplete
 Complete nicknames and commands (old).  This is the old module---you
 might prefer the ``completion'' module instead.
 
--- a/man/tramp.texi	Tue May 29 00:15:26 2007 +0000
+++ b/man/tramp.texi	Wed May 30 14:40:46 2007 +0000
@@ -2051,7 +2051,11 @@
 A special problem is the zsh, which uses left-hand side and right-hand
 side prompts in parallel.  Therefore, it is necessary to disable the
 zsh line editor on the remote host.  You shall add to @file{~/.zshrc}
-the following command: @command{[ $TERM = "dumb" ] && unsetopt zle}.
+the following command:
+
+@example
+[ $TERM = "dumb" ] && unsetopt zle && PS1='$ '
+@end example
 
 @item
 @value{tramp} doesn't transfer strings with more than 500 characters
--- a/man/trampver.texi	Tue May 29 00:15:26 2007 +0000
+++ b/man/trampver.texi	Wed May 30 14:40:46 2007 +0000
@@ -9,7 +9,7 @@
 @c In the Tramp CVS, the version number is auto-frobbed from
 @c configure.ac, so you should edit that file and run
 @c "autoconf && ./configure" to change the version number.
-@set trampver 2.0.55
+@set trampver 2.0.56
 
 @c Other flags from configuration
 @set prefix /usr/local
--- a/oldXMenu/ChangeLog	Tue May 29 00:15:26 2007 +0000
+++ b/oldXMenu/ChangeLog	Wed May 30 14:40:46 2007 +0000
@@ -1,3 +1,7 @@
+2007-05-30  Ulrich Mueller  <ulm@gentoo.org>  (tiny change)
+
+	* XMakeAssoc.c (XMakeAssoc): Use malloc rather than xmalloc.
+
 2007-02-27  Glenn Morris  <rgm@gnu.org>
 
 	* Imakefile: Remove unused file with no explicit legal info.
--- a/oldXMenu/XMakeAssoc.c	Tue May 29 00:15:26 2007 +0000
+++ b/oldXMenu/XMakeAssoc.c	Wed May 30 14:40:46 2007 +0000
@@ -81,7 +81,7 @@
 	/* If we are here then the new entry should be inserted just */
 	/* before the current value of "Entry". */
 	/* Create a new XAssoc and load it with new provided data. */
-	new_entry = (XAssoc *) xmalloc(sizeof(XAssoc));
+	new_entry = (XAssoc *) malloc(sizeof(XAssoc));
 	new_entry->display = dpy;
 	new_entry->x_id = x_id;
 	new_entry->data = data;
--- a/src/ChangeLog	Tue May 29 00:15:26 2007 +0000
+++ b/src/ChangeLog	Wed May 30 14:40:46 2007 +0000
@@ -1,3 +1,21 @@
+2007-05-28  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+	* xdisp.c (redisplay_internal): Bind inhibit-point-motion-hooks to t
+	around current_column call.
+
+2007-05-26  Dan Nicolaescu  <dann@ics.uci.edu>
+
+	* xfaces.c (syms_of_xfaces): Delete stray semicolon.
+	* xdisp.c (next_element_from_buffer): 
+	* window.c (delete_window): 
+	* term.c (term_mouse_highlight): 
+	* msdos.c (getdefdir): 
+	* macterm.c (mac_create_bitmap_from_bitmap_data)
+	(init_font_name_table): 
+	* fns.c (Fsxhash): 
+	* data.c (Fmake_local_variable): 
+	* ccl.c (ccl_driver): Likewise.
+
 2007-05-24  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
 
 	* macterm.c [USE_CARBON_EVENTS] (mac_handle_window_event):
--- a/src/ccl.c	Tue May 29 00:15:26 2007 +0000
+++ b/src/ccl.c	Wed May 30 14:40:46 2007 +0000
@@ -1222,7 +1222,7 @@
 	    case CCL_MOD: reg[rrr] = i % j; break;
 	    case CCL_AND: reg[rrr] = i & j; break;
 	    case CCL_OR: reg[rrr] = i | j; break;
-	    case CCL_XOR: reg[rrr] = i ^ j;; break;
+	    case CCL_XOR: reg[rrr] = i ^ j; break;
 	    case CCL_LSH: reg[rrr] = i << j; break;
 	    case CCL_RSH: reg[rrr] = i >> j; break;
 	    case CCL_LSH8: reg[rrr] = (i << 8) | j; break;
--- a/src/data.c	Tue May 29 00:15:26 2007 +0000
+++ b/src/data.c	Wed May 30 14:40:46 2007 +0000
@@ -1575,7 +1575,7 @@
       XBUFFER_LOCAL_VALUE (newval)->found_for_frame = 0;
       XBUFFER_LOCAL_VALUE (newval)->check_frame = 0;
       XBUFFER_LOCAL_VALUE (newval)->cdr = tem;
-      SET_SYMBOL_VALUE (variable, newval);;
+      SET_SYMBOL_VALUE (variable, newval);
     }
   /* Make sure this buffer has its own value of symbol.  */
   tem = Fassq (variable, current_buffer->local_var_alist);
--- a/src/fns.c	Tue May 29 00:15:26 2007 +0000
+++ b/src/fns.c	Wed May 30 14:40:46 2007 +0000
@@ -4585,7 +4585,7 @@
      (obj)
      Lisp_Object obj;
 {
-  unsigned hash = sxhash (obj, 0);;
+  unsigned hash = sxhash (obj, 0);
   return make_number (hash);
 }
 
--- a/src/frame.c	Tue May 29 00:15:26 2007 +0000
+++ b/src/frame.c	Wed May 30 14:40:46 2007 +0000
@@ -1549,6 +1549,13 @@
       Fselect_frame (frame);
       mouse_moveto (XINT (x), XINT (y));
     }
+#else
+#ifdef HAVE_GPM
+    {
+      Fselect_frame (frame);
+      term_mouse_moveto (XINT (x), XINT (y));
+    }
+#endif
 #endif
 #endif
 
--- a/src/macterm.c	Tue May 29 00:15:26 2007 +0000
+++ b/src/macterm.c	Wed May 30 14:40:46 2007 +0000
@@ -736,7 +736,7 @@
 	  /* Bitswap XBM bytes to match how Mac does things.  */
 	  unsigned char c = *bits++;
 	  *p++ = (unsigned char)((swap_nibble[c & 0xf] << 4)
-				 | (swap_nibble[(c>>4) & 0xf]));;
+				 | (swap_nibble[(c>>4) & 0xf]));
 	}
     }
 
@@ -7577,7 +7577,7 @@
 	make_hash_table (Qequal, make_number (DEFAULT_HASH_SIZE),
 			 make_float (DEFAULT_REHASH_SIZE),
 			 make_float (DEFAULT_REHASH_THRESHOLD),
-			 Qnil, Qnil, Qnil);;
+			 Qnil, Qnil, Qnil);
       h = XHASH_TABLE (atsu_font_id_hash);
 
       err = ATSUFontCount (&nfonts);
--- a/src/msdos.c	Tue May 29 00:15:26 2007 +0000
+++ b/src/msdos.c	Wed May 30 14:40:46 2007 +0000
@@ -1584,7 +1584,7 @@
       {
 	extern Lisp_Object Qmouse_face;
 	Lisp_Object mouse_face, overlay, position, *overlay_vec;
-	int noverlays, obegv, ozv;;
+	int noverlays, obegv, ozv;
 	struct buffer *obuf;
 
 	/* If we get an out-of-range value, return now; avoid an error.  */
@@ -4071,7 +4071,7 @@
      int drive;
      char *dst;
 {
-  char in_path[4], *p = in_path, e = errno;;
+  char in_path[4], *p = in_path, e = errno;
 
   /* Generate "X:." (when drive is X) or "." (when drive is 0).  */
   if (drive != 0)
--- a/src/sysdep.c	Tue May 29 00:15:26 2007 +0000
+++ b/src/sysdep.c	Wed May 30 14:40:46 2007 +0000
@@ -1679,7 +1679,7 @@
       if (term_gpm)
 	{
 	  fcntl (gpm_fd, F_SETOWN, getpid ());
-	  fcntl (gpm_fd, F_SETFL, O_NONBLOCK);
+	  fcntl (gpm_fd, F_SETFL, fcntl (gpm_fd, F_GETFL, 0) | O_NONBLOCK);
 	  init_sigio (gpm_fd);
 	}
 #endif /* HAVE_GPM */
--- a/src/term.c	Tue May 29 00:15:26 2007 +0000
+++ b/src/term.c	Wed May 30 14:40:46 2007 +0000
@@ -427,7 +427,7 @@
 static int mouse_face_beg_row, mouse_face_beg_col;
 static int mouse_face_end_row, mouse_face_end_col;
 static int mouse_face_past_end;
-static Lisp_Object mouse_face_window;
+static Lisp_Object Qmouse_face_window;
 static int mouse_face_face_id;
 
 /* FRAME and X, Y position of mouse when last checked for
@@ -2494,10 +2494,23 @@
  ***********************************************************************/
 
 #ifdef HAVE_GPM
+void term_mouse_moveto (int x, int y)
+{
+  const char *name;
+  int fd;
+  name = (const char *) ttyname (0);
+  fd = open (name, O_WRONLY);
+  /* TODO: how to set mouse position?
+     SOME_FUNCTION (x, y, fd);  */
+  close (fd);
+  last_mouse_x = x;
+  last_mouse_y = y;
+}
+
 static void
 term_show_mouse_face (enum draw_glyphs_face draw)
 {
-  struct window *w = XWINDOW (mouse_face_window);
+  struct window *w = XWINDOW (Qmouse_face_window);
   int save_x, save_y;
   int i, j;
 
@@ -2573,12 +2586,12 @@
 static void
 term_clear_mouse_face ()
 {
-  if (!NILP (mouse_face_window))
+  if (!NILP (Qmouse_face_window))
     term_show_mouse_face (DRAW_NORMAL_TEXT);
 
   mouse_face_beg_row = mouse_face_beg_col = -1;
   mouse_face_end_row = mouse_face_end_col = -1;
-  mouse_face_window = Qnil;
+  Qmouse_face_window = Qnil;
 }
 
 /* Find the glyph matrix position of buffer position POS in window W.
@@ -2679,7 +2692,7 @@
   if (!WINDOWP (window))
     return;
 
-  if (!EQ (window, mouse_face_window))
+  if (!EQ (window, Qmouse_face_window))
     term_clear_mouse_face ();
 
   w = XWINDOW (window);
@@ -2737,7 +2750,7 @@
       {
 	extern Lisp_Object Qmouse_face;
 	Lisp_Object mouse_face, overlay, position, *overlay_vec;
-	int noverlays, obegv, ozv;;
+	int noverlays, obegv, ozv;
 	struct buffer *obuf;
 
 	/* If we get an out-of-range value, return now; avoid an error.  */
@@ -2762,7 +2775,7 @@
 	noverlays = sort_overlays (overlay_vec, noverlays, w);
 
 	/* Check mouse-face highlighting.  */
-	if (!(EQ (window, mouse_face_window)
+	if (!(EQ (window, Qmouse_face_window)
 	      && y >= mouse_face_beg_row
 	      && y <= mouse_face_end_row
 	      && (y > mouse_face_beg_row
@@ -2812,7 +2825,7 @@
 		  = !fast_find_position (w, XFASTINT (after),
 					 &mouse_face_end_col,
 					 &mouse_face_end_row);
-		mouse_face_window = window;
+		Qmouse_face_window = window;
 
 		mouse_face_face_id
 		  = face_at_buffer_position (w, pos, 0, 0,
@@ -2847,7 +2860,7 @@
 		  = !fast_find_position (w, XFASTINT (after),
 					 &mouse_face_end_col,
 					 &mouse_face_end_row);
-		mouse_face_window = window;
+		Qmouse_face_window = window;
 
 		mouse_face_face_id
 		  = face_at_buffer_position (w, pos, 0, 0,
@@ -2934,33 +2947,31 @@
    Set *time to the time the mouse was at the returned position.
 
    This should clear mouse_moved until the next motion
-   event arrives.
-
-   NOT CURRENTLY INVOKED: see mouse_position_hook below.  */
+   event arrives.  */
 static void
 term_mouse_position (FRAME_PTR *fp, int insist, Lisp_Object *bar_window,
 		     enum scroll_bar_part *part, Lisp_Object *x,
 		     Lisp_Object *y, unsigned long *time)
 {
-  Gpm_Event event;
   struct timeval now;
-  int i;
-
-  BLOCK_INPUT;
+  Lisp_Object frame, window;
+  struct window *w;
 
   *fp = SELECTED_FRAME ();
+  (*fp)->mouse_moved = 0;
 
   *bar_window = Qnil;
   *part = 0;
 
-  i = Gpm_GetSnapshot (&event);
-
-  XSETINT (*x, event.x);
-  XSETINT (*y, event.y);
+  XSETINT (*x, last_mouse_x); 
+  XSETINT (*y, last_mouse_y);
+  XSETFRAME (frame, *fp);
+  window = Fwindow_at (*x, *y, frame);
+
+  XSETINT (*x, last_mouse_x - WINDOW_LEFT_EDGE_COL (XWINDOW (window)));
+  XSETINT (*y, last_mouse_y - WINDOW_TOP_EDGE_LINE (XWINDOW (window)));
   gettimeofday(&now, 0);
   *time = (now.tv_sec * 1000) + (now.tv_usec / 1000);
-
-  UNBLOCK_INPUT;
 }
 
 /* Prepare a mouse-event in *RESULT for placement in the input queue.
@@ -3059,7 +3070,7 @@
     name = (const char *) ttyname (0);
     fd = open (name, O_WRONLY);
     ioctl (fd, TIOCLINUX, buf + sizeof (short) - 1);
-    close(fd);
+    close (fd);
 
     term_mouse_movement (f, event);
 
@@ -3074,7 +3085,6 @@
   else {
     f->mouse_moved = 0;
     term_mouse_click (&ie, event, f);
-    //kbd_buffer_store_event_hold (&ie, hold_quit);
   }
 
  done:
@@ -3159,11 +3169,8 @@
   encode_terminal_dst_size = 0;
 
 #ifdef HAVE_GPM
-  /* TODO: Can't get Gpm_Snapshot in term_mouse_position to work: test with
-     (mouse-position).  Also set-mouse-position won't work as is.  */
-  /* mouse_position_hook = term_mouse_position;  */
-
-  mouse_face_window = Qnil;
+  mouse_position_hook = term_mouse_position;
+  Qmouse_face_window = Qnil;
 #endif
 
 #ifdef WINDOWSNT
@@ -3616,6 +3623,8 @@
 #ifdef HAVE_GPM
   defsubr (&Sterm_open_connection);
   defsubr (&Sterm_close_connection);
+
+  staticpro (&Qmouse_face_window);
 #endif /* HAVE_GPM */
 
   fullscreen_hook = NULL;
--- a/src/termhooks.h	Tue May 29 00:15:26 2007 +0000
+++ b/src/termhooks.h	Wed May 30 14:40:46 2007 +0000
@@ -453,6 +453,7 @@
 #ifdef HAVE_GPM
 #include <gpm.h>
 extern int handle_one_term_event (Gpm_Event *, struct input_event *);
+extern void term_mouse_moveto (int, int);
 
 /* Nonzero means mouse is enabled on Linux console */
 extern int term_gpm;
--- a/src/window.c	Tue May 29 00:15:26 2007 +0000
+++ b/src/window.c	Wed May 30 14:40:46 2007 +0000
@@ -1532,7 +1532,7 @@
 	if (!EQ (window, pwindow))
 	  break;
 	/* Otherwise, try another window for SWINDOW.  */
-	swindow = Fnext_window (swindow, Qlambda, Qnil);;
+	swindow = Fnext_window (swindow, Qlambda, Qnil);
 
 	/* If we get back to the frame's selected window,
 	   it means there was no acceptable alternative,
--- a/src/xdisp.c	Tue May 29 00:15:26 2007 +0000
+++ b/src/xdisp.c	Wed May 30 14:40:46 2007 +0000
@@ -6417,7 +6417,7 @@
 	it->c = *p, it->len = 1;
 
       /* Record what we have and where it came from.  */
-      it->what = IT_CHARACTER;;
+      it->what = IT_CHARACTER;
       it->object = it->w->buffer;
       it->position = it->current.pos;
 
@@ -10996,7 +10996,7 @@
   int must_finish = 0;
   struct text_pos tlbufpos, tlendpos;
   int number_of_visible_frames;
-  int count;
+  int count, count1;
   struct frame *sf;
   int polling_stopped_here = 0;
 
@@ -11134,6 +11134,10 @@
 	update_mode_lines++;
     }
 
+  /* Avoid invocation of point motion hooks by `current_column' below.  */
+  count1 = SPECPDL_INDEX ();
+  specbind (Qinhibit_point_motion_hooks, Qt);
+
   /* If %c is in the mode line, update it if needed.  */
   if (!NILP (w->column_number_displayed)
       /* This alternative quickly identifies a common case
@@ -11145,6 +11149,8 @@
           != (int) current_column ()))  /* iftc */
     w->update_mode_line = Qt;
 
+  unbind_to (count1, Qnil);
+
   FRAME_SCROLL_BOTTOM_VPOS (XFRAME (w->frame)) = -1;
 
   /* The variable buffer_shared is set in redisplay_window and
--- a/src/xfaces.c	Tue May 29 00:15:26 2007 +0000
+++ b/src/xfaces.c	Wed May 30 14:40:46 2007 +0000
@@ -8477,7 +8477,7 @@
   staticpro (&QCforeground);
   QCbackground = intern (":background");
   staticpro (&QCbackground);
-  QCstipple = intern (":stipple");;
+  QCstipple = intern (":stipple");
   staticpro (&QCstipple);
   QCwidth = intern (":width");
   staticpro (&QCwidth);