aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiles Bader2007-05-30 14:44:47 +0000
committerMiles Bader2007-05-30 14:44:47 +0000
commit34c6724464237db4bfd5b3fa57e8b0f66a92f618 (patch)
treebbfe4aea433c943f0f6a67b3e49ee31647e12d92
parent30790a37efea5c6fed87ee0dd0d54c31ac9eea11 (diff)
parent7a781a5480b9a1f55d28a76e1d1f89aaa2421f97 (diff)
downloademacs-34c6724464237db4bfd5b3fa57e8b0f66a92f618.tar.gz
emacs-34c6724464237db4bfd5b3fa57e8b0f66a92f618.zip
Merge from emacs--devo--0
Patches applied: * emacs--devo--0 (patch 771-780) - Update from CVS - Merge from emacs--rel--22 - Merge from emacs--rel--22, gnus--rel--5.10 - Fix tq.el edge case * emacs--rel--22 (patch 26-32) - Update from CVS - lisp/vc-hooks.el (vc-find-root): Fix file attribute test * gnus--rel--5.10 (patch 224-225) - Merge from emacs--devo--0, emacs--rel--22 - Update from CVS Revision: emacs@sv.gnu.org/emacs--multi-tty--0--patch-18
-rw-r--r--ChangeLog4
-rwxr-xr-xadmin/nt/dump.bat2
-rwxr-xr-xadmin/nt/makedist.bat17
-rw-r--r--etc/ChangeLog4
-rw-r--r--etc/NEWS4
-rw-r--r--etc/NEWS.2214
-rw-r--r--etc/PROBLEMS21
-rw-r--r--lisp/ChangeLog118
-rw-r--r--lisp/bs.el9
-rw-r--r--lisp/composite.el12
-rw-r--r--lisp/cus-dep.el2
-rw-r--r--lisp/disp-table.el4
-rw-r--r--lisp/ediff-init.el14
-rw-r--r--lisp/ediff-util.el12
-rw-r--r--lisp/edmacro.el5
-rw-r--r--lisp/emacs-lisp/copyright.el33
-rw-r--r--lisp/emacs-lisp/derived.el6
-rw-r--r--lisp/emacs-lisp/rx.el9
-rw-r--r--lisp/emacs-lisp/tq.el5
-rw-r--r--lisp/gnus/ChangeLog5
-rw-r--r--lisp/gnus/message.el14
-rw-r--r--lisp/image-mode.el169
-rw-r--r--lisp/log-edit.el2
-rw-r--r--lisp/net/tramp-ftp.el10
-rw-r--r--lisp/net/tramp-smb.el7
-rw-r--r--lisp/net/tramp-util.el1
-rw-r--r--lisp/net/tramp-uu.el3
-rw-r--r--lisp/net/tramp-vc.el2
-rw-r--r--lisp/net/tramp.el207
-rw-r--r--lisp/net/trampver.el2
-rw-r--r--lisp/net/webjump.el2
-rw-r--r--lisp/progmodes/idlwave.el4
-rw-r--r--lisp/textmodes/flyspell.el3
-rw-r--r--lisp/textmodes/sgml-mode.el23
-rw-r--r--lisp/textmodes/table.el26
-rw-r--r--lisp/url/ChangeLog6
-rw-r--r--lisp/url/url-mailto.el4
-rw-r--r--lisp/vc-hooks.el2
-rw-r--r--lisp/xt-mouse.el29
-rw-r--r--lispref/ChangeLog6
-rw-r--r--lispref/commands.texi50
-rw-r--r--man/ChangeLog11
-rw-r--r--man/erc.texi5
-rw-r--r--man/tramp.texi6
-rw-r--r--man/trampver.texi2
-rwxr-xr-xmkinstalldirs158
-rw-r--r--oldXMenu/ChangeLog4
-rw-r--r--oldXMenu/XMakeAssoc.c2
-rw-r--r--src/ChangeLog22
-rw-r--r--src/ccl.c2
-rw-r--r--src/data.c2
-rw-r--r--src/fns.c2
-rw-r--r--src/frame.c7
-rw-r--r--src/image.c2
-rw-r--r--src/macterm.c4
-rw-r--r--src/msdos.c4
-rw-r--r--src/sysdep.c2
-rw-r--r--src/term.c65
-rw-r--r--src/termhooks.h1
-rw-r--r--src/window.c2
-rw-r--r--src/xdisp.c10
-rw-r--r--src/xfaces.c2
62 files changed, 861 insertions, 326 deletions
diff --git a/ChangeLog b/ChangeLog
index 6794c49b47f..4cb809efc12 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
12007-05-25 Chong Yidong <cyd@stupidchicken.com>
2
3 * mkinstalldirs: Sync to version in automake CVS.
4
12007-05-22 Andreas Schwab <schwab@suse.de> 52007-05-22 Andreas Schwab <schwab@suse.de>
2 6
3 * configure.in: Prefer build_alias over host when host_alias is 7 * configure.in: Prefer build_alias over host when host_alias is
diff --git a/admin/nt/dump.bat b/admin/nt/dump.bat
index b332e7471f6..49d83e24651 100755
--- a/admin/nt/dump.bat
+++ b/admin/nt/dump.bat
@@ -10,8 +10,6 @@ ren emacs.exe emacs.exe.orig
10 10
11:dump 11:dump
12rem Overwrites emacs.exe if still present 12rem Overwrites emacs.exe if still present
13mkdir ..\lib-src
14copy fns* ..\lib-src
15mkdir obj 13mkdir obj
16mkdir obj\i386 14mkdir obj\i386
17mkdir obj\etc 15mkdir obj\etc
diff --git a/admin/nt/makedist.bat b/admin/nt/makedist.bat
index b160da93c4f..56fca7949fa 100755
--- a/admin/nt/makedist.bat
+++ b/admin/nt/makedist.bat
@@ -25,8 +25,6 @@ rem along with GNU Emacs; see the file COPYING. If not, write to the
25rem Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 25rem Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
26rem Boston, MA 02110-1301, USA. 26rem Boston, MA 02110-1301, USA.
27 27
28set ZIP=zip
29
30if (%3) == () goto usage 28if (%3) == () goto usage
31if not (%4) == () goto %4 29if not (%4) == () goto %4
32 30
@@ -34,18 +32,25 @@ if not (%4) == () goto %4
34 32
35echo Create full bin distribution 33echo Create full bin distribution
36copy %3\README.W32 emacs-%1\README.W32 34copy %3\README.W32 emacs-%1\README.W32
37 35rem Info-ZIP zip seems to be broken on Windows.
38%ZIP% -x emacs.mdp -x *.pdb -x *.opt -x *~ -x CVS -9 emacs-%1/BUGS emacs-%1/README emacs-%1/README.W32 emacs-%1/bin emacs-%1/etc emacs-%1/info emacs-%1/lisp %2-bin-i386.zip 36rem It always writes to zip.zip and treats the zipfile argument as one
37rem of the files to go in it.
38rem zip -9 -r %2-bin-i386 emacs-%1/BUGS emacs-%1/README emacs-%1/README.W32 emacs-%1/bin emacs-%1/etc emacs-%1/info emacs-%1/lisp emacs-%1/leim -x emacs.mdp *.pdb *.opt *~ CVS
397z a -tZIP -mx=9 -xr!emacs.mdp -xr!*.pdb -xr!*.opt -xr!*~ -xr!CVS -xr!.arch-inventory %2-bin-i386.zip emacs-%1/BUGS emacs-%1/README emacs-%1/README.W32 emacs-%1/bin emacs-%1/etc emacs-%1/info emacs-%1/lisp emacs-%1/leim
39del emacs-%1\README.W32 40del emacs-%1\README.W32
40if not (%4) == () goto end 41if not (%4) == () goto end
41 42
42:barebin 43:barebin
43
44echo Create archive with just the basic binaries and generated files 44echo Create archive with just the basic binaries and generated files
45echo (the user needs to unpack the full source distribution for 45echo (the user needs to unpack the full source distribution for
46echo everything else) 46echo everything else)
47copy %3\README.W32 emacs-%1\README.W32 47copy %3\README.W32 emacs-%1\README.W32
48%ZIP% -9 emacs-%1/README.W32 emacs-%1/bin emacs-%1/etc/DOC emacs-%1/etc/DOC-X %2-barebin-i386.zip 48copy %3\dump.bat emacs-%1\bin\dump.bat
49rem Info-ZIP zip seems to be broken on Windows.
50rem It always writes to zip.zip and treats the zipfile argument as one
51rem of the files to go in it.
52rem zip -9 -r %2-barebin-i386.zip emacs-%1/README.W32 emacs-%1/bin emacs-%1/etc/DOC-X
537z a -tZIP -mx=9 %2-barebin-i386.zip emacs-%1/README.W32 emacs-%1/bin emacs-%1/etc/DOC-X
49del emacs-%1\README.W32 54del emacs-%1\README.W32
50if not (%4) == () goto end 55if not (%4) == () goto end
51 56
diff --git a/etc/ChangeLog b/etc/ChangeLog
index e793d0256d3..425b0dc353a 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,7 @@
12007-05-29 Robert J. Chassell <bob@rattlesnake.com>
2
3 * NEWS: Fix instances of `allow' without object.
4
12007-05-22 Glenn Morris <rgm@gnu.org> 52007-05-22 Glenn Morris <rgm@gnu.org>
2 6
3 * NEWS.22: New file with entries for Emacs 22. 7 * NEWS.22: New file with entries for Emacs 22.
diff --git a/etc/NEWS b/etc/NEWS
index 9d32a7034a9..780dea787f9 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -34,6 +34,10 @@ with a prefix argument or by typing C-u C-h C-n.
34 34
35* Changes in Specialized Modes and Packages in Emacs 23.1 35* Changes in Specialized Modes and Packages in Emacs 23.1
36 36
37** In the `copyright' package, you can specify your copyright holders's names.
38Only copyright lines with holders matching copyright-names-regexp will be
39considered for update.
40
37 41
38* Changes in Emacs 23.1 on non-free operating systems 42* Changes in Emacs 23.1 on non-free operating systems
39 43
diff --git a/etc/NEWS.22 b/etc/NEWS.22
index 84c7b3b3bf1..41c446ccae8 100644
--- a/etc/NEWS.22
+++ b/etc/NEWS.22
@@ -442,7 +442,7 @@ same string that would be displayed on mouse-over using the
442`help-echo' property, but, in certain cases, it can display a more 442`help-echo' property, but, in certain cases, it can display a more
443keyboard oriented alternative. 443keyboard oriented alternative.
444 444
445*** New user option `help-at-pt-display-when-idle' allows to 445*** New user option `help-at-pt-display-when-idle' allows you to
446automatically show the help provided by `display-local-help' on 446automatically show the help provided by `display-local-help' on
447point-over, after suitable idle time. The amount of idle time is 447point-over, after suitable idle time. The amount of idle time is
448determined by the user option `help-at-pt-timer-delay' and defaults 448determined by the user option `help-at-pt-timer-delay' and defaults
@@ -1949,11 +1949,11 @@ old name remains available as alias, but has been marked obsolete.
1949 1949
1950If point is at the end of a file buffer before reverting, Auto Revert 1950If point is at the end of a file buffer before reverting, Auto Revert
1951mode keeps it at the end after reverting. Similarly if point is 1951mode keeps it at the end after reverting. Similarly if point is
1952displayed at the end of a file buffer in any window, it stays at 1952displayed at the end of a file buffer in any window, it stays at the end
1953the end of the buffer in that window. This allows to tail a file: 1953of the buffer in that window. This allows you to "tail" a file: just
1954just put point at the end of the buffer and it stays there. This 1954put point at the end of the buffer and it stays there. This rule
1955rule applies to file buffers. For non-file buffers, the behavior can 1955applies to file buffers. For non-file buffers, the behavior can be mode
1956be mode dependent. 1956dependent.
1957 1957
1958If you are sure that the file will only change by growing at the end, 1958If you are sure that the file will only change by growing at the end,
1959then you can tail the file more efficiently by using the new minor 1959then you can tail the file more efficiently by using the new minor
@@ -3047,7 +3047,7 @@ struct members in C, members variables in C++ and variables in PHP.
3047 3047
3048*** Support for `movemail' from GNU mailutils was added to Rmail. 3048*** Support for `movemail' from GNU mailutils was added to Rmail.
3049 3049
3050This version of `movemail' allows to read mail from a wide range of 3050This version of `movemail' allows you to read mail from a wide range of
3051mailbox formats, including remote POP3 and IMAP4 mailboxes with or 3051mailbox formats, including remote POP3 and IMAP4 mailboxes with or
3052without TLS encryption. If GNU mailutils is installed on the system 3052without TLS encryption. If GNU mailutils is installed on the system
3053and its version of `movemail' can be found in exec-path, it will be 3053and its version of `movemail' can be found in exec-path, it will be
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index 473043932ac..00dedc0c363 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -2452,27 +2452,6 @@ This results from a bug in a VERY old version of GNU Sed. To solve
2452the problem, install the current version of GNU Sed, then rerun 2452the problem, install the current version of GNU Sed, then rerun
2453Emacs's configure script. 2453Emacs's configure script.
2454 2454
2455*** Compiling on GNU/Linux fails due to a missing left operand in gnu-linux.h.
2456
2457The error messages have the form:
2458
2459 ../src/s/gnu-linux.h:49:24: error: operator '>' has no left operand
2460
2461This error occurs because your system defines LINUX_VERSION_CODE in
2462the standard header file linux/version.h but does not give it a value.
2463As a workaround, you can edit the file src/s/gnu-linux.h to add the
2464needed definition. On the line after "#include <linux/version.h>",
2465add a line as shown below:
2466
2467#include <linux/version.h>
2468#define LINUX_VERSION_CODE 132626
2469
2470The number to use depends on your kernel version (the example shown is
2471for kernel 2.6.18). The number can be obtained by running the
2472following command in the shell:
2473
2474uname -r | sed -e 's/\./ /g' -e 's/-.*//' | awk '{print $1*(2^16) + $2*(2^8) + $3}'
2475
2476*** Building a 32-bit executable on a 64-bit GNU/Linux architecture. 2455*** Building a 32-bit executable on a 64-bit GNU/Linux architecture.
2477 2456
2478First ensure that the necessary 32-bit system libraries and include 2457First ensure that the necessary 32-bit system libraries and include
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 98adf1a4da4..9a79d4a0b55 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,121 @@
12007-05-30 Michael Olson <mwolson@gnu.org>
2
3 * emacs-lisp/tq.el (tq-queue-pop): Stifle error when a process has
4 died and we are trying to send a signal to it. The program using
5 tq.el should periodically check to see whether the process has
6 died and react appropriately -- this is not the responsibility of
7 tq.el, and is consistent with the rest of the tq.el source code.
8
92007-05-29 Martin Rudalics <rudalics@gmx.at>
10
11 * textmodes/table.el (table--point-entered-cell-function)
12 (table--point-left-cell-function): Bind
13 `inhibit-point-motion-hooks' to t.
14
152007-05-29 Nikolaj Schumacher <n_schumacher@web.de> (tiny change)
16
17 * emacs-lisp/rx.el (rx): Doc fix.
18
192007-05-28 Juanma Barranquero <lekktu@gmail.com>
20
21 * progmodes/idlwave.el (idlwave-routines): Fix typo in docstring.
22
232007-05-28 Michael Albinus <michael.albinus@gmx.de>
24
25 Sync with Tramp 2.0.56.
26
27 * net/tramp.el:
28 * net/tramp-ftp.el:
29 * net/tramp-smb.el:
30 * net/tramp-util.el:
31 * net/tramp-vc.el:
32 Don't load cl.el, because that pollutes the namespace. Replace cl
33 macros by their implementations where necessary. Requested by
34 Richard Stallman <rms@gnu.org>.
35
36 * net/tramp.el (top): Make `set-buffer-multibyte' an alias if it
37 doesn't exist.
38 (with-parsed-tramp-file-name): Protect debug spec during
39 compilation.
40 (tramp-handle-insert-directory): Check (featurep 'ls-lisp).
41 (tramp-file-name-p, tramp-file-name-multi-method)
42 (tramp-file-name-method, tramp-file-name-user)
43 (tramp-file-name-host, tramp-file-name-localname): New defuns,
44 replacing defstruct `tramp-file-name'.
45 (tramp-handle-file-remote-p, tramp-completion-dissect-file-name1)
46 (tramp-dissect-file-name, tramp-dissect-multi-file-name): Apply
47 `vector' instead of `make-tramp-file-name'.
48 (tramp-handle-make-auto-save-file-name): Apply
49 `tramp-temporary-file-directory' for compatibility reasons.
50 (tramp-completion-mode): Use `natnump' instead of `wholenump'
51 because of XEmacs.
52 (tramp-completion-mode): `last-input-event' is nil when XEmacs is
53 started.
54
552007-05-28 Chong Yidong <cyd@stupidchicken.com>
56
57 * textmodes/sgml-mode.el (sgml-point-entered): Use condition-case.
58
592007-05-27 Tetsurou Okazaki <okazaki@be.to> (tiny change)
60
61 * log-edit.el (log-edit-changelog-paragraph): Return point-max
62 as the end of the ChangeLog paragraph when it ends without a line
63 termination.
64
652007-05-27 Ryan Yeske <rcyeske@gmail.com>
66
67 * net/webjump.el (webjump-sample-sites):
68 Add simple Wikipedia query.
69
702007-05-25 Stefan Monnier <monnier@iro.umontreal.ca>
71
72 * emacs-lisp/derived.el (define-derived-mode): Remove bogus
73 compatibiity code.
74
75 * emacs-lisp/copyright.el (copyright-names-regexp): New var.
76 (copyright-update-year): Use it.
77
78 * edmacro.el (edmacro-format-keys): Use current-active-maps.
79
80 * ediff-init.el (ediff-defvar-local, ediff-with-current-buffer):
81 Add indentation and debugging info. Fix up comment convention.
82
83 * cus-dep.el (custom-make-dependencies): Simplify.
84
85 * composite.el (compose-region, decompose-region):
86 Use inhibit-read-only and restore-buffer-modified-p.
87
88 * xt-mouse.el (xterm-mouse-truncate-wrap): New function.
89 (xterm-mouse-event): Use it.
90
912007-05-25 Juanma Barranquero <lekktu@gmail.com>
92
93 * bs.el (bs-cycle-previous): Don't modify the cycle list until
94 `switch-to-buffer' has returned succesfully.
95 (bs-cycle-next): Ditto. Also, don't bury the buffer when the
96 window is dedicated (it could iconify the frame).
97
982007-05-25 Miles Bader <miles@fencepost.gnu.org>
99
100 * vc-hooks.el (vc-find-root): Fix file attribute test.
101
1022007-05-24 Richard Stallman <rms@gnu.org>
103
104 * textmodes/flyspell.el (flyspell-correct-word-before-point):
105 Don't let opoint be nil.
106 (flyspell-emacs-popup): Explicit error if no dialogs.
107
1082007-05-24 Chong Yidong <cyd@stupidchicken.com>
109
110 * image-mode.el (image-forward-hscroll, image-backward-hscroll)
111 (image-next-line, image-previous-line, image-scroll-up)
112 (image-scroll-down, image-bol, image-eol, image-bob, image-eob):
113 New functions.
114 (image-mode-map): Remap motion commands.
115 (image-mode-text-map): New keymap for viewing images as text.
116 (image-mode): Use image-mode-map.
117 (image-toggle-display): Toggle auto-hscroll-mode and mode keymaps.
118
12007-05-24 Stefan Monnier <monnier@iro.umontreal.ca> 1192007-05-24 Stefan Monnier <monnier@iro.umontreal.ca>
2 120
3 * textmodes/fill.el (canonically-space-region): Make the second arg 121 * textmodes/fill.el (canonically-space-region): Make the second arg
diff --git a/lisp/bs.el b/lisp/bs.el
index b1fa47100f0..5951d129d96 100644
--- a/lisp/bs.el
+++ b/lisp/bs.el
@@ -1221,10 +1221,13 @@ by buffer configuration `bs-cycle-configuration-name'."
1221 bs--cycle-list))) 1221 bs--cycle-list)))
1222 (next (car tupel)) 1222 (next (car tupel))
1223 (cycle-list (cdr tupel))) 1223 (cycle-list (cdr tupel)))
1224 (unless (window-dedicated-p (selected-window))
1225 ;; We don't want the frame iconified if the only window in the frame
1226 ;; happens to be dedicated; let's get the error from switch-to-buffer
1227 (bury-buffer))
1228 (switch-to-buffer next)
1224 (setq bs--cycle-list (append (cdr cycle-list) 1229 (setq bs--cycle-list (append (cdr cycle-list)
1225 (list (car cycle-list)))) 1230 (list (car cycle-list))))
1226 (bury-buffer)
1227 (switch-to-buffer next)
1228 (bs-message-without-log "Next buffers: %s" 1231 (bs-message-without-log "Next buffers: %s"
1229 (or (cdr bs--cycle-list) 1232 (or (cdr bs--cycle-list)
1230 "this buffer")))))) 1233 "this buffer"))))))
@@ -1251,9 +1254,9 @@ by buffer configuration `bs-cycle-configuration-name'."
1251 bs--cycle-list))) 1254 bs--cycle-list)))
1252 (prev-buffer (car tupel)) 1255 (prev-buffer (car tupel))
1253 (cycle-list (cdr tupel))) 1256 (cycle-list (cdr tupel)))
1257 (switch-to-buffer prev-buffer)
1254 (setq bs--cycle-list (append (last cycle-list) 1258 (setq bs--cycle-list (append (last cycle-list)
1255 (reverse (cdr (reverse cycle-list))))) 1259 (reverse (cdr (reverse cycle-list)))))
1256 (switch-to-buffer prev-buffer)
1257 (bs-message-without-log "Previous buffers: %s" 1260 (bs-message-without-log "Previous buffers: %s"
1258 (or (reverse (cdr bs--cycle-list)) 1261 (or (reverse (cdr bs--cycle-list))
1259 "this buffer")))))) 1262 "this buffer"))))))
diff --git a/lisp/composite.el b/lisp/composite.el
index ede7d023e87..f22c6b52da0 100644
--- a/lisp/composite.el
+++ b/lisp/composite.el
@@ -194,7 +194,7 @@ adjust the composition when it gets invalid because of a change of
194text in the composition." 194text in the composition."
195 (interactive "r") 195 (interactive "r")
196 (let ((modified-p (buffer-modified-p)) 196 (let ((modified-p (buffer-modified-p))
197 (buffer-read-only nil)) 197 (inhibit-read-only t))
198 (if (or (vectorp components) (listp components)) 198 (if (or (vectorp components) (listp components))
199 (setq components (encode-composition-components components))) 199 (setq components (encode-composition-components components)))
200 (compose-region-internal start end components modification-func) 200 (compose-region-internal start end components modification-func)
@@ -208,9 +208,9 @@ When called from a program, expects two arguments,
208positions (integers or markers) specifying the region." 208positions (integers or markers) specifying the region."
209 (interactive "r") 209 (interactive "r")
210 (let ((modified-p (buffer-modified-p)) 210 (let ((modified-p (buffer-modified-p))
211 (buffer-read-only nil)) 211 (inhibit-read-only t))
212 (remove-text-properties start end '(composition nil)) 212 (remove-text-properties start end '(composition nil))
213 (set-buffer-modified-p modified-p))) 213 (restore-buffer-modified-p modified-p)))
214 214
215;;;###autoload 215;;;###autoload
216(defun compose-string (string &optional start end components modification-func) 216(defun compose-string (string &optional start end components modification-func)
@@ -372,8 +372,8 @@ after a sequence of character events."
372;;;###autoload(global-set-key [compose-last-chars] 'compose-last-chars) 372;;;###autoload(global-set-key [compose-last-chars] 'compose-last-chars)
373 373
374 374
375;;; The following codes are only for backward compatibility with Emacs 375;; The following codes are only for backward compatibility with Emacs
376;;; 20.4 and earlier. 376;; 20.4 and earlier.
377 377
378;;;###autoload 378;;;###autoload
379(defun decompose-composite-char (char &optional type with-composition-rule) 379(defun decompose-composite-char (char &optional type with-composition-rule)
@@ -392,5 +392,5 @@ Optional 3rd arg WITH-COMPOSITION-RULE is ignored."
392 392
393 393
394 394
395;;; arch-tag: ee703d77-1723-45d4-a31f-e9f0f867aa33 395;; arch-tag: ee703d77-1723-45d4-a31f-e9f0f867aa33
396;;; composite.el ends here 396;;; composite.el ends here
diff --git a/lisp/cus-dep.el b/lisp/cus-dep.el
index 713b84f8bc0..98af13cec69 100644
--- a/lisp/cus-dep.el
+++ b/lisp/cus-dep.el
@@ -141,7 +141,7 @@ Usage: emacs -batch -l ./cus-dep.el -f custom-make-dependencies DIRS"
141 (member where 141 (member where
142 (cdr (assoc version version-alist))) 142 (cdr (assoc version version-alist)))
143 (push where (cdr (assoc version version-alist)))) 143 (push where (cdr (assoc version version-alist))))
144 (push (cons version (list where)) version-alist))) 144 (push (list version where) version-alist)))
145 ;; This is a group 145 ;; This is a group
146 (insert "(custom-put-if-not '" (symbol-name symbol) 146 (insert "(custom-put-if-not '" (symbol-name symbol)
147 " 'custom-version ") 147 " 'custom-version ")
diff --git a/lisp/disp-table.el b/lisp/disp-table.el
index 2a4dd01897d..207063cbba2 100644
--- a/lisp/disp-table.el
+++ b/lisp/disp-table.el
@@ -220,7 +220,7 @@ with either the `--unibyte' option or the EMACS_UNIBYTE environment
220variable, or else customize `enable-multibyte-characters'. 220variable, or else customize `enable-multibyte-characters'.
221 221
222With prefix argument, this command enables European character display 222With prefix argument, this command enables European character display
223if arg is positive, disables it otherwise. Otherwise, it toggles 223if ARG is positive, disables it otherwise. Otherwise, it toggles
224European character display. 224European character display.
225 225
226When this mode is enabled, characters in the range of 160 to 255 226When this mode is enabled, characters in the range of 160 to 255
@@ -264,5 +264,5 @@ for users who call this function in `.emacs'."
264 264
265(provide 'disp-table) 265(provide 'disp-table)
266 266
267;;; arch-tag: ffe4c28c-960c-47aa-b8a8-ae89d371ffc7 267;; arch-tag: ffe4c28c-960c-47aa-b8a8-ae89d371ffc7
268;;; disp-table.el ends here 268;;; disp-table.el ends here
diff --git a/lisp/ediff-init.el b/lisp/ediff-init.el
index 0ecc809797f..d37096f9e89 100644
--- a/lisp/ediff-init.el
+++ b/lisp/ediff-init.el
@@ -110,6 +110,7 @@ that Ediff doesn't know about.")
110;; 110;;
111;; Plagiarised from `emerge-defvar-local' for XEmacs. 111;; Plagiarised from `emerge-defvar-local' for XEmacs.
112(defmacro ediff-defvar-local (var value doc) 112(defmacro ediff-defvar-local (var value doc)
113 (declare (indent defun))
113 `(progn 114 `(progn
114 (defvar ,var ,value ,doc) 115 (defvar ,var ,value ,doc)
115 (make-variable-buffer-local ',var) 116 (make-variable-buffer-local ',var)
@@ -258,6 +259,7 @@ It needs to be killed when we quit the session.")
258;; Doesn't save the point and mark. 259;; Doesn't save the point and mark.
259;; This is `with-current-buffer' with the added test for live buffers." 260;; This is `with-current-buffer' with the added test for live buffers."
260(defmacro ediff-with-current-buffer (buffer &rest body) 261(defmacro ediff-with-current-buffer (buffer &rest body)
262 (declare (indent 1) (debug (form body)))
261 `(if (ediff-buffer-live-p ,buffer) 263 `(if (ediff-buffer-live-p ,buffer)
262 (save-current-buffer 264 (save-current-buffer
263 (set-buffer ,buffer) 265 (set-buffer ,buffer)
@@ -1873,11 +1875,11 @@ Unless optional argument INPLACE is non-nil, return a new string."
1873 1875
1874 1876
1875 1877
1876;;; Local Variables: 1878;; Local Variables:
1877;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun) 1879;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
1878;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1) 1880;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
1879;;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body)) 1881;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body))
1880;;; End: 1882;; End:
1881 1883
1882;;; arch-tag: fa31d384-1e70-4d4b-82a7-3e96307c46f5 1884;; arch-tag: fa31d384-1e70-4d4b-82a7-3e96307c46f5
1883;;; ediff-init.el ends here 1885;;; ediff-init.el ends here
diff --git a/lisp/ediff-util.el b/lisp/ediff-util.el
index 7483128b71a..34af5cc146b 100644
--- a/lisp/ediff-util.el
+++ b/lisp/ediff-util.el
@@ -4315,11 +4315,11 @@ Mail anyway? (y or n) ")
4315(provide 'ediff-util) 4315(provide 'ediff-util)
4316 4316
4317 4317
4318;;; Local Variables: 4318;; Local Variables:
4319;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun) 4319;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
4320;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1) 4320;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
4321;;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body)) 4321;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body))
4322;;; End: 4322;; End:
4323 4323
4324;;; arch-tag: f51099b6-ef4b-470f-88a1-3a0e0b03a879 4324;; arch-tag: f51099b6-ef4b-470f-88a1-3a0e0b03a879
4325;;; ediff-util.el ends here 4325;;; ediff-util.el ends here
diff --git a/lisp/edmacro.el b/lisp/edmacro.el
index 5ef9e25b3f9..86d5fb65fcf 100644
--- a/lisp/edmacro.el
+++ b/lisp/edmacro.el
@@ -430,10 +430,7 @@ doubt, use whitespace."
430 430
431(defun edmacro-format-keys (macro &optional verbose) 431(defun edmacro-format-keys (macro &optional verbose)
432 (setq macro (edmacro-fix-menu-commands macro)) 432 (setq macro (edmacro-fix-menu-commands macro))
433 (let* ((maps (append (current-minor-mode-maps) 433 (let* ((maps (current-active-maps))
434 (if (current-local-map)
435 (list (current-local-map)))
436 (list (current-global-map))))
437 (pkeys '(end-macro ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?- ?\C-u 434 (pkeys '(end-macro ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?- ?\C-u
438 ?\M-- ?\M-0 ?\M-1 ?\M-2 ?\M-3 ?\M-4 ?\M-5 ?\M-6 435 ?\M-- ?\M-0 ?\M-1 ?\M-2 ?\M-3 ?\M-4 ?\M-5 ?\M-6
439 ?\M-7 ?\M-8 ?\M-9)) 436 ?\M-7 ?\M-8 ?\M-9))
diff --git a/lisp/emacs-lisp/copyright.el b/lisp/emacs-lisp/copyright.el
index 5f5aecea97a..ac61c5a9ada 100644
--- a/lisp/emacs-lisp/copyright.el
+++ b/lisp/emacs-lisp/copyright.el
@@ -37,7 +37,7 @@
37 :group 'tools) 37 :group 'tools)
38 38
39(defcustom copyright-limit 2000 39(defcustom copyright-limit 2000
40 "*Don't try to update copyright beyond this position unless interactive. 40 "Don't try to update copyright beyond this position unless interactive.
41A value of nil means to search whole buffer." 41A value of nil means to search whole buffer."
42 :group 'copyright 42 :group 'copyright
43 :type '(choice (integer :tag "Limit") 43 :type '(choice (integer :tag "Limit")
@@ -49,21 +49,28 @@ A value of nil means to search whole buffer."
49 "\\([©Ž©]\\|@copyright{}\\|[Cc]opyright\\s *:?\\s *\\(?:(C)\\)?\ 49 "\\([©Ž©]\\|@copyright{}\\|[Cc]opyright\\s *:?\\s *\\(?:(C)\\)?\
50\\|[Cc]opyright\\s *:?\\s *[©Ž©]\\)\ 50\\|[Cc]opyright\\s *:?\\s *[©Ž©]\\)\
51\\s *\\([1-9]\\([-0-9, ';/*%#\n\t]\\|\\s<\\|\\s>\\)*[0-9]+\\)" 51\\s *\\([1-9]\\([-0-9, ';/*%#\n\t]\\|\\s<\\|\\s>\\)*[0-9]+\\)"
52 "*What your copyright notice looks like. 52 "What your copyright notice looks like.
53The second \\( \\) construct must match the years." 53The second \\( \\) construct must match the years."
54 :group 'copyright 54 :group 'copyright
55 :type 'regexp) 55 :type 'regexp)
56 56
57(defcustom copyright-names-regexp ""
58 "Regexp matching the names which correspond to the user.
59Only copyright lines where the name matches this regexp will be updated.
60This allows you to avoid adding yars to a copyright notice belonging to
61someone else or to a group for which you do not work."
62 :type 'regexp)
63
57(defcustom copyright-years-regexp 64(defcustom copyright-years-regexp
58 "\\(\\s *\\)\\([1-9]\\([-0-9, ';/*%#\n\t]\\|\\s<\\|\\s>\\)*[0-9]+\\)" 65 "\\(\\s *\\)\\([1-9]\\([-0-9, ';/*%#\n\t]\\|\\s<\\|\\s>\\)*[0-9]+\\)"
59 "*Match additional copyright notice years. 66 "Match additional copyright notice years.
60The second \\( \\) construct must match the years." 67The second \\( \\) construct must match the years."
61 :group 'copyright 68 :group 'copyright
62 :type 'regexp) 69 :type 'regexp)
63 70
64 71
65(defcustom copyright-query 'function 72(defcustom copyright-query 'function
66 "*If non-nil, ask user before changing copyright. 73 "If non-nil, ask user before changing copyright.
67When this is `function', only ask when called non-interactively." 74When this is `function', only ask when called non-interactively."
68 :group 'copyright 75 :group 'copyright
69 :type '(choice (const :tag "Do not ask") 76 :type '(choice (const :tag "Do not ask")
@@ -83,7 +90,17 @@ When this is `function', only ask when called non-interactively."
83 "String representing the current year.") 90 "String representing the current year.")
84 91
85(defun copyright-update-year (replace noquery) 92(defun copyright-update-year (replace noquery)
86 (when (re-search-forward copyright-regexp (+ (point) copyright-limit) t) 93 (when
94 (condition-case err
95 (re-search-forward (concat "\\(" copyright-regexp
96 "\\)\\([ \t]*\n\\)?.*\\(?:"
97 copyright-names-regexp "\\)")
98 (+ (point) copyright-limit) t)
99 ;; In case the regexp is rejected. This is useful because
100 ;; copyright-update is typically called from before-save-hook where
101 ;; such an error is very inconvenient for the user.
102 (error (message "Can't update copyright: %s" err) nil))
103 (goto-char (match-end 1))
87 ;; If the years are continued onto multiple lined 104 ;; If the years are continued onto multiple lined
88 ;; that are marked as comments, skip to the end of the years anyway. 105 ;; that are marked as comments, skip to the end of the years anyway.
89 (while (save-excursion 106 (while (save-excursion
@@ -94,7 +111,7 @@ When this is `function', only ask when called non-interactively."
94 (save-match-data 111 (save-match-data
95 (forward-line 1) 112 (forward-line 1)
96 (and (looking-at comment-start-skip) 113 (and (looking-at comment-start-skip)
97 (goto-char (match-end 0)))) 114 (goto-char (match-end 1))))
98 (save-match-data 115 (save-match-data
99 (looking-at copyright-years-regexp)))) 116 (looking-at copyright-years-regexp))))
100 (forward-line 1) 117 (forward-line 1)
@@ -103,7 +120,7 @@ When this is `function', only ask when called non-interactively."
103 120
104 ;; Note that `current-time-string' isn't locale-sensitive. 121 ;; Note that `current-time-string' isn't locale-sensitive.
105 (setq copyright-current-year (substring (current-time-string) -4)) 122 (setq copyright-current-year (substring (current-time-string) -4))
106 (unless (string= (buffer-substring (- (match-end 2) 2) (match-end 2)) 123 (unless (string= (buffer-substring (- (match-end 3) 2) (match-end 3))
107 (substring copyright-current-year -2)) 124 (substring copyright-current-year -2))
108 (if (or noquery 125 (if (or noquery
109 (y-or-n-p (if replace 126 (y-or-n-p (if replace
@@ -235,5 +252,5 @@ Uses heuristic: year >= 50 means 19xx, < 50 means 20xx."
235;; coding: emacs-mule 252;; coding: emacs-mule
236;; End: 253;; End:
237 254
238;;; arch-tag: b4991afb-b6b1-4590-bebe-e076d9d4aee8 255;; arch-tag: b4991afb-b6b1-4590-bebe-e076d9d4aee8
239;;; copyright.el ends here 256;;; copyright.el ends here
diff --git a/lisp/emacs-lisp/derived.el b/lisp/emacs-lisp/derived.el
index 2b2cffc5a35..5fc60cf516f 100644
--- a/lisp/emacs-lisp/derived.el
+++ b/lisp/emacs-lisp/derived.el
@@ -254,11 +254,7 @@ No problems result if this variable is not bound.
254 ,@body 254 ,@body
255 ) 255 )
256 ;; Run the hooks, if any. 256 ;; Run the hooks, if any.
257 ;; Make the generated code work in older Emacs versions 257 (run-mode-hooks ',hook)))))
258 ;; that do not yet have run-mode-hooks.
259 (if (fboundp 'run-mode-hooks)
260 (run-mode-hooks ',hook)
261 (run-hooks ',hook))))))
262 258
263;; PUBLIC: find the ultimate class of a derived mode. 259;; PUBLIC: find the ultimate class of a derived mode.
264 260
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index 39134443d86..54f88ba3ea5 100644
--- a/lisp/emacs-lisp/rx.el
+++ b/lisp/emacs-lisp/rx.el
@@ -725,8 +725,7 @@ CHAR
725 matches the empty string, but only at point. 725 matches the empty string, but only at point.
726 726
727`word-start', `bow' 727`word-start', `bow'
728 matches the empty string, but only at the beginning or end of a 728 matches the empty string, but only at the beginning of a word.
729 word.
730 729
731`word-end', `eow' 730`word-end', `eow'
732 matches the empty string, but only at the end of a word. 731 matches the empty string, but only at the end of a word.
@@ -740,6 +739,12 @@ CHAR
740 matches the empty string, but not at the beginning or end of a 739 matches the empty string, but not at the beginning or end of a
741 word. 740 word.
742 741
742`symbol-start'
743 matches the empty string, but only at the beginning of a symbol.
744
745`symbol-end'
746 matches the empty string, but only at the end of a symbol.
747
743`digit', `numeric', `num' 748`digit', `numeric', `num'
744 matches 0 through 9. 749 matches 0 through 9.
745 750
diff --git a/lisp/emacs-lisp/tq.el b/lisp/emacs-lisp/tq.el
index b12c21b6730..f20015fd720 100644
--- a/lisp/emacs-lisp/tq.el
+++ b/lisp/emacs-lisp/tq.el
@@ -100,8 +100,9 @@ to a tcp server on another machine."
100(defun tq-queue-pop (tq) 100(defun tq-queue-pop (tq)
101 (setcar tq (cdr (car tq))) 101 (setcar tq (cdr (car tq)))
102 (let ((question (tq-queue-head-question tq))) 102 (let ((question (tq-queue-head-question tq)))
103 (when question 103 (condition-case nil
104 (process-send-string (tq-process tq) question))) 104 (process-send-string (tq-process tq) question)
105 (error nil)))
105 (null (car tq))) 106 (null (car tq)))
106 107
107(defun tq-enqueue (tq question regexp closure fn &optional delay-question) 108(defun tq-enqueue (tq question regexp closure fn &optional delay-question)
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 9f4df39957f..631869e4f34 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,8 @@
12007-05-28 Katsumi Yamaoka <yamaoka@jpl.org>
2
3 * message.el (message-pop-to-buffer): Add switch-function argument.
4 (message-mail): Pass switch-function argument to it.
5
12007-05-24 Katsumi Yamaoka <yamaoka@jpl.org> 62007-05-24 Katsumi Yamaoka <yamaoka@jpl.org>
2 7
3 * message.el (message-narrow-to-headers-or-head): Ignore 8 * message.el (message-narrow-to-headers-or-head): Ignore
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 432bd69b67f..eef854f4fb7 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -5576,7 +5576,7 @@ between beginning of field and beginning of line."
5576 'car-less-than-car))) 5576 'car-less-than-car)))
5577 new))))) 5577 new)))))
5578 5578
5579(defun message-pop-to-buffer (name) 5579(defun message-pop-to-buffer (name &optional switch-function)
5580 "Pop to buffer NAME, and warn if it already exists and is modified." 5580 "Pop to buffer NAME, and warn if it already exists and is modified."
5581 (let ((buffer (get-buffer name))) 5581 (let ((buffer (get-buffer name)))
5582 (if (and buffer 5582 (if (and buffer
@@ -5587,14 +5587,16 @@ between beginning of field and beginning of line."
5587 (progn 5587 (progn
5588 (gnus-select-frame-set-input-focus (window-frame window)) 5588 (gnus-select-frame-set-input-focus (window-frame window))
5589 (select-window window)) 5589 (select-window window))
5590 (set-buffer (pop-to-buffer buffer))) 5590 (funcall (or switch-function 'pop-to-buffer) buffer)
5591 (set-buffer buffer))
5591 (when (and (buffer-modified-p) 5592 (when (and (buffer-modified-p)
5592 (not (prog1 5593 (not (prog1
5593 (y-or-n-p 5594 (y-or-n-p
5594 "Message already being composed; erase? ") 5595 "Message already being composed; erase? ")
5595 (message nil)))) 5596 (message nil))))
5596 (error "Message being composed"))) 5597 (error "Message being composed")))
5597 (set-buffer (pop-to-buffer name))) 5598 (funcall (or switch-function 'pop-to-buffer) name)
5599 (set-buffer name))
5598 (erase-buffer) 5600 (erase-buffer)
5599 (message-mode))) 5601 (message-mode)))
5600 5602
@@ -5831,15 +5833,15 @@ is a function used to switch to and display the mail buffer."
5831 (interactive) 5833 (interactive)
5832 (let ((message-this-is-mail t) replybuffer) 5834 (let ((message-this-is-mail t) replybuffer)
5833 (unless (message-mail-user-agent) 5835 (unless (message-mail-user-agent)
5834 (funcall 5836 (message-pop-to-buffer
5835 (or switch-function 'message-pop-to-buffer)
5836 ;; Search for the existing message buffer if `continue' is non-nil. 5837 ;; Search for the existing message buffer if `continue' is non-nil.
5837 (let ((message-generate-new-buffers 5838 (let ((message-generate-new-buffers
5838 (when (or (not continue) 5839 (when (or (not continue)
5839 (eq message-generate-new-buffers 'standard) 5840 (eq message-generate-new-buffers 'standard)
5840 (functionp message-generate-new-buffers)) 5841 (functionp message-generate-new-buffers))
5841 message-generate-new-buffers))) 5842 message-generate-new-buffers)))
5842 (message-buffer-name "mail" to)))) 5843 (message-buffer-name "mail" to))
5844 switch-function))
5843 ;; FIXME: message-mail should do something if YANK-ACTION is not 5845 ;; FIXME: message-mail should do something if YANK-ACTION is not
5844 ;; insert-buffer. 5846 ;; insert-buffer.
5845 (and (consp yank-action) (eq (car yank-action) 'insert-buffer) 5847 (and (consp yank-action) (eq (car yank-action) 'insert-buffer)
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index 5ff35258c54..6ac864172d8 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -43,11 +43,162 @@
43;;;###autoload (push '("\\.p[bpgn]m\\'" . image-mode) auto-mode-alist) 43;;;###autoload (push '("\\.p[bpgn]m\\'" . image-mode) auto-mode-alist)
44;;;###autoload (push '("\\.x[bp]m\\'" . image-mode-maybe) auto-mode-alist) 44;;;###autoload (push '("\\.x[bp]m\\'" . image-mode-maybe) auto-mode-alist)
45 45
46;;; Image scrolling functions
47
48(defun image-forward-hscroll (&optional n)
49 "Scroll image in current window to the left by N character widths.
50Stop if the right edge of the image is reached."
51 (interactive "p")
52 (cond ((= n 0) nil)
53 ((< n 0)
54 (set-window-hscroll (selected-window)
55 (max 0 (+ (window-hscroll) n))))
56 (t
57 (let* ((image (get-text-property 1 'display))
58 (edges (window-inside-edges))
59 (win-width (- (nth 2 edges) (nth 0 edges)))
60 (img-width (ceiling (car (image-size image)))))
61 (set-window-hscroll (selected-window)
62 (min (max 0 (- img-width win-width))
63 (+ n (window-hscroll))))))))
64
65(defun image-backward-hscroll (&optional n)
66 "Scroll image in current window to the right by N character widths.
67Stop if the left edge of the image is reached."
68 (interactive "p")
69 (image-forward-hscroll (- n)))
70
71(defun image-next-line (&optional n)
72 "Scroll image in current window upward by N lines.
73Stop if the bottom edge of the image is reached."
74 (interactive "p")
75 (cond ((= n 0) nil)
76 ((< n 0)
77 (set-window-vscroll (selected-window)
78 (max 0 (+ (window-vscroll) n))))
79 (t
80 (let* ((image (get-text-property 1 'display))
81 (edges (window-inside-edges))
82 (win-height (- (nth 3 edges) (nth 1 edges)))
83 (img-height (ceiling (cdr (image-size image)))))
84 (set-window-vscroll (selected-window)
85 (min (max 0 (- img-height win-height))
86 (+ n (window-vscroll))))))))
87
88(defun image-previous-line (&optional n)
89 "Scroll image in current window downward by N lines.
90Stop if the top edge of the image is reached."
91 (interactive "p")
92 (image-next-line (- n)))
93
94(defun image-scroll-up (&optional n)
95 "Scroll image in current window upward by N lines.
96Stop if the bottom edge of the image is reached.
97If ARG is omitted or nil, scroll upward by a near full screen.
98A near full screen is `next-screen-context-lines' less than a full screen.
99Negative ARG means scroll downward.
100If ARG is the atom `-', scroll downward by nearly full screen.
101When calling from a program, supply as argument a number, nil, or `-'."
102 (interactive "P")
103 (cond ((null n)
104 (let* ((edges (window-inside-edges))
105 (win-height (- (nth 3 edges) (nth 1 edges))))
106 (image-next-line
107 (max 0 (- win-height next-screen-context-lines)))))
108 ((eq n '-)
109 (let* ((edges (window-inside-edges))
110 (win-height (- (nth 3 edges) (nth 1 edges))))
111 (image-next-line
112 (min 0 (- next-screen-context-lines win-height)))))
113 (t (image-next-line (prefix-numeric-value n)))))
114
115(defun image-scroll-down (&optional n)
116 "Scroll image in current window downward by N lines
117Stop if the top edge of the image is reached.
118If ARG is omitted or nil, scroll downward by a near full screen.
119A near full screen is `next-screen-context-lines' less than a full screen.
120Negative ARG means scroll upward.
121If ARG is the atom `-', scroll upward by nearly full screen.
122When calling from a program, supply as argument a number, nil, or `-'."
123 (interactive "P")
124 (cond ((null n)
125 (let* ((edges (window-inside-edges))
126 (win-height (- (nth 3 edges) (nth 1 edges))))
127 (image-next-line
128 (min 0 (- next-screen-context-lines win-height)))))
129 ((eq n '-)
130 (let* ((edges (window-inside-edges))
131 (win-height (- (nth 3 edges) (nth 1 edges))))
132 (image-next-line
133 (max 0 (- win-height next-screen-context-lines)))))
134 (t (image-next-line (- (prefix-numeric-value n))))))
135
136(defun image-bol (arg)
137 "Scroll horizontally to the left edge of the image in the current window.
138With argument ARG not nil or 1, move forward ARG - 1 lines first,
139stopping if the top or bottom edge of the image is reached."
140 (interactive "p")
141 (and arg
142 (/= (setq arg (prefix-numeric-value arg)) 1)
143 (image-next-line (- arg 1)))
144 (set-window-hscroll (selected-window) 0))
145
146(defun image-eol (arg)
147 "Scroll horizontally to the right edge of the image in the current window.
148With argument ARG not nil or 1, move forward ARG - 1 lines first,
149stopping if the top or bottom edge of the image is reached."
150 (interactive "p")
151 (and arg
152 (/= (setq arg (prefix-numeric-value arg)) 1)
153 (image-next-line (- arg 1)))
154 (let* ((image (get-text-property 1 'display))
155 (edges (window-inside-edges))
156 (win-width (- (nth 2 edges) (nth 0 edges)))
157 (img-width (ceiling (car (image-size image)))))
158 (set-window-hscroll (selected-window)
159 (max 0 (- img-width win-width)))))
160
161(defun image-bob ()
162 "Scroll to the top-left corner of the image in the current window."
163 (interactive)
164 (set-window-hscroll (selected-window) 0)
165 (set-window-vscroll (selected-window) 0))
166
167(defun image-eob ()
168 "Scroll to the bottom-right corner of the image in the current window."
169 (interactive)
170 (let* ((image (get-text-property 1 'display))
171 (edges (window-inside-edges))
172 (win-width (- (nth 2 edges) (nth 0 edges)))
173 (img-width (ceiling (car (image-size image))))
174 (win-height (- (nth 3 edges) (nth 1 edges)))
175 (img-height (ceiling (cdr (image-size image)))))
176 (set-window-hscroll (selected-window) (max 0 (- img-width win-width)))
177 (set-window-vscroll (selected-window) (max 0 (- img-height win-height)))))
178
179;;; Image Mode setup
180
46(defvar image-mode-map 181(defvar image-mode-map
47 (let ((map (make-sparse-keymap))) 182 (let ((map (make-sparse-keymap)))
48 (define-key map "\C-c\C-c" 'image-toggle-display) 183 (define-key map "\C-c\C-c" 'image-toggle-display)
184 (define-key map [remap forward-char] 'image-forward-hscroll)
185 (define-key map [remap backward-char] 'image-backward-hscroll)
186 (define-key map [remap previous-line] 'image-previous-line)
187 (define-key map [remap next-line] 'image-next-line)
188 (define-key map [remap scroll-up] 'image-scroll-up)
189 (define-key map [remap scroll-down] 'image-scroll-down)
190 (define-key map [remap move-beginning-of-line] 'image-bol)
191 (define-key map [remap move-end-of-line] 'image-eol)
192 (define-key map [remap beginning-of-buffer] 'image-bob)
193 (define-key map [remap end-of-buffer] 'image-eob)
194 map)
195 "Major mode keymap for viewing images in Image mode.")
196
197(defvar image-mode-text-map
198 (let ((map (make-sparse-keymap)))
199 (define-key map "\C-c\C-c" 'image-toggle-display)
49 map) 200 map)
50 "Major mode keymap for Image mode.") 201 "Major mode keymap for viewing images as text in Image mode.")
51 202
52;;;###autoload 203;;;###autoload
53(defun image-mode () 204(defun image-mode ()
@@ -58,13 +209,13 @@ to toggle between display as an image and display as text."
58 (kill-all-local-variables) 209 (kill-all-local-variables)
59 (setq mode-name "Image") 210 (setq mode-name "Image")
60 (setq major-mode 'image-mode) 211 (setq major-mode 'image-mode)
61 (use-local-map image-mode-map)
62 (add-hook 'change-major-mode-hook 'image-toggle-display-text nil t) 212 (add-hook 'change-major-mode-hook 'image-toggle-display-text nil t)
63 (if (and (display-images-p) 213 (if (and (display-images-p)
64 (not (get-text-property (point-min) 'display))) 214 (not (get-text-property (point-min) 'display)))
65 (image-toggle-display) 215 (image-toggle-display)
66 ;; Set next vars when image is already displayed but local 216 ;; Set next vars when image is already displayed but local
67 ;; variables were cleared by kill-all-local-variables 217 ;; variables were cleared by kill-all-local-variables
218 (use-local-map image-mode-map)
68 (setq cursor-type nil truncate-lines t)) 219 (setq cursor-type nil truncate-lines t))
69 (run-mode-hooks 'image-mode-hook) 220 (run-mode-hooks 'image-mode-hook)
70 (if (display-images-p) 221 (if (display-images-p)
@@ -140,6 +291,8 @@ and showing the image as an image."
140 (set-buffer-modified-p modified) 291 (set-buffer-modified-p modified)
141 (kill-local-variable 'cursor-type) 292 (kill-local-variable 'cursor-type)
142 (kill-local-variable 'truncate-lines) 293 (kill-local-variable 'truncate-lines)
294 (kill-local-variable 'auto-hscroll-mode)
295 (use-local-map image-mode-text-map)
143 (if (called-interactively-p) 296 (if (called-interactively-p)
144 (message "Repeat this command to go back to displaying the image"))) 297 (message "Repeat this command to go back to displaying the image")))
145 ;; Turn the image data into a real image, but only if the whole file 298 ;; Turn the image data into a real image, but only if the whole file
@@ -161,12 +314,9 @@ and showing the image as an image."
161 nil t))) 314 nil t)))
162 (props 315 (props
163 `(display ,image 316 `(display ,image
164 intangible ,image 317 intangible ,image
165 rear-nonsticky (display intangible) 318 rear-nonsticky (display intangible)
166 ;; This a cheap attempt to make the whole buffer 319 read-only t front-sticky (read-only)))
167 ;; read-only when we're visiting the file (as
168 ;; opposed to just inserting it).
169 read-only t front-sticky (read-only)))
170 (inhibit-read-only t) 320 (inhibit-read-only t)
171 (buffer-undo-list t) 321 (buffer-undo-list t)
172 (modified (buffer-modified-p))) 322 (modified (buffer-modified-p)))
@@ -179,6 +329,9 @@ and showing the image as an image."
179 ;; This just makes the arrow displayed in the right fringe 329 ;; This just makes the arrow displayed in the right fringe
180 ;; area look correct when the image is wider than the window. 330 ;; area look correct when the image is wider than the window.
181 (setq truncate-lines t) 331 (setq truncate-lines t)
332 ;; Allow navigation of large images
333 (set (make-local-variable 'auto-hscroll-mode) nil)
334 (use-local-map image-mode-map)
182 (if (called-interactively-p) 335 (if (called-interactively-p)
183 (message "Repeat this command to go back to displaying the file as text"))))) 336 (message "Repeat this command to go back to displaying the file as text")))))
184 337
diff --git a/lisp/log-edit.el b/lisp/log-edit.el
index ed0a5c464e9..8f63635ee49 100644
--- a/lisp/log-edit.el
+++ b/lisp/log-edit.el
@@ -538,7 +538,7 @@ If we are between paragraphs, return the previous paragraph."
538 (point)) 538 (point))
539 (if (re-search-forward "^[ \t\n]*$" nil t) 539 (if (re-search-forward "^[ \t\n]*$" nil t)
540 (match-beginning 0) 540 (match-beginning 0)
541 (point))))) 541 (point-max)))))
542 542
543(defun log-edit-changelog-subparagraph () 543(defun log-edit-changelog-subparagraph ()
544 "Return the bounds of the ChangeLog subparagraph containing point. 544 "Return the bounds of the ChangeLog subparagraph containing point.
diff --git a/lisp/net/tramp-ftp.el b/lisp/net/tramp-ftp.el
index 2749a6858c0..d33873d1689 100644
--- a/lisp/net/tramp-ftp.el
+++ b/lisp/net/tramp-ftp.el
@@ -1,6 +1,7 @@
1;;; tramp-ftp.el --- Tramp convenience functions for Ange-FTP -*- coding: iso-8859-1; -*- 1;;; tramp-ftp.el --- Tramp convenience functions for Ange-FTP -*- coding: iso-8859-1; -*-
2 2
3;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. 3;; Copyright (C) 2002, 2003, 2004, 2005, 2006,
4;; 2007 Free Software Foundation, Inc.
4 5
5;; Author: Michael Albinus <michael.albinus@gmx.de> 6;; Author: Michael Albinus <michael.albinus@gmx.de>
6;; Keywords: comm, processes 7;; Keywords: comm, processes
@@ -31,12 +32,7 @@
31 32
32(require 'tramp) 33(require 'tramp)
33 34
34(eval-when-compile 35(eval-when-compile (require 'custom))
35 (require 'cl)
36 (require 'custom)
37 ;; Emacs 19.34 compatibility hack -- is this needed?
38 (or (>= emacs-major-version 20)
39 (load "cl-seq")))
40 36
41;; Disable Ange-FTP from file-name-handler-alist. 37;; Disable Ange-FTP from file-name-handler-alist.
42;; To handle EFS, the following functions need to be dealt with: 38;; To handle EFS, the following functions need to be dealt with:
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index 5d5d441193d..7382bdef63b 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -31,12 +31,7 @@
31(require 'tramp) 31(require 'tramp)
32 32
33;; Pacify byte-compiler 33;; Pacify byte-compiler
34(eval-when-compile 34(eval-when-compile (require 'custom))
35 (require 'cl)
36 (require 'custom)
37 ;; Emacs 19.34 compatibility hack -- is this needed?
38 (or (>= emacs-major-version 20)
39 (load "cl-seq")))
40 35
41;; Avoid byte-compiler warnings if the byte-compiler supports this. 36;; Avoid byte-compiler warnings if the byte-compiler supports this.
42;; Currently, XEmacs supports this. 37;; Currently, XEmacs supports this.
diff --git a/lisp/net/tramp-util.el b/lisp/net/tramp-util.el
index 81857ae4225..4895edf019b 100644
--- a/lisp/net/tramp-util.el
+++ b/lisp/net/tramp-util.el
@@ -29,7 +29,6 @@
29 29
30;;; Code: 30;;; Code:
31 31
32(eval-when-compile (require 'cl))
33(require 'compile) 32(require 'compile)
34(require 'tramp) 33(require 'tramp)
35(add-hook 'tramp-util-unload-hook 34(add-hook 'tramp-util-unload-hook
diff --git a/lisp/net/tramp-uu.el b/lisp/net/tramp-uu.el
index ce047489260..32bb9857f7f 100644
--- a/lisp/net/tramp-uu.el
+++ b/lisp/net/tramp-uu.el
@@ -1,7 +1,8 @@
1;;; -*- coding: iso-2022-7bit; -*- 1;;; -*- coding: iso-2022-7bit; -*-
2;;; tramp-uu.el --- uuencode in Lisp 2;;; tramp-uu.el --- uuencode in Lisp
3 3
4;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. 4;; Copyright (C) 2002, 2003, 2004, 2005, 2006,
5;; 2007 Free Software Foundation, Inc.
5 6
6;; Author: Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net> 7;; Author: Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
7;; Keywords: comm, terminals 8;; Keywords: comm, terminals
diff --git a/lisp/net/tramp-vc.el b/lisp/net/tramp-vc.el
index eda98364a98..cc5566d6354 100644
--- a/lisp/net/tramp-vc.el
+++ b/lisp/net/tramp-vc.el
@@ -31,8 +31,6 @@
31 31
32;;; Code: 32;;; Code:
33 33
34(eval-when-compile
35 (require 'cl))
36(require 'vc) 34(require 'vc)
37;; Old VC defines vc-rcs-release in vc.el, new VC requires extra module. 35;; Old VC defines vc-rcs-release in vc.el, new VC requires extra module.
38(unless (boundp 'vc-rcs-release) 36(unless (boundp 'vc-rcs-release)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 20ac73d0f75..f85620ee323 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -151,11 +151,7 @@ Otherwise, use a separate filename syntax for Tramp.")
151 (when (featurep 'tramp-smb) 151 (when (featurep 'tramp-smb)
152 (unload-feature 'tramp-smb 'force))))))) 152 (unload-feature 'tramp-smb 'force)))))))
153 153
154(require 'cl)
155(require 'custom) 154(require 'custom)
156;; Emacs 19.34 compatibility hack -- is this needed?
157(or (>= emacs-major-version 20)
158 (load "cl-seq"))
159 155
160(unless (boundp 'custom-print-functions) 156(unless (boundp 'custom-print-functions)
161 (defvar custom-print-functions nil)) ; not autoloaded before Emacs 20.4 157 (defvar custom-print-functions nil)) ; not autoloaded before Emacs 20.4
@@ -175,6 +171,11 @@ Otherwise, use a separate filename syntax for Tramp.")
175 (when (boundp 'byte-compile-not-obsolete-var) 171 (when (boundp 'byte-compile-not-obsolete-var)
176 (setq byte-compile-not-obsolete-var 'directory-sep-char))) 172 (setq byte-compile-not-obsolete-var 'directory-sep-char)))
177 173
174;; `set-buffer-multibyte' comes from Emacs Leim.
175(eval-and-compile
176 (unless (fboundp 'set-buffer-multibyte)
177 (defalias 'set-buffer-multibyte 'ignore)))
178
178;;; User Customizable Internal Variables: 179;;; User Customizable Internal Variables:
179 180
180(defgroup tramp nil 181(defgroup tramp nil
@@ -2077,7 +2078,9 @@ If VAR is nil, then we bind `v' to the structure and `multi-method',
2077 2078
2078(put 'with-parsed-tramp-file-name 'lisp-indent-function 2) 2079(put 'with-parsed-tramp-file-name 'lisp-indent-function 2)
2079;; Enable debugging. 2080;; Enable debugging.
2080(def-edebug-spec with-parsed-tramp-file-name (form symbolp body)) 2081(eval-and-compile
2082 (when (featurep 'edebug)
2083 (def-edebug-spec with-parsed-tramp-file-name (form symbolp body))))
2081;; Highlight as keyword. 2084;; Highlight as keyword.
2082(when (functionp 'font-lock-add-keywords) 2085(when (functionp 'font-lock-add-keywords)
2083 (funcall 'font-lock-add-keywords 2086 (funcall 'font-lock-add-keywords
@@ -2384,10 +2387,10 @@ target of the symlink differ."
2384 "Integer constant overflow in reader") 2387 "Integer constant overflow in reader")
2385 (string-match 2388 (string-match
2386 "^[0-9]+\\([0-9][0-9][0-9][0-9][0-9]\\)\\'" 2389 "^[0-9]+\\([0-9][0-9][0-9][0-9][0-9]\\)\\'"
2387 (caddr err))) 2390 (car (cddr err))))
2388 (let* ((big (read (substring (caddr err) 0 2391 (let* ((big (read (substring (car (cddr err)) 0
2389 (match-beginning 1)))) 2392 (match-beginning 1))))
2390 (small (read (match-string 1 (caddr err)))) 2393 (small (read (match-string 1 (car (cddr err)))))
2391 (twiddle (/ small 65536))) 2394 (twiddle (/ small 65536)))
2392 (cons (+ big twiddle) 2395 (cons (+ big twiddle)
2393 (- small (* twiddle 65536)))))))) 2396 (- small (* twiddle 65536))))))))
@@ -2807,7 +2810,7 @@ of."
2807 object))) 2810 object)))
2808 (cell root)) 2811 (cell root))
2809 (while (cdr cell) 2812 (while (cdr cell)
2810 (if (and match (not (string-match match (caadr cell)))) 2813 (if (and match (not (string-match match (car (cadr cell)))))
2811 ;; Remove from list 2814 ;; Remove from list
2812 (setcdr cell (cddr cell)) 2815 (setcdr cell (cddr cell))
2813 ;; Include in list 2816 ;; Include in list
@@ -3426,10 +3429,10 @@ This is like `dired-recursive-delete-directory' for tramp files."
3426(defun tramp-handle-insert-directory 3429(defun tramp-handle-insert-directory
3427 (filename switches &optional wildcard full-directory-p) 3430 (filename switches &optional wildcard full-directory-p)
3428 "Like `insert-directory' for tramp files." 3431 "Like `insert-directory' for tramp files."
3429 (if (and (boundp 'ls-lisp-use-insert-directory-program) 3432 (if (and (featurep 'ls-lisp)
3430 (not (symbol-value 'ls-lisp-use-insert-directory-program))) 3433 (not (symbol-value 'ls-lisp-use-insert-directory-program)))
3431 (tramp-run-real-handler 'insert-directory 3434 (tramp-run-real-handler
3432 (list filename switches wildcard full-directory-p)) 3435 'insert-directory (list filename switches wildcard full-directory-p))
3433 ;; For the moment, we assume that the remote "ls" program does not 3436 ;; For the moment, we assume that the remote "ls" program does not
3434 ;; grok "--dired". In the future, we should detect this on 3437 ;; grok "--dired". In the future, we should detect this on
3435 ;; connection setup. 3438 ;; connection setup.
@@ -3869,12 +3872,7 @@ This will break if COMMAND prints a newline, followed by the value of
3869 "Like `file-remote-p' for tramp files." 3872 "Like `file-remote-p' for tramp files."
3870 (when (tramp-tramp-file-p filename) 3873 (when (tramp-tramp-file-p filename)
3871 (with-parsed-tramp-file-name filename nil 3874 (with-parsed-tramp-file-name filename nil
3872 (make-tramp-file-name 3875 (vector multi-method method user host ""))))
3873 :multi-method multi-method
3874 :method method
3875 :user user
3876 :host host
3877 :localname ""))))
3878 3876
3879(defun tramp-handle-insert-file-contents 3877(defun tramp-handle-insert-file-contents
3880 (filename &optional visit beg end replace) 3878 (filename &optional visit beg end replace)
@@ -3919,7 +3917,7 @@ This will break if COMMAND prints a newline, followed by the value of
3919 (when (boundp 'last-coding-system-used) 3917 (when (boundp 'last-coding-system-used)
3920 (set 'last-coding-system-used coding-system-used)) 3918 (set 'last-coding-system-used coding-system-used))
3921 (list (expand-file-name filename) 3919 (list (expand-file-name filename)
3922 (second result)))))) 3920 (cadr result))))))
3923 3921
3924 3922
3925(defun tramp-handle-find-backup-file-name (filename) 3923(defun tramp-handle-find-backup-file-name (filename)
@@ -3978,7 +3976,8 @@ Returns a file name in `tramp-auto-save-directory' for autosaving this file."
3978 (when (and (string-match (car x) buffer-file-name) 3976 (when (and (string-match (car x) buffer-file-name)
3979 (not (car (cddr x)))) 3977 (not (car (cddr x))))
3980 (setq tramp-auto-save-directory 3978 (setq tramp-auto-save-directory
3981 (or tramp-auto-save-directory temporary-file-directory)))) 3979 (or tramp-auto-save-directory
3980 (tramp-temporary-file-directory)))))
3982 (symbol-value 'auto-save-file-name-transforms))) 3981 (symbol-value 'auto-save-file-name-transforms)))
3983 ;; Create directory. 3982 ;; Create directory.
3984 (when tramp-auto-save-directory 3983 (when tramp-auto-save-directory
@@ -4566,7 +4565,7 @@ Falls back to normal file name handler if no tramp file name handler exists."
4566 (member (match-string 1 file) (mapcar 'car tramp-methods))) 4565 (member (match-string 1 file) (mapcar 'car tramp-methods)))
4567 ((or (equal last-input-event 'tab) 4566 ((or (equal last-input-event 'tab)
4568 ;; Emacs 4567 ;; Emacs
4569 (and (wholenump last-input-event) 4568 (and (natnump last-input-event)
4570 (or 4569 (or
4571 ;; ?\t has event-modifier 'control 4570 ;; ?\t has event-modifier 'control
4572 (char-equal last-input-event ?\t) 4571 (char-equal last-input-event ?\t)
@@ -4575,6 +4574,10 @@ Falls back to normal file name handler if no tramp file name handler exists."
4575 (char-equal last-input-event ?\ ))))) 4574 (char-equal last-input-event ?\ )))))
4576 ;; XEmacs 4575 ;; XEmacs
4577 (and (featurep 'xemacs) 4576 (and (featurep 'xemacs)
4577 ;; `last-input-event' might be nil.
4578 (not (null last-input-event))
4579 ;; `last-input-event' may have no character approximation.
4580 (funcall (symbol-function 'event-to-character) last-input-event)
4578 (or 4581 (or
4579 ;; ?\t has event-modifier 'control 4582 ;; ?\t has event-modifier 'control
4580 (char-equal 4583 (char-equal
@@ -4771,24 +4774,14 @@ remote host and localname (filename on remote host)."
4771 (match-string (nth 1 structure) name))) 4774 (match-string (nth 1 structure) name)))
4772 (if (and method (member method tramp-multi-methods)) 4775 (if (and method (member method tramp-multi-methods))
4773 ;; Not handled (yet). 4776 ;; Not handled (yet).
4774 (make-tramp-file-name 4777 (vector method nil nil nil nil)
4775 :multi-method method
4776 :method nil
4777 :user nil
4778 :host nil
4779 :localname nil)
4780 (let ((user (and (nth 2 structure) 4778 (let ((user (and (nth 2 structure)
4781 (match-string (nth 2 structure) name))) 4779 (match-string (nth 2 structure) name)))
4782 (host (and (nth 3 structure) 4780 (host (and (nth 3 structure)
4783 (match-string (nth 3 structure) name))) 4781 (match-string (nth 3 structure) name)))
4784 (localname (and (nth 4 structure) 4782 (localname (and (nth 4 structure)
4785 (match-string (nth 4 structure) name)))) 4783 (match-string (nth 4 structure) name))))
4786 (make-tramp-file-name 4784 (vector nil method user host localname)))))))
4787 :multi-method nil
4788 :method method
4789 :user user
4790 :host host
4791 :localname localname)))))))
4792 4785
4793;; This function returns all possible method completions, adding the 4786;; This function returns all possible method completions, adding the
4794;; trailing method delimeter. 4787;; trailing method delimeter.
@@ -5191,7 +5184,7 @@ USER the array of user names, HOST the array of host names."
5191 (aref user i) (aref host i)) 5184 (aref user i) (aref host i))
5192 (format "%s@%s:" (aref method i) (aref host i))) 5185 (format "%s@%s:" (aref method i) (aref host i)))
5193 string-list)) 5186 string-list))
5194 (incf i)) 5187 (setq i (1+ i)))
5195 (format "*%s/%s %s*" 5188 (format "*%s/%s %s*"
5196 prefix multi-method 5189 prefix multi-method
5197 (apply 'concat (reverse string-list))))) 5190 (apply 'concat (reverse string-list)))))
@@ -5928,7 +5921,7 @@ log in as u2 to h2."
5928 ;; is done here. 5921 ;; is done here.
5929 (funcall multi-func p m u h command) 5922 (funcall multi-func p m u h command)
5930 (erase-buffer) 5923 (erase-buffer)
5931 (incf i))) 5924 (setq i (1+ i))))
5932 (tramp-open-connection-setup-interactive-shell 5925 (tramp-open-connection-setup-interactive-shell
5933 p multi-method method user host) 5926 p multi-method method user host)
5934 (tramp-post-connection multi-method method user host))))) 5927 (tramp-post-connection multi-method method user host)))))
@@ -6824,7 +6817,8 @@ If `tramp-discard-garbage' is nil, just erase buffer."
6824 6817
6825(defun tramp-mode-string-to-int (mode-string) 6818(defun tramp-mode-string-to-int (mode-string)
6826 "Converts a ten-letter `drwxrwxrwx'-style mode string into mode bits." 6819 "Converts a ten-letter `drwxrwxrwx'-style mode string into mode bits."
6827 (let* ((mode-chars (string-to-vector mode-string)) 6820 (let* (case-fold-search
6821 (mode-chars (string-to-vector mode-string))
6828 (owner-read (aref mode-chars 1)) 6822 (owner-read (aref mode-chars 1))
6829 (owner-write (aref mode-chars 2)) 6823 (owner-write (aref mode-chars 2))
6830 (owner-execute-or-setid (aref mode-chars 3)) 6824 (owner-execute-or-setid (aref mode-chars 3))
@@ -6836,45 +6830,61 @@ If `tramp-discard-garbage' is nil, just erase buffer."
6836 (other-execute-or-sticky (aref mode-chars 9))) 6830 (other-execute-or-sticky (aref mode-chars 9)))
6837 (save-match-data 6831 (save-match-data
6838 (logior 6832 (logior
6839 (case owner-read 6833 (cond
6840 (?r (tramp-octal-to-decimal "00400")) (?- 0) 6834 ((char-equal owner-read ?r) (tramp-octal-to-decimal "00400"))
6841 (t (error "Second char `%c' must be one of `r-'" owner-read))) 6835 ((char-equal owner-read ?-) 0)
6842 (case owner-write 6836 (t (error "Second char `%c' must be one of `r-'" owner-read)))
6843 (?w (tramp-octal-to-decimal "00200")) (?- 0) 6837 (cond
6844 (t (error "Third char `%c' must be one of `w-'" owner-write))) 6838 ((char-equal owner-write ?w) (tramp-octal-to-decimal "00200"))
6845 (case owner-execute-or-setid 6839 ((char-equal owner-write ?-) 0)
6846 (?x (tramp-octal-to-decimal "00100")) 6840 (t (error "Third char `%c' must be one of `w-'" owner-write)))
6847 (?S (tramp-octal-to-decimal "04000")) 6841 (cond
6848 (?s (tramp-octal-to-decimal "04100")) 6842 ((char-equal owner-execute-or-setid ?x)
6849 (?- 0) 6843 (tramp-octal-to-decimal "00100"))
6850 (t (error "Fourth char `%c' must be one of `xsS-'" 6844 ((char-equal owner-execute-or-setid ?S)
6851 owner-execute-or-setid))) 6845 (tramp-octal-to-decimal "04000"))
6852 (case group-read 6846 ((char-equal owner-execute-or-setid ?s)
6853 (?r (tramp-octal-to-decimal "00040")) (?- 0) 6847 (tramp-octal-to-decimal "04100"))
6854 (t (error "Fifth char `%c' must be one of `r-'" group-read))) 6848 ((char-equal owner-execute-or-setid ?-) 0)
6855 (case group-write 6849 (t (error "Fourth char `%c' must be one of `xsS-'"
6856 (?w (tramp-octal-to-decimal "00020")) (?- 0) 6850 owner-execute-or-setid)))
6857 (t (error "Sixth char `%c' must be one of `w-'" group-write))) 6851 (cond
6858 (case group-execute-or-setid 6852 ((char-equal group-read ?r) (tramp-octal-to-decimal "00040"))
6859 (?x (tramp-octal-to-decimal "00010")) 6853 ((char-equal group-read ?-) 0)
6860 (?S (tramp-octal-to-decimal "02000")) 6854 (t (error "Fifth char `%c' must be one of `r-'" group-read)))
6861 (?s (tramp-octal-to-decimal "02010")) 6855 (cond
6862 (?- 0) 6856 ((char-equal group-write ?w) (tramp-octal-to-decimal "00020"))
6863 (t (error "Seventh char `%c' must be one of `xsS-'" 6857 ((char-equal group-write ?-) 0)
6864 group-execute-or-setid))) 6858 (t (error "Sixth char `%c' must be one of `w-'" group-write)))
6865 (case other-read 6859 (cond
6866 (?r (tramp-octal-to-decimal "00004")) (?- 0) 6860 ((char-equal group-execute-or-setid ?x)
6867 (t (error "Eighth char `%c' must be one of `r-'" other-read))) 6861 (tramp-octal-to-decimal "00010"))
6868 (case other-write 6862 ((char-equal group-execute-or-setid ?S)
6869 (?w (tramp-octal-to-decimal "00002")) (?- 0) 6863 (tramp-octal-to-decimal "02000"))
6864 ((char-equal group-execute-or-setid ?s)
6865 (tramp-octal-to-decimal "02010"))
6866 ((char-equal group-execute-or-setid ?-) 0)
6867 (t (error "Seventh char `%c' must be one of `xsS-'"
6868 group-execute-or-setid)))
6869 (cond
6870 ((char-equal other-read ?r)
6871 (tramp-octal-to-decimal "00004"))
6872 ((char-equal other-read ?-) 0)
6873 (t (error "Eighth char `%c' must be one of `r-'" other-read)))
6874 (cond
6875 ((char-equal other-write ?w) (tramp-octal-to-decimal "00002"))
6876 ((char-equal other-write ?-) 0)
6870 (t (error "Nineth char `%c' must be one of `w-'" other-write))) 6877 (t (error "Nineth char `%c' must be one of `w-'" other-write)))
6871 (case other-execute-or-sticky 6878 (cond
6872 (?x (tramp-octal-to-decimal "00001")) 6879 ((char-equal other-execute-or-sticky ?x)
6873 (?T (tramp-octal-to-decimal "01000")) 6880 (tramp-octal-to-decimal "00001"))
6874 (?t (tramp-octal-to-decimal "01001")) 6881 ((char-equal other-execute-or-sticky ?T)
6875 (?- 0) 6882 (tramp-octal-to-decimal "01000"))
6876 (t (error "Tenth char `%c' must be one of `xtT-'" 6883 ((char-equal other-execute-or-sticky ?t)
6877 other-execute-or-sticky))))))) 6884 (tramp-octal-to-decimal "01001"))
6885 ((char-equal other-execute-or-sticky ?-) 0)
6886 (t (error "Tenth char `%c' must be one of `xtT-'"
6887 other-execute-or-sticky)))))))
6878 6888
6879(defun tramp-convert-file-attributes (multi-method method user host attr) 6889(defun tramp-convert-file-attributes (multi-method method user host attr)
6880 "Convert file-attributes ATTR generated by perl script or ls. 6890 "Convert file-attributes ATTR generated by perl script or ls.
@@ -6977,7 +6987,29 @@ Not actually used. Use `(format \"%o\" i)' instead?"
6977;; internal data structure. Convenience functions for internal 6987;; internal data structure. Convenience functions for internal
6978;; data structure. 6988;; data structure.
6979 6989
6980(defstruct tramp-file-name multi-method method user host localname) 6990(defun tramp-file-name-p (obj)
6991 "Check whether TRAMP-FILE-NAME is a Tramp object."
6992 (and (vectorp obj) (= 5 (length obj))))
6993
6994(defun tramp-file-name-multi-method (obj)
6995 "Return MULTI-METHOD component of TRAMP-FILE-NAME."
6996 (and (tramp-file-name-p obj) (aref obj 0)))
6997
6998(defun tramp-file-name-method (obj)
6999 "Return METHOD component of TRAMP-FILE-NAME."
7000 (and (tramp-file-name-p obj) (aref obj 1)))
7001
7002(defun tramp-file-name-user (obj)
7003 "Return USER component of TRAMP-FILE-NAME."
7004 (and (tramp-file-name-p obj) (aref obj 2)))
7005
7006(defun tramp-file-name-host (obj)
7007 "Return HOST component of TRAMP-FILE-NAME."
7008 (and (tramp-file-name-p obj) (aref obj 3)))
7009
7010(defun tramp-file-name-localname (obj)
7011 "Return LOCALNAME component of TRAMP-FILE-NAME."
7012 (and (tramp-file-name-p obj) (aref obj 4)))
6981 7013
6982(defun tramp-tramp-file-p (name) 7014(defun tramp-tramp-file-p (name)
6983 "Return t iff NAME is a tramp file." 7015 "Return t iff NAME is a tramp file."
@@ -7010,12 +7042,7 @@ localname (file name on remote host)."
7010 (let ((user (match-string (nth 2 tramp-file-name-structure) name)) 7042 (let ((user (match-string (nth 2 tramp-file-name-structure) name))
7011 (host (match-string (nth 3 tramp-file-name-structure) name)) 7043 (host (match-string (nth 3 tramp-file-name-structure) name))
7012 (localname (match-string (nth 4 tramp-file-name-structure) name))) 7044 (localname (match-string (nth 4 tramp-file-name-structure) name)))
7013 (make-tramp-file-name 7045 (vector nil method (or user nil) host localname))))))
7014 :multi-method nil
7015 :method method
7016 :user (or user nil)
7017 :host host
7018 :localname localname))))))
7019 7046
7020(defun tramp-find-default-method (user host) 7047(defun tramp-find-default-method (user host)
7021 "Look up the right method to use in `tramp-default-method-alist'." 7048 "Look up the right method to use in `tramp-default-method-alist'."
@@ -7055,7 +7082,7 @@ If both MULTI-METHOD and METHOD are nil, do a lookup in
7055 (setq method (match-string method-index name)) 7082 (setq method (match-string method-index name))
7056 (setq hops (match-string hops-index name)) 7083 (setq hops (match-string hops-index name))
7057 (setq len (/ (length (match-data t)) 2)) 7084 (setq len (/ (length (match-data t)) 2))
7058 (when (< localname-index 0) (incf localname-index len)) 7085 (when (< localname-index 0) (setq localname-index (+ localname-index len)))
7059 (setq localname (match-string localname-index name)) 7086 (setq localname (match-string localname-index name))
7060 (let ((index 0)) 7087 (let ((index 0))
7061 (while (string-match hop-regexp hops index) 7088 (while (string-match hop-regexp hops index)
@@ -7066,12 +7093,12 @@ If both MULTI-METHOD and METHOD are nil, do a lookup in
7066 (cons (match-string hop-user-index hops) hop-users)) 7093 (cons (match-string hop-user-index hops) hop-users))
7067 (setq hop-hosts 7094 (setq hop-hosts
7068 (cons (match-string hop-host-index hops) hop-hosts)))) 7095 (cons (match-string hop-host-index hops) hop-hosts))))
7069 (make-tramp-file-name 7096 (vector
7070 :multi-method method 7097 method
7071 :method (apply 'vector (reverse hop-methods)) 7098 (apply 'vector (reverse hop-methods))
7072 :user (apply 'vector (reverse hop-users)) 7099 (apply 'vector (reverse hop-users))
7073 :host (apply 'vector (reverse hop-hosts)) 7100 (apply 'vector (reverse hop-hosts))
7074 :localname localname))) 7101 localname)))
7075 7102
7076(defun tramp-make-tramp-file-name (multi-method method user host localname) 7103(defun tramp-make-tramp-file-name (multi-method method user host localname)
7077 "Constructs a tramp file name from METHOD, USER, HOST and LOCALNAME." 7104 "Constructs a tramp file name from METHOD, USER, HOST and LOCALNAME."
@@ -7103,7 +7130,7 @@ If both MULTI-METHOD and METHOD are nil, do a lookup in
7103 (let ((m (aref method i)) (u (aref user i)) (h (aref host i))) 7130 (let ((m (aref method i)) (u (aref user i)) (h (aref host i)))
7104 (setq hops (concat hops (format-spec hop-format 7131 (setq hops (concat hops (format-spec hop-format
7105 `((?m . ,m) (?u . ,u) (?h . ,h))))) 7132 `((?m . ,m) (?u . ,u) (?h . ,h)))))
7106 (incf i))) 7133 (setq i (1+ i))))
7107 (concat prefix hops localname))) 7134 (concat prefix hops localname)))
7108 7135
7109(defun tramp-make-copy-program-file-name (user host localname) 7136(defun tramp-make-copy-program-file-name (user host localname)
@@ -7218,7 +7245,7 @@ as default."
7218 (assoc (tramp-find-method multi-method method user host) 7245 (assoc (tramp-find-method multi-method method user host)
7219 tramp-methods)))) 7246 tramp-methods))))
7220 (if entry 7247 (if entry
7221 (second entry) 7248 (cadr entry)
7222 (symbol-value param)))) 7249 (symbol-value param))))
7223 7250
7224 7251
diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el
index 04f7bc754f2..485c58afa65 100644
--- a/lisp/net/trampver.el
+++ b/lisp/net/trampver.el
@@ -30,7 +30,7 @@
30;; are auto-frobbed from configure.ac, so you should edit that file and run 30;; are auto-frobbed from configure.ac, so you should edit that file and run
31;; "autoconf && ./configure" to change them. 31;; "autoconf && ./configure" to change them.
32 32
33(defconst tramp-version "2.0.55" 33(defconst tramp-version "2.0.56"
34 "This version of Tramp.") 34 "This version of Tramp.")
35 35
36(defconst tramp-bug-report-address "tramp-devel@gnu.org" 36(defconst tramp-bug-report-address "tramp-devel@gnu.org"
diff --git a/lisp/net/webjump.el b/lisp/net/webjump.el
index 7f4fce16bce..03ce6305196 100644
--- a/lisp/net/webjump.el
+++ b/lisp/net/webjump.el
@@ -229,6 +229,8 @@
229 ("Yahoo" . 229 ("Yahoo" .
230 [simple-query "www.yahoo.com" "search.yahoo.com/search?p=" ""]) 230 [simple-query "www.yahoo.com" "search.yahoo.com/search?p=" ""])
231 ("Yahoo: Reference" . "www.yahoo.com/Reference/") 231 ("Yahoo: Reference" . "www.yahoo.com/Reference/")
232 ("Wikipedia" .
233 [simple-query "wikipedia.org" "wikipedia.org/wiki/" ""])
232 234
233 ;; Misc. general interest. 235 ;; Misc. general interest.
234 ("Interactive Weather Information Network" . webjump-to-iwin) 236 ("Interactive Weather Information Network" . webjump-to-iwin)
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index 0556c87b43d..cf518b17d94 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -4342,7 +4342,7 @@ catalog \('lib).")
4342(defvar idlwave-true-path-alist nil 4342(defvar idlwave-true-path-alist nil
4343 "Like `idlwave-path-alist', but with true filenames.") 4343 "Like `idlwave-path-alist', but with true filenames.")
4344(defvar idlwave-routines nil 4344(defvar idlwave-routines nil
4345 "Holds the combinded procedure/function/method routine-info.") 4345 "Holds the combined procedure/function/method routine-info.")
4346(defvar idlwave-class-alist nil 4346(defvar idlwave-class-alist nil
4347 "Holds the class names known to IDLWAVE.") 4347 "Holds the class names known to IDLWAVE.")
4348(defvar idlwave-class-history nil 4348(defvar idlwave-class-history nil
@@ -4846,7 +4846,7 @@ Gets set in cached XML rinfo, or `idlw-rinfo.el'.")
4846 ;; Create a sysvar list entry from the xml parsed list. 4846 ;; Create a sysvar list entry from the xml parsed list.
4847 (let* ((nameblock (nth 1 xml-entry)) 4847 (let* ((nameblock (nth 1 xml-entry))
4848 (name (cdr (assq 'name nameblock))) 4848 (name (cdr (assq 'name nameblock)))
4849 (sysvar (substring name (progn (string-match "^ *!" name) 4849 (sysvar (substring name (progn (string-match "^ *!" name)
4850 (match-end 0)))) 4850 (match-end 0))))
4851 (link (cdr (assq 'link nameblock))) 4851 (link (cdr (assq 'link nameblock)))
4852 (params (cddr xml-entry)) 4852 (params (cddr xml-entry))
diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el
index a509fdf7f6c..e02fec1362f 100644
--- a/lisp/textmodes/flyspell.el
+++ b/lisp/textmodes/flyspell.el
@@ -2025,6 +2025,7 @@ If OPOINT is non-nil, restore point there after adjusting it for replacement."
2025 (error "Pop-up menus do not work on this terminal")) 2025 (error "Pop-up menus do not work on this terminal"))
2026 ;; use the correct dictionary 2026 ;; use the correct dictionary
2027 (flyspell-accept-buffer-local-defs) 2027 (flyspell-accept-buffer-local-defs)
2028 (or opoint (setq opoint (point-marker)))
2028 (let ((cursor-location (point)) 2029 (let ((cursor-location (point))
2029 (word (flyspell-get-word nil))) 2030 (word (flyspell-get-word nil)))
2030 (if (consp word) 2031 (if (consp word)
@@ -2133,6 +2134,8 @@ If OPOINT is non-nil, restore point there after adjusting it for replacement."
2133;;*---------------------------------------------------------------------*/ 2134;;*---------------------------------------------------------------------*/
2134(defun flyspell-emacs-popup (event poss word) 2135(defun flyspell-emacs-popup (event poss word)
2135 "The Emacs popup menu." 2136 "The Emacs popup menu."
2137 (unless window-system
2138 (error "This command requires pop-up dialogs"))
2136 (if (not event) 2139 (if (not event)
2137 (let* ((mouse-pos (mouse-position)) 2140 (let* ((mouse-pos (mouse-position))
2138 (mouse-pos (if (nth 1 mouse-pos) 2141 (mouse-pos (if (nth 1 mouse-pos)
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index 51ff5e48a34..7441fb46ffc 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -896,16 +896,19 @@ With prefix argument ARG, repeat this ARG times."
896 ;; Show preceding or following hidden tag, depending of cursor direction. 896 ;; Show preceding or following hidden tag, depending of cursor direction.
897 (let ((inhibit-point-motion-hooks t)) 897 (let ((inhibit-point-motion-hooks t))
898 (save-excursion 898 (save-excursion
899 (message "Invisible tag: %s" 899 (condition-case nil
900 ;; Strip properties, otherwise, the text is invisible. 900 (message "Invisible tag: %s"
901 (buffer-substring-no-properties 901 ;; Strip properties, otherwise, the text is invisible.
902 (point) 902 (buffer-substring-no-properties
903 (if (or (and (> x y) 903 (point)
904 (not (eq (following-char) ?<))) 904 (if (or (and (> x y)
905 (and (< x y) 905 (not (eq (following-char) ?<)))
906 (eq (preceding-char) ?>))) 906 (and (< x y)
907 (backward-list) 907 (eq (preceding-char) ?>)))
908 (forward-list))))))) 908 (backward-list)
909 (forward-list))))
910 (error nil)))))
911
909 912
910 913
911(defun sgml-validate (command) 914(defun sgml-validate (command)
diff --git a/lisp/textmodes/table.el b/lisp/textmodes/table.el
index c0a85eeb68c..69c3c60f912 100644
--- a/lisp/textmodes/table.el
+++ b/lisp/textmodes/table.el
@@ -5333,21 +5333,25 @@ instead of the current buffer and returns the OBJECT."
5333(defun table--point-entered-cell-function (&optional old-point new-point) 5333(defun table--point-entered-cell-function (&optional old-point new-point)
5334 "Point has entered a cell. 5334 "Point has entered a cell.
5335Refresh the menu bar." 5335Refresh the menu bar."
5336 (unless table-cell-entered-state 5336 ;; Avoid calling point-motion-hooks recursively.
5337 (setq table-cell-entered-state t) 5337 (let ((inhibit-point-motion-hooks t))
5338 (setq table-mode-indicator t) 5338 (unless table-cell-entered-state
5339 (force-mode-line-update) 5339 (setq table-cell-entered-state t)
5340 (table--warn-incompatibility) 5340 (setq table-mode-indicator t)
5341 (run-hooks 'table-point-entered-cell-hook))) 5341 (force-mode-line-update)
5342 (table--warn-incompatibility)
5343 (run-hooks 'table-point-entered-cell-hook))))
5342 5344
5343(defun table--point-left-cell-function (&optional old-point new-point) 5345(defun table--point-left-cell-function (&optional old-point new-point)
5344 "Point has left a cell. 5346 "Point has left a cell.
5345Refresh the menu bar." 5347Refresh the menu bar."
5346 (when table-cell-entered-state 5348 ;; Avoid calling point-motion-hooks recursively.
5347 (setq table-cell-entered-state nil) 5349 (let ((inhibit-point-motion-hooks t))
5348 (setq table-mode-indicator nil) 5350 (when table-cell-entered-state
5349 (force-mode-line-update) 5351 (setq table-cell-entered-state nil)
5350 (run-hooks 'table-point-left-cell-hook))) 5352 (setq table-mode-indicator nil)
5353 (force-mode-line-update)
5354 (run-hooks 'table-point-left-cell-hook))))
5351 5355
5352(defun table--warn-incompatibility () 5356(defun table--warn-incompatibility ()
5353 "If called from interactive operation warn the know incompatibilities. 5357 "If called from interactive operation warn the know incompatibilities.
diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog
index 8c53d49fdd1..d9efd3a4540 100644
--- a/lisp/url/ChangeLog
+++ b/lisp/url/ChangeLog
@@ -1,3 +1,9 @@
12007-05-29 Chong Yidong <cyd@stupidchicken.com>
2
3 * url-mailto.el (url-mailto): Insert body after
4 mail-header-separator if present, so that it is before signature.
5 Suggested by Leo <sdl.web@gmail.com>.
6
12007-04-15 Chong Yidong <cyd@stupidchicken.com> 72007-04-15 Chong Yidong <cyd@stupidchicken.com>
2 8
3 * url-parse.el (url-generic-parse-url): Revert 2006-10-09 changes. 9 * url-parse.el (url-generic-parse-url): Revert 2006-10-09 changes.
diff --git a/lisp/url/url-mailto.el b/lisp/url/url-mailto.el
index 9f20989a0b1..6585ba8e458 100644
--- a/lisp/url/url-mailto.el
+++ b/lisp/url/url-mailto.el
@@ -100,7 +100,9 @@
100 (while args 100 (while args
101 (if (string= (caar args) "body") 101 (if (string= (caar args) "body")
102 (progn 102 (progn
103 (goto-char (point-max)) 103 (goto-char (point-min))
104 (or (search-forward (concat "\n" mail-header-separator "\n") nil t)
105 (goto-char (point-max)))
104 (insert (mapconcat 106 (insert (mapconcat
105 #'(lambda (string) 107 #'(lambda (string)
106 (replace-regexp-in-string "\r\n" "\n" string)) 108 (replace-regexp-in-string "\r\n" "\n" string))
diff --git a/lisp/vc-hooks.el b/lisp/vc-hooks.el
index 1bde704790b..22935ab7f3b 100644
--- a/lisp/vc-hooks.el
+++ b/lisp/vc-hooks.el
@@ -325,7 +325,7 @@ If WITNESS if not found, return nil, otherwise return the root."
325 ;; to another user. This should save us from looking in 325 ;; to another user. This should save us from looking in
326 ;; things like /net and /afs. This assumes that all the 326 ;; things like /net and /afs. This assumes that all the
327 ;; files inside a project belong to the same user. 327 ;; files inside a project belong to the same user.
328 (not (equal user (file-attributes file))) 328 (not (equal user (nth 2 (file-attributes file))))
329 (string-match vc-ignore-dir-regexp file))) 329 (string-match vc-ignore-dir-regexp file)))
330 (if (file-exists-p (expand-file-name witness file)) 330 (if (file-exists-p (expand-file-name witness file))
331 (setq root file) 331 (setq root file)
diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el
index dea232179c6..5988baf3565 100644
--- a/lisp/xt-mouse.el
+++ b/lisp/xt-mouse.el
@@ -131,6 +131,21 @@
131 (+ c #x8000000 128) 131 (+ c #x8000000 128)
132 c))) 132 c)))
133 133
134(defun xterm-mouse-truncate-wrap (f)
135 "Truncate with wrap-around."
136 (condition-case nil
137 ;; First try the built-in truncate, in case there's no overflow.
138 (truncate f)
139 ;; In case of overflow, do wraparound by hand.
140 (range-error
141 ;; In our case, we wrap around every 3 days or so, so if we assume
142 ;; a maximum of 65536 wraparounds, we're safe for a couple years.
143 ;; Using a power of 2 makes rounding errors less likely.
144 (let* ((maxwrap (* 65536 2048))
145 (dbig (truncate (/ f maxwrap)))
146 (fdiff (- f (* 1.0 maxwrap dbig))))
147 (+ (truncate fdiff) (* maxwrap dbig))))))
148
134(defun xterm-mouse-event () 149(defun xterm-mouse-event ()
135 "Convert XTerm mouse event to Emacs mouse event." 150 "Convert XTerm mouse event to Emacs mouse event."
136 (let* ((type (- (xterm-mouse-event-read) #o40)) 151 (let* ((type (- (xterm-mouse-event-read) #o40))
@@ -138,12 +153,12 @@
138 (y (- (xterm-mouse-event-read) #o40 1)) 153 (y (- (xterm-mouse-event-read) #o40 1))
139 ;; Emulate timestamp information. This is accurate enough 154 ;; Emulate timestamp information. This is accurate enough
140 ;; for default value of mouse-1-click-follows-link (450msec). 155 ;; for default value of mouse-1-click-follows-link (450msec).
141 (timestamp (truncate 156 (timestamp (xterm-mouse-truncate-wrap
142 (* 1000 157 (* 1000
143 (- (float-time) 158 (- (float-time)
144 (or xt-mouse-epoch 159 (or xt-mouse-epoch
145 (setq xt-mouse-epoch (float-time))))))) 160 (setq xt-mouse-epoch (float-time)))))))
146 (mouse (intern 161 (mouse (intern
147 ;; For buttons > 3, the release-event looks 162 ;; For buttons > 3, the release-event looks
148 ;; differently (see xc/programs/xterm/button.c, 163 ;; differently (see xc/programs/xterm/button.c,
149 ;; function EditorButton), and there seems to come in 164 ;; function EditorButton), and there seems to come in
@@ -243,5 +258,5 @@ down the SHIFT key while pressing the mouse button."
243 258
244(provide 'xt-mouse) 259(provide 'xt-mouse)
245 260
246;;; arch-tag: 84962d4e-fae9-4c13-a9d7-ef4925a4ac03 261;; arch-tag: 84962d4e-fae9-4c13-a9d7-ef4925a4ac03
247;;; xt-mouse.el ends here 262;;; xt-mouse.el ends here
diff --git a/lispref/ChangeLog b/lispref/ChangeLog
index 1092346448e..a9d931d3140 100644
--- a/lispref/ChangeLog
+++ b/lispref/ChangeLog
@@ -1,3 +1,9 @@
12007-05-30 Nick Roberts <nickrob@snap.net.nz>
2
3 * commands.texi (Click Events): Layout more logically. Describe
4 width and height.
5 (Drag Events, Motion Events): Update to new format for position.
6
12007-05-12 Richard Stallman <rms@gnu.org> 72007-05-12 Richard Stallman <rms@gnu.org>
2 8
3 * text.texi (Margins): indent-to-left-margin is not the default. 9 * text.texi (Margins): indent-to-left-margin is not the default.
diff --git a/lispref/commands.texi b/lispref/commands.texi
index 8354346c35e..10f4555e1f0 100644
--- a/lispref/commands.texi
+++ b/lispref/commands.texi
@@ -1196,12 +1196,7 @@ describe events by their types; thus, if there is a key binding for
1196@item @var{position} 1196@item @var{position}
1197This is the position where the mouse click occurred. The actual 1197This is the position where the mouse click occurred. The actual
1198format of @var{position} depends on what part of a window was clicked 1198format of @var{position} depends on what part of a window was clicked
1199on. The various formats are described below. 1199on.
1200
1201@item @var{click-count}
1202This is the number of rapid repeated presses so far of the same mouse
1203button. @xref{Repeat Events}.
1204@end table
1205 1200
1206For mouse click events in the text area, mode line, header line, or in 1201For mouse click events in the text area, mode line, header line, or in
1207the marginal areas, @var{position} has this form: 1202the marginal areas, @var{position} has this form:
@@ -1223,6 +1218,12 @@ which the click occurred. It is one of the symbols @code{mode-line},
1223@code{header-line}, @code{vertical-line}, @code{left-margin}, 1218@code{header-line}, @code{vertical-line}, @code{left-margin},
1224@code{right-margin}, @code{left-fringe}, or @code{right-fringe}. 1219@code{right-margin}, @code{left-fringe}, or @code{right-fringe}.
1225 1220
1221In one special case, @var{pos-or-area} is a list containing a symbol (one
1222of the symbols listed above) instead of just the symbol. This happens
1223after the imaginary prefix keys for the event are inserted into the
1224input stream. @xref{Key Sequence Input}.
1225
1226
1226@item @var{x}, @var{y} 1227@item @var{x}, @var{y}
1227These are the pixel-denominated coordinates of the click, relative to 1228These are the pixel-denominated coordinates of the click, relative to
1228the top left corner of @var{window}, which is @code{(0 . 0)}. 1229the top left corner of @var{window}, which is @code{(0 . 0)}.
@@ -1238,6 +1239,7 @@ This is the object on which the click occurred. It is either
1238(@var{string} . @var{string-pos}) when there is a string-type text 1239(@var{string} . @var{string-pos}) when there is a string-type text
1239property at the click position. 1240property at the click position.
1240 1241
1242@table @asis
1241@item @var{string} 1243@item @var{string}
1242This is the string on which the click occurred, including any 1244This is the string on which the click occurred, including any
1243properties. 1245properties.
@@ -1245,6 +1247,7 @@ properties.
1245@item @var{string-pos} 1247@item @var{string-pos}
1246This is the position in the string on which the click occurred, 1248This is the position in the string on which the click occurred,
1247relevant if properties at the click need to be looked up. 1249relevant if properties at the click need to be looked up.
1250@end table
1248 1251
1249@item @var{text-pos} 1252@item @var{text-pos}
1250For clicks on a marginal area or on a fringe, this is the buffer 1253For clicks on a marginal area or on a fringe, this is the buffer
@@ -1267,8 +1270,12 @@ These are the pixel-denominated coordinates of the click, relative to
1267the top left corner of @var{object}, which is @code{(0 . 0)}. If 1270the top left corner of @var{object}, which is @code{(0 . 0)}. If
1268@var{object} is @code{nil}, the coordinates are relative to the top 1271@var{object} is @code{nil}, the coordinates are relative to the top
1269left corner of the character glyph clicked on. 1272left corner of the character glyph clicked on.
1270@end table
1271 1273
1274@item @var{width}, @var{height}
1275These are the pixel-denominated width and height of @var{object}.
1276@end table
1277
1278@sp 1
1272For mouse clicks on a scroll-bar, @var{position} has this form: 1279For mouse clicks on a scroll-bar, @var{position} has this form:
1273 1280
1274@example 1281@example
@@ -1299,10 +1306,10 @@ of the symbols @code{above-handle}, @code{handle}, @code{below-handle},
1299@code{up}, @code{down}, @code{top}, @code{bottom}, and @code{end-scroll}. 1306@code{up}, @code{down}, @code{top}, @code{bottom}, and @code{end-scroll}.
1300@end table 1307@end table
1301 1308
1302In one special case, @var{buffer-pos} is a list containing a symbol (one 1309@item @var{click-count}
1303of the symbols listed above) instead of just the symbol. This happens 1310This is the number of rapid repeated presses so far of the same mouse
1304after the imaginary prefix keys for the event are inserted into the 1311button. @xref{Repeat Events}.
1305input stream. @xref{Key Sequence Input}. 1312@end table
1306 1313
1307@node Drag Events 1314@node Drag Events
1308@subsection Drag Events 1315@subsection Drag Events
@@ -1318,19 +1325,18 @@ position and the final position, like this:
1318 1325
1319@example 1326@example
1320(@var{event-type} 1327(@var{event-type}
1321 (@var{window1} @var{buffer-pos1} (@var{x1} . @var{y1}) @var{timestamp1}) 1328 (@var{window1} START-POSITION)
1322 (@var{window2} @var{buffer-pos2} (@var{x2} . @var{y2}) @var{timestamp2}) 1329 (@var{window2} END-POSITION))
1323 @var{click-count})
1324@end example 1330@end example
1325 1331
1326For a drag event, the name of the symbol @var{event-type} contains the 1332For a drag event, the name of the symbol @var{event-type} contains the
1327prefix @samp{drag-}. For example, dragging the mouse with button 2 held 1333prefix @samp{drag-}. For example, dragging the mouse with button 2
1328down generates a @code{drag-mouse-2} event. The second and third 1334held down generates a @code{drag-mouse-2} event. The second and third
1329elements of the event give the starting and ending position of the drag. 1335elements of the event give the starting and ending position of the
1330Aside from that, the data have the same meanings as in a click event 1336drag. They have the same form as @var{position} in a click event
1331(@pxref{Click Events}). You can access the second element of any mouse 1337(@pxref{Click Events}) that is not on the scroll bar part of the
1332event in the same way, with no need to distinguish drag events from 1338window. You can access the second element of any mouse event in the
1333others. 1339same way, with no need to distinguish drag events from others.
1334 1340
1335The @samp{drag-} prefix follows the modifier key prefixes such as 1341The @samp{drag-} prefix follows the modifier key prefixes such as
1336@samp{C-} and @samp{M-}. 1342@samp{C-} and @samp{M-}.
@@ -1470,7 +1476,7 @@ of the mouse without any button activity. Mouse motion events are
1470represented by lists that look like this: 1476represented by lists that look like this:
1471 1477
1472@example 1478@example
1473(mouse-movement (@var{window} @var{buffer-pos} (@var{x} . @var{y}) @var{timestamp})) 1479(mouse-movement (POSITION))
1474@end example 1480@end example
1475 1481
1476The second element of the list describes the current position of the 1482The second element of the list describes the current position of the
diff --git a/man/ChangeLog b/man/ChangeLog
index e4dd9d18a8c..d6ebb72db4b 100644
--- a/man/ChangeLog
+++ b/man/ChangeLog
@@ -1,3 +1,14 @@
12007-05-28 Michael Albinus <michael.albinus@gmx.de>
2
3 Sync with Tramp 2.0.56.
4
5 * tramp.texi (Frequently Asked Questions): Improve ~/.zshrc
6 settings. Reported by Ted Zlatanov <tzz@lifelogs.com>.
7
82007-05-26 Michael Olson <mwolson@gnu.org>
9
10 * erc.texi (Modules): Fix references to completion modules.
11
12007-05-09 Reiner Steib <Reiner.Steib@gmx.de> 122007-05-09 Reiner Steib <Reiner.Steib@gmx.de>
2 13
3 * gnus.texi (Running NNDiary): Use ~/.gnus.el instead of gnusrc. 14 * gnus.texi (Running NNDiary): Use ~/.gnus.el instead of gnusrc.
diff --git a/man/erc.texi b/man/erc.texi
index 72561b33072..3e52bb42c92 100644
--- a/man/erc.texi
+++ b/man/erc.texi
@@ -564,7 +564,8 @@ Buttonize URLs, nicknames, and other text
564Mark unidentified users on freenode and other servers supporting CAPAB. 564Mark unidentified users on freenode and other servers supporting CAPAB.
565 565
566@cindex modules, completion 566@cindex modules, completion
567@item pcomplete 567@cindex modules, pcomplete
568@item completion (aka pcomplete)
568Complete nicknames and commands (programmable) 569Complete nicknames and commands (programmable)
569 570
570@cindex modules, fill 571@cindex modules, fill
@@ -572,7 +573,7 @@ Complete nicknames and commands (programmable)
572Wrap long lines 573Wrap long lines
573 574
574@cindex modules, hecomplete 575@cindex modules, hecomplete
575@item completion 576@item hecomplete
576Complete nicknames and commands (old). This is the old module---you 577Complete nicknames and commands (old). This is the old module---you
577might prefer the ``completion'' module instead. 578might prefer the ``completion'' module instead.
578 579
diff --git a/man/tramp.texi b/man/tramp.texi
index 7acef2663e4..67b0647787c 100644
--- a/man/tramp.texi
+++ b/man/tramp.texi
@@ -2051,7 +2051,11 @@ setting the regular expression detecting the prompt.
2051A special problem is the zsh, which uses left-hand side and right-hand 2051A special problem is the zsh, which uses left-hand side and right-hand
2052side prompts in parallel. Therefore, it is necessary to disable the 2052side prompts in parallel. Therefore, it is necessary to disable the
2053zsh line editor on the remote host. You shall add to @file{~/.zshrc} 2053zsh line editor on the remote host. You shall add to @file{~/.zshrc}
2054the following command: @command{[ $TERM = "dumb" ] && unsetopt zle}. 2054the following command:
2055
2056@example
2057[ $TERM = "dumb" ] && unsetopt zle && PS1='$ '
2058@end example
2055 2059
2056@item 2060@item
2057@value{tramp} doesn't transfer strings with more than 500 characters 2061@value{tramp} doesn't transfer strings with more than 500 characters
diff --git a/man/trampver.texi b/man/trampver.texi
index c512de4c74b..6c770dc8ad1 100644
--- a/man/trampver.texi
+++ b/man/trampver.texi
@@ -9,7 +9,7 @@
9@c In the Tramp CVS, the version number is auto-frobbed from 9@c In the Tramp CVS, the version number is auto-frobbed from
10@c configure.ac, so you should edit that file and run 10@c configure.ac, so you should edit that file and run
11@c "autoconf && ./configure" to change the version number. 11@c "autoconf && ./configure" to change the version number.
12@set trampver 2.0.55 12@set trampver 2.0.56
13 13
14@c Other flags from configuration 14@c Other flags from configuration
15@set prefix /usr/local 15@set prefix /usr/local
diff --git a/mkinstalldirs b/mkinstalldirs
index 9e4b309b364..be98de6be01 100755
--- a/mkinstalldirs
+++ b/mkinstalldirs
@@ -1,38 +1,152 @@
1#! /bin/sh 1#! /bin/sh
2# mkinstalldirs --- make directory hierarchy 2# mkinstalldirs --- make directory hierarchy
3# Author: Noah Friedman <friedman@prep.ai.mit.edu> 3
4scriptversion=2006-05-11.19
5
6# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
4# Created: 1993-05-16 7# Created: 1993-05-16
5# Public domain 8# Public domain.
9#
10# This file is maintained in Automake, please report
11# bugs to <bug-automake@gnu.org> or send patches to
12# <automake-patches@gnu.org>.
6 13
14nl='
15'
16IFS=" "" $nl"
7errstatus=0 17errstatus=0
18dirmode=
19
20usage="\
21Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
22
23Create each directory DIR (with mode MODE, if specified), including all
24leading file name components.
25
26Report bugs to <bug-automake@gnu.org>."
27
28# process command line arguments
29while test $# -gt 0 ; do
30 case $1 in
31 -h | --help | --h*) # -h for help
32 echo "$usage"
33 exit $?
34 ;;
35 -m) # -m PERM arg
36 shift
37 test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
38 dirmode=$1
39 shift
40 ;;
41 --version)
42 echo "$0 $scriptversion"
43 exit $?
44 ;;
45 --) # stop option processing
46 shift
47 break
48 ;;
49 -*) # unknown option
50 echo "$usage" 1>&2
51 exit 1
52 ;;
53 *) # first non-opt arg
54 break
55 ;;
56 esac
57done
58
59for file
60do
61 if test -d "$file"; then
62 shift
63 else
64 break
65 fi
66done
67
68case $# in
69 0) exit 0 ;;
70esac
71
72# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
73# mkdir -p a/c at the same time, both will detect that a is missing,
74# one will create a, then the other will try to create a and die with
75# a "File exists" error. This is a problem when calling mkinstalldirs
76# from a parallel make. We use --version in the probe to restrict
77# ourselves to GNU mkdir, which is thread-safe.
78case $dirmode in
79 '')
80 if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
81 echo "mkdir -p -- $*"
82 exec mkdir -p -- "$@"
83 else
84 # On NextStep and OpenStep, the `mkdir' command does not
85 # recognize any option. It will interpret all options as
86 # directories to create, and then abort because `.' already
87 # exists.
88 test -d ./-p && rmdir ./-p
89 test -d ./--version && rmdir ./--version
90 fi
91 ;;
92 *)
93 if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
94 test ! -d ./--version; then
95 echo "mkdir -m $dirmode -p -- $*"
96 exec mkdir -m "$dirmode" -p -- "$@"
97 else
98 # Clean up after NextStep and OpenStep mkdir.
99 for d in ./-m ./-p ./--version "./$dirmode";
100 do
101 test -d $d && rmdir $d
102 done
103 fi
104 ;;
105esac
8 106
9for file 107for file
10do 108do
11 set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 109 case $file in
12 shift 110 /*) pathcomp=/ ;;
111 *) pathcomp= ;;
112 esac
113 oIFS=$IFS
114 IFS=/
115 set fnord $file
116 shift
117 IFS=$oIFS
118
119 for d
120 do
121 test "x$d" = x && continue
13 122
14 pathcomp= 123 pathcomp=$pathcomp$d
15 for d 124 case $pathcomp in
16 do 125 -*) pathcomp=./$pathcomp ;;
17 pathcomp="$pathcomp$d" 126 esac
18 case "$pathcomp" in
19 -* ) pathcomp=./$pathcomp ;;
20 esac
21 127
22 if test ! -d "$pathcomp"; then 128 if test ! -d "$pathcomp"; then
23 echo "mkdir $pathcomp" 1>&2 129 echo "mkdir $pathcomp"
24 130
25 (mkdir "$pathcomp" && chmod a+rx "$pathcomp") || lasterr=$? 131 mkdir "$pathcomp" || lasterr=$?
26 132
27 if test ! -d "$pathcomp"; then 133 if test ! -d "$pathcomp"; then
28 errstatus=$lasterr 134 errstatus=$lasterr
29 fi 135 else
30 fi 136 if test ! -z "$dirmode"; then
137 echo "chmod $dirmode $pathcomp"
138 lasterr=
139 chmod "$dirmode" "$pathcomp" || lasterr=$?
31 140
32 pathcomp="$pathcomp/" 141 if test ! -z "$lasterr"; then
33 done 142 errstatus=$lasterr
143 fi
144 fi
145 fi
146 fi
147
148 pathcomp=$pathcomp/
149 done
34done 150done
35 151
36exit $errstatus 152exit $errstatus
37
38# mkinstalldirs ends here
diff --git a/oldXMenu/ChangeLog b/oldXMenu/ChangeLog
index c92563d3bc2..9a7f01ed901 100644
--- a/oldXMenu/ChangeLog
+++ b/oldXMenu/ChangeLog
@@ -1,3 +1,7 @@
12007-05-30 Ulrich Mueller <ulm@gentoo.org> (tiny change)
2
3 * XMakeAssoc.c (XMakeAssoc): Use malloc rather than xmalloc.
4
12007-02-27 Glenn Morris <rgm@gnu.org> 52007-02-27 Glenn Morris <rgm@gnu.org>
2 6
3 * Imakefile: Remove unused file with no explicit legal info. 7 * Imakefile: Remove unused file with no explicit legal info.
diff --git a/oldXMenu/XMakeAssoc.c b/oldXMenu/XMakeAssoc.c
index d443084ac13..cf039c8f3c1 100644
--- a/oldXMenu/XMakeAssoc.c
+++ b/oldXMenu/XMakeAssoc.c
@@ -81,7 +81,7 @@ XMakeAssoc(dpy, table, x_id, data)
81 /* If we are here then the new entry should be inserted just */ 81 /* If we are here then the new entry should be inserted just */
82 /* before the current value of "Entry". */ 82 /* before the current value of "Entry". */
83 /* Create a new XAssoc and load it with new provided data. */ 83 /* Create a new XAssoc and load it with new provided data. */
84 new_entry = (XAssoc *) xmalloc(sizeof(XAssoc)); 84 new_entry = (XAssoc *) malloc(sizeof(XAssoc));
85 new_entry->display = dpy; 85 new_entry->display = dpy;
86 new_entry->x_id = x_id; 86 new_entry->x_id = x_id;
87 new_entry->data = data; 87 new_entry->data = data;
diff --git a/src/ChangeLog b/src/ChangeLog
index f83f6bafd03..1ffb57b761a 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,8 +1,30 @@
12007-05-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
2
3 * xdisp.c (redisplay_internal): Bind inhibit-point-motion-hooks to t
4 around current_column call.
5
62007-05-26 Dan Nicolaescu <dann@ics.uci.edu>
7
8 * xfaces.c (syms_of_xfaces): Delete stray semicolon.
9 * xdisp.c (next_element_from_buffer):
10 * window.c (delete_window):
11 * term.c (term_mouse_highlight):
12 * msdos.c (getdefdir):
13 * macterm.c (mac_create_bitmap_from_bitmap_data)
14 (init_font_name_table):
15 * fns.c (Fsxhash):
16 * data.c (Fmake_local_variable):
17 * ccl.c (ccl_driver): Likewise.
18
12007-05-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> 192007-05-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
2 20
3 * macterm.c [USE_CARBON_EVENTS] (mac_handle_window_event): 21 * macterm.c [USE_CARBON_EVENTS] (mac_handle_window_event):
4 Call mac_wakeup_from_rne on window size change. 22 Call mac_wakeup_from_rne on window size change.
5 23
242007-05-25 Chong Yidong <cyd@stupidchicken.com>
25
26 * image.c (uncache_image): Fix typo.
27
62007-05-23 Johannes Weiner <hannes@saeurebad.de> (tiny change) 282007-05-23 Johannes Weiner <hannes@saeurebad.de> (tiny change)
7 29
8 * keyboard.c (make_lispy_movement): Condition on HAVE_GPM too. 30 * keyboard.c (make_lispy_movement): Condition on HAVE_GPM too.
diff --git a/src/ccl.c b/src/ccl.c
index ded74fb6296..ee0250f6c2c 100644
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -1261,7 +1261,7 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
1261 case CCL_MOD: reg[rrr] = i % j; break; 1261 case CCL_MOD: reg[rrr] = i % j; break;
1262 case CCL_AND: reg[rrr] = i & j; break; 1262 case CCL_AND: reg[rrr] = i & j; break;
1263 case CCL_OR: reg[rrr] = i | j; break; 1263 case CCL_OR: reg[rrr] = i | j; break;
1264 case CCL_XOR: reg[rrr] = i ^ j;; break; 1264 case CCL_XOR: reg[rrr] = i ^ j; break;
1265 case CCL_LSH: reg[rrr] = i << j; break; 1265 case CCL_LSH: reg[rrr] = i << j; break;
1266 case CCL_RSH: reg[rrr] = i >> j; break; 1266 case CCL_RSH: reg[rrr] = i >> j; break;
1267 case CCL_LSH8: reg[rrr] = (i << 8) | j; break; 1267 case CCL_LSH8: reg[rrr] = (i << 8) | j; break;
diff --git a/src/data.c b/src/data.c
index 2f682450a16..b31900f9c0c 100644
--- a/src/data.c
+++ b/src/data.c
@@ -1587,7 +1587,7 @@ Instead, use `add-hook' and specify t for the LOCAL argument. */)
1587 XBUFFER_LOCAL_VALUE (newval)->found_for_frame = 0; 1587 XBUFFER_LOCAL_VALUE (newval)->found_for_frame = 0;
1588 XBUFFER_LOCAL_VALUE (newval)->check_frame = 0; 1588 XBUFFER_LOCAL_VALUE (newval)->check_frame = 0;
1589 XBUFFER_LOCAL_VALUE (newval)->cdr = tem; 1589 XBUFFER_LOCAL_VALUE (newval)->cdr = tem;
1590 SET_SYMBOL_VALUE (variable, newval);; 1590 SET_SYMBOL_VALUE (variable, newval);
1591 } 1591 }
1592 /* Make sure this buffer has its own value of symbol. */ 1592 /* Make sure this buffer has its own value of symbol. */
1593 tem = Fassq (variable, current_buffer->local_var_alist); 1593 tem = Fassq (variable, current_buffer->local_var_alist);
diff --git a/src/fns.c b/src/fns.c
index c75c4d68cf3..8adaa0d3ea6 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -5215,7 +5215,7 @@ DEFUN ("sxhash", Fsxhash, Ssxhash, 1, 1, 0,
5215 (obj) 5215 (obj)
5216 Lisp_Object obj; 5216 Lisp_Object obj;
5217{ 5217{
5218 unsigned hash = sxhash (obj, 0);; 5218 unsigned hash = sxhash (obj, 0);
5219 return make_number (hash); 5219 return make_number (hash);
5220} 5220}
5221 5221
diff --git a/src/frame.c b/src/frame.c
index 5b8f9acaf0c..08379c7623c 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -1795,6 +1795,13 @@ before calling this function on it, like this.
1795 Fselect_frame (frame); 1795 Fselect_frame (frame);
1796 mouse_moveto (XINT (x), XINT (y)); 1796 mouse_moveto (XINT (x), XINT (y));
1797 } 1797 }
1798#else
1799#ifdef HAVE_GPM
1800 {
1801 Fselect_frame (frame);
1802 term_mouse_moveto (XINT (x), XINT (y));
1803 }
1804#endif
1798#endif 1805#endif
1799#endif 1806#endif
1800 1807
diff --git a/src/image.c b/src/image.c
index dbe200195d0..fbd2f4e6a51 100644
--- a/src/image.c
+++ b/src/image.c
@@ -1639,7 +1639,7 @@ uncache_image (f, spec)
1639 Lisp_Object spec; 1639 Lisp_Object spec;
1640{ 1640{
1641 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); 1641 struct image_cache *c = FRAME_X_IMAGE_CACHE (f);
1642 struct image *img = IMAGE_FROM_ID (f, lookup_image (f, spec)); 1642 struct image *img;
1643 unsigned hash = sxhash (spec, 0); 1643 unsigned hash = sxhash (spec, 0);
1644 int i = hash % IMAGE_CACHE_BUCKETS_SIZE; 1644 int i = hash % IMAGE_CACHE_BUCKETS_SIZE;
1645 1645
diff --git a/src/macterm.c b/src/macterm.c
index 871bf9cd6f9..1faf72485ce 100644
--- a/src/macterm.c
+++ b/src/macterm.c
@@ -736,7 +736,7 @@ mac_create_bitmap_from_bitmap_data (bitmap, bits, w, h)
736 /* Bitswap XBM bytes to match how Mac does things. */ 736 /* Bitswap XBM bytes to match how Mac does things. */
737 unsigned char c = *bits++; 737 unsigned char c = *bits++;
738 *p++ = (unsigned char)((swap_nibble[c & 0xf] << 4) 738 *p++ = (unsigned char)((swap_nibble[c & 0xf] << 4)
739 | (swap_nibble[(c>>4) & 0xf]));; 739 | (swap_nibble[(c>>4) & 0xf]));
740 } 740 }
741 } 741 }
742 742
@@ -7553,7 +7553,7 @@ init_font_name_table ()
7553 make_hash_table (Qequal, make_number (DEFAULT_HASH_SIZE), 7553 make_hash_table (Qequal, make_number (DEFAULT_HASH_SIZE),
7554 make_float (DEFAULT_REHASH_SIZE), 7554 make_float (DEFAULT_REHASH_SIZE),
7555 make_float (DEFAULT_REHASH_THRESHOLD), 7555 make_float (DEFAULT_REHASH_THRESHOLD),
7556 Qnil, Qnil, Qnil);; 7556 Qnil, Qnil, Qnil);
7557 h = XHASH_TABLE (atsu_font_id_hash); 7557 h = XHASH_TABLE (atsu_font_id_hash);
7558 7558
7559 err = ATSUFontCount (&nfonts); 7559 err = ATSUFontCount (&nfonts);
diff --git a/src/msdos.c b/src/msdos.c
index f9ce739fd5b..53c1d088e85 100644
--- a/src/msdos.c
+++ b/src/msdos.c
@@ -1584,7 +1584,7 @@ IT_note_mouse_highlight (struct frame *f, int x, int y)
1584 { 1584 {
1585 extern Lisp_Object Qmouse_face; 1585 extern Lisp_Object Qmouse_face;
1586 Lisp_Object mouse_face, overlay, position, *overlay_vec; 1586 Lisp_Object mouse_face, overlay, position, *overlay_vec;
1587 int noverlays, obegv, ozv;; 1587 int noverlays, obegv, ozv;
1588 struct buffer *obuf; 1588 struct buffer *obuf;
1589 1589
1590 /* If we get an out-of-range value, return now; avoid an error. */ 1590 /* If we get an out-of-range value, return now; avoid an error. */
@@ -4071,7 +4071,7 @@ getdefdir (drive, dst)
4071 int drive; 4071 int drive;
4072 char *dst; 4072 char *dst;
4073{ 4073{
4074 char in_path[4], *p = in_path, e = errno;; 4074 char in_path[4], *p = in_path, e = errno;
4075 4075
4076 /* Generate "X:." (when drive is X) or "." (when drive is 0). */ 4076 /* Generate "X:." (when drive is X) or "." (when drive is 0). */
4077 if (drive != 0) 4077 if (drive != 0)
diff --git a/src/sysdep.c b/src/sysdep.c
index 32efd7a056d..5d2d8154d14 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -1751,7 +1751,7 @@ init_sys_modes (tty_out)
1751 if (term_gpm) 1751 if (term_gpm)
1752 { 1752 {
1753 fcntl (gpm_fd, F_SETOWN, getpid ()); 1753 fcntl (gpm_fd, F_SETOWN, getpid ());
1754 fcntl (gpm_fd, F_SETFL, O_NONBLOCK); 1754 fcntl (gpm_fd, F_SETFL, fcntl (gpm_fd, F_GETFL, 0) | O_NONBLOCK);
1755 init_sigio (gpm_fd); 1755 init_sigio (gpm_fd);
1756 } 1756 }
1757#endif /* HAVE_GPM */ 1757#endif /* HAVE_GPM */
diff --git a/src/term.c b/src/term.c
index 1d8e885ade9..f6b9306dc6b 100644
--- a/src/term.c
+++ b/src/term.c
@@ -205,7 +205,7 @@ int gpm_tty;
205static int mouse_face_beg_row, mouse_face_beg_col; 205static int mouse_face_beg_row, mouse_face_beg_col;
206static int mouse_face_end_row, mouse_face_end_col; 206static int mouse_face_end_row, mouse_face_end_col;
207static int mouse_face_past_end; 207static int mouse_face_past_end;
208static Lisp_Object mouse_face_window; 208static Lisp_Object Qmouse_face_window;
209static int mouse_face_face_id; 209static int mouse_face_face_id;
210 210
211/* FRAME and X, Y position of mouse when last checked for 211/* FRAME and X, Y position of mouse when last checked for
@@ -2344,10 +2344,23 @@ the currently selected frame. */)
2344 ***********************************************************************/ 2344 ***********************************************************************/
2345 2345
2346#ifdef HAVE_GPM 2346#ifdef HAVE_GPM
2347void term_mouse_moveto (int x, int y)
2348{
2349 const char *name;
2350 int fd;
2351 name = (const char *) ttyname (0);
2352 fd = open (name, O_WRONLY);
2353 /* TODO: how to set mouse position?
2354 SOME_FUNCTION (x, y, fd); */
2355 close (fd);
2356 last_mouse_x = x;
2357 last_mouse_y = y;
2358}
2359
2347static void 2360static void
2348term_show_mouse_face (enum draw_glyphs_face draw) 2361term_show_mouse_face (enum draw_glyphs_face draw)
2349{ 2362{
2350 struct window *w = XWINDOW (mouse_face_window); 2363 struct window *w = XWINDOW (Qmouse_face_window);
2351 int save_x, save_y; 2364 int save_x, save_y;
2352 int i, j; 2365 int i, j;
2353 2366
@@ -2426,12 +2439,12 @@ term_show_mouse_face (enum draw_glyphs_face draw)
2426static void 2439static void
2427term_clear_mouse_face () 2440term_clear_mouse_face ()
2428{ 2441{
2429 if (!NILP (mouse_face_window)) 2442 if (!NILP (Qmouse_face_window))
2430 term_show_mouse_face (DRAW_NORMAL_TEXT); 2443 term_show_mouse_face (DRAW_NORMAL_TEXT);
2431 2444
2432 mouse_face_beg_row = mouse_face_beg_col = -1; 2445 mouse_face_beg_row = mouse_face_beg_col = -1;
2433 mouse_face_end_row = mouse_face_end_col = -1; 2446 mouse_face_end_row = mouse_face_end_col = -1;
2434 mouse_face_window = Qnil; 2447 Qmouse_face_window = Qnil;
2435} 2448}
2436 2449
2437/* Find the glyph matrix position of buffer position POS in window W. 2450/* Find the glyph matrix position of buffer position POS in window W.
@@ -2532,7 +2545,7 @@ term_mouse_highlight (struct frame *f, int x, int y)
2532 if (!WINDOWP (window)) 2545 if (!WINDOWP (window))
2533 return; 2546 return;
2534 2547
2535 if (!EQ (window, mouse_face_window)) 2548 if (!EQ (window, Qmouse_face_window))
2536 term_clear_mouse_face (); 2549 term_clear_mouse_face ();
2537 2550
2538 w = XWINDOW (window); 2551 w = XWINDOW (window);
@@ -2590,7 +2603,7 @@ term_mouse_highlight (struct frame *f, int x, int y)
2590 { 2603 {
2591 extern Lisp_Object Qmouse_face; 2604 extern Lisp_Object Qmouse_face;
2592 Lisp_Object mouse_face, overlay, position, *overlay_vec; 2605 Lisp_Object mouse_face, overlay, position, *overlay_vec;
2593 int noverlays, obegv, ozv;; 2606 int noverlays, obegv, ozv;
2594 struct buffer *obuf; 2607 struct buffer *obuf;
2595 2608
2596 /* If we get an out-of-range value, return now; avoid an error. */ 2609 /* If we get an out-of-range value, return now; avoid an error. */
@@ -2615,7 +2628,7 @@ term_mouse_highlight (struct frame *f, int x, int y)
2615 noverlays = sort_overlays (overlay_vec, noverlays, w); 2628 noverlays = sort_overlays (overlay_vec, noverlays, w);
2616 2629
2617 /* Check mouse-face highlighting. */ 2630 /* Check mouse-face highlighting. */
2618 if (!(EQ (window, mouse_face_window) 2631 if (!(EQ (window, Qmouse_face_window)
2619 && y >= mouse_face_beg_row 2632 && y >= mouse_face_beg_row
2620 && y <= mouse_face_end_row 2633 && y <= mouse_face_end_row
2621 && (y > mouse_face_beg_row 2634 && (y > mouse_face_beg_row
@@ -2665,7 +2678,7 @@ term_mouse_highlight (struct frame *f, int x, int y)
2665 = !fast_find_position (w, XFASTINT (after), 2678 = !fast_find_position (w, XFASTINT (after),
2666 &mouse_face_end_col, 2679 &mouse_face_end_col,
2667 &mouse_face_end_row); 2680 &mouse_face_end_row);
2668 mouse_face_window = window; 2681 Qmouse_face_window = window;
2669 2682
2670 mouse_face_face_id 2683 mouse_face_face_id
2671 = face_at_buffer_position (w, pos, 0, 0, 2684 = face_at_buffer_position (w, pos, 0, 0,
@@ -2700,7 +2713,7 @@ term_mouse_highlight (struct frame *f, int x, int y)
2700 = !fast_find_position (w, XFASTINT (after), 2713 = !fast_find_position (w, XFASTINT (after),
2701 &mouse_face_end_col, 2714 &mouse_face_end_col,
2702 &mouse_face_end_row); 2715 &mouse_face_end_row);
2703 mouse_face_window = window; 2716 Qmouse_face_window = window;
2704 2717
2705 mouse_face_face_id 2718 mouse_face_face_id
2706 = face_at_buffer_position (w, pos, 0, 0, 2719 = face_at_buffer_position (w, pos, 0, 0,
@@ -2787,33 +2800,31 @@ term_mouse_movement (FRAME_PTR frame, Gpm_Event *event)
2787 Set *time to the time the mouse was at the returned position. 2800 Set *time to the time the mouse was at the returned position.
2788 2801
2789 This should clear mouse_moved until the next motion 2802 This should clear mouse_moved until the next motion
2790 event arrives. 2803 event arrives. */
2791
2792 NOT CURRENTLY INVOKED: see mouse_position_hook below. */
2793static void 2804static void
2794term_mouse_position (FRAME_PTR *fp, int insist, Lisp_Object *bar_window, 2805term_mouse_position (FRAME_PTR *fp, int insist, Lisp_Object *bar_window,
2795 enum scroll_bar_part *part, Lisp_Object *x, 2806 enum scroll_bar_part *part, Lisp_Object *x,
2796 Lisp_Object *y, unsigned long *time) 2807 Lisp_Object *y, unsigned long *time)
2797{ 2808{
2798 Gpm_Event event;
2799 struct timeval now; 2809 struct timeval now;
2800 int i; 2810 Lisp_Object frame, window;
2801 2811 struct window *w;
2802 BLOCK_INPUT;
2803 2812
2804 *fp = SELECTED_FRAME (); 2813 *fp = SELECTED_FRAME ();
2814 (*fp)->mouse_moved = 0;
2805 2815
2806 *bar_window = Qnil; 2816 *bar_window = Qnil;
2807 *part = 0; 2817 *part = 0;
2808 2818
2809 i = Gpm_GetSnapshot (&event); 2819 XSETINT (*x, last_mouse_x);
2820 XSETINT (*y, last_mouse_y);
2821 XSETFRAME (frame, *fp);
2822 window = Fwindow_at (*x, *y, frame);
2810 2823
2811 XSETINT (*x, event.x); 2824 XSETINT (*x, last_mouse_x - WINDOW_LEFT_EDGE_COL (XWINDOW (window)));
2812 XSETINT (*y, event.y); 2825 XSETINT (*y, last_mouse_y - WINDOW_TOP_EDGE_LINE (XWINDOW (window)));
2813 gettimeofday(&now, 0); 2826 gettimeofday(&now, 0);
2814 *time = (now.tv_sec * 1000) + (now.tv_usec / 1000); 2827 *time = (now.tv_sec * 1000) + (now.tv_usec / 1000);
2815
2816 UNBLOCK_INPUT;
2817} 2828}
2818 2829
2819/* Prepare a mouse-event in *RESULT for placement in the input queue. 2830/* Prepare a mouse-event in *RESULT for placement in the input queue.
@@ -2912,7 +2923,7 @@ handle_one_term_event (struct tty_display_info *tty, Gpm_Event *event, struct in
2912 name = (const char *) ttyname (0); 2923 name = (const char *) ttyname (0);
2913 fd = open (name, O_WRONLY); 2924 fd = open (name, O_WRONLY);
2914 ioctl (fd, TIOCLINUX, buf + sizeof (short) - 1); 2925 ioctl (fd, TIOCLINUX, buf + sizeof (short) - 1);
2915 close(fd); 2926 close (fd);
2916 2927
2917 term_mouse_movement (f, event); 2928 term_mouse_movement (f, event);
2918 2929
@@ -2927,7 +2938,6 @@ handle_one_term_event (struct tty_display_info *tty, Gpm_Event *event, struct in
2927 else { 2938 else {
2928 f->mouse_moved = 0; 2939 f->mouse_moved = 0;
2929 term_mouse_click (&ie, event, f); 2940 term_mouse_click (&ie, event, f);
2930 //kbd_buffer_store_event_hold (&ie, hold_quit);
2931 } 2941 }
2932 2942
2933 done: 2943 done:
@@ -3259,11 +3269,8 @@ init_tty (char *name, char *terminal_type, int must_succeed)
3259 encode_terminal_bufsize = 0; 3269 encode_terminal_bufsize = 0;
3260 3270
3261#ifdef HAVE_GPM 3271#ifdef HAVE_GPM
3262 /* TODO: Can't get Gpm_Snapshot in term_mouse_position to work: test with 3272 mouse_position_hook = term_mouse_position;
3263 (mouse-position). Also set-mouse-position won't work as is. */ 3273 Qmouse_face_window = Qnil;
3264 /* mouse_position_hook = term_mouse_position; */
3265
3266 mouse_face_window = Qnil;
3267#endif 3274#endif
3268 3275
3269#ifdef WINDOWSNT 3276#ifdef WINDOWSNT
@@ -3899,6 +3906,8 @@ bigger, or it may make it blink, or it may do nothing at all. */);
3899#ifdef HAVE_GPM 3906#ifdef HAVE_GPM
3900 defsubr (&Sterm_open_connection); 3907 defsubr (&Sterm_open_connection);
3901 defsubr (&Sterm_close_connection); 3908 defsubr (&Sterm_close_connection);
3909
3910 staticpro (&Qmouse_face_window);
3902#endif /* HAVE_GPM */ 3911#endif /* HAVE_GPM */
3903} 3912}
3904 3913
diff --git a/src/termhooks.h b/src/termhooks.h
index 373d1e34987..1ca9234cac2 100644
--- a/src/termhooks.h
+++ b/src/termhooks.h
@@ -297,6 +297,7 @@ enum {
297#ifdef HAVE_GPM 297#ifdef HAVE_GPM
298#include <gpm.h> 298#include <gpm.h>
299extern int handle_one_term_event (struct tty_display_info *, Gpm_Event *, struct input_event *); 299extern int handle_one_term_event (struct tty_display_info *, Gpm_Event *, struct input_event *);
300extern void term_mouse_moveto (int, int);
300 301
301/* Nonzero means mouse is enabled on Linux console */ 302/* Nonzero means mouse is enabled on Linux console */
302extern int term_gpm; 303extern int term_gpm;
diff --git a/src/window.c b/src/window.c
index 154743e5b5d..90fdbf6c9b5 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1534,7 +1534,7 @@ delete_window (window)
1534 if (!EQ (window, pwindow)) 1534 if (!EQ (window, pwindow))
1535 break; 1535 break;
1536 /* Otherwise, try another window for SWINDOW. */ 1536 /* Otherwise, try another window for SWINDOW. */
1537 swindow = Fnext_window (swindow, Qlambda, Qnil);; 1537 swindow = Fnext_window (swindow, Qlambda, Qnil);
1538 1538
1539 /* If we get back to the frame's selected window, 1539 /* If we get back to the frame's selected window,
1540 it means there was no acceptable alternative, 1540 it means there was no acceptable alternative,
diff --git a/src/xdisp.c b/src/xdisp.c
index 8459be7abb7..268f1ec8b8c 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -6256,7 +6256,7 @@ next_element_from_buffer (it)
6256 it->c = *p, it->len = 1; 6256 it->c = *p, it->len = 1;
6257 6257
6258 /* Record what we have and where it came from. */ 6258 /* Record what we have and where it came from. */
6259 it->what = IT_CHARACTER;; 6259 it->what = IT_CHARACTER;
6260 it->object = it->w->buffer; 6260 it->object = it->w->buffer;
6261 it->position = it->current.pos; 6261 it->position = it->current.pos;
6262 6262
@@ -10840,7 +10840,7 @@ redisplay_internal (preserve_echo_area)
10840 int must_finish = 0; 10840 int must_finish = 0;
10841 struct text_pos tlbufpos, tlendpos; 10841 struct text_pos tlbufpos, tlendpos;
10842 int number_of_visible_frames; 10842 int number_of_visible_frames;
10843 int count; 10843 int count, count1;
10844 struct frame *sf; 10844 struct frame *sf;
10845 int polling_stopped_here = 0; 10845 int polling_stopped_here = 0;
10846 10846
@@ -10978,6 +10978,10 @@ redisplay_internal (preserve_echo_area)
10978 update_mode_lines++; 10978 update_mode_lines++;
10979 } 10979 }
10980 10980
10981 /* Avoid invocation of point motion hooks by `current_column' below. */
10982 count1 = SPECPDL_INDEX ();
10983 specbind (Qinhibit_point_motion_hooks, Qt);
10984
10981 /* If %c is in the mode line, update it if needed. */ 10985 /* If %c is in the mode line, update it if needed. */
10982 if (!NILP (w->column_number_displayed) 10986 if (!NILP (w->column_number_displayed)
10983 /* This alternative quickly identifies a common case 10987 /* This alternative quickly identifies a common case
@@ -10989,6 +10993,8 @@ redisplay_internal (preserve_echo_area)
10989 != (int) current_column ())) /* iftc */ 10993 != (int) current_column ())) /* iftc */
10990 w->update_mode_line = Qt; 10994 w->update_mode_line = Qt;
10991 10995
10996 unbind_to (count1, Qnil);
10997
10992 FRAME_SCROLL_BOTTOM_VPOS (XFRAME (w->frame)) = -1; 10998 FRAME_SCROLL_BOTTOM_VPOS (XFRAME (w->frame)) = -1;
10993 10999
10994 /* The variable buffer_shared is set in redisplay_window and 11000 /* The variable buffer_shared is set in redisplay_window and
diff --git a/src/xfaces.c b/src/xfaces.c
index ca55b82a9b2..86a40078919 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -8010,7 +8010,7 @@ syms_of_xfaces ()
8010 staticpro (&QCforeground); 8010 staticpro (&QCforeground);
8011 QCbackground = intern (":background"); 8011 QCbackground = intern (":background");
8012 staticpro (&QCbackground); 8012 staticpro (&QCbackground);
8013 QCstipple = intern (":stipple");; 8013 QCstipple = intern (":stipple");
8014 staticpro (&QCstipple); 8014 staticpro (&QCstipple);
8015 QCwidth = intern (":width"); 8015 QCwidth = intern (":width");
8016 staticpro (&QCwidth); 8016 staticpro (&QCwidth);