aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Verona2011-09-19 11:37:46 +0200
committerJoakim Verona2011-09-19 11:37:46 +0200
commit4caed0bee59613be5d2a6c4afabcdc43222f953e (patch)
treed0c1debf666ef2107492e6cdd2bc8d6bb17de8a2
parentc139d20a0c582a2c8fe3766128092c32b692ac23 (diff)
parentc5b01d8c63cfd14c95a029540a6fb0da84537726 (diff)
downloademacs-4caed0bee59613be5d2a6c4afabcdc43222f953e.tar.gz
emacs-4caed0bee59613be5d2a6c4afabcdc43222f953e.zip
upstream
-rw-r--r--.dir-locals.el2
-rw-r--r--ChangeLog5
-rw-r--r--doc/emacs/ChangeLog7
-rw-r--r--doc/emacs/cmdargs.texi2
-rw-r--r--doc/emacs/xresources.texi7
-rw-r--r--doc/lispref/ChangeLog20
-rw-r--r--doc/lispref/errors.texi3
-rw-r--r--doc/lispref/frames.texi8
-rw-r--r--doc/lispref/numbers.texi4
-rw-r--r--doc/lispref/tips.texi4
-rw-r--r--doc/man/ChangeLog4
-rw-r--r--doc/man/emacs.12
-rw-r--r--etc/NEWS2
-rw-r--r--[-rwxr-xr-x]etc/images/icons/allout-widgets/light-bg/leaf.pngbin211 -> 211 bytes
-rw-r--r--[-rwxr-xr-x]etc/images/icons/allout-widgets/light-bg/leaf.xpm0
-rw-r--r--[-rwxr-xr-x]etc/images/icons/allout-widgets/light-bg/locked-encrypted.pngbin210 -> 210 bytes
-rw-r--r--[-rwxr-xr-x]etc/images/icons/allout-widgets/light-bg/unlocked-encrypted.pngbin202 -> 202 bytes
-rw-r--r--lisp/ChangeLog155
-rw-r--r--lisp/buff-menu.el24
-rw-r--r--lisp/dired.el6
-rw-r--r--lisp/emacs-lisp/bytecomp.el2
-rw-r--r--lisp/emacs-lisp/lisp-mode.el6
-rw-r--r--lisp/emacs-lisp/package.el16
-rw-r--r--lisp/epa.el2
-rw-r--r--lisp/files.el108
-rw-r--r--lisp/gnus/ChangeLog4
-rw-r--r--lisp/gnus/mm-decode.el16
-rw-r--r--lisp/gnus/mm-view.el15
-rw-r--r--lisp/icomplete.el8
-rw-r--r--lisp/image.el18
-rw-r--r--lisp/info.el37
-rw-r--r--lisp/isearch.el4
-rw-r--r--lisp/mail/smtpmail.el8
-rw-r--r--lisp/menu-bar.el12
-rw-r--r--lisp/net/ldap.el7
-rw-r--r--lisp/net/tramp-compat.el1
-rw-r--r--lisp/net/tramp-sh.el15
-rw-r--r--lisp/net/tramp-smb.el91
-rw-r--r--lisp/net/tramp.el47
-rw-r--r--lisp/newcomment.el3
-rw-r--r--lisp/org/ChangeLog4
-rw-r--r--lisp/org/org.el2
-rw-r--r--lisp/outline.el13
-rw-r--r--lisp/progmodes/cc-fonts.el2
-rw-r--r--lisp/progmodes/etags.el4
-rw-r--r--lisp/progmodes/grep.el2
-rw-r--r--lisp/replace.el87
-rw-r--r--lisp/simple.el17
-rw-r--r--lisp/textmodes/ispell.el8
-rw-r--r--lisp/vc/vc-bzr.el10
-rw-r--r--lisp/vc/vc-dir.el16
-rw-r--r--lisp/vc/vc-git.el10
-rw-r--r--lisp/window.el8
-rw-r--r--lisp/woman.el9
-rw-r--r--src/.gdbinit70
-rw-r--r--src/ChangeLog93
-rw-r--r--src/bidi.c20
-rw-r--r--src/eval.c8
-rw-r--r--src/fileio.c5
-rw-r--r--src/image.c15
-rw-r--r--src/lread.c2
-rw-r--r--src/search.c4
-rw-r--r--src/xdisp.c77
-rw-r--r--src/xfns.c2
-rw-r--r--src/xmenu.c2
-rw-r--r--src/xselect.c39
66 files changed, 827 insertions, 377 deletions
diff --git a/.dir-locals.el b/.dir-locals.el
index f098f3e7460..4da890f92ab 100644
--- a/.dir-locals.el
+++ b/.dir-locals.el
@@ -5,7 +5,7 @@
5 ;; You must set bugtracker_debbugs_url in your bazaar.conf for this to work. 5 ;; You must set bugtracker_debbugs_url in your bazaar.conf for this to work.
6 ;; See admin/notes/bugtracker. 6 ;; See admin/notes/bugtracker.
7 (log-edit-mode . ((log-edit-rewrite-fixes 7 (log-edit-mode . ((log-edit-rewrite-fixes
8 " (bug#\\([0-9]+\\))" . "debbugs:\\1"))) 8 "[ \n](bug#\\([0-9]+\\))" . "debbugs:\\1")))
9 (change-log-mode . ((add-log-time-zone-rule . t) 9 (change-log-mode . ((add-log-time-zone-rule . t)
10 (fill-column . 74) 10 (fill-column . 74)
11 (bug-reference-url-format . "http://debbugs.gnu.org/%s") 11 (bug-reference-url-format . "http://debbugs.gnu.org/%s")
diff --git a/ChangeLog b/ChangeLog
index abaa7c6eb88..7c7bff452ae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
12011-09-19 Lars Magne Ingebrigtsen <larsi@gnus.org>
2
3 * .dir-locals.el: Change the debbugs regexp to allow having the
4 bug number as the first thing on a line.
5
12011-09-15 Glenn Morris <rgm@gnu.org> 62011-09-15 Glenn Morris <rgm@gnu.org>
2 7
3 * configure.in: Make configure work with recent GNUsteps. 8 * configure.in: Make configure work with recent GNUsteps.
diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog
index d87493d57b3..163eabed2a6 100644
--- a/doc/emacs/ChangeLog
+++ b/doc/emacs/ChangeLog
@@ -1,3 +1,10 @@
12011-09-18 Chong Yidong <cyd@stupidchicken.com>
2
3 * cmdargs.texi (Icons X): Fix description of Emacs icon.
4
5 * xresources.texi (Table of Resources): Fix documentation of
6 bitmapIcon.
7
12011-09-15 Chong Yidong <cyd@stupidchicken.com> 82011-09-15 Chong Yidong <cyd@stupidchicken.com>
2 9
3 * package.texi (Package Menu): Add package-menu-mark-upgrades. 10 * package.texi (Package Menu): Add package-menu-mark-upgrades.
diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi
index 2a19e1b009d..07cca53ce4d 100644
--- a/doc/emacs/cmdargs.texi
+++ b/doc/emacs/cmdargs.texi
@@ -1107,7 +1107,7 @@ Start Emacs in an iconified (``minimized'') state.
1107@itemx --no-bitmap-icon 1107@itemx --no-bitmap-icon
1108@opindex --no-bitmap-icon 1108@opindex --no-bitmap-icon
1109@cindex Emacs icon, a gnu 1109@cindex Emacs icon, a gnu
1110Do not use a picture of a gnu as the Emacs icon. 1110Do not display the Emacs icon.
1111@end table 1111@end table
1112 1112
1113 Most window managers allow you to ``iconify'' (or ``minimize'') an 1113 Most window managers allow you to ``iconify'' (or ``minimize'') an
diff --git a/doc/emacs/xresources.texi b/doc/emacs/xresources.texi
index d30f7e42254..c2e65268d1b 100644
--- a/doc/emacs/xresources.texi
+++ b/doc/emacs/xresources.texi
@@ -169,11 +169,10 @@ with the class that it belongs to:
169@item @code{background} (class @code{Background}) 169@item @code{background} (class @code{Background})
170Background color name. 170Background color name.
171 171
172@ifnottex
173@item @code{bitmapIcon} (class @code{BitmapIcon}) 172@item @code{bitmapIcon} (class @code{BitmapIcon})
174Use a bitmap icon (a picture of a gnu) if @samp{on}, let the window 173Tell the window manager to display the Emacs icon if @samp{on}; don't
175manager choose an icon if @samp{off}. 174do so if @samp{off}. (The icon is usually shown in the ``taskbar'' on
176@end ifnottex 175a graphical desktop.)
177 176
178@item @code{borderColor} (class @code{BorderColor}) 177@item @code{borderColor} (class @code{BorderColor})
179Color name for the external border. 178Color name for the external border.
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index 71dc8a8ff89..09958f6b7e0 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -1,3 +1,23 @@
12011-09-19 Lars Magne Ingebrigtsen <larsi@gnus.org>
2
3 * errors.texi (Standard Errors): Remove apparent placeholder text
4 (bug#9491).
5
62011-09-18 Chong Yidong <cyd@stupidchicken.com>
7
8 * frames.texi (Management Parameters): Fix description of
9 icon-type parameter.
10
112011-09-17 Chong Yidong <cyd@stupidchicken.com>
12
13 * tips.texi (Key Binding Conventions): Don't bind a key sequence
14 ending in C-g. Suggested by Edward O'Connor.
15
162011-09-17 Eli Zaretskii <eliz@gnu.org>
17
18 * numbers.texi (Integer Basics): Add indexing for
19 most-positive-fixnum and most-negative-fixnum. (Bug#9525)
20
12011-09-14 Dani Moncayo <dmoncayo@gmail.com> (tiny change) 212011-09-14 Dani Moncayo <dmoncayo@gmail.com> (tiny change)
2 22
3 * lists.texi (Sets And Lists): Fix typo. (Bug#9393) 23 * lists.texi (Sets And Lists): Fix typo. (Bug#9393)
diff --git a/doc/lispref/errors.texi b/doc/lispref/errors.texi
index 2c7549d0443..98967b708b3 100644
--- a/doc/lispref/errors.texi
+++ b/doc/lispref/errors.texi
@@ -28,9 +28,6 @@ condition @code{error}, because quitting is not considered an error.
28handled. 28handled.
29 29
30@table @code 30@table @code
31@item @var{symbol}
32@var{string}; @var{reference}.
33
34@item error 31@item error
35@code{"error"}@* 32@code{"error"}@*
36@xref{Errors}. 33@xref{Errors}.
diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi
index e799cfa6b7f..d619b92e4d3 100644
--- a/doc/lispref/frames.texi
+++ b/doc/lispref/frames.texi
@@ -779,10 +779,10 @@ Whether deselecting the frame lowers it (non-@code{nil} means yes).
779 779
780@vindex icon-type, a frame parameter 780@vindex icon-type, a frame parameter
781@item icon-type 781@item icon-type
782The type of icon to use for this frame when it is iconified. If the 782The type of icon to use for this frame. If the value is a string,
783value is a string, that specifies a file containing a bitmap to use. 783that specifies a file containing a bitmap to use; @code{nil} specifies
784Any other non-@code{nil} value specifies the default bitmap icon (a 784no icon (in which case the window manager decides what to show); any
785picture of a gnu); @code{nil} specifies a text icon. 785other non-@code{nil} value specifies the default Emacs icon.
786 786
787@vindex icon-name, a frame parameter 787@vindex icon-name, a frame parameter
788@item icon-name 788@item icon-name
diff --git a/doc/lispref/numbers.texi b/doc/lispref/numbers.texi
index 65921f444e0..3efddebffb4 100644
--- a/doc/lispref/numbers.texi
+++ b/doc/lispref/numbers.texi
@@ -148,11 +148,15 @@ arguments to such functions may be either numbers or markers, we often
148give these arguments the name @var{number-or-marker}. When the argument 148give these arguments the name @var{number-or-marker}. When the argument
149value is a marker, its position value is used and its buffer is ignored. 149value is a marker, its position value is used and its buffer is ignored.
150 150
151@cindex largest Lisp integer number
152@cindex maximum Lisp integer number
151@defvar most-positive-fixnum 153@defvar most-positive-fixnum
152The value of this variable is the largest integer that Emacs Lisp 154The value of this variable is the largest integer that Emacs Lisp
153can handle. 155can handle.
154@end defvar 156@end defvar
155 157
158@cindex smallest Lisp integer number
159@cindex minimum Lisp integer number
156@defvar most-negative-fixnum 160@defvar most-negative-fixnum
157The value of this variable is the smallest integer that Emacs Lisp can 161The value of this variable is the smallest integer that Emacs Lisp can
158handle. It is negative. 162handle. It is negative.
diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi
index be37eb2034b..fd875b45be9 100644
--- a/doc/lispref/tips.texi
+++ b/doc/lispref/tips.texi
@@ -320,6 +320,10 @@ any context prevents recognition of escape sequences as function keys in
320that context. 320that context.
321 321
322@item 322@item
323Similarly, don't bind a key sequence ending in @key{C-g}, since that
324is commonly used to cancel a key sequence.
325
326@item
323Anything which acts like a temporary mode or state which the user can 327Anything which acts like a temporary mode or state which the user can
324enter and leave should define @kbd{@key{ESC} @key{ESC}} or 328enter and leave should define @kbd{@key{ESC} @key{ESC}} or
325@kbd{@key{ESC} @key{ESC} @key{ESC}} as a way to escape. 329@kbd{@key{ESC} @key{ESC} @key{ESC}} as a way to escape.
diff --git a/doc/man/ChangeLog b/doc/man/ChangeLog
index 0735e0593f9..a5146be9175 100644
--- a/doc/man/ChangeLog
+++ b/doc/man/ChangeLog
@@ -1,3 +1,7 @@
12011-09-17 Sven Joachim <svenjoac@gmx.de>
2
3 * emacs.1: Escape a dash.
4
12011-07-12 Chong Yidong <cyd@stupidchicken.com> 52011-07-12 Chong Yidong <cyd@stupidchicken.com>
2 6
3 * emacsclient.1: Document exit status. 7 * emacsclient.1: Document exit status.
diff --git a/doc/man/emacs.1 b/doc/man/emacs.1
index 10fcc186fdd..aef5bd402a2 100644
--- a/doc/man/emacs.1
+++ b/doc/man/emacs.1
@@ -407,7 +407,7 @@ The value can be one of
407.IR fullwidth , 407.IR fullwidth ,
408or 408or
409.IR fullheight , 409.IR fullheight ,
410which correspond to the command-line options `\-fs', `-mm', `\-fw', 410which correspond to the command-line options `\-fs', `\-mm', `\-fw',
411and `\-fh', respectively. 411and `\-fh', respectively.
412Note that this applies to the initial frame only. 412Note that this applies to the initial frame only.
413.TP 413.TP
diff --git a/etc/NEWS b/etc/NEWS
index 9f5595a6341..f61adebe2a0 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -814,7 +814,7 @@ They are superseded by shift-select-mode enabled by default in 23.1.
814* New Modes and Packages in Emacs 24.1 814* New Modes and Packages in Emacs 24.1
815 815
816** Occur Edit mode applies edits made in *Occur* buffers to the 816** Occur Edit mode applies edits made in *Occur* buffers to the
817original buffers. It is bound to C-x C-q in Occur mode. 817original buffers. It is bound to "e" in Occur mode.
818 818
819** New global minor modes electric-pair-mode, electric-indent-mode, 819** New global minor modes electric-pair-mode, electric-indent-mode,
820and electric-layout-mode. 820and electric-layout-mode.
diff --git a/etc/images/icons/allout-widgets/light-bg/leaf.png b/etc/images/icons/allout-widgets/light-bg/leaf.png
index e2d7b189e84..e2d7b189e84 100755..100644
--- a/etc/images/icons/allout-widgets/light-bg/leaf.png
+++ b/etc/images/icons/allout-widgets/light-bg/leaf.png
Binary files differ
diff --git a/etc/images/icons/allout-widgets/light-bg/leaf.xpm b/etc/images/icons/allout-widgets/light-bg/leaf.xpm
index f25bf40a258..f25bf40a258 100755..100644
--- a/etc/images/icons/allout-widgets/light-bg/leaf.xpm
+++ b/etc/images/icons/allout-widgets/light-bg/leaf.xpm
diff --git a/etc/images/icons/allout-widgets/light-bg/locked-encrypted.png b/etc/images/icons/allout-widgets/light-bg/locked-encrypted.png
index a6bc3e99a7a..a6bc3e99a7a 100755..100644
--- a/etc/images/icons/allout-widgets/light-bg/locked-encrypted.png
+++ b/etc/images/icons/allout-widgets/light-bg/locked-encrypted.png
Binary files differ
diff --git a/etc/images/icons/allout-widgets/light-bg/unlocked-encrypted.png b/etc/images/icons/allout-widgets/light-bg/unlocked-encrypted.png
index e70d075690a..e70d075690a 100755..100644
--- a/etc/images/icons/allout-widgets/light-bg/unlocked-encrypted.png
+++ b/etc/images/icons/allout-widgets/light-bg/unlocked-encrypted.png
Binary files differ
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 57c623df56a..d748c1a967c 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,151 @@
12011-09-19 Michael Albinus <michael.albinus@gmx.de>
2
3 * net/tramp-sh.el (tramp-inline-compress-commands): Add "xz".
4 Suggested by Liam Stitt <stittl@cuug.ab.ca>.
5
62011-09-18 Juri Linkov <juri@jurta.org>
7
8 * buff-menu.el (Buffer-menu-mode-map):
9 * dired.el (dired-mode-map):
10 * emacs-lisp/lisp-mode.el (emacs-lisp-mode-map)
11 (lisp-interaction-mode-map):
12 * emacs-lisp/package.el (package-menu-mode-map):
13 * epa.el (epa-key-list-mode-map):
14 * menu-bar.el (menu-bar-showhide-tool-bar-menu)
15 (menu-bar-options-menu):
16 * outline.el (outline-mode-menu-bar-map):
17 * vc/vc-bzr.el (vc-bzr-shelve-menu-map, vc-bzr-extra-menu-map):
18 * vc/vc-dir.el (vc-dir-menu-map):
19 * vc/vc-git.el (vc-git-stash-menu-map, vc-git-extra-menu-map):
20 Capitalize non-function content words in menu item strings.
21
22 * dired.el (dired-mode-map): Add menu item for
23 `image-dired-dired-toggle-marked-thumbs'.
24
252011-09-18 Juri Linkov <juri@jurta.org>
26
27 * isearch.el (isearch-edit-string): Bind `isearch-new-case-fold'
28 to `isearch-case-fold-search' and restore its original value
29 after the `isearch-mode' call.
30
312011-09-18 Juri Linkov <juri@jurta.org>
32
33 * progmodes/grep.el (grep-process-setup): Don't check code for 1
34 because `zgrep' returns 1 for successful matches (bug#9226).
35
362011-09-18 Juri Linkov <juri@jurta.org>
37
38 * info.el (Info-extract-menu-node-name): Check the second match
39 for empty string (second test-case of bug#9528).
40 (Info-last-preorder): Let-bind `Info-history' to nil to not add
41 intermediate nodes to the history (first test-case of bug#9528).
42
432011-09-18 Juri Linkov <juri@jurta.org>
44
45 * info.el (Info-mode-syntax-table): New variable.
46 (Info-mode): Set `:syntax-table' to `Info-mode-syntax-table'. (Bug#3312)
47
482011-09-18 Juri Linkov <juri@jurta.org>
49
50 * info.el (Info-file-supports-index-cookies): Increment
51 line-beginning-position's arg from 3 to 4 because makeinfo outputs
52 one more line for long file names (bug#4142).
53
542011-09-18 Chong Yidong <cyd@stupidchicken.com>
55
56 * newcomment.el (comment-normalize-vars): If prompting for
57 comment-start, set comment-start-skip too (Bug#8424).
58
592011-09-18 Johan Bockgård <bojohan@gnu.org>
60
61 * icomplete.el: Fix previous fix of Bug#5849.
62 (icomplete-mode): Don't set completion-show-inline-help.
63 (icomplete-minibuffer-setup): Set completion-show-inline-help
64 locally during icompletion.
65
662011-09-18 Chong Yidong <cyd@stupidchicken.com>
67
68 * woman.el (woman2-process-escapes): Don't delete unrecognized
69 escapes (Bug#7843).
70
71 * files.el (inhibit-first-line-modes-regexps): Add image files.
72 (hack-local-variables-prop-line): Return nil for malformed
73 prop-lines (Bug#9044).
74
752011-09-18 Michael Albinus <michael.albinus@gmx.de>
76
77 * net/tramp.el (top): Don't require 'shell.
78 (tramp-methods): Fix docstring.
79 (tramp-get-remote-tmpdir): New defun, moved from tramp-sh.el.
80 Return complete remote file name. Handle "smb" case. Use
81 `tramp-tmpdir', if defined for the respective method.
82 (tramp-make-tramp-temp-file): Adapt call of `tramp-get-remote-tmpdir'.
83
84 * net/tramp-compat.el (top): Require 'shell.
85
86 * net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band)
87 (tramp-maybe-open-connection): Use `tramp-file-name-real-host' for
88 `tramp-current-host'.
89 (tramp-get-remote-tmpdir): Remove.
90
91 * net/tramp-smb.el (tramp-methods): Add `tramp-remote-shell' and
92 `tramp-tmpdir' entries.
93 (tramp-smb-errors): Add "NT_STATUS_IMAGE_ALREADY_LOADED".
94 (tramp-smb-handle-file-attributes): Ignore errors.
95 (tramp-smb-wait-for-output): Check also for process end.
96
972011-09-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
98
99 * mail/smtpmail.el (smtpmail-via-smtp): Ignore errors that arise
100 when sending QUIT (bug#9312).
101
1022011-09-17 Chong Yidong <cyd@stupidchicken.com>
103
104 * replace.el (occur-mode-map): Rebind occur-edit-mode to "e" (Bug#8463).
105 (occur-edit-mode-map): Bind C-c C-c to occur-cease-edit and C-o to
106 occur-mode-display-occurrence.
107 (occur-edit-mode): Add usage message.
108 (occur-cease-edit): New command.
109 (occur-after-change-function): Use text properties to find the
110 position of the prefix text.
111 (occur-engine): Set stickiness of prefix text properties.
112
1132011-09-17 Glenn Morris <rgm@gnu.org>
114
115 * progmodes/etags.el (complete-tag):
116 Fix call to completion-in-region. (Bug#9526)
117
1182011-09-17 Juri Linkov <juri@jurta.org>
119
120 * textmodes/ispell.el (ispell-word): Add to the error message
121 the word, ispell program name and current dictionary (bug#9121).
122 (ispell-tex-arg-end): Capitalize "error" in the error message.
123
1242011-09-17 Andreas Schwab <schwab@linux-m68k.org>
125
126 * emacs-lisp/bytecomp.el (byte-compile-lapcode): Fix overflow
127 check. (Bug#4251)
128
1292011-09-17 Juri Linkov <juri@jurta.org>
130
131 * window.el (window-safe-min-height, window-safe-min-width):
132 Fix typos (followup to bug#9522).
133
1342011-09-17 Sven Joachim <svenjoac@gmx.de>
135
136 * window.el (window-min-width, window-state-put): Fix typos (bug#9522).
137
1382011-09-16 Eli Zaretskii <eliz@gnu.org>
139
140 * simple.el (line-move): If goal-column is set, move by logical
141 lines, not by display lines. (Bug#971)
142 (next-line, previous-line, goal-column, line-move-visual): Doc fix
143 to reflect the above change.
144
1452011-09-16 Stefan Monnier <monnier@iro.umontreal.ca>
146
147 * image.el (imagemagick-register-types): Use regexp-opt.
148
12011-09-15 Chong Yidong <cyd@stupidchicken.com> 1492011-09-15 Chong Yidong <cyd@stupidchicken.com>
2 150
3 * window.el (display-buffer-base-action): Rename from 151 * window.el (display-buffer-base-action): Rename from
@@ -13,8 +161,8 @@
13 with an older version, remove it. 161 with an older version, remove it.
14 (package-menu-mark-delete, package-menu-mark-install) 162 (package-menu-mark-delete, package-menu-mark-install)
15 (package-menu-mark-unmark): Make unused args optional. 163 (package-menu-mark-unmark): Make unused args optional.
16 (package-menu-mark-obsolete-for-deletion): Use 164 (package-menu-mark-obsolete-for-deletion):
17 package-menu-get-status instead of a regexp search. 165 Use package-menu-get-status instead of a regexp search.
18 (package-menu-get-status): Use tabulated-list-entry. 166 (package-menu-get-status): Use tabulated-list-entry.
19 (package-menu-mark-upgrades): New command. 167 (package-menu-mark-upgrades): New command.
20 (package-menu-mode-map): Bind it to U. Add it to menu bar. 168 (package-menu-mode-map): Bind it to U. Add it to menu bar.
@@ -296,7 +444,8 @@
296 444
2972011-09-10 Reuben Thomas <rrt@sc3d.org> 4452011-09-10 Reuben Thomas <rrt@sc3d.org>
298 446
299 * simple.el (count-words-region): Use buffer if there's no region. 447 * simple.el (count-words-region): Use buffer if there's no region
448 (bug#9429).
300 449
3012011-09-09 Juri Linkov <juri@jurta.org> 4502011-09-09 Juri Linkov <juri@jurta.org>
302 451
diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el
index d757453c051..291430d4393 100644
--- a/lisp/buff-menu.el
+++ b/lisp/buff-menu.el
@@ -167,53 +167,53 @@ Auto Revert Mode.")
167 :help ,(purecopy "Refresh the *Buffer List* buffer contents"))) 167 :help ,(purecopy "Refresh the *Buffer List* buffer contents")))
168 (define-key menu-map [s0] menu-bar-separator) 168 (define-key menu-map [s0] menu-bar-separator)
169 (define-key menu-map [tf] 169 (define-key menu-map [tf]
170 `(menu-item ,(purecopy "Show only file buffers") Buffer-menu-toggle-files-only 170 `(menu-item ,(purecopy "Show Only File Buffers") Buffer-menu-toggle-files-only
171 :button (:toggle . Buffer-menu-files-only) 171 :button (:toggle . Buffer-menu-files-only)
172 :help ,(purecopy "Toggle whether the current buffer-menu displays only file buffers"))) 172 :help ,(purecopy "Toggle whether the current buffer-menu displays only file buffers")))
173 (define-key menu-map [s1] menu-bar-separator) 173 (define-key menu-map [s1] menu-bar-separator)
174 ;; FIXME: The "Select" entries could use better names... 174 ;; FIXME: The "Select" entries could use better names...
175 (define-key menu-map [sel] 175 (define-key menu-map [sel]
176 `(menu-item ,(purecopy "Select marked") Buffer-menu-select 176 `(menu-item ,(purecopy "Select Marked") Buffer-menu-select
177 :help ,(purecopy "Select this line's buffer; also display buffers marked with `>'"))) 177 :help ,(purecopy "Select this line's buffer; also display buffers marked with `>'")))
178 (define-key menu-map [bm2] 178 (define-key menu-map [bm2]
179 `(menu-item ,(purecopy "Select two") Buffer-menu-2-window 179 `(menu-item ,(purecopy "Select Two") Buffer-menu-2-window
180 :help ,(purecopy "Select this line's buffer, with previous buffer in second window"))) 180 :help ,(purecopy "Select this line's buffer, with previous buffer in second window")))
181 (define-key menu-map [bm1] 181 (define-key menu-map [bm1]
182 `(menu-item ,(purecopy "Select current") Buffer-menu-1-window 182 `(menu-item ,(purecopy "Select Current") Buffer-menu-1-window
183 :help ,(purecopy "Select this line's buffer, alone, in full frame"))) 183 :help ,(purecopy "Select this line's buffer, alone, in full frame")))
184 (define-key menu-map [ow] 184 (define-key menu-map [ow]
185 `(menu-item ,(purecopy "Select in other window") Buffer-menu-other-window 185 `(menu-item ,(purecopy "Select in Other Window") Buffer-menu-other-window
186 :help ,(purecopy "Select this line's buffer in other window, leaving buffer menu visible"))) 186 :help ,(purecopy "Select this line's buffer in other window, leaving buffer menu visible")))
187 (define-key menu-map [tw] 187 (define-key menu-map [tw]
188 `(menu-item ,(purecopy "Select in current window") Buffer-menu-this-window 188 `(menu-item ,(purecopy "Select in Current Window") Buffer-menu-this-window
189 :help ,(purecopy "Select this line's buffer in this window"))) 189 :help ,(purecopy "Select this line's buffer in this window")))
190 (define-key menu-map [s2] menu-bar-separator) 190 (define-key menu-map [s2] menu-bar-separator)
191 (define-key menu-map [is] 191 (define-key menu-map [is]
192 `(menu-item ,(purecopy "Regexp Isearch marked buffers") Buffer-menu-isearch-buffers-regexp 192 `(menu-item ,(purecopy "Regexp Isearch Marked Buffers...") Buffer-menu-isearch-buffers-regexp
193 :help ,(purecopy "Search for a regexp through all marked buffers using Isearch"))) 193 :help ,(purecopy "Search for a regexp through all marked buffers using Isearch")))
194 (define-key menu-map [ir] 194 (define-key menu-map [ir]
195 `(menu-item ,(purecopy "Isearch marked buffers") Buffer-menu-isearch-buffers 195 `(menu-item ,(purecopy "Isearch Marked Buffers...") Buffer-menu-isearch-buffers
196 :help ,(purecopy "Search for a string through all marked buffers using Isearch"))) 196 :help ,(purecopy "Search for a string through all marked buffers using Isearch")))
197 (define-key menu-map [s3] menu-bar-separator) 197 (define-key menu-map [s3] menu-bar-separator)
198 (define-key menu-map [by] 198 (define-key menu-map [by]
199 `(menu-item ,(purecopy "Bury") Buffer-menu-bury 199 `(menu-item ,(purecopy "Bury") Buffer-menu-bury
200 :help ,(purecopy "Bury the buffer listed on this line"))) 200 :help ,(purecopy "Bury the buffer listed on this line")))
201 (define-key menu-map [vt] 201 (define-key menu-map [vt]
202 `(menu-item ,(purecopy "Set unmodified") Buffer-menu-not-modified 202 `(menu-item ,(purecopy "Set Unmodified") Buffer-menu-not-modified
203 :help ,(purecopy "Mark buffer on this line as unmodified (no changes to save)"))) 203 :help ,(purecopy "Mark buffer on this line as unmodified (no changes to save)")))
204 (define-key menu-map [ex] 204 (define-key menu-map [ex]
205 `(menu-item ,(purecopy "Execute") Buffer-menu-execute 205 `(menu-item ,(purecopy "Execute") Buffer-menu-execute
206 :help ,(purecopy "Save and/or delete buffers marked with s or k commands"))) 206 :help ,(purecopy "Save and/or delete buffers marked with s or k commands")))
207 (define-key menu-map [s4] menu-bar-separator) 207 (define-key menu-map [s4] menu-bar-separator)
208 (define-key menu-map [delb] 208 (define-key menu-map [delb]
209 `(menu-item ,(purecopy "Mark for delete and move backwards") Buffer-menu-delete-backwards 209 `(menu-item ,(purecopy "Mark for Delete and Move Backwards") Buffer-menu-delete-backwards
210 :help ,(purecopy "Mark buffer on this line to be deleted by x command and move up one line"))) 210 :help ,(purecopy "Mark buffer on this line to be deleted by x command and move up one line")))
211 (define-key menu-map [del] 211 (define-key menu-map [del]
212 `(menu-item ,(purecopy "Mark for delete") Buffer-menu-delete 212 `(menu-item ,(purecopy "Mark for Delete") Buffer-menu-delete
213 :help ,(purecopy "Mark buffer on this line to be deleted by x command"))) 213 :help ,(purecopy "Mark buffer on this line to be deleted by x command")))
214 214
215 (define-key menu-map [sv] 215 (define-key menu-map [sv]
216 `(menu-item ,(purecopy "Mark for save") Buffer-menu-save 216 `(menu-item ,(purecopy "Mark for Save") Buffer-menu-save
217 :help ,(purecopy "Mark buffer on this line to be saved by x command"))) 217 :help ,(purecopy "Mark buffer on this line to be saved by x command")))
218 (define-key menu-map [umk] 218 (define-key menu-map [umk]
219 `(menu-item ,(purecopy "Unmark") Buffer-menu-unmark 219 `(menu-item ,(purecopy "Unmark") Buffer-menu-unmark
diff --git a/lisp/dired.el b/lisp/dired.el
index f01e195f9ec..60ba14ade84 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -1552,6 +1552,10 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
1552 [menu-bar immediate image-dired-dired-display-image] 1552 [menu-bar immediate image-dired-dired-display-image]
1553 '(menu-item "Display Image" image-dired-dired-display-image 1553 '(menu-item "Display Image" image-dired-dired-display-image
1554 :help "Display sized image in a separate window")) 1554 :help "Display sized image in a separate window"))
1555 (define-key map
1556 [menu-bar immediate image-dired-dired-toggle-marked-thumbs]
1557 '(menu-item "Toggle Image Thumbnails in This Buffer" image-dired-dired-toggle-marked-thumbs
1558 :help "Add or remove image thumbnails in front of marked file names"))
1555 1559
1556 (define-key map [menu-bar immediate revert-buffer] 1560 (define-key map [menu-bar immediate revert-buffer]
1557 '(menu-item "Refresh" revert-buffer 1561 '(menu-item "Refresh" revert-buffer
@@ -1708,7 +1712,7 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
1708 :help "Add image comment to current or marked files")) 1712 :help "Add image comment to current or marked files"))
1709 (define-key map 1713 (define-key map
1710 [menu-bar operate image-dired-display-thumbs] 1714 [menu-bar operate image-dired-display-thumbs]
1711 '(menu-item "Display image thumbnails" image-dired-display-thumbs 1715 '(menu-item "Display Image Thumbnails" image-dired-display-thumbs
1712 :help "Display image thumbnails for current or marked image files")) 1716 :help "Display image thumbnails for current or marked image files"))
1713 1717
1714 (define-key map [menu-bar operate dashes-4] 1718 (define-key map [menu-bar operate dashes-4]
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 127f93c6858..fae402d4215 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -834,7 +834,7 @@ CONST2 may be evaulated multiple times."
834 (setcar (cdr bytes-tail) (logand pc 255)) 834 (setcar (cdr bytes-tail) (logand pc 255))
835 (setcar bytes-tail (lsh pc -8)) 835 (setcar bytes-tail (lsh pc -8))
836 ;; FIXME: Replace this by some workaround. 836 ;; FIXME: Replace this by some workaround.
837 (if (> (car bytes) 255) (error "Bytecode overflow"))) 837 (if (> (car bytes-tail) 255) (error "Bytecode overflow")))
838 838
839 (apply 'unibyte-string (nreverse bytes)))) 839 (apply 'unibyte-string (nreverse bytes))))
840 840
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index f2bea30ea39..9408c0a3c9d 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -297,7 +297,7 @@ font-lock keywords will not be case sensitive."
297 `(menu-item ,(purecopy "Untrace All") untrace-all 297 `(menu-item ,(purecopy "Untrace All") untrace-all
298 :help ,(purecopy "Untrace all currently traced functions"))) 298 :help ,(purecopy "Untrace all currently traced functions")))
299 (define-key tracing-map [tr-uf] 299 (define-key tracing-map [tr-uf]
300 `(menu-item ,(purecopy "Untrace function...") untrace-function 300 `(menu-item ,(purecopy "Untrace Function...") untrace-function
301 :help ,(purecopy "Untrace function, and possibly activate all remaining advice"))) 301 :help ,(purecopy "Untrace function, and possibly activate all remaining advice")))
302 (define-key tracing-map [tr-sep] menu-bar-separator) 302 (define-key tracing-map [tr-sep] menu-bar-separator)
303 (define-key tracing-map [tr-q] 303 (define-key tracing-map [tr-q]
@@ -358,7 +358,7 @@ font-lock keywords will not be case sensitive."
358 `(menu-item ,(purecopy "Byte-compile and Load") emacs-lisp-byte-compile-and-load 358 `(menu-item ,(purecopy "Byte-compile and Load") emacs-lisp-byte-compile-and-load
359 :help ,(purecopy "Byte-compile the current file (if it has changed), then load compiled code"))) 359 :help ,(purecopy "Byte-compile the current file (if it has changed), then load compiled code")))
360 (define-key menu-map [byte-compile] 360 (define-key menu-map [byte-compile]
361 `(menu-item ,(purecopy "Byte-compile this File") emacs-lisp-byte-compile 361 `(menu-item ,(purecopy "Byte-compile This File") emacs-lisp-byte-compile
362 :help ,(purecopy "Byte compile the file containing the current buffer"))) 362 :help ,(purecopy "Byte compile the file containing the current buffer")))
363 (define-key menu-map [separator-eval] menu-bar-separator) 363 (define-key menu-map [separator-eval] menu-bar-separator)
364 (define-key menu-map [ielm] 364 (define-key menu-map [ielm]
@@ -509,7 +509,7 @@ if that value is non-nil."
509 `(menu-item ,(purecopy "Evaluate Defun") eval-defun 509 `(menu-item ,(purecopy "Evaluate Defun") eval-defun
510 :help ,(purecopy "Evaluate the top-level form containing point, or after point"))) 510 :help ,(purecopy "Evaluate the top-level form containing point, or after point")))
511 (define-key menu-map [eval-print-last-sexp] 511 (define-key menu-map [eval-print-last-sexp]
512 `(menu-item ,(purecopy "Evaluate and print") eval-print-last-sexp 512 `(menu-item ,(purecopy "Evaluate and Print") eval-print-last-sexp
513 :help ,(purecopy "Evaluate sexp before point; print value into current buffer"))) 513 :help ,(purecopy "Evaluate sexp before point; print value into current buffer")))
514 (define-key menu-map [edebug-defun-lisp-interaction] 514 (define-key menu-map [edebug-defun-lisp-interaction]
515 `(menu-item ,(purecopy "Instrument Function for Debugging") edebug-defun 515 `(menu-item ,(purecopy "Instrument Function for Debugging") edebug-defun
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index f0b1537e2b3..4cab8f43480 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -1297,30 +1297,30 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages."
1297 '(menu-item "Unmark" package-menu-mark-unmark 1297 '(menu-item "Unmark" package-menu-mark-unmark
1298 :help "Clear any marks on a package and move to the next line")) 1298 :help "Clear any marks on a package and move to the next line"))
1299 (define-key menu-map [munm] 1299 (define-key menu-map [munm]
1300 '(menu-item "Unmark backwards" package-menu-backup-unmark 1300 '(menu-item "Unmark Backwards" package-menu-backup-unmark
1301 :help "Back up one line and clear any marks on that package")) 1301 :help "Back up one line and clear any marks on that package"))
1302 (define-key menu-map [md] 1302 (define-key menu-map [md]
1303 '(menu-item "Mark for deletion" package-menu-mark-delete 1303 '(menu-item "Mark for Deletion" package-menu-mark-delete
1304 :help "Mark a package for deletion and move to the next line")) 1304 :help "Mark a package for deletion and move to the next line"))
1305 (define-key menu-map [mi] 1305 (define-key menu-map [mi]
1306 '(menu-item "Mark for install" package-menu-mark-install 1306 '(menu-item "Mark for Install" package-menu-mark-install
1307 :help "Mark a package for installation and move to the next line")) 1307 :help "Mark a package for installation and move to the next line"))
1308 (define-key menu-map [mupgrades] 1308 (define-key menu-map [mupgrades]
1309 '(menu-item "Mark upgradable packages" package-menu-mark-upgrades 1309 '(menu-item "Mark Upgradable Packages" package-menu-mark-upgrades
1310 :help "Mark packages that have a newer version for upgrading")) 1310 :help "Mark packages that have a newer version for upgrading"))
1311 (define-key menu-map [s3] '("--")) 1311 (define-key menu-map [s3] '("--"))
1312 (define-key menu-map [mg] 1312 (define-key menu-map [mg]
1313 '(menu-item "Update package list" revert-buffer 1313 '(menu-item "Update Package List" revert-buffer
1314 :help "Update the list of packages")) 1314 :help "Update the list of packages"))
1315 (define-key menu-map [mr] 1315 (define-key menu-map [mr]
1316 '(menu-item "Refresh package list" package-menu-refresh 1316 '(menu-item "Refresh Package List" package-menu-refresh
1317 :help "Download the ELPA archive")) 1317 :help "Download the ELPA archive"))
1318 (define-key menu-map [s4] '("--")) 1318 (define-key menu-map [s4] '("--"))
1319 (define-key menu-map [mt] 1319 (define-key menu-map [mt]
1320 '(menu-item "Mark obsolete packages" package-menu-mark-obsolete-for-deletion 1320 '(menu-item "Mark Obsolete Packages" package-menu-mark-obsolete-for-deletion
1321 :help "Mark all obsolete packages for deletion")) 1321 :help "Mark all obsolete packages for deletion"))
1322 (define-key menu-map [mx] 1322 (define-key menu-map [mx]
1323 '(menu-item "Execute actions" package-menu-execute 1323 '(menu-item "Execute Actions" package-menu-execute
1324 :help "Perform all the marked actions")) 1324 :help "Perform all the marked actions"))
1325 (define-key menu-map [s5] '("--")) 1325 (define-key menu-map [s5] '("--"))
1326 (define-key menu-map [mh] 1326 (define-key menu-map [mh]
diff --git a/lisp/epa.el b/lisp/epa.el
index f0ec1ece0d1..5164181454a 100644
--- a/lisp/epa.el
+++ b/lisp/epa.el
@@ -239,7 +239,7 @@ You should bind this variable with `let', but do not set it globally.")
239 :help "Encrypt FILE for RECIPIENTS")) 239 :help "Encrypt FILE for RECIPIENTS"))
240 (define-key menu-map [separator-epa-key-list] '(menu-item "--")) 240 (define-key menu-map [separator-epa-key-list] '(menu-item "--"))
241 (define-key menu-map [epa-key-list-delete-keys] 241 (define-key menu-map [epa-key-list-delete-keys]
242 '(menu-item "Delete keys" epa-delete-keys 242 '(menu-item "Delete Keys" epa-delete-keys
243 :help "Delete Marked Keys")) 243 :help "Delete Marked Keys"))
244 (define-key menu-map [epa-key-list-import-keys] 244 (define-key menu-map [epa-key-list-import-keys]
245 '(menu-item "Import Keys" epa-import-keys 245 '(menu-item "Import Keys" epa-import-keys
diff --git a/lisp/files.el b/lisp/files.el
index 5ca9af6783d..b29c0596d7b 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -2461,7 +2461,9 @@ of a script, mode MODE is enabled.
2461 2461
2462See also `auto-mode-alist'.") 2462See also `auto-mode-alist'.")
2463 2463
2464(defvar inhibit-first-line-modes-regexps (mapcar 'purecopy '("\\.tar\\'" "\\.tgz\\'")) 2464(defvar inhibit-first-line-modes-regexps
2465 (mapcar 'purecopy '("\\.tar\\'" "\\.tgz\\'" "\\.tiff?\\'"
2466 "\\.gif\\'" "\\.png\\'" "\\.jpe?g\\'"))
2465 "List of regexps; if one matches a file name, don't look for `-*-'.") 2467 "List of regexps; if one matches a file name, don't look for `-*-'.")
2466 2468
2467(defvar inhibit-first-line-modes-suffixes nil 2469(defvar inhibit-first-line-modes-suffixes nil
@@ -2952,60 +2954,62 @@ Returns an alist of elements (VAR . VAL), where VAR is a variable
2952and VAL is the specified value. Ignores any specification for 2954and VAL is the specified value. Ignores any specification for
2953`mode:' and `coding:' (which should have already been handled 2955`mode:' and `coding:' (which should have already been handled
2954by `set-auto-mode' and `set-auto-coding', respectively). 2956by `set-auto-mode' and `set-auto-coding', respectively).
2955Throws an error if the -*- line is malformed. 2957Return nil if the -*- line is malformed.
2956 2958
2957If MODE-ONLY is non-nil, just returns the symbol specifying the 2959If MODE-ONLY is non-nil, just returns the symbol specifying the
2958mode, if there is one, otherwise nil." 2960mode, if there is one, otherwise nil."
2959 (save-excursion 2961 (catch 'malformed-line
2960 (goto-char (point-min)) 2962 (save-excursion
2961 (let ((end (set-auto-mode-1)) 2963 (goto-char (point-min))
2962 result) 2964 (let ((end (set-auto-mode-1))
2963 (cond ((not end) 2965 result)
2964 nil) 2966 (cond ((not end)
2965 ((looking-at "[ \t]*\\([^ \t\n\r:;]+\\)\\([ \t]*-\\*-\\)") 2967 nil)
2966 ;; Simple form: "-*- MODENAME -*-". 2968 ((looking-at "[ \t]*\\([^ \t\n\r:;]+\\)\\([ \t]*-\\*-\\)")
2967 (if mode-only 2969 ;; Simple form: "-*- MODENAME -*-".
2968 (intern (concat (match-string 1) "-mode")))) 2970 (if mode-only
2969 (t 2971 (intern (concat (match-string 1) "-mode"))))
2970 ;; Hairy form: '-*-' [ <variable> ':' <value> ';' ]* '-*-' 2972 (t
2971 ;; (last ";" is optional). 2973 ;; Hairy form: '-*-' [ <variable> ':' <value> ';' ]* '-*-'
2972 ;; If MODE-ONLY, just check for `mode'. 2974 ;; (last ";" is optional).
2973 ;; Otherwise, parse the -*- line into the RESULT alist. 2975 ;; If MODE-ONLY, just check for `mode'.
2974 (while (and (or (not mode-only) 2976 ;; Otherwise, parse the -*- line into the RESULT alist.
2975 (not result)) 2977 (while (and (or (not mode-only)
2976 (< (point) end)) 2978 (not result))
2977 (or (looking-at "[ \t]*\\([^ \t\n:]+\\)[ \t]*:[ \t]*") 2979 (< (point) end))
2978 (error "Malformed -*- line")) 2980 (unless (looking-at "[ \t]*\\([^ \t\n:]+\\)[ \t]*:[ \t]*")
2979 (goto-char (match-end 0)) 2981 (message "Malformed mode-line")
2980 ;; There used to be a downcase here, 2982 (throw 'malformed-line nil))
2981 ;; but the manual didn't say so, 2983 (goto-char (match-end 0))
2982 ;; and people want to set var names that aren't all lc. 2984 ;; There used to be a downcase here,
2983 (let* ((key (intern (match-string 1))) 2985 ;; but the manual didn't say so,
2984 (val (save-restriction 2986 ;; and people want to set var names that aren't all lc.
2985 (narrow-to-region (point) end) 2987 (let* ((key (intern (match-string 1)))
2986 (let ((read-circle nil)) 2988 (val (save-restriction
2987 (read (current-buffer))))) 2989 (narrow-to-region (point) end)
2988 ;; It is traditional to ignore 2990 (let ((read-circle nil))
2989 ;; case when checking for `mode' in set-auto-mode, 2991 (read (current-buffer)))))
2990 ;; so we must do that here as well. 2992 ;; It is traditional to ignore
2991 ;; That is inconsistent, but we're stuck with it. 2993 ;; case when checking for `mode' in set-auto-mode,
2992 ;; The same can be said for `coding' in set-auto-coding. 2994 ;; so we must do that here as well.
2993 (keyname (downcase (symbol-name key)))) 2995 ;; That is inconsistent, but we're stuck with it.
2994 (if mode-only 2996 ;; The same can be said for `coding' in set-auto-coding.
2995 (and (equal keyname "mode") 2997 (keyname (downcase (symbol-name key))))
2996 (setq result 2998 (if mode-only
2997 (intern (concat (downcase (symbol-name val)) 2999 (and (equal keyname "mode")
2998 "-mode")))) 3000 (setq result
2999 (or (equal keyname "coding") 3001 (intern (concat (downcase (symbol-name val))
3000 (condition-case nil 3002 "-mode"))))
3001 (push (cons (cond ((eq key 'eval) 'eval) 3003 (or (equal keyname "coding")
3002 ;; Downcase "Mode:". 3004 (condition-case nil
3003 ((equal keyname "mode") 'mode) 3005 (push (cons (cond ((eq key 'eval) 'eval)
3004 (t (indirect-variable key))) 3006 ;; Downcase "Mode:".
3005 val) result) 3007 ((equal keyname "mode") 'mode)
3006 (error nil)))) 3008 (t (indirect-variable key)))
3007 (skip-chars-forward " \t;"))) 3009 val) result)
3008 result))))) 3010 (error nil))))
3011 (skip-chars-forward " \t;")))
3012 result))))))
3009 3013
3010(defun hack-local-variables-filter (variables dir-name) 3014(defun hack-local-variables-filter (variables dir-name)
3011 "Filter local variable settings, querying the user if necessary. 3015 "Filter local variable settings, querying the user if necessary.
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 211c4455717..fa22d1a5ea1 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,7 @@
12011-09-17 Lars Magne Ingebrigtsen <larsi@gnus.org>
2
3 * mm-decode.el (mm-inline-media-tests): Support imagemagick images.
4
12011-09-15 Lars Magne Ingebrigtsen <larsi@gnus.org> 52011-09-15 Lars Magne Ingebrigtsen <larsi@gnus.org>
2 6
3 * gnus-sum.el (gnus-summary-read-group-1): Bump the "Retrieving" 7 * gnus-sum.el (gnus-summary-read-group-1): Bump the "Retrieving"
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index 692175d471f..6e56213c327 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -195,7 +195,7 @@ before the external MIME handler is invoked."
195 ("image/tiff" 195 ("image/tiff"
196 mm-inline-image 196 mm-inline-image
197 (lambda (handle) 197 (lambda (handle)
198 (mm-valid-and-fit-image-p 'tiff handle)) ) 198 (mm-valid-and-fit-image-p 'tiff handle)))
199 ("image/xbm" 199 ("image/xbm"
200 mm-inline-image 200 mm-inline-image
201 (lambda (handle) 201 (lambda (handle)
@@ -265,6 +265,20 @@ before the external MIME handler is invoked."
265 ("multipart/alternative" ignore identity) 265 ("multipart/alternative" ignore identity)
266 ("multipart/mixed" ignore identity) 266 ("multipart/mixed" ignore identity)
267 ("multipart/related" ignore identity) 267 ("multipart/related" ignore identity)
268 ("image/*"
269 mm-inline-image
270 (lambda (handle)
271 (and (mm-valid-image-format-p 'imagemagick)
272 (mm-with-unibyte-buffer
273 (mm-insert-part handle)
274 (let ((image
275 (ignore-errors
276 (if (fboundp 'create-image)
277 (create-image (buffer-string) 'imagemagick 'data-p)
278 (mm-create-image-xemacs type)))))
279 (when image
280 (setcar (cdr handle) (list "image/imagemagick"))
281 (mm-image-fit-p handle)))))))
268 ;; Disable audio and image 282 ;; Disable audio and image
269 ("audio/.*" ignore ignore) 283 ("audio/.*" ignore ignore)
270 ("image/.*" ignore ignore) 284 ("image/.*" ignore ignore)
diff --git a/lisp/gnus/mm-view.el b/lisp/gnus/mm-view.el
index 5a90f015aed..926422865c7 100644
--- a/lisp/gnus/mm-view.el
+++ b/lisp/gnus/mm-view.el
@@ -90,13 +90,14 @@
90 (put-image 90 (put-image
91 (let ((image (mm-get-image handle))) 91 (let ((image (mm-get-image handle)))
92 (if (eq mm-inline-large-images 'resize) 92 (if (eq mm-inline-large-images 'resize)
93 (gnus-rescale-image image 93 (gnus-rescale-image
94 (let ((edges (gnus-window-inside-pixel-edges 94 image
95 (get-buffer-window (current-buffer))))) 95 (let ((edges (gnus-window-inside-pixel-edges
96 (cons (truncate (* mm-inline-large-images-proportion 96 (get-buffer-window (current-buffer)))))
97 (- (nth 2 edges) (nth 0 edges)))) 97 (cons (truncate (* mm-inline-large-images-proportion
98 (truncate (* mm-inline-large-images-proportion 98 (- (nth 2 edges) (nth 0 edges))))
99 (- (nth 3 edges) (nth 1 edges))))))) 99 (truncate (* mm-inline-large-images-proportion
100 (- (nth 3 edges) (nth 1 edges)))))))
100 image)) 101 image))
101 b) 102 b)
102 (insert "\n\n") 103 (insert "\n\n")
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 5f3680630f4..bdd19194c22 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -179,11 +179,8 @@ otherwise turn it off."
179 (if icomplete-mode 179 (if icomplete-mode
180 ;; The following is not really necessary after first time - 180 ;; The following is not really necessary after first time -
181 ;; no great loss. 181 ;; no great loss.
182 (progn 182 (add-hook 'minibuffer-setup-hook 'icomplete-minibuffer-setup)
183 (setq completion-show-inline-help nil) 183 (remove-hook 'minibuffer-setup-hook 'icomplete-minibuffer-setup)))
184 (add-hook 'minibuffer-setup-hook 'icomplete-minibuffer-setup))
185 (remove-hook 'minibuffer-setup-hook 'icomplete-minibuffer-setup)
186 (setq completion-show-inline-help t)))
187 184
188;;;_ > icomplete-simple-completing-p () 185;;;_ > icomplete-simple-completing-p ()
189(defun icomplete-simple-completing-p () 186(defun icomplete-simple-completing-p ()
@@ -209,6 +206,7 @@ Conditions are:
209 "Run in minibuffer on activation to establish incremental completion. 206 "Run in minibuffer on activation to establish incremental completion.
210Usually run by inclusion in `minibuffer-setup-hook'." 207Usually run by inclusion in `minibuffer-setup-hook'."
211 (when (and icomplete-mode (icomplete-simple-completing-p)) 208 (when (and icomplete-mode (icomplete-simple-completing-p))
209 (set (make-local-variable 'completion-show-inline-help) nil)
212 (add-hook 'pre-command-hook 210 (add-hook 'pre-command-hook
213 (lambda () (run-hooks 'icomplete-pre-command-hook)) 211 (lambda () (run-hooks 'icomplete-pre-command-hook))
214 nil t) 212 nil t)
diff --git a/lisp/image.el b/lisp/image.el
index 30362251664..c150f4239dd 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -695,16 +695,14 @@ Emacs visits them in Image mode.
695 695
696If Emacs is compiled without ImageMagick support, do nothing." 696If Emacs is compiled without ImageMagick support, do nothing."
697 (when (fboundp 'imagemagick-types) 697 (when (fboundp 'imagemagick-types)
698 (let ((im-types (imagemagick-types))) 698 (let ((im-types '()))
699 (dolist (im-inhibit imagemagick-types-inhibit) 699 (dolist (im-type (imagemagick-types))
700 (setq im-types (delq im-inhibit im-types))) 700 (unless (memq im-type imagemagick-types-inhibit)
701 (dolist (im-type im-types) 701 (push (downcase (symbol-name im-type)) im-types)))
702 (let ((extension 702 (let ((extension (concat "\\." (regexp-opt im-types) "\\'")))
703 (concat "\\." (downcase (symbol-name im-type)) 703 (push (cons extension 'image-mode) auto-mode-alist)
704 "\\'"))) 704 (push (cons extension 'imagemagick)
705 (push (cons extension 'image-mode) auto-mode-alist) 705 image-type-file-name-regexps)))))
706 (push (cons extension 'imagemagick)
707 image-type-file-name-regexps))))))
708 706
709(provide 'image) 707(provide 'image)
710 708
diff --git a/lisp/info.el b/lisp/info.el
index 40959885edb..e79e4b1195e 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -540,7 +540,7 @@ in `Info-file-supports-index-cookies-list'."
540 (condition-case () 540 (condition-case ()
541 (if (and (re-search-forward 541 (if (and (re-search-forward
542 "makeinfo[ \n]version[ \n]\\([0-9]+.[0-9]+\\)" 542 "makeinfo[ \n]version[ \n]\\([0-9]+.[0-9]+\\)"
543 (line-beginning-position 3) t) 543 (line-beginning-position 4) t)
544 (not (version< (match-string 1) "4.7"))) 544 (not (version< (match-string 1) "4.7")))
545 (setq found t)) 545 (setq found t))
546 (error nil)) 546 (error nil))
@@ -2440,7 +2440,8 @@ Because of ambiguities, this should be concatenated with something like
2440 ) 2440 )
2441 (replace-regexp-in-string 2441 (replace-regexp-in-string
2442 "[ \n]+" " " 2442 "[ \n]+" " "
2443 (or (match-string-no-properties 2) 2443 (or (and (not (equal (match-string-no-properties 2) ""))
2444 (match-string-no-properties 2))
2444 ;; If the node name is the menu entry name (using `entry::'). 2445 ;; If the node name is the menu entry name (using `entry::').
2445 (buffer-substring-no-properties 2446 (buffer-substring-no-properties
2446 (match-beginning 0) (1- (match-beginning 1))))))) 2447 (match-beginning 0) (1- (match-beginning 1)))))))
@@ -2765,22 +2766,24 @@ N is the digit argument used to invoke this command."
2765 ;; so we can scroll back through it. 2766 ;; so we can scroll back through it.
2766 (goto-char (point-max))) 2767 (goto-char (point-max)))
2767 ;; Keep going down, as long as there are nested menu nodes. 2768 ;; Keep going down, as long as there are nested menu nodes.
2768 (while (Info-no-error 2769 (let (Info-history) ; Don't add intermediate nodes to the history.
2769 (Info-last-menu-item) 2770 (while (Info-no-error
2770 ;; If we go down a menu item, go to the end of the node 2771 (Info-last-menu-item)
2771 ;; so we can scroll back through it. 2772 ;; If we go down a menu item, go to the end of the node
2772 (goto-char (point-max)))) 2773 ;; so we can scroll back through it.
2774 (goto-char (point-max)))))
2773 (recenter -1)) 2775 (recenter -1))
2774 ((and (Info-no-error (Info-extract-pointer "prev")) 2776 ((and (Info-no-error (Info-extract-pointer "prev"))
2775 (not (equal (Info-extract-pointer "up") 2777 (not (equal (Info-extract-pointer "up")
2776 (Info-extract-pointer "prev")))) 2778 (Info-extract-pointer "prev"))))
2777 (Info-no-error (Info-prev)) 2779 (Info-no-error (Info-prev))
2778 (goto-char (point-max)) 2780 (goto-char (point-max))
2779 (while (Info-no-error 2781 (let (Info-history) ; Don't add intermediate nodes to the history.
2780 (Info-last-menu-item) 2782 (while (Info-no-error
2781 ;; If we go down a menu item, go to the end of the node 2783 (Info-last-menu-item)
2782 ;; so we can scroll back through it. 2784 ;; If we go down a menu item, go to the end of the node
2783 (goto-char (point-max)))) 2785 ;; so we can scroll back through it.
2786 (goto-char (point-max)))))
2784 (recenter -1)) 2787 (recenter -1))
2785 ((Info-no-error (Info-up t)) 2788 ((Info-no-error (Info-up t))
2786 (goto-char (point-min)) 2789 (goto-char (point-min))
@@ -3887,6 +3890,14 @@ With a zero prefix arg, put the name inside a function call to `info'."
3887(defvar tool-bar-map) 3890(defvar tool-bar-map)
3888(defvar bookmark-make-record-function) 3891(defvar bookmark-make-record-function)
3889 3892
3893(defvar Info-mode-syntax-table
3894 (let ((st (copy-syntax-table text-mode-syntax-table)))
3895 ;; Use punctuation syntax for apostrophe because of
3896 ;; extensive use of quotes like `this' in Info manuals.
3897 (modify-syntax-entry ?' "." st)
3898 st)
3899 "Syntax table used in `Info-mode'.")
3900
3890;; Autoload cookie needed by desktop.el 3901;; Autoload cookie needed by desktop.el
3891;;;###autoload 3902;;;###autoload
3892(define-derived-mode Info-mode nil "Info" 3903(define-derived-mode Info-mode nil "Info"
@@ -3951,7 +3962,7 @@ Advanced commands:
3951\\[clone-buffer] Select a new cloned Info buffer in another window. 3962\\[clone-buffer] Select a new cloned Info buffer in another window.
3952\\[universal-argument] \\[info] Move to new Info file with completion. 3963\\[universal-argument] \\[info] Move to new Info file with completion.
3953\\[universal-argument] N \\[info] Select Info buffer with prefix number in the name *info*<N>." 3964\\[universal-argument] N \\[info] Select Info buffer with prefix number in the name *info*<N>."
3954 :syntax-table text-mode-syntax-table 3965 :syntax-table Info-mode-syntax-table
3955 :abbrev-table text-mode-abbrev-table 3966 :abbrev-table text-mode-abbrev-table
3956 (setq tab-width 8) 3967 (setq tab-width 8)
3957 (add-hook 'activate-menubar-hook 'Info-menu-update nil t) 3968 (add-hook 'activate-menubar-hook 'Info-menu-update nil t)
diff --git a/lisp/isearch.el b/lisp/isearch.el
index e07f1429119..81e0b4bf3b7 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -1110,6 +1110,7 @@ The following additional command keys are active while editing.
1110 (isearch-new-message isearch-message) 1110 (isearch-new-message isearch-message)
1111 (isearch-new-forward isearch-forward) 1111 (isearch-new-forward isearch-forward)
1112 (isearch-new-word isearch-word) 1112 (isearch-new-word isearch-word)
1113 (isearch-new-case-fold isearch-case-fold-search)
1113 1114
1114 (isearch-regexp isearch-regexp) 1115 (isearch-regexp isearch-regexp)
1115 (isearch-op-fun isearch-op-fun) 1116 (isearch-op-fun isearch-op-fun)
@@ -1203,7 +1204,8 @@ The following additional command keys are active while editing.
1203 (setq isearch-string isearch-new-string 1204 (setq isearch-string isearch-new-string
1204 isearch-message isearch-new-message 1205 isearch-message isearch-new-message
1205 isearch-forward isearch-new-forward 1206 isearch-forward isearch-new-forward
1206 isearch-word isearch-new-word)) 1207 isearch-word isearch-new-word
1208 isearch-case-fold-search isearch-new-case-fold))
1207 1209
1208 ;; Empty isearch-string means use default. 1210 ;; Empty isearch-string means use default.
1209 (when (= 0 (length isearch-string)) 1211 (when (= 0 (length isearch-string))
diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el
index 9fe19581e81..1c6f2c7b7ed 100644
--- a/lisp/mail/smtpmail.el
+++ b/lisp/mail/smtpmail.el
@@ -773,8 +773,12 @@ The list is in preference order.")
773 (eq (car result) 530)) 773 (eq (car result) 530))
774 ;; We got a "530 auth required", so we close and try 774 ;; We got a "530 auth required", so we close and try
775 ;; again, this time asking the user for a password. 775 ;; again, this time asking the user for a password.
776 (smtpmail-send-command process "QUIT") 776 ;; We ignore any errors here, because some MTAs just
777 (smtpmail-read-response process) 777 ;; close the connection immediately after giving the
778 ;; error message.
779 (ignore-errors
780 (smtpmail-send-command process "QUIT")
781 (smtpmail-read-response process))
778 (delete-process process) 782 (delete-process process)
779 (setq process nil) 783 (setq process nil)
780 (throw 'done 784 (throw 'done
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index caae40ed8c5..eceb3afc147 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -985,7 +985,7 @@ by \"Save Options\" in Custom buffers.")
985 (let ((menu (make-sparse-keymap "Tool-bar"))) 985 (let ((menu (make-sparse-keymap "Tool-bar")))
986 986
987 (define-key menu [showhide-tool-bar-left] 987 (define-key menu [showhide-tool-bar-left]
988 `(menu-item ,(purecopy "On the left") 988 `(menu-item ,(purecopy "On the Left")
989 menu-bar-showhide-tool-bar-menu-customize-enable-left 989 menu-bar-showhide-tool-bar-menu-customize-enable-left
990 :help ,(purecopy "Tool-bar at the left side") 990 :help ,(purecopy "Tool-bar at the left side")
991 :visible (display-graphic-p) 991 :visible (display-graphic-p)
@@ -997,7 +997,7 @@ by \"Save Options\" in Custom buffers.")
997 'left))))) 997 'left)))))
998 998
999 (define-key menu [showhide-tool-bar-right] 999 (define-key menu [showhide-tool-bar-right]
1000 `(menu-item ,(purecopy "On the right") 1000 `(menu-item ,(purecopy "On the Right")
1001 menu-bar-showhide-tool-bar-menu-customize-enable-right 1001 menu-bar-showhide-tool-bar-menu-customize-enable-right
1002 :help ,(purecopy "Tool-bar at the right side") 1002 :help ,(purecopy "Tool-bar at the right side")
1003 :visible (display-graphic-p) 1003 :visible (display-graphic-p)
@@ -1009,7 +1009,7 @@ by \"Save Options\" in Custom buffers.")
1009 'right))))) 1009 'right)))))
1010 1010
1011 (define-key menu [showhide-tool-bar-bottom] 1011 (define-key menu [showhide-tool-bar-bottom]
1012 `(menu-item ,(purecopy "On the bottom") 1012 `(menu-item ,(purecopy "On the Bottom")
1013 menu-bar-showhide-tool-bar-menu-customize-enable-bottom 1013 menu-bar-showhide-tool-bar-menu-customize-enable-bottom
1014 :help ,(purecopy "Tool-bar at the bottom") 1014 :help ,(purecopy "Tool-bar at the bottom")
1015 :visible (display-graphic-p) 1015 :visible (display-graphic-p)
@@ -1021,7 +1021,7 @@ by \"Save Options\" in Custom buffers.")
1021 'bottom))))) 1021 'bottom)))))
1022 1022
1023 (define-key menu [showhide-tool-bar-top] 1023 (define-key menu [showhide-tool-bar-top]
1024 `(menu-item ,(purecopy "On the top") 1024 `(menu-item ,(purecopy "On the Top")
1025 menu-bar-showhide-tool-bar-menu-customize-enable-top 1025 menu-bar-showhide-tool-bar-menu-customize-enable-top
1026 :help ,(purecopy "Tool-bar at the top") 1026 :help ,(purecopy "Tool-bar at the top")
1027 :visible (display-graphic-p) 1027 :visible (display-graphic-p)
@@ -1200,7 +1200,7 @@ mail status in mode line"))
1200 (define-key menu [menu-system-font] 1200 (define-key menu [menu-system-font]
1201 (menu-bar-make-toggle 1201 (menu-bar-make-toggle
1202 toggle-use-system-font font-use-system-font 1202 toggle-use-system-font font-use-system-font
1203 "Use system font" 1203 "Use System Font"
1204 "Use system font: %s" 1204 "Use system font: %s"
1205 "Use the monospaced font defined by the system"))) 1205 "Use the monospaced font defined by the system")))
1206 1206
@@ -1304,7 +1304,7 @@ mail status in mode line"))
1304 (eq 'turn-on-auto-fill text-mode-hook))))) 1304 (eq 'turn-on-auto-fill text-mode-hook)))))
1305 1305
1306 (define-key menu [line-wrapping] 1306 (define-key menu [line-wrapping]
1307 `(menu-item ,(purecopy "Line Wrapping in this Buffer") 1307 `(menu-item ,(purecopy "Line Wrapping in This Buffer")
1308 ,menu-bar-line-wrapping-menu)) 1308 ,menu-bar-line-wrapping-menu))
1309 1309
1310 1310
diff --git a/lisp/net/ldap.el b/lisp/net/ldap.el
index a45cc5500c2..1fa57dbfe3e 100644
--- a/lisp/net/ldap.el
+++ b/lisp/net/ldap.el
@@ -632,9 +632,10 @@ an alist of attribute/value pairs."
632 (setq record (cons (list name value) 632 (setq record (cons (list name value)
633 record)) 633 record))
634 (forward-line 1)) 634 (forward-line 1))
635 (push (if withdn 635 (cond (withdn
636 (cons dn (nreverse record)) 636 (push (cons dn (nreverse record)) result))
637 (nreverse record)) result) 637 (record
638 (push (nreverse record) result)))
638 (setq record nil) 639 (setq record nil)
639 (skip-chars-forward " \t\n") 640 (skip-chars-forward " \t\n")
640 (message "Parsing results... %d" numres) 641 (message "Parsing results... %d" numres)
diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el
index 460c9f0e118..5054f1d232d 100644
--- a/lisp/net/tramp-compat.el
+++ b/lisp/net/tramp-compat.el
@@ -41,6 +41,7 @@
41 (require 'advice) 41 (require 'advice)
42 (require 'custom) 42 (require 'custom)
43 (require 'format-spec) 43 (require 'format-spec)
44 (require 'shell)
44 45
45 ;; As long as password.el is not part of (X)Emacs, it shouldn't be 46 ;; As long as password.el is not part of (X)Emacs, it shouldn't be
46 ;; mandatory. 47 ;; mandatory.
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 1fa358e9277..e94581392fa 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -2280,7 +2280,7 @@ The method used must be an out-of-band method."
2280 ;; password. 2280 ;; password.
2281 (setq tramp-current-method (tramp-file-name-method v) 2281 (setq tramp-current-method (tramp-file-name-method v)
2282 tramp-current-user (tramp-file-name-user v) 2282 tramp-current-user (tramp-file-name-user v)
2283 tramp-current-host (tramp-file-name-host v)) 2283 tramp-current-host (tramp-file-name-real-host v))
2284 2284
2285 ;; Expand hops. Might be necessary for gateway methods. 2285 ;; Expand hops. Might be necessary for gateway methods.
2286 (setq v (car (tramp-compute-multi-hops v))) 2286 (setq v (car (tramp-compute-multi-hops v)))
@@ -4025,6 +4025,7 @@ means discard it)."
4025(defconst tramp-inline-compress-commands 4025(defconst tramp-inline-compress-commands
4026 '(("gzip" "gzip -d") 4026 '(("gzip" "gzip -d")
4027 ("bzip2" "bzip2 -d") 4027 ("bzip2" "bzip2 -d")
4028 ("xz" "xz -d")
4028 ("compress" "compress -d")) 4029 ("compress" "compress -d"))
4029 "List of compress and decompress commands for inline transfer. 4030 "List of compress and decompress commands for inline transfer.
4030Each item is a list that looks like this: 4031Each item is a list that looks like this:
@@ -4292,7 +4293,7 @@ connection if a previous connection has died for some reason."
4292 (gw (tramp-get-file-property hop "" "gateway" nil)) 4293 (gw (tramp-get-file-property hop "" "gateway" nil))
4293 (g-method (and gw (tramp-file-name-method gw))) 4294 (g-method (and gw (tramp-file-name-method gw)))
4294 (g-user (and gw (tramp-file-name-user gw))) 4295 (g-user (and gw (tramp-file-name-user gw)))
4295 (g-host (and gw (tramp-file-name-host gw))) 4296 (g-host (and gw (tramp-file-name-real-host gw)))
4296 (command login-program) 4297 (command login-program)
4297 ;; We don't create the temporary file. In fact, 4298 ;; We don't create the temporary file. In fact,
4298 ;; it is just a prefix for the ControlPath option 4299 ;; it is just a prefix for the ControlPath option
@@ -4721,16 +4722,6 @@ This is used internally by `tramp-file-mode-from-int'."
4721 x)) 4722 x))
4722 remote-path))))) 4723 remote-path)))))
4723 4724
4724(defun tramp-get-remote-tmpdir (vec)
4725 (with-connection-property vec "tmp-directory"
4726 (let ((dir (tramp-shell-quote-argument "/tmp")))
4727 (if (and (tramp-send-command-and-check
4728 vec (format "%s -d %s" (tramp-get-test-command vec) dir))
4729 (tramp-send-command-and-check
4730 vec (format "%s -w %s" (tramp-get-test-command vec) dir)))
4731 dir
4732 (tramp-error vec 'file-error "Directory %s not accessible" dir)))))
4733
4734(defun tramp-get-ls-command (vec) 4725(defun tramp-get-ls-command (vec)
4735 (with-connection-property vec "ls" 4726 (with-connection-property vec "ls"
4736 (tramp-message vec 5 "Finding a suitable `ls' command") 4727 (tramp-message vec 5 "Finding a suitable `ls' command")
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index eb456298c1a..150ef18be52 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -38,7 +38,15 @@
38;; ... and add it to the method list. 38;; ... and add it to the method list.
39;;;###tramp-autoload 39;;;###tramp-autoload
40(unless (memq system-type '(cygwin windows-nt)) 40(unless (memq system-type '(cygwin windows-nt))
41 (add-to-list 'tramp-methods (cons tramp-smb-method nil))) 41 (add-to-list 'tramp-methods
42 `(,tramp-smb-method
43 ;; We define an empty command, because `tramp-smb-call-winexe'
44 ;; opens already the powershell. Used in `tramp-handle-shell-command'.
45 (tramp-remote-shell "")
46 ;; This is just a guess. We don't know whether the share "$C"
47 ;; is available for public use, and whether the user has write
48 ;; access.
49 (tramp-tmpdir "/C$/Temp"))))
42 50
43;; Add a default for `tramp-default-method-alist'. Rule: If there is 51;; Add a default for `tramp-default-method-alist'. Rule: If there is
44;; a domain in USER, it must be the SMB method. 52;; a domain in USER, it must be the SMB method.
@@ -98,7 +106,8 @@ call, letting the SMB client use the default one."
98 "ERRnomem" 106 "ERRnomem"
99 "ERRnosuchshare" 107 "ERRnosuchshare"
100 ;; Windows 4.0 (Windows NT), Windows 5.0 (Windows 2000), 108 ;; Windows 4.0 (Windows NT), Windows 5.0 (Windows 2000),
101 ;; Windows 5.1 (Windows XP), Windows 5.2 (Windows Server 2003). 109 ;; Windows 5.1 (Windows XP), Windows 5.2 (Windows Server 2003),
110 ;; Windows 6.0 (Windows Vista), Windows 6.1 (Windows 7).
102 "NT_STATUS_ACCESS_DENIED" 111 "NT_STATUS_ACCESS_DENIED"
103 "NT_STATUS_ACCOUNT_LOCKED_OUT" 112 "NT_STATUS_ACCOUNT_LOCKED_OUT"
104 "NT_STATUS_BAD_NETWORK_NAME" 113 "NT_STATUS_BAD_NETWORK_NAME"
@@ -107,6 +116,7 @@ call, letting the SMB client use the default one."
107 "NT_STATUS_DIRECTORY_NOT_EMPTY" 116 "NT_STATUS_DIRECTORY_NOT_EMPTY"
108 "NT_STATUS_DUPLICATE_NAME" 117 "NT_STATUS_DUPLICATE_NAME"
109 "NT_STATUS_FILE_IS_A_DIRECTORY" 118 "NT_STATUS_FILE_IS_A_DIRECTORY"
119 "NT_STATUS_IMAGE_ALREADY_LOADED"
110 "NT_STATUS_IO_TIMEOUT" 120 "NT_STATUS_IO_TIMEOUT"
111 "NT_STATUS_LOGON_FAILURE" 121 "NT_STATUS_LOGON_FAILURE"
112 "NT_STATUS_NETWORK_ACCESS_DENIED" 122 "NT_STATUS_NETWORK_ACCESS_DENIED"
@@ -490,39 +500,40 @@ PRESERVE-UID-GID and PRESERVE-SELINUX-CONTEXT are completely ignored."
490(defun tramp-smb-handle-file-attributes (filename &optional id-format) 500(defun tramp-smb-handle-file-attributes (filename &optional id-format)
491 "Like `file-attributes' for Tramp files." 501 "Like `file-attributes' for Tramp files."
492 (unless id-format (setq id-format 'integer)) 502 (unless id-format (setq id-format 'integer))
493 (with-parsed-tramp-file-name filename nil 503 (ignore-errors
494 (with-file-property v localname (format "file-attributes-%s" id-format) 504 (with-parsed-tramp-file-name filename nil
495 (if (and (tramp-smb-get-share v) (tramp-smb-get-stat-capability v)) 505 (with-file-property v localname (format "file-attributes-%s" id-format)
496 (tramp-smb-do-file-attributes-with-stat v id-format) 506 (if (and (tramp-smb-get-share v) (tramp-smb-get-stat-capability v))
497 ;; Reading just the filename entry via "dir localname" is not 507 (tramp-smb-do-file-attributes-with-stat v id-format)
498 ;; possible, because when filename is a directory, some 508 ;; Reading just the filename entry via "dir localname" is not
499 ;; smbclient versions return the content of the directory, and 509 ;; possible, because when filename is a directory, some
500 ;; other versions don't. Therefore, the whole content of the 510 ;; smbclient versions return the content of the directory, and
501 ;; upper directory is retrieved, and the entry of the filename 511 ;; other versions don't. Therefore, the whole content of the
502 ;; is extracted from. 512 ;; upper directory is retrieved, and the entry of the filename
503 (let* ((entries (tramp-smb-get-file-entries 513 ;; is extracted from.
504 (file-name-directory filename))) 514 (let* ((entries (tramp-smb-get-file-entries
505 (entry (assoc (file-name-nondirectory filename) entries)) 515 (file-name-directory filename)))
506 (uid (if (equal id-format 'string) "nobody" -1)) 516 (entry (assoc (file-name-nondirectory filename) entries))
507 (gid (if (equal id-format 'string) "nogroup" -1)) 517 (uid (if (equal id-format 'string) "nobody" -1))
508 (inode (tramp-get-inode v)) 518 (gid (if (equal id-format 'string) "nogroup" -1))
509 (device (tramp-get-device v))) 519 (inode (tramp-get-inode v))
510 520 (device (tramp-get-device v)))
511 ;; Check result. 521
512 (when entry 522 ;; Check result.
513 (list (and (string-match "d" (nth 1 entry)) 523 (when entry
514 t) ;0 file type 524 (list (and (string-match "d" (nth 1 entry))
515 -1 ;1 link count 525 t) ;0 file type
516 uid ;2 uid 526 -1 ;1 link count
517 gid ;3 gid 527 uid ;2 uid
518 '(0 0) ;4 atime 528 gid ;3 gid
519 (nth 3 entry) ;5 mtime 529 '(0 0) ;4 atime
520 '(0 0) ;6 ctime 530 (nth 3 entry) ;5 mtime
521 (nth 2 entry) ;7 size 531 '(0 0) ;6 ctime
522 (nth 1 entry) ;8 mode 532 (nth 2 entry) ;7 size
523 nil ;9 gid weird 533 (nth 1 entry) ;8 mode
524 inode ;10 inode number 534 nil ;9 gid weird
525 device))))))) ;11 file system number 535 inode ;10 inode number
536 device)))))))) ;11 file system number
526 537
527(defun tramp-smb-do-file-attributes-with-stat (vec &optional id-format) 538(defun tramp-smb-do-file-attributes-with-stat (vec &optional id-format)
528 "Implement `file-attributes' for Tramp files using stat command." 539 "Implement `file-attributes' for Tramp files using stat command."
@@ -1352,12 +1363,13 @@ Returns nil if an error message has appeared."
1352 (found (progn (goto-char (point-min)) 1363 (found (progn (goto-char (point-min))
1353 (re-search-forward tramp-smb-prompt nil t))) 1364 (re-search-forward tramp-smb-prompt nil t)))
1354 (err (progn (goto-char (point-min)) 1365 (err (progn (goto-char (point-min))
1355 (re-search-forward tramp-smb-errors nil t)))) 1366 (re-search-forward tramp-smb-errors nil t)))
1367 buffer-read-only)
1356 1368
1357 ;; Algorithm: get waiting output. See if last line contains 1369 ;; Algorithm: get waiting output. See if last line contains
1358 ;; tramp-smb-prompt sentinel or tramp-smb-errors strings. 1370 ;; `tramp-smb-prompt' sentinel or `tramp-smb-errors' strings.
1359 ;; If not, wait a bit and again get waiting output. 1371 ;; If not, wait a bit and again get waiting output.
1360 (while (and (not found) (not err)) 1372 (while (and (not found) (not err) (memq (process-status p) '(run open)))
1361 1373
1362 ;; Accept pending output. 1374 ;; Accept pending output.
1363 (tramp-accept-process-output p) 1375 (tramp-accept-process-output p)
@@ -1393,12 +1405,11 @@ Returns nil if an error message has appeared."
1393;;; TODO: 1405;;; TODO:
1394 1406
1395;; * Error handling in case password is wrong. 1407;; * Error handling in case password is wrong.
1396;; * Read password from "~/.netrc".
1397;; * Return more comprehensive file permission string. 1408;; * Return more comprehensive file permission string.
1398;; * Try to remove the inclusion of dummy "" directory. Seems to be at 1409;; * Try to remove the inclusion of dummy "" directory. Seems to be at
1399;; several places, especially in `tramp-smb-handle-insert-directory'. 1410;; several places, especially in `tramp-smb-handle-insert-directory'.
1400;; * (RMS) Use unwind-protect to clean up the state so as to make the state 1411;; * (RMS) Use unwind-protect to clean up the state so as to make the state
1401;; regular again. 1412;; regular again.
1402;; * Make it multi-hop capable. 1413;; * Ignore case in file names.
1403 1414
1404;;; tramp-smb.el ends here 1415;;; tramp-smb.el ends here
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 6475ea42ec8..3384a6d776b 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -58,7 +58,6 @@
58;;; Code: 58;;; Code:
59 59
60(require 'tramp-compat) 60(require 'tramp-compat)
61(require 'shell)
62 61
63;;; User Customizable Internal Variables: 62;;; User Customizable Internal Variables:
64 63
@@ -192,15 +191,16 @@ This is a list of entries of the form (NAME PARAM1 PARAM2 ...).
192Each NAME stands for a remote access method. Each PARAM is a 191Each NAME stands for a remote access method. Each PARAM is a
193pair of the form (KEY VALUE). The following KEYs are defined: 192pair of the form (KEY VALUE). The following KEYs are defined:
194 * `tramp-remote-shell' 193 * `tramp-remote-shell'
195 This specifies the Bourne shell to use on the remote host. This 194 This specifies the shell to use on the remote host. This
196 MUST be a Bourne-like shell. It is normally not necessary to set 195 MUST be a Bourne-like shell. It is normally not necessary to
197 this to any value other than \"/bin/sh\": Tramp wants to use a shell 196 set this to any value other than \"/bin/sh\": Tramp wants to
198 which groks tilde expansion, but it can search for it. Also note 197 use a shell which groks tilde expansion, but it can search
199 that \"/bin/sh\" exists on all Unixen, this might not be true for 198 for it. Also note that \"/bin/sh\" exists on all Unixen,
200 the value that you decide to use. You Have Been Warned. 199 this might not be true for the value that you decide to use.
200 You Have Been Warned.
201 * `tramp-remote-shell-args' 201 * `tramp-remote-shell-args'
202 For implementation of `shell-command', this specifies the 202 For implementation of `shell-command', this specifies the
203 argument to let `tramp-remote-shell' run a command. 203 arguments to let `tramp-remote-shell' run a single command.
204 * `tramp-login-program' 204 * `tramp-login-program'
205 This specifies the name of the program to use for logging in to the 205 This specifies the name of the program to use for logging in to the
206 remote host. This may be the name of rsh or a workalike program, 206 remote host. This may be the name of rsh or a workalike program,
@@ -255,6 +255,9 @@ pair of the form (KEY VALUE). The following KEYs are defined:
255 not have to be newline or carriage return characters. Other login 255 not have to be newline or carriage return characters. Other login
256 programs are happy with just one character, the newline character. 256 programs are happy with just one character, the newline character.
257 We use \"xy\" as the value for methods using \"plink\". 257 We use \"xy\" as the value for methods using \"plink\".
258 * `tramp-tmpdir'
259 A directory on the remote host for temporary files. If not
260 specified, \"/tmp\" is taken as default.
258 261
259What does all this mean? Well, you should specify `tramp-login-program' 262What does all this mean? Well, you should specify `tramp-login-program'
260for all methods; this program is used to log in to the remote site. Then, 263for all methods; this program is used to log in to the remote site. Then,
@@ -3531,20 +3534,26 @@ If the `tramp-methods' entry does not exist, return nil."
3531 ;; loaded already. 3534 ;; loaded already.
3532 (zerop (tramp-compat-funcall 'tramp-get-remote-uid vec 'integer)))))) 3535 (zerop (tramp-compat-funcall 'tramp-get-remote-uid vec 'integer))))))
3533 3536
3537(defun tramp-get-remote-tmpdir (vec)
3538 "Return directory for temporary files on the remote host identified by VEC."
3539 (with-connection-property vec "tmpdir"
3540 (let ((dir (tramp-make-tramp-file-name
3541 (tramp-file-name-method vec)
3542 (tramp-file-name-user vec)
3543 (tramp-file-name-host vec)
3544 (or
3545 (tramp-get-method-parameter
3546 (tramp-file-name-method vec) 'tramp-tmpdir)
3547 "/tmp"))))
3548 (if (and (file-directory-p dir) (file-writable-p dir))
3549 dir
3550 (tramp-error vec 'file-error "Directory %s not accessible" dir)))))
3551
3534(defun tramp-make-tramp-temp-file (vec) 3552(defun tramp-make-tramp-temp-file (vec)
3535 "Create a temporary file on the remote host identified by VEC. 3553 "Create a temporary file on the remote host identified by VEC.
3536Return the local name of the temporary file." 3554Return the local name of the temporary file."
3537 (let ((prefix 3555 (let ((prefix (expand-file-name
3538 (tramp-make-tramp-file-name 3556 tramp-temp-name-prefix (tramp-get-remote-tmpdir vec)))
3539 (tramp-file-name-method vec)
3540 (tramp-file-name-user vec)
3541 (tramp-file-name-host vec)
3542 (tramp-drop-volume-letter
3543 (expand-file-name
3544 tramp-temp-name-prefix
3545 ;; This is defined in tramp-sh.el. Let's assume this is
3546 ;; loaded already.
3547 (tramp-compat-funcall 'tramp-get-remote-tmpdir vec)))))
3548 result) 3557 result)
3549 (while (not result) 3558 (while (not result)
3550 ;; `make-temp-file' would be the natural choice for 3559 ;; `make-temp-file' would be the natural choice for
diff --git a/lisp/newcomment.el b/lisp/newcomment.el
index 8c0d7b25939..3f2338b3a4c 100644
--- a/lisp/newcomment.el
+++ b/lisp/newcomment.el
@@ -316,7 +316,8 @@ the variables are properly set."
316 (let ((cs (read-string "No comment syntax is defined. Use: "))) 316 (let ((cs (read-string "No comment syntax is defined. Use: ")))
317 (if (zerop (length cs)) 317 (if (zerop (length cs))
318 (error "No comment syntax defined") 318 (error "No comment syntax defined")
319 (set (make-local-variable 'comment-start) cs)))) 319 (set (make-local-variable 'comment-start) cs)
320 (set (make-local-variable 'comment-start-skip) cs))))
320 ;; comment-use-syntax 321 ;; comment-use-syntax
321 (when (eq comment-use-syntax 'undecided) 322 (when (eq comment-use-syntax 'undecided)
322 (set (make-local-variable 'comment-use-syntax) 323 (set (make-local-variable 'comment-use-syntax)
diff --git a/lisp/org/ChangeLog b/lisp/org/ChangeLog
index d63929d794e..1c320f20e51 100644
--- a/lisp/org/ChangeLog
+++ b/lisp/org/ChangeLog
@@ -1,3 +1,7 @@
12011-09-17 Juanma Barranquero <lekktu@gmail.com>
2
3 * org.el (org-toggle-pretty-entities): Fix typo in message.
4
12011-09-02 Chong Yidong <cyd@stupidchicken.com> 52011-09-02 Chong Yidong <cyd@stupidchicken.com>
2 6
3 * org-compat.el (org-pop-to-buffer-same-window): Deleted. 7 * org-compat.el (org-pop-to-buffer-same-window): Deleted.
diff --git a/lisp/org/org.el b/lisp/org/org.el
index d494bdb28fa..419ff022cf6 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -5660,7 +5660,7 @@ needs to be inserted at a specific position in the font-lock sequence.")
5660 (org-set-local 'org-pretty-entities (not org-pretty-entities)) 5660 (org-set-local 'org-pretty-entities (not org-pretty-entities))
5661 (org-restart-font-lock) 5661 (org-restart-font-lock)
5662 (if org-pretty-entities 5662 (if org-pretty-entities
5663 (message "Entities are displayed as UTF8 characers") 5663 (message "Entities are displayed as UTF8 characters")
5664 (save-restriction 5664 (save-restriction
5665 (widen) 5665 (widen)
5666 (org-decompose-region (point-min) (point-max)) 5666 (org-decompose-region (point-min) (point-max))
diff --git a/lisp/outline.el b/lisp/outline.el
index 2f84e7d93ea..f864058c6fc 100644
--- a/lisp/outline.el
+++ b/lisp/outline.el
@@ -137,24 +137,23 @@ in the file it applies to."
137 (cons "Headings" (make-sparse-keymap "Headings"))) 137 (cons "Headings" (make-sparse-keymap "Headings")))
138 138
139 (define-key map [headings demote-subtree] 139 (define-key map [headings demote-subtree]
140 '(menu-item "Demote subtree" outline-demote 140 '(menu-item "Demote Subtree" outline-demote
141 :help "Demote headings lower down the tree")) 141 :help "Demote headings lower down the tree"))
142 (define-key map [headings promote-subtree] 142 (define-key map [headings promote-subtree]
143 '(menu-item "Promote subtree" outline-promote 143 '(menu-item "Promote Subtree" outline-promote
144 :help "Promote headings higher up the tree")) 144 :help "Promote headings higher up the tree"))
145 (define-key map [headings move-subtree-down] 145 (define-key map [headings move-subtree-down]
146 '(menu-item "Move subtree down" outline-move-subtree-down 146 '(menu-item "Move Subtree Down" outline-move-subtree-down
147 :help "Move the currrent subtree down past arg headlines of the same level")) 147 :help "Move the currrent subtree down past arg headlines of the same level"))
148 (define-key map [headings move-subtree-up] 148 (define-key map [headings move-subtree-up]
149 '(menu-item "Move subtree up" outline-move-subtree-up 149 '(menu-item "Move Subtree Up" outline-move-subtree-up
150 :help "Move the currrent subtree up past arg headlines of the same level")) 150 :help "Move the currrent subtree up past arg headlines of the same level"))
151 (define-key map [headings copy] 151 (define-key map [headings copy]
152 '(menu-item "Copy to kill ring" outline-headers-as-kill 152 '(menu-item "Copy to Kill Ring" outline-headers-as-kill
153 :enable mark-active 153 :enable mark-active
154 :help "Save the visible outline headers in region at the start of the kill ring")) 154 :help "Save the visible outline headers in region at the start of the kill ring"))
155 (define-key map [headings outline-insert-heading] 155 (define-key map [headings outline-insert-heading]
156 156 '(menu-item "New Heading" outline-insert-heading
157 '(menu-item "New heading" outline-insert-heading
158 :help "Insert a new heading at same depth at point")) 157 :help "Insert a new heading at same depth at point"))
159 (define-key map [headings outline-backward-same-level] 158 (define-key map [headings outline-backward-same-level]
160 159
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index 1178a8a0b7e..fd817e3b4f4 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -290,7 +290,7 @@
290 res)))) 290 res))))
291 291
292 (defun c-make-font-lock-search-form (regexp highlights) 292 (defun c-make-font-lock-search-form (regexp highlights)
293 ;; Return a lisp form which will fontify every occurence of REGEXP 293 ;; Return a lisp form which will fontify every occurrence of REGEXP
294 ;; (a regular expression, NOT a function) between POINT and `limit' 294 ;; (a regular expression, NOT a function) between POINT and `limit'
295 ;; with HIGHLIGHTS, a list of highlighters as specified on page 295 ;; with HIGHLIGHTS, a list of highlighters as specified on page
296 ;; "Search-based Fontification" in the elisp manual. 296 ;; "Search-based Fontification" in the elisp manual.
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el
index a3300077909..d321e9c1388 100644
--- a/lisp/progmodes/etags.el
+++ b/lisp/progmodes/etags.el
@@ -2070,7 +2070,9 @@ for \\[find-tag] (which see)."
2070 (let ((comp-data (tags-completion-at-point-function))) 2070 (let ((comp-data (tags-completion-at-point-function)))
2071 (if (null comp-data) 2071 (if (null comp-data)
2072 (error "Nothing to complete") 2072 (error "Nothing to complete")
2073 (apply 'completion-in-region comp-data)))) 2073 (completion-in-region (car comp-data) (cadr comp-data)
2074 (nth 2 comp-data)
2075 (plist-get (nthcdr 3 comp-data) :predicate)))))
2074 2076
2075(dolist (x '("^No tags table in use; use .* to select one$" 2077(dolist (x '("^No tags table in use; use .* to select one$"
2076 "^There is no default tag$" 2078 "^There is no default tag$"
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 000243b05df..2c68a29dd00 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -476,7 +476,7 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'."
476 ;; so the buffer is still unmodified if there is no output. 476 ;; so the buffer is still unmodified if there is no output.
477 (cond ((and (zerop code) (buffer-modified-p)) 477 (cond ((and (zerop code) (buffer-modified-p))
478 '("finished (matches found)\n" . "matched")) 478 '("finished (matches found)\n" . "matched"))
479 ((or (= code 1) (not (buffer-modified-p))) 479 ((not (buffer-modified-p))
480 '("finished with no matches found\n" . "no match")) 480 '("finished with no matches found\n" . "no match"))
481 (t 481 (t
482 (cons msg code))) 482 (cons msg code)))
diff --git a/lisp/replace.el b/lisp/replace.el
index 70175cf205c..455e1a511e8 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -810,7 +810,7 @@ a previously found match."
810 ;; We use this alternative name, so we can use \\[occur-mode-mouse-goto]. 810 ;; We use this alternative name, so we can use \\[occur-mode-mouse-goto].
811 (define-key map [mouse-2] 'occur-mode-mouse-goto) 811 (define-key map [mouse-2] 'occur-mode-mouse-goto)
812 (define-key map "\C-c\C-c" 'occur-mode-goto-occurrence) 812 (define-key map "\C-c\C-c" 'occur-mode-goto-occurrence)
813 (define-key map "\C-x\C-q" 'occur-edit-mode) 813 (define-key map "e" 'occur-edit-mode)
814 (define-key map "\C-m" 'occur-mode-goto-occurrence) 814 (define-key map "\C-m" 'occur-mode-goto-occurrence)
815 (define-key map "o" 'occur-mode-goto-occurrence-other-window) 815 (define-key map "o" 'occur-mode-goto-occurrence-other-window)
816 (define-key map "\C-o" 'occur-mode-display-occurrence) 816 (define-key map "\C-o" 'occur-mode-display-occurrence)
@@ -864,8 +864,8 @@ Alternatively, click \\[occur-mode-mouse-goto] on an item to go to it.
864 (let ((map (make-sparse-keymap))) 864 (let ((map (make-sparse-keymap)))
865 (set-keymap-parent map text-mode-map) 865 (set-keymap-parent map text-mode-map)
866 (define-key map [mouse-2] 'occur-mode-mouse-goto) 866 (define-key map [mouse-2] 'occur-mode-mouse-goto)
867 (define-key map "\C-c\C-c" 'occur-mode-goto-occurrence) 867 (define-key map "\C-c\C-c" 'occur-cease-edit)
868 (define-key map "\C-x\C-q" 'occur-mode) 868 (define-key map "\C-o" 'occur-mode-display-occurrence)
869 (define-key map "\C-c\C-f" 'next-error-follow-minor-mode) 869 (define-key map "\C-c\C-f" 'next-error-follow-minor-mode)
870 (define-key map [menu-bar occur] (cons (purecopy "Occur") occur-menu-map)) 870 (define-key map [menu-bar occur] (cons (purecopy "Occur") occur-menu-map))
871 map) 871 map)
@@ -878,40 +878,54 @@ the originating buffer.
878 878
879To return to ordinary Occur mode, use \\[occur-mode]." 879To return to ordinary Occur mode, use \\[occur-mode]."
880 (setq buffer-read-only nil) 880 (setq buffer-read-only nil)
881 (add-hook 'after-change-functions 'occur-after-change-function nil t)) 881 (add-hook 'after-change-functions 'occur-after-change-function nil t)
882 (message (substitute-command-keys
883 "Editing: Type \\[occur-cease-edit] to return to Occur mode.")))
884
885(defun occur-cease-edit ()
886 "Switch from Occur Edit mode to Occur mode."
887 (interactive)
888 (when (derived-mode-p 'occur-edit-mode)
889 (occur-mode)
890 (message "Switching to Occur mode.")))
882 891
883(defun occur-after-change-function (beg end length) 892(defun occur-after-change-function (beg end length)
884 (save-excursion 893 (save-excursion
885 (goto-char beg) 894 (goto-char beg)
886 (let* ((m (get-text-property (line-beginning-position) 'occur-target)) 895 (let* ((line-beg (line-beginning-position))
896 (m (get-text-property line-beg 'occur-target))
887 (buf (marker-buffer m)) 897 (buf (marker-buffer m))
888 (col (current-column))) 898 col)
889 (when (= length 0) 899 (when (and (get-text-property line-beg 'occur-prefix)
890 ;; Apply occur-target property to inserted (e.g. yanked) text. 900 (not (get-text-property end 'occur-prefix)))
891 (put-text-property beg end 'occur-target m) 901 (when (= length 0)
892 ;; Did we insert a newline? Occur Edit mode can't create new 902 ;; Apply occur-target property to inserted (e.g. yanked) text.
893 ;; Occur entries; just discard everything after the newline. 903 (put-text-property beg end 'occur-target m)
894 (save-excursion 904 ;; Did we insert a newline? Occur Edit mode can't create new
895 (and (search-forward "\n" end t) 905 ;; Occur entries; just discard everything after the newline.
896 (delete-region (1- (point)) end)))) 906 (save-excursion
897 (let ((line (- (line-number-at-pos) 907 (and (search-forward "\n" end t)
898 (line-number-at-pos (window-start)))) 908 (delete-region (1- (point)) end))))
899 (readonly (with-current-buffer buf buffer-read-only)) 909 (let* ((line (- (line-number-at-pos)
900 (win (or (get-buffer-window buf) 910 (line-number-at-pos (window-start))))
901 (display-buffer buf t))) 911 (readonly (with-current-buffer buf buffer-read-only))
902 (text (save-excursion 912 (win (or (get-buffer-window buf)
903 (forward-line 0) 913 (display-buffer buf t)))
904 (search-forward ":" nil t) 914 (line-end (line-end-position))
905 (setq col (- col (current-column))) 915 (text (save-excursion
906 (buffer-substring-no-properties (point) (line-end-position))))) 916 (goto-char (next-single-property-change
907 (with-selected-window win 917 line-beg 'occur-prefix nil
908 (goto-char m) 918 line-end))
909 (recenter line) 919 (setq col (- (point) line-beg))
910 (if readonly 920 (buffer-substring-no-properties (point) line-end))))
911 (message "Buffer `%s' is read only." buf) 921 (with-selected-window win
912 (delete-region (line-beginning-position) (line-end-position)) 922 (goto-char m)
913 (insert text)) 923 (recenter line)
914 (move-to-column col)))))) 924 (if readonly
925 (message "Buffer `%s' is read only." buf)
926 (delete-region (line-beginning-position) (line-end-position))
927 (insert text))
928 (move-to-column col)))))))
915 929
916 930
917(defun occur-revert-function (_ignore1 _ignore2) 931(defun occur-revert-function (_ignore1 _ignore2)
@@ -1336,9 +1350,12 @@ See also `multi-occur'."
1336 (when prefix-face 1350 (when prefix-face
1337 `(font-lock-face prefix-face)) 1351 `(font-lock-face prefix-face))
1338 `(occur-prefix t mouse-face (highlight) 1352 `(occur-prefix t mouse-face (highlight)
1339 occur-target ,marker follow-link t 1353 ;; Allow insertion of text at
1340 read-only t 1354 ;; the end of the prefix (for
1341 help-echo "mouse-2: go to this occurrence")))) 1355 ;; Occur Edit mode).
1356 front-sticky t rear-nonsticky t
1357 occur-target ,marker follow-link t
1358 help-echo "mouse-2: go to this occurrence"))))
1342 (match-str 1359 (match-str
1343 ;; We don't put `mouse-face' on the newline, 1360 ;; We don't put `mouse-face' on the newline,
1344 ;; because that loses. And don't put it 1361 ;; because that loses. And don't put it
diff --git a/lisp/simple.el b/lisp/simple.el
index 74343496c72..4db0aae25ad 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -4134,7 +4134,9 @@ a semipermanent goal column for this command.
4134Then instead of trying to move exactly vertically (or as close as possible), 4134Then instead of trying to move exactly vertically (or as close as possible),
4135this command moves to the specified goal column (or as close as possible). 4135this command moves to the specified goal column (or as close as possible).
4136The goal column is stored in the variable `goal-column', which is nil 4136The goal column is stored in the variable `goal-column', which is nil
4137when there is no goal column. 4137when there is no goal column. Note that setting `goal-column'
4138overrides `line-move-visual' and causes this command to move by buffer
4139lines rather than by display lines.
4138 4140
4139If you are thinking of using this in a Lisp program, consider 4141If you are thinking of using this in a Lisp program, consider
4140using `forward-line' instead. It is usually easier to use 4142using `forward-line' instead. It is usually easier to use
@@ -4172,7 +4174,9 @@ a semipermanent goal column for this command.
4172Then instead of trying to move exactly vertically (or as close as possible), 4174Then instead of trying to move exactly vertically (or as close as possible),
4173this command moves to the specified goal column (or as close as possible). 4175this command moves to the specified goal column (or as close as possible).
4174The goal column is stored in the variable `goal-column', which is nil 4176The goal column is stored in the variable `goal-column', which is nil
4175when there is no goal column. 4177when there is no goal column. Note that setting `goal-column'
4178overrides `line-move-visual' and causes this command to move by buffer
4179lines rather than by display lines.
4176 4180
4177If you are thinking of using this in a Lisp program, consider using 4181If you are thinking of using this in a Lisp program, consider using
4178`forward-line' with a negative argument instead. It is usually easier 4182`forward-line' with a negative argument instead. It is usually easier
@@ -4196,7 +4200,8 @@ This has no effect when `line-move-visual' is non-nil."
4196 :group 'editing-basics) 4200 :group 'editing-basics)
4197 4201
4198(defcustom goal-column nil 4202(defcustom goal-column nil
4199 "Semipermanent goal column for vertical motion, as set by \\[set-goal-column], or nil." 4203 "Semipermanent goal column for vertical motion, as set by \\[set-goal-column], or nil.
4204A non-nil setting overrides `line-move-visual', which see."
4200 :type '(choice integer 4205 :type '(choice integer
4201 (const :tag "None" nil)) 4206 (const :tag "None" nil))
4202 :group 'editing-basics) 4207 :group 'editing-basics)
@@ -4226,7 +4231,9 @@ Outline mode sets this."
4226This movement is based on where the cursor is displayed on the 4231This movement is based on where the cursor is displayed on the
4227screen, instead of relying on buffer contents alone. It takes 4232screen, instead of relying on buffer contents alone. It takes
4228into account variable-width characters and line continuation. 4233into account variable-width characters and line continuation.
4229If nil, `line-move' moves point by logical lines." 4234If nil, `line-move' moves point by logical lines.
4235A non-nil setting of `goal-column' overrides the value of this variable
4236and forces movement by logical lines."
4230 :type 'boolean 4237 :type 'boolean
4231 :group 'editing-basics 4238 :group 'editing-basics
4232 :version "23.1") 4239 :version "23.1")
@@ -4303,7 +4310,7 @@ If nil, `line-move' moves point by logical lines."
4303 (not executing-kbd-macro) 4310 (not executing-kbd-macro)
4304 (line-move-partial arg noerror to-end)) 4311 (line-move-partial arg noerror to-end))
4305 (set-window-vscroll nil 0 t) 4312 (set-window-vscroll nil 0 t)
4306 (if line-move-visual 4313 (if (and line-move-visual (not goal-column))
4307 (line-move-visual arg noerror) 4314 (line-move-visual arg noerror)
4308 (line-move-1 arg noerror to-end)))) 4315 (line-move-1 arg noerror to-end))))
4309 4316
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index 5521cfd3de8..b76b0a303df 100644
--- a/lisp/textmodes/ispell.el
+++ b/lisp/textmodes/ispell.el
@@ -1723,7 +1723,11 @@ quit spell session exited."
1723 (extent-at start) 1723 (extent-at start)
1724 (and (fboundp 'delete-extent) 1724 (and (fboundp 'delete-extent)
1725 (delete-extent (extent-at start))))) 1725 (delete-extent (extent-at start)))))
1726 ((null poss) (message "Error in ispell process")) 1726 ((null poss)
1727 (message "Error checking word %s using %s with %s dictionary"
1728 (funcall ispell-format-word-function word)
1729 (file-name-nondirectory ispell-program-name)
1730 (or ispell-current-dictionary "default")))
1727 (ispell-check-only ; called from ispell minor mode. 1731 (ispell-check-only ; called from ispell minor mode.
1728 (if (fboundp 'make-extent) 1732 (if (fboundp 'make-extent)
1729 (if (fboundp 'set-extent-property) 1733 (if (fboundp 'set-extent-property)
@@ -3034,7 +3038,7 @@ Must call after `ispell-buffer-local-parsing' due to dependence on mode."
3034 (while (looking-at "[ \t\n]*\\[") (forward-sexp)) 3038 (while (looking-at "[ \t\n]*\\[") (forward-sexp))
3035 (forward-sexp (or arg 1))) 3039 (forward-sexp (or arg 1)))
3036 (error 3040 (error
3037 (message "error skipping s-expressions at point %d." (point)) 3041 (message "Error skipping s-expressions at point %d." (point))
3038 (beep) 3042 (beep)
3039 (sit-for 2)))) 3043 (sit-for 2))))
3040 3044
diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el
index 4eff3244cdc..3ab1caf2864 100644
--- a/lisp/vc/vc-bzr.el
+++ b/lisp/vc/vc-bzr.el
@@ -964,23 +964,23 @@ stream. Standard error output is discarded."
964(defvar vc-bzr-shelve-menu-map 964(defvar vc-bzr-shelve-menu-map
965 (let ((map (make-sparse-keymap "Bzr Shelve"))) 965 (let ((map (make-sparse-keymap "Bzr Shelve")))
966 (define-key map [de] 966 (define-key map [de]
967 '(menu-item "Delete shelf" vc-bzr-shelve-delete-at-point 967 '(menu-item "Delete Shelf" vc-bzr-shelve-delete-at-point
968 :help "Delete the current shelf")) 968 :help "Delete the current shelf"))
969 (define-key map [ap] 969 (define-key map [ap]
970 '(menu-item "Apply and keep shelf" vc-bzr-shelve-apply-and-keep-at-point 970 '(menu-item "Apply and Keep Shelf" vc-bzr-shelve-apply-and-keep-at-point
971 :help "Apply the current shelf and keep it")) 971 :help "Apply the current shelf and keep it"))
972 (define-key map [po] 972 (define-key map [po]
973 '(menu-item "Apply and remove shelf (pop)" vc-bzr-shelve-apply-at-point 973 '(menu-item "Apply and Remove Shelf (Pop)" vc-bzr-shelve-apply-at-point
974 :help "Apply the current shelf and remove it")) 974 :help "Apply the current shelf and remove it"))
975 (define-key map [sh] 975 (define-key map [sh]
976 '(menu-item "Show shelve" vc-bzr-shelve-show-at-point 976 '(menu-item "Show Shelve" vc-bzr-shelve-show-at-point
977 :help "Show the contents of the current shelve")) 977 :help "Show the contents of the current shelve"))
978 map)) 978 map))
979 979
980(defvar vc-bzr-extra-menu-map 980(defvar vc-bzr-extra-menu-map
981 (let ((map (make-sparse-keymap))) 981 (let ((map (make-sparse-keymap)))
982 (define-key map [bzr-sn] 982 (define-key map [bzr-sn]
983 '(menu-item "Shelve a snapshot" vc-bzr-shelve-snapshot 983 '(menu-item "Shelve a Snapshot" vc-bzr-shelve-snapshot
984 :help "Shelve the current state of the tree and keep the current state")) 984 :help "Shelve the current state of the tree and keep the current state"))
985 (define-key map [bzr-sh] 985 (define-key map [bzr-sh]
986 '(menu-item "Shelve..." vc-bzr-shelve 986 '(menu-item "Shelve..." vc-bzr-shelve
diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el
index 5f3a9a21b59..ed16ee9f6f8 100644
--- a/lisp/vc/vc-dir.el
+++ b/lisp/vc/vc-dir.el
@@ -125,15 +125,15 @@ See `run-hooks'."
125 :enable (not (vc-dir-busy)) 125 :enable (not (vc-dir-busy))
126 :help "Refresh the contents of the directory buffer")) 126 :help "Refresh the contents of the directory buffer"))
127 (define-key map [remup] 127 (define-key map [remup]
128 '(menu-item "Hide up-to-date" vc-dir-hide-up-to-date 128 '(menu-item "Hide Up-to-date" vc-dir-hide-up-to-date
129 :help "Hide up-to-date items from display")) 129 :help "Hide up-to-date items from display"))
130 ;; Movement. 130 ;; Movement.
131 (define-key map [sepmv] '("--")) 131 (define-key map [sepmv] '("--"))
132 (define-key map [next-line] 132 (define-key map [next-line]
133 '(menu-item "Next line" vc-dir-next-line 133 '(menu-item "Next Line" vc-dir-next-line
134 :help "Go to the next line" :keys "n")) 134 :help "Go to the next line" :keys "n"))
135 (define-key map [previous-line] 135 (define-key map [previous-line]
136 '(menu-item "Previous line" vc-dir-previous-line 136 '(menu-item "Previous Line" vc-dir-previous-line
137 :help "Go to the previous line")) 137 :help "Go to the previous line"))
138 ;; Marking. 138 ;; Marking.
139 (define-key map [sepmrk] '("--")) 139 (define-key map [sepmrk] '("--"))
@@ -142,7 +142,7 @@ See `run-hooks'."
142 :help "Unmark all files that are in the same state as the current file\ 142 :help "Unmark all files that are in the same state as the current file\
143\nWith prefix argument unmark all files")) 143\nWith prefix argument unmark all files"))
144 (define-key map [unmark-previous] 144 (define-key map [unmark-previous]
145 '(menu-item "Unmark previous " vc-dir-unmark-file-up 145 '(menu-item "Unmark Previous " vc-dir-unmark-file-up
146 :help "Move to the previous line and unmark the file")) 146 :help "Move to the previous line and unmark the file"))
147 147
148 (define-key map [mark-all] 148 (define-key map [mark-all]
@@ -171,10 +171,10 @@ See `run-hooks'."
171 '(menu-item "Isearch Files..." vc-dir-isearch 171 '(menu-item "Isearch Files..." vc-dir-isearch
172 :help "Incremental search a string in the marked files")) 172 :help "Incremental search a string in the marked files"))
173 (define-key map [open-other] 173 (define-key map [open-other]
174 '(menu-item "Open in other window" vc-dir-find-file-other-window 174 '(menu-item "Open in Other Window" vc-dir-find-file-other-window
175 :help "Find the file on the current line, in another window")) 175 :help "Find the file on the current line, in another window"))
176 (define-key map [open] 176 (define-key map [open]
177 '(menu-item "Open file" vc-dir-find-file 177 '(menu-item "Open File" vc-dir-find-file
178 :help "Find the file on the current line")) 178 :help "Find the file on the current line"))
179 (define-key map [sepvcdet] '("--")) 179 (define-key map [sepvcdet] '("--"))
180 ;; FIXME: This needs a key binding. And maybe a better name 180 ;; FIXME: This needs a key binding. And maybe a better name
@@ -203,10 +203,10 @@ See `run-hooks'."
203 ;; VC commands. 203 ;; VC commands.
204 (define-key map [sepvccmd] '("--")) 204 (define-key map [sepvccmd] '("--"))
205 (define-key map [update] 205 (define-key map [update]
206 '(menu-item "Update to latest version" vc-update 206 '(menu-item "Update to Latest Version" vc-update
207 :help "Update the current fileset's files to their tip revisions")) 207 :help "Update the current fileset's files to their tip revisions"))
208 (define-key map [revert] 208 (define-key map [revert]
209 '(menu-item "Revert to base version" vc-revert 209 '(menu-item "Revert to Base Version" vc-revert
210 :help "Revert working copies of the selected fileset to their repository contents.")) 210 :help "Revert working copies of the selected fileset to their repository contents."))
211 (define-key map [next-action] 211 (define-key map [next-action]
212 ;; FIXME: This really really really needs a better name! 212 ;; FIXME: This really really really needs a better name!
diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index 1bb246fea0b..e9cbeeeb40a 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -486,16 +486,16 @@ or an empty string if none."
486(defvar vc-git-stash-menu-map 486(defvar vc-git-stash-menu-map
487 (let ((map (make-sparse-keymap "Git Stash"))) 487 (let ((map (make-sparse-keymap "Git Stash")))
488 (define-key map [de] 488 (define-key map [de]
489 '(menu-item "Delete stash" vc-git-stash-delete-at-point 489 '(menu-item "Delete Stash" vc-git-stash-delete-at-point
490 :help "Delete the current stash")) 490 :help "Delete the current stash"))
491 (define-key map [ap] 491 (define-key map [ap]
492 '(menu-item "Apply stash" vc-git-stash-apply-at-point 492 '(menu-item "Apply Stash" vc-git-stash-apply-at-point
493 :help "Apply the current stash and keep it in the stash list")) 493 :help "Apply the current stash and keep it in the stash list"))
494 (define-key map [po] 494 (define-key map [po]
495 '(menu-item "Apply and remove stash (pop)" vc-git-stash-pop-at-point 495 '(menu-item "Apply and Remove Stash (Pop)" vc-git-stash-pop-at-point
496 :help "Apply the current stash and remove it")) 496 :help "Apply the current stash and remove it"))
497 (define-key map [sh] 497 (define-key map [sh]
498 '(menu-item "Show stash" vc-git-stash-show-at-point 498 '(menu-item "Show Stash" vc-git-stash-show-at-point
499 :help "Show the contents of the current stash")) 499 :help "Show the contents of the current stash"))
500 map)) 500 map))
501 501
@@ -933,7 +933,7 @@ or BRANCH^ (where \"^\" can be repeated)."
933 '(menu-item "Git grep..." vc-git-grep 933 '(menu-item "Git grep..." vc-git-grep
934 :help "Run the `git grep' command")) 934 :help "Run the `git grep' command"))
935 (define-key map [git-sn] 935 (define-key map [git-sn]
936 '(menu-item "Stash a snapshot" vc-git-stash-snapshot 936 '(menu-item "Stash a Snapshot" vc-git-stash-snapshot
937 :help "Stash the current state of the tree and keep the current state")) 937 :help "Stash the current state of the tree and keep the current state"))
938 (define-key map [git-st] 938 (define-key map [git-st]
939 '(menu-item "Create Stash..." vc-git-stash 939 '(menu-item "Create Stash..." vc-git-stash
diff --git a/lisp/window.el b/lisp/window.el
index c0e8781aab0..e0be98d5bd1 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -158,7 +158,7 @@ An application may bind this to a non-nil value around calls to
158these functions to inhibit processing of window parameters.") 158these functions to inhibit processing of window parameters.")
159 159
160(defconst window-safe-min-height 1 160(defconst window-safe-min-height 1
161 "The absolut minimum number of lines of a window. 161 "The absolute minimum number of lines of a window.
162Anything less might crash Emacs.") 162Anything less might crash Emacs.")
163 163
164(defcustom window-min-height 4 164(defcustom window-min-height 4
@@ -177,12 +177,12 @@ shorter, explictly specify the SIZE argument of that function."
177 :group 'windows) 177 :group 'windows)
178 178
179(defconst window-safe-min-width 2 179(defconst window-safe-min-width 2
180 "The absolut minimum number of columns of a window. 180 "The absolute minimum number of columns of a window.
181Anything less might crash Emacs.") 181Anything less might crash Emacs.")
182 182
183(defcustom window-min-width 10 183(defcustom window-min-width 10
184 "The minimum number of columns of any window. 184 "The minimum number of columns of any window.
185The value has to accomodate margins, fringes, or scrollbars if 185The value has to accommodate margins, fringes, or scrollbars if
186present. A value less than `window-safe-min-width' is ignored. 186present. A value less than `window-safe-min-width' is ignored.
187The value of this variable is honored when windows are resized or 187The value of this variable is honored when windows are resized or
188split. 188split.
@@ -3772,7 +3772,7 @@ subwindows can get as small as `window-safe-min-height' and
3772 ;; issues - so IGNORE equal 'safe might not always produce the 3772 ;; issues - so IGNORE equal 'safe might not always produce the
3773 ;; minimum possible state. But such configurations hardly make 3773 ;; minimum possible state. But such configurations hardly make
3774 ;; sense anyway. 3774 ;; sense anyway.
3775 (error "Window %s too small to accomodate state" window) 3775 (error "Window %s too small to accommodate state" window)
3776 (setq state (cdr state)) 3776 (setq state (cdr state))
3777 (setq window-state-put-list nil) 3777 (setq window-state-put-list nil)
3778 ;; Work on the windows of a temporary buffer to make sure that 3778 ;; Work on the windows of a temporary buffer to make sure that
diff --git a/lisp/woman.el b/lisp/woman.el
index 75a36d6ac36..7b530d1004f 100644
--- a/lisp/woman.el
+++ b/lisp/woman.el
@@ -3954,6 +3954,8 @@ Optional argument NUMERIC, if non-nil, means the argument is numeric."
3954 ;; Done like this to preserve any text properties of the `\' 3954 ;; Done like this to preserve any text properties of the `\'
3955 (while (search-forward "\\" to t) 3955 (while (search-forward "\\" to t)
3956 (let ((c (following-char))) 3956 (let ((c (following-char)))
3957 ;; Some other escapes, such as \f, are handled in
3958 ;; `woman0-process-escapes'.
3957 (cond ((eq c ?') ; \' -> ' 3959 (cond ((eq c ?') ; \' -> '
3958 (delete-char -1) 3960 (delete-char -1)
3959 (cond (numeric ; except in numeric args, \' -> ` 3961 (cond (numeric ; except in numeric args, \' -> `
@@ -3967,12 +3969,7 @@ Optional argument NUMERIC, if non-nil, means the argument is numeric."
3967 (insert "\t")) 3969 (insert "\t"))
3968 ((and numeric 3970 ((and numeric
3969 (memq c '(?w ?n ?h)))) ; leave \w, \n, \h (?????) 3971 (memq c '(?w ?n ?h)))) ; leave \w, \n, \h (?????)
3970 ((eq c ?l) (woman-horizontal-line)) 3972 ((eq c ?l) (woman-horizontal-line)))))
3971 (t
3972 ;; \? -> ? where ? is any remaining character
3973 (WoMan-warn "Escape ignored: \\%c -> %c" c c)
3974 (delete-char -1))
3975 )))
3976 (goto-char from) 3973 (goto-char from)
3977 ;; Process non-default tab settings: 3974 ;; Process non-default tab settings:
3978 (cond (tab-stop-list 3975 (cond (tab-stop-list
diff --git a/src/.gdbinit b/src/.gdbinit
index 0f51a00ea76..b908ef005d6 100644
--- a/src/.gdbinit
+++ b/src/.gdbinit
@@ -483,83 +483,83 @@ end
483define pgx 483define pgx
484 set $g = $arg0 484 set $g = $arg0
485 # CHAR_GLYPH 485 # CHAR_GLYPH
486 if ($g->type == 0) 486 if ($g.type == 0)
487 if ($g->u.ch >= ' ' && $g->u.ch < 127) 487 if ($g.u.ch >= ' ' && $g.u.ch < 127)
488 printf "CHAR[%c]", $g->u.ch 488 printf "CHAR[%c]", $g.u.ch
489 else 489 else
490 printf "CHAR[0x%x]", $g->u.ch 490 printf "CHAR[0x%x]", $g.u.ch
491 end 491 end
492 end 492 end
493 # COMPOSITE_GLYPH 493 # COMPOSITE_GLYPH
494 if ($g->type == 1) 494 if ($g.type == 1)
495 printf "COMP[%d (%d..%d)]", $g->u.cmp.id, $g->slice.cmp.from, $g->slice.cmp.to 495 printf "COMP[%d (%d..%d)]", $g.u.cmp.id, $g.slice.cmp.from, $g.slice.cmp.to
496 end 496 end
497 # GLYPHLESS_GLYPH 497 # GLYPHLESS_GLYPH
498 if ($g->type == 2) 498 if ($g.type == 2)
499 printf "GLYPHLESS[" 499 printf "GLYPHLESS["
500 if ($g->u.glyphless.method == 0) 500 if ($g.u.glyphless.method == 0)
501 printf "THIN]" 501 printf "THIN]"
502 end 502 end
503 if ($g->u.glyphless.method == 1) 503 if ($g.u.glyphless.method == 1)
504 printf "EMPTY]" 504 printf "EMPTY]"
505 end 505 end
506 if ($g->u.glyphless.method == 2) 506 if ($g.u.glyphless.method == 2)
507 printf "ACRO]" 507 printf "ACRO]"
508 end 508 end
509 if ($g->u.glyphless.method == 3) 509 if ($g.u.glyphless.method == 3)
510 printf "HEX]" 510 printf "HEX]"
511 end 511 end
512 end 512 end
513 # IMAGE_GLYPH 513 # IMAGE_GLYPH
514 if ($g->type == 3) 514 if ($g.type == 3)
515 printf "IMAGE[%d]", $g->u.img_id 515 printf "IMAGE[%d]", $g.u.img_id
516 end 516 end
517 # STRETCH_GLYPH 517 # STRETCH_GLYPH
518 if ($g->type == 4) 518 if ($g.type == 4)
519 printf "STRETCH[%d+%d]", $g->u.stretch.height, $g->u.stretch.ascent 519 printf "STRETCH[%d+%d]", $g.u.stretch.height, $g.u.stretch.ascent
520 end 520 end
521 xgettype ($g->object) 521 xgettype ($g.object)
522 if ($type == Lisp_String) 522 if ($type == Lisp_String)
523 printf " str=%x[%d]", $g->object, $g->charpos 523 printf " str=%x[%d]", $g.object, $g.charpos
524 else 524 else
525 printf " pos=%d", $g->charpos 525 printf " pos=%d", $g.charpos
526 end 526 end
527 # For characters, print their resolved level and bidi type 527 # For characters, print their resolved level and bidi type
528 if ($g->type == 0) 528 if ($g.type == 0)
529 printf " blev=%d,btyp=", $g->resolved_level 529 printf " blev=%d,btyp=", $g.resolved_level
530 pbiditype $g->bidi_type 530 pbiditype $g.bidi_type
531 end 531 end
532 printf " w=%d a+d=%d+%d", $g->pixel_width, $g->ascent, $g->descent 532 printf " w=%d a+d=%d+%d", $g.pixel_width, $g.ascent, $g.descent
533 # If not DEFAULT_FACE_ID 533 # If not DEFAULT_FACE_ID
534 if ($g->face_id != 0) 534 if ($g.face_id != 0)
535 printf " face=%d", $g->face_id 535 printf " face=%d", $g.face_id
536 end 536 end
537 if ($g->voffset) 537 if ($g.voffset)
538 printf " vof=%d", $g->voffset 538 printf " vof=%d", $g.voffset
539 end 539 end
540 if ($g->multibyte_p) 540 if ($g.multibyte_p)
541 printf " MB" 541 printf " MB"
542 end 542 end
543 if ($g->padding_p) 543 if ($g.padding_p)
544 printf " PAD" 544 printf " PAD"
545 end 545 end
546 if ($g->glyph_not_available_p) 546 if ($g.glyph_not_available_p)
547 printf " N/A" 547 printf " N/A"
548 end 548 end
549 if ($g->overlaps_vertically_p) 549 if ($g.overlaps_vertically_p)
550 printf " OVL" 550 printf " OVL"
551 end 551 end
552 if ($g->avoid_cursor_p) 552 if ($g.avoid_cursor_p)
553 printf " AVOID" 553 printf " AVOID"
554 end 554 end
555 if ($g->left_box_line_p) 555 if ($g.left_box_line_p)
556 printf " [" 556 printf " ["
557 end 557 end
558 if ($g->right_box_line_p) 558 if ($g.right_box_line_p)
559 printf " ]" 559 printf " ]"
560 end 560 end
561 if ($g->slice.img.x || $g->slice.img.y || $g->slice.img.width || $g->slice.img.height) 561 if ($g.slice.img.x || $g.slice.img.y || $g.slice.img.width || $g.slice.img.height)
562 printf " slice=%d,%d,%d,%d" ,$g->slice.img.x, $g->slice.img.y, $g->slice.img.width, $g->slice.img.height 562 printf " slice=%d,%d,%d,%d" ,$g.slice.img.x, $g.slice.img.y, $g.slice.img.width, $g.slice.img.height
563 end 563 end
564 printf "\n" 564 printf "\n"
565end 565end
diff --git a/src/ChangeLog b/src/ChangeLog
index 15281f47438..12a45918e87 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,94 @@
12011-09-19 Lars Magne Ingebrigtsen <larsi@gnus.org>
2
3 * lread.c (Fread_from_string): Document what FINAL-STRING-INDEX is
4 (bug#9493).
5
62011-09-18 Chong Yidong <cyd@stupidchicken.com>
7
8 * xfns.c (Fx_create_frame): Handle the bitmapIcon resource as
9 boolean (Bug#9154).
10
112011-09-18 Eli Zaretskii <eliz@gnu.org>
12
13 * xdisp.c (display_line): Record maximum and minimum buffer
14 positions even if no glyphs were produced (e.g., by a zero-width
15 stretch). Fixes bug#9530 on a TTY. Under word-wrap, don't record
16 buffer positions that will be removed from the glyph row because
17 they don't fit.
18 (produce_stretch_glyph): Fix a bug in :align-to on a TTY when the
19 column is beyond frame width: don't subtract 1 "pixel" when
20 computing width of the stretch.
21 (reseat_at_next_visible_line_start): Undo the change made on
22 2011-09-17 that saved paragraph information and restored it after
23 the call to `reseat'. (Bug#9545)
24
252011-09-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
26
27 * xdisp.c (expose_window): Save original value of phys_cursor_on_p
28 and turn window cursor on if cleared (Bug#9415).
29
302011-09-18 Andreas Schwab <schwab@linux-m68k.org>
31
32 * search.c (boyer_moore): Take unibyte characters from pattern
33 literally. (Bug#9458)
34
352011-09-18 Eli Zaretskii <eliz@gnu.org>
36
37 * xdisp.c (reseat_at_next_visible_line_start): Fix last change.
38
392011-09-18 Paul Eggert <eggert@cs.ucla.edu>
40
41 Fix minor problem found by static checking.
42 * xdisp.c (reseat_at_next_visible_line_start): Mark locals as
43 initialized, to pacify gcc -Wuninitialized.
44
45 * fileio.c: Report proper errno when syscall falls.
46 (Finsert_file_contents): Save and restore errno,
47 so that report_file_error outputs the correct diagnostic.
48 (Fwrite_region) [CLASH_DETECTION]: Likewise.
49
502011-09-18 Eli Zaretskii <eliz@gnu.org>
51
52 * .gdbinit (pgx): Fix references to fields of `struct glyph'.
53
542011-09-17 Eli Zaretskii <eliz@gnu.org>
55
56 * xdisp.c (produce_stretch_glyph): Another fix for changes made on
57 2011-08-30T17:32:44Z!eliz@gnu.org. (Bug#9530)
58
592011-09-17 Eli Zaretskii <eliz@gnu.org>
60
61 * xdisp.c (reseat_at_next_visible_line_start): Keep information
62 about the current paragraph and restore it after the call to
63 reseat.
64
65 * bidi.c (MAX_PARAGRAPH_SEARCH): New macro.
66 (bidi_find_paragraph_start): Search back for paragraph beginning
67 at most MAX_PARAGRAPH_SEARCH lines; if not found, return BEGV_BYTE.
68 (bidi_move_to_visually_next): Only trigger paragraph-related
69 computations when the last character is a newline or at EOB, not
70 just any NEUTRAL_B. (Bug#9470)
71
72 * xdisp.c (set_cursor_from_row): Don't invoke special treatment of
73 truncated lines if point is covered by a display string. (Bug#9524)
74
752011-09-16 Paul Eggert <eggert@cs.ucla.edu>
76
77 * xselect.c: Relax test for outgoing X longs (Bug#9498).
78 (cons_to_x_long): New function.
79 (lisp_data_to_selection_data): Use it. Correct the test for
80 short-versus-long data; it was negated. Break out of vector
81 loop, for efficiency, when a long datum is discovered.
82
832011-09-16 Stefan Monnier <monnier@iro.umontreal.ca>
84
85 * eval.c (Fquote): Document its non-consing behavior (bug#9482).
86
872011-09-16 Eli Zaretskii <eliz@gnu.org>
88
89 * image.c (tiff_handler): Work around a bug in MinGW GCC 3.x (see
90 GCC PR/17406) by declaring this function with external scope.
91
12011-09-15 Paul Eggert <eggert@cs.ucla.edu> 922011-09-15 Paul Eggert <eggert@cs.ucla.edu>
2 93
3 * editfns.c (Fformat): Fix bug in text-property fix (Bug#9514). 94 * editfns.c (Fformat): Fix bug in text-property fix (Bug#9514).
@@ -1281,7 +1372,7 @@
1281 underline, overline, and strike-through. 1372 underline, overline, and strike-through.
1282 (ns_dumpglyphs_image, ns_dumpglyphs_stretch): Add call to 1373 (ns_dumpglyphs_image, ns_dumpglyphs_stretch): Add call to
1283 ns_draw_text_decoration. Change treatment of cursor drawing to 1374 ns_draw_text_decoration. Change treatment of cursor drawing to
1284 accomodate underlining, etc. 1375 accommodate underlining, etc.
1285 1376
12862011-07-28 Eli Zaretskii <eliz@gnu.org> 13772011-07-28 Eli Zaretskii <eliz@gnu.org>
1287 1378
diff --git a/src/bidi.c b/src/bidi.c
index bb29647ea88..3efdc1590df 100644
--- a/src/bidi.c
+++ b/src/bidi.c
@@ -1071,15 +1071,25 @@ bidi_at_paragraph_end (EMACS_INT charpos, EMACS_INT bytepos)
1071 return val; 1071 return val;
1072} 1072}
1073 1073
1074/* On my 2005-vintage machine, searching back for paragraph start
1075 takes ~1 ms per line. And bidi_paragraph_init is called 4 times
1076 when user types C-p. The number below limits each call to
1077 bidi_paragraph_init to about 10 ms. */
1078#define MAX_PARAGRAPH_SEARCH 7500
1079
1074/* Find the beginning of this paragraph by looking back in the buffer. 1080/* Find the beginning of this paragraph by looking back in the buffer.
1075 Value is the byte position of the paragraph's beginning. */ 1081 Value is the byte position of the paragraph's beginning, or
1082 BEGV_BYTE if paragraph_start_re is still not found after looking
1083 back MAX_PARAGRAPH_SEARCH lines in the buffer. */
1076static EMACS_INT 1084static EMACS_INT
1077bidi_find_paragraph_start (EMACS_INT pos, EMACS_INT pos_byte) 1085bidi_find_paragraph_start (EMACS_INT pos, EMACS_INT pos_byte)
1078{ 1086{
1079 Lisp_Object re = paragraph_start_re; 1087 Lisp_Object re = paragraph_start_re;
1080 EMACS_INT limit = ZV, limit_byte = ZV_BYTE; 1088 EMACS_INT limit = ZV, limit_byte = ZV_BYTE;
1089 EMACS_INT n = 0;
1081 1090
1082 while (pos_byte > BEGV_BYTE 1091 while (pos_byte > BEGV_BYTE
1092 && n++ < MAX_PARAGRAPH_SEARCH
1083 && fast_looking_at (re, pos, pos_byte, limit, limit_byte, Qnil) < 0) 1093 && fast_looking_at (re, pos, pos_byte, limit, limit_byte, Qnil) < 0)
1084 { 1094 {
1085 /* FIXME: What if the paragraph beginning is covered by a 1095 /* FIXME: What if the paragraph beginning is covered by a
@@ -1089,6 +1099,8 @@ bidi_find_paragraph_start (EMACS_INT pos, EMACS_INT pos_byte)
1089 pos = find_next_newline_no_quit (pos - 1, -1); 1099 pos = find_next_newline_no_quit (pos - 1, -1);
1090 pos_byte = CHAR_TO_BYTE (pos); 1100 pos_byte = CHAR_TO_BYTE (pos);
1091 } 1101 }
1102 if (n >= MAX_PARAGRAPH_SEARCH)
1103 pos_byte = BEGV_BYTE;
1092 return pos_byte; 1104 return pos_byte;
1093} 1105}
1094 1106
@@ -2239,7 +2251,8 @@ bidi_move_to_visually_next (struct bidi_it *bidi_it)
2239 GCPRO1 (bidi_it->string.lstring); 2251 GCPRO1 (bidi_it->string.lstring);
2240 2252
2241 /* If we just passed a newline, initialize for the next line. */ 2253 /* If we just passed a newline, initialize for the next line. */
2242 if (!bidi_it->first_elt && bidi_it->orig_type == NEUTRAL_B) 2254 if (!bidi_it->first_elt
2255 && (bidi_it->ch == '\n' || bidi_it->ch == BIDI_EOB))
2243 bidi_line_init (bidi_it); 2256 bidi_line_init (bidi_it);
2244 2257
2245 /* Prepare the sentinel iterator state, and cache it. When we bump 2258 /* Prepare the sentinel iterator state, and cache it. When we bump
@@ -2320,7 +2333,8 @@ bidi_move_to_visually_next (struct bidi_it *bidi_it)
2320 reordering, whereas we _must_ know the paragraph base direction 2333 reordering, whereas we _must_ know the paragraph base direction
2321 _before_ we process the paragraph's text, since the base 2334 _before_ we process the paragraph's text, since the base
2322 direction affects the reordering. */ 2335 direction affects the reordering. */
2323 if (bidi_it->scan_dir == 1 && bidi_it->orig_type == NEUTRAL_B) 2336 if (bidi_it->scan_dir == 1
2337 && (bidi_it->ch == '\n' || bidi_it->ch == BIDI_EOB))
2324 { 2338 {
2325 /* The paragraph direction of the entire string, once 2339 /* The paragraph direction of the entire string, once
2326 determined, is in effect for the entire string. Setting the 2340 determined, is in effect for the entire string. Setting the
diff --git a/src/eval.c b/src/eval.c
index 57a273cd4aa..32b9d366fc3 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -475,6 +475,14 @@ usage: (setq [SYM VAL]...) */)
475 475
476DEFUN ("quote", Fquote, Squote, 1, UNEVALLED, 0, 476DEFUN ("quote", Fquote, Squote, 1, UNEVALLED, 0,
477 doc: /* Return the argument, without evaluating it. `(quote x)' yields `x'. 477 doc: /* Return the argument, without evaluating it. `(quote x)' yields `x'.
478Warning: `quote' does not construct its return value, but just returns
479the value that was pre-constructed by the Lisp reader (see info node
480`(elisp)Printed Representation').
481This means that '(a . b) is not identical to (cons 'a 'b): the former
482does not cons. Quoting should be reserved for constants that will
483never be modified by side-effects, unless you like self-modifying code.
484See the common pitfall in info node `(elisp)Rearrangement' for an example
485of unexpected results when a quoted object is modified.
478usage: (quote ARG) */) 486usage: (quote ARG) */)
479 (Lisp_Object args) 487 (Lisp_Object args)
480{ 488{
diff --git a/src/fileio.c b/src/fileio.c
index 08be41f9fe4..e335dcf027f 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -3187,6 +3187,7 @@ variable `last-coding-system-used' to the coding system actually used. */)
3187 Lisp_Object p; 3187 Lisp_Object p;
3188 EMACS_INT total = 0; 3188 EMACS_INT total = 0;
3189 int not_regular = 0; 3189 int not_regular = 0;
3190 int save_errno = 0;
3190 char read_buf[READ_BUF_SIZE]; 3191 char read_buf[READ_BUF_SIZE];
3191 struct coding_system coding; 3192 struct coding_system coding;
3192 char buffer[1 << 14]; 3193 char buffer[1 << 14];
@@ -3250,6 +3251,7 @@ variable `last-coding-system-used' to the coding system actually used. */)
3250#endif /* WINDOWSNT */ 3251#endif /* WINDOWSNT */
3251 { 3252 {
3252 badopen: 3253 badopen:
3254 save_errno = errno;
3253 if (NILP (visit)) 3255 if (NILP (visit))
3254 report_file_error ("Opening input file", Fcons (orig_filename, Qnil)); 3256 report_file_error ("Opening input file", Fcons (orig_filename, Qnil));
3255 st.st_mtime = -1; 3257 st.st_mtime = -1;
@@ -4281,6 +4283,7 @@ variable `last-coding-system-used' to the coding system actually used. */)
4281 && current_buffer->modtime == -1) 4283 && current_buffer->modtime == -1)
4282 { 4284 {
4283 /* If visiting nonexistent file, return nil. */ 4285 /* If visiting nonexistent file, return nil. */
4286 errno = save_errno;
4284 report_file_error ("Opening input file", Fcons (orig_filename, Qnil)); 4287 report_file_error ("Opening input file", Fcons (orig_filename, Qnil));
4285 } 4288 }
4286 4289
@@ -4618,7 +4621,9 @@ This calls `write-region-annotate-functions' at the start, and
4618 if (ret < 0) 4621 if (ret < 0)
4619 { 4622 {
4620#ifdef CLASH_DETECTION 4623#ifdef CLASH_DETECTION
4624 save_errno = errno;
4621 if (!auto_saving) unlock_file (lockname); 4625 if (!auto_saving) unlock_file (lockname);
4626 errno = save_errno;
4622#endif /* CLASH_DETECTION */ 4627#endif /* CLASH_DETECTION */
4623 UNGCPRO; 4628 UNGCPRO;
4624 report_file_error ("Lseek error", Fcons (filename, Qnil)); 4629 report_file_error ("Lseek error", Fcons (filename, Qnil));
diff --git a/src/image.c b/src/image.c
index db201d5a831..ef72745a72f 100644
--- a/src/image.c
+++ b/src/image.c
@@ -6745,10 +6745,20 @@ tiff_size_of_memory (thandle_t data)
6745 return ((tiff_memory_source *) data)->len; 6745 return ((tiff_memory_source *) data)->len;
6746} 6746}
6747 6747
6748/* GCC 3.x on x86 Windows targets has a bug that triggers an internal
6749 compiler error compiling tiff_handler, see Bugzilla bug #17406
6750 (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17406). Declaring
6751 this function as external works around that problem. */
6752#if defined (__MINGW32__) && __GNUC__ == 3
6753# define MINGW_STATIC
6754#else
6755# define MINGW_STATIC static
6756#endif
6748 6757
6749static void tiff_handler (const char *, const char *, const char *, va_list) 6758MINGW_STATIC void
6759tiff_handler (const char *, const char *, const char *, va_list)
6750 ATTRIBUTE_FORMAT_PRINTF (3, 0); 6760 ATTRIBUTE_FORMAT_PRINTF (3, 0);
6751static void 6761MINGW_STATIC void
6752tiff_handler (const char *log_format, const char *title, 6762tiff_handler (const char *log_format, const char *title,
6753 const char *format, va_list ap) 6763 const char *format, va_list ap)
6754{ 6764{
@@ -6762,6 +6772,7 @@ tiff_handler (const char *log_format, const char *title,
6762 add_to_log (log_format, build_string (title), 6772 add_to_log (log_format, build_string (title),
6763 make_string (buf, max (0, min (len, sizeof buf - 1)))); 6773 make_string (buf, max (0, min (len, sizeof buf - 1))));
6764} 6774}
6775#undef MINGW_STATIC
6765 6776
6766static void tiff_error_handler (const char *, const char *, va_list) 6777static void tiff_error_handler (const char *, const char *, va_list)
6767 ATTRIBUTE_FORMAT_PRINTF (2, 0); 6778 ATTRIBUTE_FORMAT_PRINTF (2, 0);
diff --git a/src/lread.c b/src/lread.c
index 11c4cf8c8f4..2b1b49ab2fe 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -1965,6 +1965,8 @@ STREAM or the value of `standard-input' may be:
1965DEFUN ("read-from-string", Fread_from_string, Sread_from_string, 1, 3, 0, 1965DEFUN ("read-from-string", Fread_from_string, Sread_from_string, 1, 3, 0,
1966 doc: /* Read one Lisp expression which is represented as text by STRING. 1966 doc: /* Read one Lisp expression which is represented as text by STRING.
1967Returns a cons: (OBJECT-READ . FINAL-STRING-INDEX). 1967Returns a cons: (OBJECT-READ . FINAL-STRING-INDEX).
1968FINAL-STRING-INDEX is an integer giving the position of the next
1969 remaining chararacter in STRING.
1968START and END optionally delimit a substring of STRING from which to read; 1970START and END optionally delimit a substring of STRING from which to read;
1969 they default to 0 and (length STRING) respectively. */) 1971 they default to 0 and (length STRING) respectively. */)
1970 (Lisp_Object string, Lisp_Object start, Lisp_Object end) 1972 (Lisp_Object string, Lisp_Object start, Lisp_Object end)
diff --git a/src/search.c b/src/search.c
index b3d67e6c431..a3b4e1dcbce 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1760,7 +1760,7 @@ boyer_moore (EMACS_INT n, unsigned char *base_pat,
1760 ch = -1; 1760 ch = -1;
1761 } 1761 }
1762 1762
1763 if (ch >= 0200) 1763 if (ch >= 0200 && multibyte)
1764 j = (ch & 0x3F) | 0200; 1764 j = (ch & 0x3F) | 0200;
1765 else 1765 else
1766 j = *ptr; 1766 j = *ptr;
@@ -1779,7 +1779,7 @@ boyer_moore (EMACS_INT n, unsigned char *base_pat,
1779 while (1) 1779 while (1)
1780 { 1780 {
1781 TRANSLATE (ch, inverse_trt, ch); 1781 TRANSLATE (ch, inverse_trt, ch);
1782 if (ch >= 0200) 1782 if (ch >= 0200 && multibyte)
1783 j = (ch & 0x3F) | 0200; 1783 j = (ch & 0x3F) | 0200;
1784 else 1784 else
1785 j = ch; 1785 j = ch;
diff --git a/src/xdisp.c b/src/xdisp.c
index ddbbcbb1278..e83ad96b6c8 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -13698,15 +13698,17 @@ set_cursor_from_row (struct window *w, struct glyph_row *row,
13698 /* A truncated row may not include PT among its 13698 /* A truncated row may not include PT among its
13699 character positions. Setting the cursor inside the 13699 character positions. Setting the cursor inside the
13700 scroll margin will trigger recalculation of hscroll 13700 scroll margin will trigger recalculation of hscroll
13701 in hscroll_window_tree. */ 13701 in hscroll_window_tree. But if a display string
13702 || (row->truncated_on_left_p && pt_old < bpos_min) 13702 covers point, defer to the string-handling code
13703 || (row->truncated_on_right_p && pt_old > bpos_max) 13703 below to figure this out. */
13704 /* Zero-width characters produce no glyphs. */
13705 || (!string_seen 13704 || (!string_seen
13706 && !empty_line_p 13705 && ((row->truncated_on_left_p && pt_old < bpos_min)
13707 && (row->reversed_p 13706 || (row->truncated_on_right_p && pt_old > bpos_max)
13708 ? glyph_after > glyphs_end 13707 /* Zero-width characters produce no glyphs. */
13709 : glyph_after < glyphs_end))) 13708 || (!empty_line_p
13709 && (row->reversed_p
13710 ? glyph_after > glyphs_end
13711 : glyph_after < glyphs_end)))))
13710 { 13712 {
13711 cursor = glyph_after; 13713 cursor = glyph_after;
13712 x = -1; 13714 x = -1;
@@ -18766,11 +18768,6 @@ display_line (struct it *it)
18766 it->current_x = new_x; 18768 it->current_x = new_x;
18767 it->continuation_lines_width += new_x; 18769 it->continuation_lines_width += new_x;
18768 ++it->hpos; 18770 ++it->hpos;
18769 /* Record the maximum and minimum buffer
18770 positions seen so far in glyphs that will be
18771 displayed by this row. */
18772 if (it->bidi_p)
18773 RECORD_MAX_MIN_POS (it);
18774 if (i == nglyphs - 1) 18771 if (i == nglyphs - 1)
18775 { 18772 {
18776 /* If line-wrap is on, check if a previous 18773 /* If line-wrap is on, check if a previous
@@ -18785,6 +18782,11 @@ display_line (struct it *it)
18785 || IT_DISPLAYING_WHITESPACE (it))) 18782 || IT_DISPLAYING_WHITESPACE (it)))
18786 goto back_to_wrap; 18783 goto back_to_wrap;
18787 18784
18785 /* Record the maximum and minimum buffer
18786 positions seen so far in glyphs that will be
18787 displayed by this row. */
18788 if (it->bidi_p)
18789 RECORD_MAX_MIN_POS (it);
18788 set_iterator_to_next (it, 1); 18790 set_iterator_to_next (it, 1);
18789 if (IT_OVERFLOW_NEWLINE_INTO_FRINGE (it)) 18791 if (IT_OVERFLOW_NEWLINE_INTO_FRINGE (it))
18790 { 18792 {
@@ -18802,6 +18804,8 @@ display_line (struct it *it)
18802 } 18804 }
18803 } 18805 }
18804 } 18806 }
18807 else if (it->bidi_p)
18808 RECORD_MAX_MIN_POS (it);
18805 } 18809 }
18806 else if (CHAR_GLYPH_PADDING_P (*glyph) 18810 else if (CHAR_GLYPH_PADDING_P (*glyph)
18807 && !FRAME_WINDOW_P (it->f)) 18811 && !FRAME_WINDOW_P (it->f))
@@ -18932,6 +18936,10 @@ display_line (struct it *it)
18932 xassert (it->first_visible_x <= it->last_visible_x); 18936 xassert (it->first_visible_x <= it->last_visible_x);
18933 } 18937 }
18934 } 18938 }
18939 /* Even if this display element produced no glyphs at all,
18940 we want to record its position. */
18941 if (it->bidi_p && nglyphs == 0)
18942 RECORD_MAX_MIN_POS (it);
18935 18943
18936 row->ascent = max (row->ascent, it->max_ascent); 18944 row->ascent = max (row->ascent, it->max_ascent);
18937 row->height = max (row->height, it->max_ascent + it->max_descent); 18945 row->height = max (row->height, it->max_ascent + it->max_descent);
@@ -23472,7 +23480,14 @@ produce_stretch_glyph (struct it *it)
23472 23480
23473 if (width > 0 && it->line_wrap != TRUNCATE 23481 if (width > 0 && it->line_wrap != TRUNCATE
23474 && it->current_x + width > it->last_visible_x) 23482 && it->current_x + width > it->last_visible_x)
23475 width = it->last_visible_x - it->current_x - 1; 23483 {
23484 width = it->last_visible_x - it->current_x;
23485#ifdef HAVE_WINDOW_SYSTEM
23486 /* Subtact one more pixel from the stretch width, but only on
23487 GUI frames, since on a TTY each glyph is one "pixel" wide. */
23488 width -= FRAME_WINDOW_P (it->f);
23489#endif
23490 }
23476 23491
23477 if (width > 0 && height > 0 && it->glyph_row) 23492 if (width > 0 && height > 0 && it->glyph_row)
23478 { 23493 {
@@ -23484,14 +23499,7 @@ produce_stretch_glyph (struct it *it)
23484 object = it->w->buffer; 23499 object = it->w->buffer;
23485#ifdef HAVE_WINDOW_SYSTEM 23500#ifdef HAVE_WINDOW_SYSTEM
23486 if (FRAME_WINDOW_P (it->f)) 23501 if (FRAME_WINDOW_P (it->f))
23487 { 23502 append_stretch_glyph (it, object, width, height, ascent);
23488 append_stretch_glyph (it, object, width, height, ascent);
23489 it->pixel_width = width;
23490 it->ascent = it->phys_ascent = ascent;
23491 it->descent = it->phys_descent = height - it->ascent;
23492 it->nglyphs = width > 0 && height > 0 ? 1 : 0;
23493 take_vertical_position_into_account (it);
23494 }
23495 else 23503 else
23496#endif 23504#endif
23497 { 23505 {
@@ -23503,6 +23511,19 @@ produce_stretch_glyph (struct it *it)
23503 it->object = o_object; 23511 it->object = o_object;
23504 } 23512 }
23505 } 23513 }
23514
23515 it->pixel_width = width;
23516#ifdef HAVE_WINDOW_SYSTEM
23517 if (FRAME_WINDOW_P (it->f))
23518 {
23519 it->ascent = it->phys_ascent = ascent;
23520 it->descent = it->phys_descent = height - it->ascent;
23521 it->nglyphs = width > 0 && height > 0 ? 1 : 0;
23522 take_vertical_position_into_account (it);
23523 }
23524 else
23525#endif
23526 it->nglyphs = width;
23506} 23527}
23507 23528
23508#ifdef HAVE_WINDOW_SYSTEM 23529#ifdef HAVE_WINDOW_SYSTEM
@@ -27450,7 +27471,7 @@ expose_window (struct window *w, XRectangle *fr)
27450 { 27471 {
27451 int yb = window_text_bottom_y (w); 27472 int yb = window_text_bottom_y (w);
27452 struct glyph_row *row; 27473 struct glyph_row *row;
27453 int cursor_cleared_p; 27474 int cursor_cleared_p, phys_cursor_on_p;
27454 struct glyph_row *first_overlapping_row, *last_overlapping_row; 27475 struct glyph_row *first_overlapping_row, *last_overlapping_row;
27455 27476
27456 TRACE ((stderr, "expose_window (%d, %d, %d, %d)\n", 27477 TRACE ((stderr, "expose_window (%d, %d, %d, %d)\n",
@@ -27470,6 +27491,13 @@ expose_window (struct window *w, XRectangle *fr)
27470 else 27491 else
27471 cursor_cleared_p = 0; 27492 cursor_cleared_p = 0;
27472 27493
27494 /* If the row containing the cursor extends face to end of line,
27495 then expose_area might overwrite the cursor outside the
27496 rectangle and thus notice_overwritten_cursor might clear
27497 w->phys_cursor_on_p. We remember the original value and
27498 check later if it is changed. */
27499 phys_cursor_on_p = w->phys_cursor_on_p;
27500
27473 /* Update lines intersecting rectangle R. */ 27501 /* Update lines intersecting rectangle R. */
27474 first_overlapping_row = last_overlapping_row = NULL; 27502 first_overlapping_row = last_overlapping_row = NULL;
27475 for (row = w->current_matrix->rows; 27503 for (row = w->current_matrix->rows;
@@ -27536,7 +27564,8 @@ expose_window (struct window *w, XRectangle *fr)
27536 x_draw_vertical_border (w); 27564 x_draw_vertical_border (w);
27537 27565
27538 /* Turn the cursor on again. */ 27566 /* Turn the cursor on again. */
27539 if (cursor_cleared_p) 27567 if (cursor_cleared_p
27568 || (phys_cursor_on_p && !w->phys_cursor_on_p))
27540 update_window_cursor (w, 1); 27569 update_window_cursor (w, 1);
27541 } 27570 }
27542 } 27571 }
diff --git a/src/xfns.c b/src/xfns.c
index 998c803a7ad..913cde75d91 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -3369,7 +3369,7 @@ This function is an internal primitive--use `make-frame' instead. */)
3369 /* We need to do this after creating the X window, so that the 3369 /* We need to do this after creating the X window, so that the
3370 icon-creation functions can say whose icon they're describing. */ 3370 icon-creation functions can say whose icon they're describing. */
3371 x_default_parameter (f, parms, Qicon_type, Qt, 3371 x_default_parameter (f, parms, Qicon_type, Qt,
3372 "bitmapIcon", "BitmapIcon", RES_TYPE_SYMBOL); 3372 "bitmapIcon", "BitmapIcon", RES_TYPE_BOOLEAN);
3373 3373
3374 x_default_parameter (f, parms, Qauto_raise, Qnil, 3374 x_default_parameter (f, parms, Qauto_raise, Qnil,
3375 "autoRaise", "AutoRaiseLower", RES_TYPE_BOOLEAN); 3375 "autoRaise", "AutoRaiseLower", RES_TYPE_BOOLEAN);
diff --git a/src/xmenu.c b/src/xmenu.c
index cf58e85af10..7fcd2ad3724 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -742,7 +742,7 @@ menu_highlight_callback (GtkWidget *widget, gpointer call_data)
742 /* If popup_activated_flag is greater than 1 we are in a popup menu. 742 /* If popup_activated_flag is greater than 1 we are in a popup menu.
743 Don't pass the frame to show_help_event for those. 743 Don't pass the frame to show_help_event for those.
744 Passing frame creates an Emacs event. As we are looping in 744 Passing frame creates an Emacs event. As we are looping in
745 popup_widget_loop, it won't be handeled. Passing NULL shows the tip 745 popup_widget_loop, it won't be handled. Passing NULL shows the tip
746 directly without using an Emacs event. This is what the Lucid code 746 directly without using an Emacs event. This is what the Lucid code
747 does below. */ 747 does below. */
748 show_help_event (popup_activated_flag <= 1 ? cb_data->cl_data->f : NULL, 748 show_help_event (popup_activated_flag <= 1 ? cb_data->cl_data->f : NULL,
diff --git a/src/xselect.c b/src/xselect.c
index 29e8552bb9c..adee1872dba 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -116,6 +116,7 @@ static Lisp_Object Qx_lost_selection_functions, Qx_sent_selection_functions;
116#define X_SHRT_MIN (-1 - X_SHRT_MAX) 116#define X_SHRT_MIN (-1 - X_SHRT_MAX)
117#define X_LONG_MAX 0x7fffffff 117#define X_LONG_MAX 0x7fffffff
118#define X_LONG_MIN (-1 - X_LONG_MAX) 118#define X_LONG_MIN (-1 - X_LONG_MAX)
119#define X_ULONG_MAX 0xffffffffUL
119 120
120/* If this is a smaller number than the max-request-size of the display, 121/* If this is a smaller number than the max-request-size of the display,
121 emacs will use INCR selection transfer when the selection is larger 122 emacs will use INCR selection transfer when the selection is larger
@@ -378,7 +379,8 @@ x_own_selection (Lisp_Object selection_name, Lisp_Object selection_value,
378 379
379/* Given a selection-name and desired type, look up our local copy of 380/* Given a selection-name and desired type, look up our local copy of
380 the selection value and convert it to the type. 381 the selection value and convert it to the type.
381 The value is nil or a string. 382 Return nil, a string, a vector, a symbol, an integer, or a cons
383 that CONS_TO_INTEGER could plausibly handle.
382 This function is used both for remote requests (LOCAL_REQUEST is zero) 384 This function is used both for remote requests (LOCAL_REQUEST is zero)
383 and for local x-get-selection-internal (LOCAL_REQUEST is nonzero). 385 and for local x-get-selection-internal (LOCAL_REQUEST is nonzero).
384 386
@@ -1718,6 +1720,21 @@ selection_data_to_lisp_data (Display *display, const unsigned char *data,
1718 } 1720 }
1719} 1721}
1720 1722
1723/* Convert OBJ to an X long value, and return it as unsigned long.
1724 OBJ should be an integer or a cons representing an integer.
1725 Treat values in the range X_LONG_MAX + 1 .. X_ULONG_MAX as X
1726 unsigned long values: in theory these values are supposed to be
1727 signed but in practice unsigned 32-bit data are communicated via X
1728 selections and we need to support that. */
1729static unsigned long
1730cons_to_x_long (Lisp_Object obj)
1731{
1732 if (X_ULONG_MAX <= INTMAX_MAX
1733 || XINT (INTEGERP (obj) ? obj : XCAR (obj)) < 0)
1734 return cons_to_signed (obj, X_LONG_MIN, min (X_ULONG_MAX, INTMAX_MAX));
1735 else
1736 return cons_to_unsigned (obj, X_ULONG_MAX);
1737}
1721 1738
1722/* Use xfree, not XFree, to free the data obtained with this function. */ 1739/* Use xfree, not XFree, to free the data obtained with this function. */
1723 1740
@@ -1783,11 +1800,11 @@ lisp_data_to_selection_data (Display *display, Lisp_Object obj,
1783 || (CONSP (XCDR (obj)) 1800 || (CONSP (XCDR (obj))
1784 && INTEGERP (XCAR (XCDR (obj))))))) 1801 && INTEGERP (XCAR (XCDR (obj)))))))
1785 { 1802 {
1786 *data_ret = (unsigned char *) xmalloc (sizeof (long) + 1); 1803 *data_ret = (unsigned char *) xmalloc (sizeof (unsigned long) + 1);
1787 *format_ret = 32; 1804 *format_ret = 32;
1788 *size_ret = 1; 1805 *size_ret = 1;
1789 (*data_ret) [sizeof (long)] = 0; 1806 (*data_ret) [sizeof (unsigned long)] = 0;
1790 (*(long **) data_ret) [0] = cons_to_signed (obj, X_LONG_MIN, X_LONG_MAX); 1807 (*(unsigned long **) data_ret) [0] = cons_to_x_long (obj);
1791 if (NILP (type)) type = QINTEGER; 1808 if (NILP (type)) type = QINTEGER;
1792 } 1809 }
1793 else if (VECTORP (obj)) 1810 else if (VECTORP (obj))
@@ -1822,15 +1839,15 @@ lisp_data_to_selection_data (Display *display, Lisp_Object obj,
1822 if (NILP (type)) type = QINTEGER; 1839 if (NILP (type)) type = QINTEGER;
1823 for (i = 0; i < size; i++) 1840 for (i = 0; i < size; i++)
1824 { 1841 {
1825 intmax_t v = cons_to_signed (XVECTOR (obj)->contents[i], 1842 if (! RANGED_INTEGERP (X_SHRT_MIN, XVECTOR (obj)->contents[i],
1826 X_LONG_MIN, X_LONG_MAX); 1843 X_SHRT_MAX))
1827 if (X_SHRT_MIN <= v && v <= X_SHRT_MAX)
1828 { 1844 {
1829 /* Use sizeof (long) even if it is more than 32 bits. 1845 /* Use sizeof (long) even if it is more than 32 bits.
1830 See comment in x_get_window_property and 1846 See comment in x_get_window_property and
1831 x_fill_property_data. */ 1847 x_fill_property_data. */
1832 data_size = sizeof (long); 1848 data_size = sizeof (long);
1833 format = 32; 1849 format = 32;
1850 break;
1834 } 1851 }
1835 } 1852 }
1836 *data_ret = xnmalloc (size, data_size); 1853 *data_ret = xnmalloc (size, data_size);
@@ -1838,12 +1855,12 @@ lisp_data_to_selection_data (Display *display, Lisp_Object obj,
1838 *size_ret = size; 1855 *size_ret = size;
1839 for (i = 0; i < size; i++) 1856 for (i = 0; i < size; i++)
1840 { 1857 {
1841 long v = cons_to_signed (XVECTOR (obj)->contents[i],
1842 X_LONG_MIN, X_LONG_MAX);
1843 if (format == 32) 1858 if (format == 32)
1844 (*((long **) data_ret)) [i] = v; 1859 (*((unsigned long **) data_ret)) [i] =
1860 cons_to_x_long (XVECTOR (obj)->contents[i]);
1845 else 1861 else
1846 (*((short **) data_ret)) [i] = v; 1862 (*((short **) data_ret)) [i] =
1863 XINT (XVECTOR (obj)->contents[i]);
1847 } 1864 }
1848 } 1865 }
1849 } 1866 }