aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorKaroly Lorentey2006-03-22 15:16:06 +0000
committerKaroly Lorentey2006-03-22 15:16:06 +0000
commitd4717700cc0b7af6197c19e22bd912e3b1ed67ee (patch)
tree4e2a630584b23f670aff57a512a8f2d8182e39c4 /lisp
parentf1be5774242454844bf21fbf32e0f6541e2add34 (diff)
parentd63cd76657e12b92a5d7736a15bc9b97a7f9990e (diff)
downloademacs-d4717700cc0b7af6197c19e22bd912e3b1ed67ee.tar.gz
emacs-d4717700cc0b7af6197c19e22bd912e3b1ed67ee.zip
Merged from emacs@sv.gnu.org
Patches applied: * emacs@sv.gnu.org/emacs--devo--0--patch-160 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-161 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-162 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-163 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-164 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-165 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-166 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-167 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-168 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-169 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-170 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-171 Update from CVS: man/mh-e.texi (Folders): Various edits. * emacs@sv.gnu.org/emacs--devo--0--patch-172 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-58 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-59 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-60 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-61 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-62 Merge from emacs--devo--0 * emacs@sv.gnu.org/gnus--rel--5.10--patch-63 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-64 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-534
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog709
-rw-r--r--lisp/cus-edit.el14
-rw-r--r--lisp/custom.el3
-rw-r--r--lisp/diff-mode.el2
-rw-r--r--lisp/emulation/cua-rect.el8
-rw-r--r--lisp/files.el15
-rw-r--r--lisp/font-lock.el11
-rw-r--r--lisp/gnus/ChangeLog62
-rw-r--r--lisp/gnus/gnus-agent.el2
-rw-r--r--lisp/gnus/gnus-art.el34
-rw-r--r--lisp/gnus/gnus-util.el3
-rw-r--r--lisp/gnus/message.el4
-rw-r--r--lisp/gnus/mm-decode.el52
-rw-r--r--lisp/gnus/mm-extern.el104
-rw-r--r--lisp/gnus/mm-uu.el3
-rw-r--r--lisp/gnus/nnimap.el18
-rw-r--r--lisp/gnus/smiley.el1
-rw-r--r--lisp/gnus/spam.el16
-rw-r--r--lisp/help-mode.el61
-rw-r--r--lisp/ido.el140
-rw-r--r--lisp/image.el80
-rw-r--r--lisp/international/mule.el5
-rw-r--r--lisp/isearch.el15
-rw-r--r--lisp/iswitchb.el1
-rw-r--r--lisp/jit-lock.el6
-rw-r--r--lisp/locate.el104
-rw-r--r--lisp/mail/rmail.el8
-rw-r--r--lisp/mh-e/ChangeLog39
-rw-r--r--lisp/mh-e/mh-comp.el26
-rw-r--r--lisp/mh-e/mh-compat.el80
-rw-r--r--lisp/mh-e/mh-e.el31
-rw-r--r--lisp/mh-e/mh-folder.el5
-rw-r--r--lisp/mh-e/mh-letter.el8
-rw-r--r--lisp/mh-e/mh-utils.el7
-rw-r--r--lisp/mouse.el19
-rw-r--r--lisp/pgg-gpg.el83
-rw-r--r--lisp/progmodes/gdb-ui.el98
-rw-r--r--lisp/progmodes/grep.el7
-rw-r--r--lisp/progmodes/gud.el39
-rw-r--r--lisp/simple.el3
-rw-r--r--lisp/sort.el3
-rw-r--r--lisp/term/w32-win.el12
-rw-r--r--lisp/textmodes/bibtex.el99
-rw-r--r--lisp/textmodes/ispell.el7
-rw-r--r--lisp/textmodes/org.el32
45 files changed, 1369 insertions, 710 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index f58a240c3ec..acfc4975c54 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,239 @@
12006-03-21 Chong Yidong <cyd@stupidchicken.com>
2
3 * cus-edit.el (custom-face-set): Call custom-push-theme before
4 face-spec set so that `changed' theme is correctly saved.
5 (custom-face-reset-standard): Reset to recalculated face rather
6 than defface spec.
7
8 * custom.el (custom-push-theme): Only save `changed' theme if the
9 current face does not match the defface specs.
10
112006-03-21 Simon Josefsson <jas@extundo.com>
12
13 * pgg-gpg.el: Ideas below based on patch from Sascha Wilde
14 <wilde@sha-bang.de>.
15 (pgg-gpg-use-agent): New variable.
16 (pgg-gpg-process-region): Use it.
17 (pgg-gpg-encrypt-region): Likewise.
18 (pgg-gpg-encrypt-symmetric-region): Likewise.
19 (pgg-gpg-decrypt-region): Likewise.
20 (pgg-gpg-sign-region): Likewise.
21 (pgg-gpg-possibly-cache-passphrase): Don't cache a nil password.
22
232006-03-21 Carsten Dominik <dominik@science.uva.nl>
24
25 * textmodes/org.el: (org-open-at-point): Fixed bug in wiki-style
26 bracket links.
27
282006-03-21 Kim F. Storm <storm@cua.dk>
29
30 * progmodes/gdb-ui.el (gdb-reset): Set buffer local value of
31 fringe-indicator-alist instead of modifying global value.
32 (gdb-frame-handler): Likewise.
33
342006-03-21 Nick Roberts <nickrob@snap.net.nz>
35
36 * diff-mode.el (diff-function): Make it inherit from diff-header
37 instead of diff-context.
38
39 * progmodes/gdb-ui.el (hollow-right-triangle): Define as fringe
40 bitmap.
41 (gdb-info-stack-custom): Rename from gdb-info-frames-custom and
42 change names in macro above for consistency.
43 (gdb-frame-handler): Use hollow-right-triangle for all selected
44 frames which except the innermost (where execution has stopped).
45 (gdb-reset): Reset buffer-local values of overlay-arrow.
46
472006-03-20 Richard Stallman <rms@gnu.org>
48
49 * simple.el (set-mark-command): Doc fix.
50
51 * files.el (display-buffer-other-frame): New command.
52 (ctl-x-4-map): Bind C-x 5 C-o to it.
53
542006-03-20 Stefan Monnier <monnier@iro.umontreal.ca>
55
56 * jit-lock.el (jit-lock-function): Check for the actual defer-timer
57 rather than just defer-time, in case defer-time has been changed but
58 the timer isn't running yet.
59 (jit-lock-deferred-fontify): Correspondingly let-bind defer-timer.
60
612006-03-19 Luc Teirlinck <teirllm@auburn.edu>
62
63 * help-mode.el (help-follow-symbol): New function.
64 Essentially identical to the old `help-follow', but do not let
65 `push-button' do the work when on an xref.
66 (help-mode-map): Bind `help-follow-symbol' to "C-c C-c".
67
682006-03-19 Richard Stallman <rms@gnu.org>
69
70 * help-mode.el (help-xref-symbol-regexp): Make no xref for symbol
71 preceded by the word `program'.
72 (help-follow-mouse, help-follow): Throw error if not on xref.
73 Delete no longer used args.
74
752006-03-20 Nick Roberts <nickrob@snap.net.nz>
76
77 * progmodes/gdb-ui.el (gdb-stopped): Even when there is no source
78 annotation ensure gud-overlay-arrow-position is redisplayed.
79
802006-03-19 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
81
82 * textmodes/bibtex.el (bibtex-include-OPTkey)
83 (bibtex-entry-field-alist, bibtex-generate-url-list): Mark as risky.
84 (bibtex-autokey-name-case-convert)
85 (bibtex-autokey-titleword-case-convert): Make these the aliases
86 for the following two variables.
87 (bibtex-autokey-name-case-convert-function)
88 (bibtex-autokey-titleword-case-convert-function): Make these the
89 real names.
90 (bibtex-font-lock-keywords): Make bibtex-font-lock-url and
91 bibtex-font-lock-crossref sublists.
92 (bibtex-mode): Revert 2005-12-30 change (which made
93 completion-ignore-case buffer-local).
94 (bibtex-url): Simplify.
95
962006-03-19 Kim F. Storm <storm@cua.dk>
97
98 * emulation/cua-rect.el (cua--highlight-rectangle): Set overlay
99 cursor property value to 2 (to align with C level change).
100
1012006-03-19 Bill Wohler <wohler@newt.com>
102
103 * image.el (image-load-path-for-library): Shorten first line in
104 docstring.
105
1062006-03-18 Richard Stallman <rms@gnu.org>
107
108 * mail/rmail.el (rmail-reply-regexp): Undo previous change.
109
1102006-03-18 Ben North <ben@redfrontdoor.org> (tiny change)
111
112 * isearch.el (isearch-other-meta-char): Handle user bindings for
113 shifted control characters.
114
1152006-03-18 Agustin Martin <agustin.martin@hispalinux.es>
116
117 * textmodes/ispell.el (ispell-skip-region-alist): Add "_+" to the
118 part that matches email addresses, file names, etc.
119
1202006-03-18 Eli Zaretskii <eliz@gnu.org>
121
122 * term/w32-win.el (mouse-set-font):
123 Mention w32-list-proportional-fonts in the doc string.
124
1252006-03-18 Kim F. Storm <storm@cua.dk>
126
127 * ido.el (ido-cache-ftp-work-directory-time): Doc fix.
128 (ido-unc-hosts): New user option to explicitly define list of know
129 UNC-style hosts for completion.
130 (ido-cache-unc-host-shares-time): New user option.
131 (ido-is-unc-root, ido-is-unc-host, ido-cache-unc-valid):
132 New helper functions for UNC file-name support.
133 (ido-may-cache-directory): Check for UNC host. Simplify.
134 (ido-wash-history): Clean out old UNC hosts.
135 (ido-nonreadable-directory-p): UNC hosts are always readable.
136 (ido-directory-too-big-p): UNC hosts are never too big.
137 (ido-set-current-directory): Handle UNC root path.
138 (ido-file-name-all-completions): Complete UNC host names from
139 ido-unc-hosts list. Cache UNC host shares.
140 (ido-make-file-list-1): Don't filter UNC root.
141 (ido-exhibit): Check for // in root directory, and switch to UNC
142 mode by setting ido-current-directory to //.
143
1442006-03-17 Luc Teirlinck <teirllm@auburn.edu>
145
146 * cus-edit.el (customize-changed-options): Mention explicit
147 version number as default in prompt.
148
1492006-03-17 Bill Wohler <wohler@newt.com>
150
151 * image.el (image-load-path-for-library): Minor docstring fix.
152
1532006-03-17 Carsten Dominik <dominik@science.uva.nl>
154
155 * textmodes/org.el (org-read-date): Include subgroup 5 into
156 replacement text.
157 (org-popup-calendar-for-date-prompt): Fix customization type.
158
1592006-03-17 Nick Roberts <nickrob@snap.net.nz>
160
161 * progmodes/gdb-ui.el (gud-watch): Provide completion.
162 (gdb-continuation): New variable.
163 (gdb-send): Deal with continuation lines.
164
165 * progmodes/gud.el (gud-gdb-complete-command)
166 (gud-gdb-run-command-fetch-lines): Adapt for use with watch
167 expressions.
168 (gud-tooltip-mode): Use buffer-local value.
169
1702006-03-16 Kim F. Storm <storm@cua.dk>
171
172 * ido.el (ido-edit-input): Use selected match, if any.
173
1742006-03-16 Bill Wohler <wohler@newt.com>
175
176 * image.el (image-load-path-for-library): Prefer user's images in
177 image-load-path.
178
1792006-03-16 Martin Rudalics <rudalics@gmx.at>
180
181 * mouse.el (mouse-drag-vertical-line): Use window-inside-edges
182 when checking for attempt to drag leftmost or rightmost scrollbar.
183
1842006-03-16 Nick Roberts <nickrob@snap.net.nz>
185
186 * progmodes/gdb-ui.el (gdb-inferior-status): New variable.
187 (gdb-force-mode-line-update): New function.
188 (gdb-resync, gdb-starting, gdb-signal, gdb-exited, gdb-stopped)
189 (gdb-exited): Use them.
190 (gdb-signal): New fuction.
191 (gdb-annotation-rules): Provide a rule for it.
192
1932006-03-16 Kenichi Handa <handa@m17n.org>
194
195 * international/mule.el (auto-coding-regexp-alist): Add entries
196 for Unicode BOM.
197
198 * sort.el (sort-build-lists): Temporarily bind
199 inhibit-field-text-motion to t.
200
2012006-03-15 Luc Teirlinck <teirllm@auburn.edu>
202
203 * locate.el (locate-command, locate-make-command-line)
204 (locate-fcodes-file, locate-update-command)
205 (locate-prompt-for-command, locate, locate-with-filter)
206 (locate-get-file-positions): Doc fixes.
207 (locate-buffer-name, locate-header-face): Remove leading `*' in
208 defcustom.
209 (locate-filter-output): Use `keep-lines' instead of its alias
210 `delete-non-matching-lines'.
211 (locate-get-filename, locate-get-dirname): Add introductory comment.
212 (locate-find-directory-other-window): Give appropriate error
213 message if used outside main listing.
214
2152006-03-15 Stefan Monnier <monnier@iro.umontreal.ca>
216
217 * font-lock.el (font-lock-lines-before): Delete variable, subsumed by
218 the new extend-region feature.
219 (font-lock-after-change-function): Update correspondingly.
220 * jit-lock.el (jit-lock-after-change): Update correspondingly.
221 * progmodes/grep.el (font-lock-lines-before): Don't disable.
222
2232006-03-15 Bill Wohler <wohler@newt.com>
224
225 * image.el (image-load-path-for-library): Fix example by not
226 recommending that one binds image-load-path. Just defvar it to
227 placate compiler and only use it if previously defined.
228
2292006-03-15 Carsten Dominik <dominik@science.uva.nl>
230
231 * textmodes/org.el (org-insert-centered): Use `string-width' to
232 make underlining work for wide characters.
233 (org-goto-map, org-agenda-mode-map, org-mode-map): Explicitly bind
234 TAB to `org-cycle', to make sure that no binding in
235 `outline-mode-map' can supercede it.
236
12006-03-14 Ken Manheimer <ken.manheimer@gmail.com> 2372006-03-14 Ken Manheimer <ken.manheimer@gmail.com>
2 238
3 * allout.el: Increment version to 2.2.1 in file commentary. 239 * allout.el: Increment version to 2.2.1 in file commentary.
@@ -28,8 +264,8 @@
28 264
29 * progmodes/gdb-ui.el (gdb-var-list): Change order of first two 265 * progmodes/gdb-ui.el (gdb-var-list): Change order of first two
30 elements. 266 elements.
31 (gdb-find-watch-expression): Make it work for arrays too. Follow 267 (gdb-find-watch-expression): Make it work for arrays too.
32 change to gdb-var-list. 268 Follow change to gdb-var-list.
33 (gud-watch): Allow the user to enter variable name with a prexix 269 (gud-watch): Allow the user to enter variable name with a prexix
34 arg. Create keybindings. 270 arg. Create keybindings.
35 (gdb-var-create-handler, gdb-var-evaluate-expression-handler) 271 (gdb-var-create-handler, gdb-var-evaluate-expression-handler)
@@ -37,8 +273,7 @@
37 (gdb-var-delete, gdb-edit-value, gdb-speedbar-expand-node) 273 (gdb-var-delete, gdb-edit-value, gdb-speedbar-expand-node)
38 (gdb-var-list-children-handler-1, gdb-var-update-handler-1): 274 (gdb-var-list-children-handler-1, gdb-var-update-handler-1):
39 Follow change to gdb-var-list. 275 Follow change to gdb-var-list.
40 (gdb-starting): Don't show the overlay arrows when program is 276 (gdb-starting): Don't show the overlay arrows when program is running.
41 running.
42 277
43 * progmodes/gud.el (gud-speedbar-buttons): Follow change to 278 * progmodes/gud.el (gud-speedbar-buttons): Follow change to
44 gdb-var-list. 279 gdb-var-list.
@@ -46,27 +281,32 @@
462006-03-14 Bill Wohler <wohler@newt.com> 2812006-03-14 Bill Wohler <wohler@newt.com>
47 282
48 * image.el (image-load-path-for-library): Pass value of path 283 * image.el (image-load-path-for-library): Pass value of path
49 rather than symbol. Always return list of directories. Guarantee 284 rather than symbol. Always return list of directories.
50 that image directory comes first. 285 Guarantee that image directory comes first.
51 286
522006-03-14 Alan Mackenzie <acm@muc.de> 2872006-03-14 Alan Mackenzie <acm@muc.de>
53 288
54 * font-core.el: New function/variable 289 * font-core.el (font-lock-extend-region\(-function\)?.):
55 font-lock-extend-region\(-function\)?. 290 New function/variable.
56 291
57 * font-lock.el (font-lock-after-change-function): Call 292 * font-lock.el (font-lock-after-change-function):
58 font-lock-extend-region. Obey font-lock-lines-before. 293 Call font-lock-extend-region. Obey font-lock-lines-before.
59 (font-lock-default-fontify-region): Remove reference to 294 (font-lock-default-fontify-region): Remove reference to
60 font-lock-lines-before. 295 font-lock-lines-before.
61 296
62 * jit-lock.el (jit-lock-after-change): Call 297 * jit-lock.el (jit-lock-after-change):
63 font-lock-extend-region. Obey font-lock-lines-before. 298 Call font-lock-extend-region. Obey font-lock-lines-before.
64 299
652006-03-14 David Ponce <david@dponce.com> 3002006-03-14 David Ponce <david@dponce.com>
66 301
67 * tree-widget.el (tree-widget-themes-load-path) 302 * tree-widget.el (tree-widget-themes-load-path)
68 (tree-widget-themes-directory, tree-widget-theme): Doc fix. 303 (tree-widget-themes-directory, tree-widget-theme): Doc fix.
69 304
3052006-03-13 Stefan Monnier <monnier@iro.umontreal.ca>
306
307 * pcvs-util.el (cvs-insert-strings): Fix bug with strings longer than
308 wwidth.
309
702006-03-13 Ryan Yeske <rcyeske@gmail.com> 3102006-03-13 Ryan Yeske <rcyeske@gmail.com>
71 311
72 * net/rcirc.el (rcirc) <defgroup>: Add link to manual. 312 * net/rcirc.el (rcirc) <defgroup>: Add link to manual.
@@ -87,18 +327,18 @@
87 themes sub-directory found in tree-widget-themes-load-path. 327 themes sub-directory found in tree-widget-themes-load-path.
88 (tree-widget-themes-directory, tree-widget-theme): Doc fix. 328 (tree-widget-themes-directory, tree-widget-theme): Doc fix.
89 (tree-widget--locate-sub-directory): Return all occurrences. 329 (tree-widget--locate-sub-directory): Return all occurrences.
90 (tree-widget-themes-path): New function. Replace 330 (tree-widget-themes-path): New function.
91 tree-widget-themes-directory, and return a list of directories. 331 Replace tree-widget-themes-directory, and return a list of directories.
92 (tree-widget-set-parent-theme) 332 (tree-widget-set-parent-theme)
93 (tree-widget-lookup-image): Use it. 333 (tree-widget-lookup-image): Use it.
94 334
952006-03-13 Carsten Dominik <dominik@science.uva.nl> 3352006-03-13 Carsten Dominik <dominik@science.uva.nl>
96 336
97 * textmodes/org.el: (org-link-search): Avoid self-matching of 337 * textmodes/org.el (org-link-search): Avoid self-matching of
98 links, allow target text to be distributed over several lines. 338 links, allow target text to be distributed over several lines.
99 (org-search-not-link): New function. 339 (org-search-not-link): New function.
100 (org-set-regexps-and-options, org-get-current-options): New 340 (org-set-regexps-and-options, org-get-current-options):
101 startup options. 341 New startup options.
102 (org-export-as-html): Take odd-level setting from local variable. 342 (org-export-as-html): Take odd-level setting from local variable.
103 (org-fontify-emphasized-text): New option. 343 (org-fontify-emphasized-text): New option.
104 (org-set-font-lock-defaults): Include emphasized text. 344 (org-set-font-lock-defaults): Include emphasized text.
@@ -169,8 +409,8 @@
169 409
1702006-03-11 Kurt Hornik <Kurt.Hornik@wu-wien.ac.at> 4102006-03-11 Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>
171 411
172 * progmodes/octave-mod.el (octave-indent-for-comment): Behave 412 * progmodes/octave-mod.el (octave-indent-for-comment):
173 according to do string. 413 Behave according to do string.
174 414
1752006-03-11 Agustin Martin <agustin.martin@hispalinux.es> 4152006-03-11 Agustin Martin <agustin.martin@hispalinux.es>
176 416
@@ -208,7 +448,7 @@
208 * progmodes/gdb-ui.el (gdb-remove-text-properties): Rename from 448 * progmodes/gdb-ui.el (gdb-remove-text-properties): Rename from
209 gdb-remove-mouse-face and remove help-echo too. 449 gdb-remove-mouse-face and remove help-echo too.
210 (gdb-enqueue-input): Correct conditional clause. 450 (gdb-enqueue-input): Correct conditional clause.
211 451
2122006-03-10 Glenn Morris <rgm@gnu.org> 4522006-03-10 Glenn Morris <rgm@gnu.org>
213 453
214 * calendar/calendar.el (calendar-holidays): Doc fix. 454 * calendar/calendar.el (calendar-holidays): Doc fix.
@@ -233,8 +473,8 @@
233 473
2342006-03-07 Chong Yidong <cyd@stupidchicken.com> 4742006-03-07 Chong Yidong <cyd@stupidchicken.com>
235 475
236 * files.el (hack-local-variables-confirm): Set 476 * files.el (hack-local-variables-confirm):
237 coding-system-for-read to nil before writing to .emacs. 477 Set coding-system-for-read to nil before writing to .emacs.
238 478
239 * arc-mode.el (archive-extract): Check if an existing buffer name 479 * arc-mode.el (archive-extract): Check if an existing buffer name
240 comes from a different archive. 480 comes from a different archive.
@@ -256,8 +496,8 @@
256 496
2572006-03-07 Carsten Dominik <dominik@science.uva.nl> 4972006-03-07 Carsten Dominik <dominik@science.uva.nl>
258 498
259 * textmodes/org.el: Move defvars out of eval-when-compile. Use 499 * textmodes/org.el: Move defvars out of eval-when-compile.
260 buffer-file-name variable. 500 Use buffer-file-name variable.
261 (org-agenda-file-to-end, org-agenda-file-to-front): Remove unused 501 (org-agenda-file-to-end, org-agenda-file-to-front): Remove unused
262 arg `file'. 502 arg `file'.
263 (org-level-faces): Remove startup dependency. 503 (org-level-faces): Remove startup dependency.
@@ -272,8 +512,7 @@
272 (org-tag): New face. 512 (org-tag): New face.
273 (org-get-level-face): New function. 513 (org-get-level-face): New function.
274 (org-set-font-lock-defaults): Simplify setup for headlines. 514 (org-set-font-lock-defaults): Simplify setup for headlines.
275 (org-complete): Pass common substring to 515 (org-complete): Pass common substring to `display-completion-list'.
276 `display-completion-list'.
277 516
2782006-03-06 David Ponce <david@dponce.com> 5172006-03-06 David Ponce <david@dponce.com>
279 518
@@ -445,9 +684,8 @@
445 684
446 * t-mouse.el: New file. 685 * t-mouse.el: New file.
447 (t-mouse-tty): Use with-temp-buffer. Add more terminal types. 686 (t-mouse-tty): Use with-temp-buffer. Add more terminal types.
448 (t-mouse-lispy-buffer-posn-from-coords): Remove. Use the C 687 (t-mouse-lispy-buffer-posn-from-coords): Remove.
449 primitive... 688 (t-mouse-make-event-element): Use posn-at-x-y instead.
450 (t-mouse-make-event-element): ...posn-at-x-y instead.
451 (t-mouse-make-event): Deal with Fedora Core 3. 689 (t-mouse-make-event): Deal with Fedora Core 3.
452 (t-mouse-make-event): Don't sink the `stupid text mode menubar'. 690 (t-mouse-make-event): Don't sink the `stupid text mode menubar'.
453 (t-mouse-mouse-position-function): New function. Use it instead 691 (t-mouse-mouse-position-function): New function. Use it instead
@@ -480,8 +718,7 @@
480 * textmodes/reftex-index.el (reftex-index-map): Add `follow-mouse' 718 * textmodes/reftex-index.el (reftex-index-map): Add `follow-mouse'
481 binding. 719 binding.
482 720
483 * textmodes/reftex-toc.el (reftex-toc-map): Add `follow-mouse' 721 * textmodes/reftex-toc.el (reftex-toc-map): Add `follow-mouse' binding.
484 binding.
485 722
486 * textmodes/reftex-sel.el (reftex-select-label-map) 723 * textmodes/reftex-sel.el (reftex-select-label-map)
487 (reftex-select-bib-map): Add `follow-mouse' binding. 724 (reftex-select-bib-map): Add `follow-mouse' binding.
@@ -4059,20 +4296,20 @@
4059 CC Mode update to 5.31. 4296 CC Mode update to 5.31.
4060 4297
4061 * progmodes/cc-subword.el: Add a dummy `c-subword-mode' for 4298 * progmodes/cc-subword.el: Add a dummy `c-subword-mode' for
4062 Emacsen which lack `define-minor-mode'. (Currently Emacs <21. We 4299 Emacsen which lack `define-minor-mode'. (Currently Emacs <21.
4063 might do this function properly in the future). 4300 We might do this function properly in the future).
4064 4301
4065 * progmodes/cc-cmds.el, cc-defs.el, cc-styles.el, cc-vars.el: New 4302 * progmodes/cc-cmds.el, cc-defs.el, cc-styles.el, cc-vars.el:
4066 macros c-sentence-end and c-default-value-sentence end, to cope 4303 New macros c-sentence-end and c-default-value-sentence end, to cope
4067 with Emacs 22's new function `sentence-end'. 4304 with Emacs 22's new function `sentence-end'.
4068 4305
40692005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org> 43062005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
4070 4307
4071 * progmodes/cc-cmds.el (c-show-syntactic-information): Solved the 4308 * progmodes/cc-cmds.el (c-show-syntactic-information): Solve the
4072 compat issue using `c-put-overlay' and `c-delete-overlay'. 4309 compat issue using `c-put-overlay' and `c-delete-overlay'.
4073 4310
4074 * progmodes/cc-defs.el (c-put-overlay, c-delete-overlay): New 4311 * progmodes/cc-defs.el (c-put-overlay, c-delete-overlay):
4075 compat macros to handle overlays/extents. 4312 New compat macros to handle overlays/extents.
4076 4313
40772005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org> 43142005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
4078 4315
@@ -4093,20 +4330,19 @@
4093 4330
40942005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org> 43312005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
4095 4332
4096 * progmodes/cc-fonts.el (c-make-syntactic-matcher): New internal 4333 * progmodes/cc-fonts.el (c-make-syntactic-matcher):
4097 helper. 4334 New internal helper.
4098 4335
4099 (c-cpp-matchers, c-basic-matchers-before): Use the `eval' 4336 (c-cpp-matchers, c-basic-matchers-before): Use the `eval'
4100 construct to make the indirect face lookup work in XEmacs. 4337 construct to make the indirect face lookup work in XEmacs.
4101 4338
4102 (c-cpp-matchers): Append the negation char face to the existing 4339 (c-cpp-matchers): Append the negation char face to the existing
4103 fontification, so that the cpp face doesn't disappear. Use 4340 fontification, so that the cpp face doesn't disappear.
4104 `c-make-syntactic-matcher' to avoid negation chars in comments and 4341 Use `c-make-syntactic-matcher' to avoid negation chars in comments
4105 strings. 4342 and strings.
4106 4343
4107 * progmodes/cc-fonts.el (c-negation-char-face-name): New variable 4344 * progmodes/cc-fonts.el (c-negation-char-face-name): New variable
4108 to map to `font-lock-negation-char-face' in emacsen where it 4345 to map to `font-lock-negation-char-face' in emacsen where it exists.
4109 exists.
4110 4346
41112005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org> 43472005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
4112 4348
@@ -4129,18 +4365,17 @@
4129 (i) Insert a binding for C-c C-backspace into 4365 (i) Insert a binding for C-c C-backspace into
4130 c-bind-special-erase-keys which works in TTYs. 4366 c-bind-special-erase-keys which works in TTYs.
4131 (ii) Make sure that when file styles are used, any explicitly 4367 (ii) Make sure that when file styles are used, any explicitly
4132 given style variables take priority over those in the style. Do 4368 given style variables take priority over those in the style.
4133 this by calling `hack-local-variables' a second time. 4369 Do this by calling `hack-local-variables' a second time.
4134 4370
4135 * progmodes/cc-vars.el: Add language specific customization 4371 * progmodes/cc-vars.el: Add language specific customization
4136 widgets for AWK to c-doc-comment-style, c-require-final-newline 4372 widgets for AWK to c-doc-comment-style, c-require-final-newline
4137 and c-default-style. Add a defcustom for awk-mode-hook. Give 4373 and c-default-style. Add a defcustom for awk-mode-hook.
4138 c-syntactic-element and c-syntactic-context doc-strings by 4374 Give c-syntactic-element and c-syntactic-context doc-strings by
4139 directly setting their `variable-documentation' propery. This 4375 directly setting their `variable-documentation' propery.
4140 allows Emacs 22.1 to read these with C-h v. 4376 This allows Emacs 22.1 to read these with C-h v.
4141 4377
4142 * progmodes/cc-awk.el: Apply a tidy-up patch (from Stefan 4378 * progmodes/cc-awk.el: Apply a tidy-up patch (from Stefan Monnier).
4143 Monnier).
4144 4379
41452005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org> 43802005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
4146 4381
@@ -4166,8 +4401,8 @@
4166 * progmodes/cc-mode.el: Give c-hungry-backspace and 4401 * progmodes/cc-mode.el: Give c-hungry-backspace and
4167 c-hungry-delete-forward permanent key bindings. 4402 c-hungry-delete-forward permanent key bindings.
4168 4403
4169 * progmodes/cc-cmds.el (c-electric-semi&comma): Bind 4404 * progmodes/cc-cmds.el (c-electric-semi&comma):
4170 c-syntactic-context for calls to "criteria functions", for 4405 Bind c-syntactic-context for calls to "criteria functions", for
4171 consistency with other calls to user functions. 4406 consistency with other calls to user functions.
4172 4407
4173 * progmodes/cc-cmds.el (c-indent-command): Expunge use of 4408 * progmodes/cc-cmds.el (c-indent-command): Expunge use of
@@ -4181,7 +4416,7 @@
4181 4416
41822005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org> 44172005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
4183 4418
4184 * progmodes/cc-engine.el (c-on-identifier): Fixed bug when at the 4419 * progmodes/cc-engine.el (c-on-identifier): Fix bug when at the
4185 first char of an identifier. 4420 first char of an identifier.
4186 4421
4187 * progmodes/cc-engine.el (c-on-identifier): Handle the "operator 4422 * progmodes/cc-engine.el (c-on-identifier): Handle the "operator
@@ -4206,14 +4441,14 @@
42062005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org> 44412005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
4207 4442
4208 * progmodes/cc-fonts.el (c-cpp-matchers, c-basic-matchers-before): 4443 * progmodes/cc-fonts.el (c-cpp-matchers, c-basic-matchers-before):
4209 Incorporated the patterns added in the Emacs development branch 4444 Incorporate the patterns added in the Emacs development branch
4210 for the new Emacs 22 face `font-lock-negation-char-face'. 4445 for the new Emacs 22 face `font-lock-negation-char-face'.
4211 4446
4212 * progmodes/cc-fonts.el (c-invalid-face-name): Use "red1" instead 4447 * progmodes/cc-fonts.el (c-invalid-face-name): Use "red1" instead
4213 of "red" since it stands out better in xterms and DOS terminals. 4448 of "red" since it stands out better in xterms and DOS terminals.
4214 4449
4215 * progmodes/cc-engine.el (c-literal-faces): Added 4450 * progmodes/cc-engine.el (c-literal-faces):
4216 `font-lock-comment-delimiter-face' which is new in Emacs 22. 4451 Add `font-lock-comment-delimiter-face' which is new in Emacs 22.
4217 4452
42182005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org> 44532005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
4219 4454
@@ -4221,14 +4456,13 @@
4221 forcibly enable c-electric-flag. 4456 forcibly enable c-electric-flag.
4222 4457
4223 * progmodes/cc-vars.el, cc-cmds.el: New clean-up 4458 * progmodes/cc-vars.el, cc-cmds.el: New clean-up
4224 `comment-close-slash' on c-electric-slash: if enabled, typing `/' 4459 `comment-close-slash' on c-electric-slash: if enabled, typing `/' just
4225 just after the comment-prefix of a C-style comment will close that 4460 after the comment-prefix of a C-style comment will close that comment.
4226 comment.
4227 4461
42282005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org> 44622005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
4229 4463
4230 * progmodes/cc-fonts.el (c-basic-matchers-before) 4464 * progmodes/cc-fonts.el (c-basic-matchers-before)
4231 (c-complex-decl-matchers): Fixed the "not-arrow-prefix" regexp used 4465 (c-complex-decl-matchers): Fix the "not-arrow-prefix" regexp used
4232 in Pike. 4466 in Pike.
4233 4467
4234 * progmodes/cc-langs.el (c-other-op-syntax-tokens): Only C++ has 4468 * progmodes/cc-langs.el (c-other-op-syntax-tokens): Only C++ has
@@ -4237,10 +4471,10 @@
4237 * progmodes/cc-fonts.el, cc-langs.el, cc-engine.el 4471 * progmodes/cc-fonts.el, cc-langs.el, cc-engine.el
4238 (c-cpp-message-directives, c-cpp-include-directives) 4472 (c-cpp-message-directives, c-cpp-include-directives)
4239 (c-opt-cpp-macro-define, c-opt-cpp-macro-define-start) 4473 (c-opt-cpp-macro-define, c-opt-cpp-macro-define-start)
4240 (c-cpp-expr-directives): Introduced new language constants to 4474 (c-cpp-expr-directives): Introduce new language constants to
4241 control cpp syntax in a cleaner way. 4475 control cpp syntax in a cleaner way.
4242 4476
4243 (c-cpp-expr-functions): Renamed from c-cpp-defined-fns. 4477 (c-cpp-expr-functions): Rename from c-cpp-defined-fns.
4244 4478
4245 (c-cpp-matchers, c-forward-to-cpp-define-body): Use them. 4479 (c-cpp-matchers, c-forward-to-cpp-define-body): Use them.
4246 4480
@@ -4272,22 +4506,21 @@
4272 (c-guess-basic-syntax): Handle C++ operator identifiers in 4506 (c-guess-basic-syntax): Handle C++ operator identifiers in
4273 declarations. 4507 declarations.
4274 4508
4275 * progmodes/cc-langs.el (c-assignment-operators): Added the 4509 * progmodes/cc-langs.el (c-assignment-operators): Add the
4276 trigraph version of ^= too. 4510 trigraph version of ^= too.
4277 4511
4278 * progmodes/cc-langs.el (c-assignment-operators): Added the 4512 * progmodes/cc-langs.el (c-assignment-operators): Add the
4279 trigraph version of |= in C++. 4513 trigraph version of |= in C++.
4280 4514
4281 * progmodes/cc-fonts.el (c-font-lock-declarators): Handle 4515 * progmodes/cc-fonts.el (c-font-lock-declarators):
4282 `c-decl-hangon-kwds' after the identifier name. 4516 Handle `c-decl-hangon-kwds' after the identifier name.
4283 4517
4284 * progmodes/cc-engine.el (c-guess-basic-syntax): When deciding 4518 * progmodes/cc-engine.el (c-guess-basic-syntax): When deciding
4285 whether an arglist is "nonempty", ignore a comment after the open 4519 whether an arglist is "nonempty", ignore a comment after the open
4286 paren if it isn't followed by a non-comment token on the same 4520 paren if it isn't followed by a non-comment token on the same line.
4287 line.
4288 4521
4289 * progmodes/cc-engine.el (c-guess-basic-syntax): Case 4: Enable 4522 * progmodes/cc-engine.el (c-guess-basic-syntax): Case 4:
4290 heuristics below the point to cope with classes inside special 4523 Enable heuristics below the point to cope with classes inside special
4291 brace lists in Pike. 4524 brace lists in Pike.
4292 4525
42932005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org> 45262005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
@@ -4326,12 +4559,11 @@
4326 * progmodes/cc-cmds.el: Add `c-bytecomp-defun's for 4559 * progmodes/cc-cmds.el: Add `c-bytecomp-defun's for
4327 c-\(forward\|backward\)-subword. 4560 c-\(forward\|backward\)-subword.
4328 (c-update-modeline): Add the new modeline flag `l' for 4561 (c-update-modeline): Add the new modeline flag `l' for
4329 `c-electric-flag'. Make the auto-newline flag `a' dependent on 4562 `c-electric-flag'. Make the auto-newline flag `a' dependent on `l'.
4330 `l'. 4563 (c-toggle-auto-state): Rename it to `c-toggle-auto-newline'.
4331 (c-toggle-auto-state): Rename it to `c-toggle-auto-newline'. Make 4564 Make the old name an alias of the new name.
4332 the old name an alias of the new name.
4333 (c-toggle-electric-state): New function. 4565 (c-toggle-electric-state): New function.
4334 c-electric-\(pound\|brace\|slash\|star\|semi&comma\|colon\|lt-gt\|paren\|continued-statement\): 4566 (c-electric-\(pound\|brace\|slash\|star\|semi&comma\|colon\|lt-gt\|paren\|continued-statement\)):
4335 Adapt these functions to do electric things only when 4567 Adapt these functions to do electric things only when
4336 c-electric-flag is non-nil. 4568 c-electric-flag is non-nil.
4337 (c-point-syntax, c-brace-newlines, c-try-oneliner): Extract these 4569 (c-point-syntax, c-brace-newlines, c-try-oneliner): Extract these
@@ -4347,18 +4579,17 @@
43472005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org> 45792005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
4348 4580
4349 * progmodes/cc-cmds.el (c-show-syntactic-information): Show the 4581 * progmodes/cc-cmds.el (c-show-syntactic-information): Show the
4350 anchor position(s) using faces. Thanks to Masatake YAMATO for the 4582 anchor position(s) using faces. Thanks to Masatake YAMATO for the idea.
4351 idea.
4352 4583
4353 * progmodes/cc-mode.el, cc-cmds.el, cc-defs.el, cc-engine.el 4584 * progmodes/cc-mode.el, cc-cmds.el, cc-defs.el, cc-engine.el
4354 (c-submode-indicators): Changed name from `c-auto-hungry-string' 4585 (c-submode-indicators): Change name from `c-auto-hungry-string'
4355 since it's now used to track another submode. 4586 since it's now used to track another submode.
4356 4587
4357 (c-update-modeline): Converted to function and extended to check 4588 (c-update-modeline): Convert to function and extended to check
4358 `c-subword-move-mode'. 4589 `c-subword-move-mode'.
4359 4590
4360 (c-forward-into-nomenclature, c-backward-into-nomenclature): 4591 (c-forward-into-nomenclature, c-backward-into-nomenclature):
4361 Converted to compat aliases for `c-forward-subword' and 4592 Convert to compat aliases for `c-forward-subword' and
4362 `c-backward-subword'. 4593 `c-backward-subword'.
4363 4594
4364 * progmodes/cc-subword.el: New functions and minor mode to handle 4595 * progmodes/cc-subword.el: New functions and minor mode to handle
@@ -4401,10 +4632,10 @@
4401 4632
44022005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org> 46332005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
4403 4634
4404 * progmodes/cc-engine.el (c-forward-label): Fixed fontification of 4635 * progmodes/cc-engine.el (c-forward-label): Fix fontification of
4405 macros inside labels. 4636 macros inside labels.
4406 4637
4407 * progmodes/cc-engine.el (c-looking-at-bos): Obsoleted in favor of 4638 * progmodes/cc-engine.el (c-looking-at-bos): Obsolete in favor of
4408 `c-at-statement-start-p' and `c-at-expression-start-p'. 4639 `c-at-statement-start-p' and `c-at-expression-start-p'.
4409 4640
4410 * progmodes/cc-defs.el (c-tnt-chng-record-state): Don't signal an 4641 * progmodes/cc-defs.el (c-tnt-chng-record-state): Don't signal an
@@ -4418,9 +4649,8 @@
4418 like `c-at-statement-start-p' that additionally recognizes commas 4649 like `c-at-statement-start-p' that additionally recognizes commas
4419 and expression parentheses as delimiters. 4650 and expression parentheses as delimiters.
4420 4651
4421 * progmodes/cc-engine.el (c-looking-at-inexpr-block): Added flag 4652 * progmodes/cc-engine.el (c-looking-at-inexpr-block): Add flag
4422 to avoid heuristics that doesn't work for unclosed blocks. 4653 to avoid heuristics that doesn't work for unclosed blocks.
4423
4424 (c-at-statement-start-p): New function. 4654 (c-at-statement-start-p): New function.
4425 4655
4426 * progmodes/cc-engine.el, cc-fonts.el: Fixes in handling of 4656 * progmodes/cc-engine.el, cc-fonts.el: Fixes in handling of
@@ -4435,54 +4665,53 @@
4435 (c-just-after-func-arglist-p, c-guess-basic-syntax) 4665 (c-just-after-func-arglist-p, c-guess-basic-syntax)
4436 (c-basic-matchers-before): Use it. 4666 (c-basic-matchers-before): Use it.
4437 4667
4438 (c-font-lock-objc-iip-decl): Removed. 4668 (c-font-lock-objc-iip-decl): Remove.
4439 4669
4440 * progmodes/cc-engine.el (c-guess-basic-syntax): Some improvement 4670 * progmodes/cc-engine.el (c-guess-basic-syntax): Some improvement
4441 in the template arglist recognition. 4671 in the template arglist recognition.
4442 4672
4443 * progmodes/cc-styles.el (c-style-alist): Fixed several 4673 * progmodes/cc-styles.el (c-style-alist): Fix several
4444 inconsistencies in the Whitesmith style. 4674 inconsistencies in the Whitesmith style.
4445 4675
4446 * progmodes/cc-align.el (c-lineup-after-whitesmith-blocks): 4676 * progmodes/cc-align.el (c-lineup-after-whitesmith-blocks):
4447 New lineup function to get lines after Whitesmith style blocks 4677 New lineup function to get lines after Whitesmith style blocks
4448 correctly indented. 4678 correctly indented.
4449 4679
4450 (c-lineup-whitesmith-in-block): Backed out the compensation for 4680 (c-lineup-whitesmith-in-block): Back out the compensation for
4451 opening parens since it's done using `add' lists in the style 4681 opening parens since it's done using `add' lists in the style
4452 definition instead. Don't use the anchor position since it varies 4682 definition instead. Don't use the anchor position since it varies
4453 too much between the syntactic symbols. :P 4683 too much between the syntactic symbols. :P
4454 4684
4455 * progmodes/cc-vars.el (c-valid-offset): Updated. 4685 * progmodes/cc-vars.el (c-valid-offset): Update.
4456 4686
4457 * progmodes/cc-engine.el (c-evaluate-offset): Extended to handle 4687 * progmodes/cc-engine.el (c-evaluate-offset): Extend to handle
4458 lists where the offsets are combined according to several 4688 lists where the offsets are combined according to several
4459 different methods: `first', `min', `max', and `add'. Report 4689 different methods: `first', `min', `max', and `add'.
4460 offset evaluation errors with `c-benign-error' so that some kind 4690 Report offset evaluation errors with `c-benign-error' so that some kind
4461 of reindentation still is done. 4691 of reindentation still is done.
4462 4692
4463 * progmodes/cc-engine.el (c-guess-basic-syntax): Anchor 4693 * progmodes/cc-engine.el (c-guess-basic-syntax):
4464 `arglist-intro' the same way as `arglist-cont-nonempty' and 4694 Anchor `arglist-intro' the same way as `arglist-cont-nonempty' and
4465 `arglist-close'. 4695 `arglist-close'.
4466 4696
4467 * progmodes/cc-engine.el (c-guess-basic-syntax): Fixed similar 4697 * progmodes/cc-engine.el (c-guess-basic-syntax): Fix similar
4468 situations for `arglist-cont-nonempty' and `arglist-close'. 4698 situations for `arglist-cont-nonempty' and `arglist-close'.
4469 4699
4470 * progmodes/cc-langs.el (c-opt-identifier-concat-key-depth): New 4700 * progmodes/cc-langs.el (c-opt-identifier-concat-key-depth): New const.
4471 constant.
4472 4701
4473 * progmodes/cc-defs.el: Use `cc-bytecomp-fboundp' and 4702 * progmodes/cc-defs.el: Use `cc-bytecomp-fboundp' and
4474 cc-bytecomp-boundp' in a number of places. 4703 cc-bytecomp-boundp' in a number of places.
4475 4704
4476 * progmodes/cc-engine.el (c-beginning-of-statement-1): Fixed a 4705 * progmodes/cc-engine.el (c-beginning-of-statement-1): Fix a
4477 macro related issue. 4706 macro related issue.
4478 4707
44792005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org> 47082005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
4480 4709
4481 * progmodes/cc-awk.el: Change the terminology of regexps: A char 4710 * progmodes/cc-awk.el: Change the terminology of regexps: A char
4482 list is now [asdf], a char class [:alpha:]. Include code for char 4711 list is now [asdf], a char class [:alpha:].
4483 classes. Set c-awk-NL-prop on lines ending in open strings. (Bug 4712 Include code for char classes.
4484 fix.) Add character classes (e.g. "[:alpha:]") into AWK Mode's 4713 Set c-awk-NL-prop on lines ending in open strings. (Bug fix.)
4485 regexps. 4714 Add character classes (e.g. "[:alpha:]") into AWK Mode's regexps.
4486 4715
4487 Remove (nearly all of) the cruft associated with AWK Mode's former 4716 Remove (nearly all of) the cruft associated with AWK Mode's former
4488 concept of "virtual semicolons": 4717 concept of "virtual semicolons":
@@ -4521,15 +4750,14 @@
4521 4750
45222005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org> 47512005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
4523 4752
4524 * progmodes/cc-awk.el: Regexps for analysing AWK code have been 4753 * progmodes/cc-awk.el: Move regexps for analysing AWK code to near the
4525 moved to near the start of the file. ^L now separate sections of 4754 start of the file. ^L now separate sections of the file.
4526 the file. New defconsts: c-awk-non-eol-esc-pair-re, 4755 (c-awk-non-eol-esc-pair-re, c-awk-blank-or-comment-line-re)
4527 c-awk-blank-or-comment-line-re, 4756 (c-awk-one-line-possibly-open-string-re)
4528 c-awk-one-line-possibly-open-string-re, 4757 (c-awk-regexp-one-line-possibly-open-char-class-re)
4529 c-awk-regexp-one-line-possibly-open-char-class-re, 4758 (c-awk-one-line-possibly-open-regexp-re)
4530 c-awk-one-line-possibly-open-regexp-re, 4759 (c-awk-one-line-non-syn-ws*-re): New defonsts.
4531 c-awk-one-line-non-syn-ws*-re. New functions: c-awk-at-vsemi-p, 4760 (c-awk-at-vsemi-p, c-awk-vsemi-status-unknown-p): New functions.
4532 c-awk-vsemi-status-unknown-p.
4533 4761
4534 Amend the concept of "virtual semicolons" (in the indentation 4762 Amend the concept of "virtual semicolons" (in the indentation
4535 engine) for languages like AWK, such that they are now 4763 engine) for languages like AWK, such that they are now
@@ -4537,12 +4765,12 @@
4537 the end of the line. (In AWK Mode, however, the pertinent text 4765 the end of the line. (In AWK Mode, however, the pertinent text
4538 property is still physically set on the EOL.) Remove the specific 4766 property is still physically set on the EOL.) Remove the specific
4539 tests for awk-mode, thus facilitating the introduction of other 4767 tests for awk-mode, thus facilitating the introduction of other
4540 language modes where EOLs can end statements. (Note: The 4768 language modes where EOLs can end statements.
4541 funtionality in cc-cmds.el, specifically 4769 (Note: The funtionality in cc-cmds.el, specifically
4542 c-beginning/end-of-statement has yet to be amended.) 4770 c-beginning/end-of-statement has yet to be amended.)
4543 4771
4544 * progmodes/cc-defs.el: New macros c-at-vsemi-p, 4772 * progmodes/cc-defs.el (c-at-vsemi-p, c-vsemi-status-unknown-p):
4545 c-vsemi-status-unknown-p. 4773 New macros.
4546 4774
4547 * progmodes/cc-langs.el: Added `#' into AWK Mode's value of 4775 * progmodes/cc-langs.el: Added `#' into AWK Mode's value of
4548 c-stmt-delim-chars. New c-lang-defvars: c-at-vsemi-p-fn, 4776 c-stmt-delim-chars. New c-lang-defvars: c-at-vsemi-p-fn,
@@ -4552,25 +4780,21 @@
4552 c-crosses-statement-barrier-p, c-guess-basic-syntax, replace 4780 c-crosses-statement-barrier-p, c-guess-basic-syntax, replace
4553 numerous awkward forms like 4781 numerous awkward forms like
4554 (if (c-major-mode-is 'awk-mode) (c-awk-prev-line-incomplete-p)) 4782 (if (c-major-mode-is 'awk-mode) (c-awk-prev-line-incomplete-p))
4555 with 4783 with (c-at-vsemi-p). Fix a few typos. In c-guess-basic-syntax, new
4556 (c-at-vsemi-p). Fix a few typos. In c-guess-basic-syntax, new 4784 variable before-ws-ip, the place just after char-before-ip appears.
4557 variable before-ws-ip, the place just after char-before-ip
4558 appears.
4559 4785
4560 * progmodes/cc-mode.el: Fix what's almost a semantic ambiguity in 4786 * progmodes/cc-mode.el: Fix what's almost a semantic ambiguity in
4561 a comment. 4787 a comment.
4562 4788
45632005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org> 47892005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
4564 4790
4565 * progmodes/cc-cmds.el (c-electric-brace): Cleaned up using 4791 * progmodes/cc-cmds.el (c-electric-brace): Clean up using
4566 `c-tentative-buffer-changes'. 4792 `c-tentative-buffer-changes'.
4567 4793
4568 * progmodes/cc-defs.el (c-region-is-active-p): Simplified and 4794 * progmodes/cc-defs.el (c-region-is-active-p): Simplify and
4569 converted to macro to choose between Emacs and XEmacs at compile 4795 convert to macro to choose between Emacs and XEmacs at compile time.
4570 time.
4571 4796
4572 (c-set-region-active): New set counterpart to 4797 (c-set-region-active): New set counterpart to `c-region-is-active-p'.
4573 `c-region-is-active-p'.
4574 4798
4575 (c-tentative-buffer-changes): New macro to handle temporary buffer 4799 (c-tentative-buffer-changes): New macro to handle temporary buffer
4576 changes in a convenient way. 4800 changes in a convenient way.
@@ -4578,7 +4802,7 @@
4578 (c-tnt-chng-record-state, c-tnt-chng-cleanup): Internal helpers 4802 (c-tnt-chng-record-state, c-tnt-chng-cleanup): Internal helpers
4579 for `c-tentative-buffer-changes'. 4803 for `c-tentative-buffer-changes'.
4580 4804
4581 * progmodes/cc-engine.el (c-looking-at-inexpr-block): Tightened up 4805 * progmodes/cc-engine.el (c-looking-at-inexpr-block): Tighten up
4582 the checks for paren sexps between the point and the keyword, to 4806 the checks for paren sexps between the point and the keyword, to
4583 avoid some false alarms. 4807 avoid some false alarms.
4584 4808
@@ -4587,23 +4811,22 @@
4587 parens. Changed to make use of c-keyword-member' to avoid some 4811 parens. Changed to make use of c-keyword-member' to avoid some
4588 repeated regexp matches. 4812 repeated regexp matches.
4589 4813
4590 (c-opt-lambda-key, c-opt-inexpr-block-key, 4814 (c-opt-lambda-key, c-opt-inexpr-block-key, c-opt-inexpr-class-key):
4591 c-opt-inexpr-class-key): These language variable are no longer 4815 These language variable are no longer necessary.
4592 necessary.
4593 4816
4594 (c-block-stmt-kwds): New language constant used by 4817 (c-block-stmt-kwds): New language constant used by
4595 c-looking-at-inexpr-block'. 4818 c-looking-at-inexpr-block'.
4596 4819
4597 (c-guess-basic-syntax): Removed an optional check that looked at 4820 (c-guess-basic-syntax): Remove an optional check that looked at
4598 the existence of the now removed language variables. 4821 the existence of the now removed language variables.
4599 4822
4600 * progmodes/cc-engine.el (c-fdoc-shift-type-backward, 4823 * progmodes/cc-engine.el (c-fdoc-shift-type-backward)
4601 c-forward-decl-or-cast-1): Fixed invalid recognition of C++ style 4824 (c-forward-decl-or-cast-1): Fix invalid recognition of C++ style
4602 object instantiation expressions as declarations in some contexts. 4825 object instantiation expressions as declarations in some contexts.
4603 This bug only affected languages where the declarator can't be 4826 This bug only affected languages where the declarator can't be
4604 enclosed in parentheses. 4827 enclosed in parentheses.
4605 4828
4606 * progmodes/cc-styles.el (c-style-alist): Fixed the GNU style to 4829 * progmodes/cc-styles.el (c-style-alist): Fix the GNU style to
4607 insert newlines before and after substatement braces. 4830 insert newlines before and after substatement braces.
4608 4831
4609 * progmodes/cc-engine.el: Improved the heuristics for recognizing 4832 * progmodes/cc-engine.el: Improved the heuristics for recognizing
@@ -4613,15 +4836,14 @@
4613 (c-just-after-func-arglist-p): Rewritten to use 4836 (c-just-after-func-arglist-p): Rewritten to use
4614 `c-forward-decl-or-cast-1'. Now behaves a bit differently too. 4837 `c-forward-decl-or-cast-1'. Now behaves a bit differently too.
4615 4838
4616 (c-beginning-of-member-init-list): Removed since it isn't used 4839 (c-beginning-of-member-init-list): Remove since it isn't used anymore.
4617 anymore.
4618 4840
4619 (c-guess-basic-syntax): Case 5B adapted for the new 4841 (c-guess-basic-syntax): Adapt case 5B for the new
4620 `c-just-after-func-arglist-p'. Cases 5B.1 and 5B.3 merged. Cases 4842 `c-just-after-func-arglist-p'. Merge cases 5B.1 and 5B.3.
4621 5D.1 and 5D.2 removed since they aren't trigged anymore (case 5B.1 4843 Remove cases 5D.1 and 5D.2 since they aren't trigged anymore (case 5B.1
4622 covers all cases now). 4844 covers all cases now).
4623 4845
4624 * progmodes/cc-defs.el (c-point): Added `bosws' and `eosws'. 4846 * progmodes/cc-defs.el (c-point): Add `bosws' and `eosws'.
4625 4847
46262005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org> 48482005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
4627 4849
@@ -4644,15 +4866,15 @@
4644 (c-search-uplist-for-classkey): The old one. It's now a wrapper 4866 (c-search-uplist-for-classkey): The old one. It's now a wrapper
4645 for compatibility. 4867 for compatibility.
4646 4868
4647 (c-add-class-syntax, c-guess-continued-construct, 4869 (c-add-class-syntax, c-guess-continued-construct)
4648 c-guess-basic-syntax): Adapted for `c-looking-at-decl-block'. 4870 (c-guess-basic-syntax): Adapt for `c-looking-at-decl-block'.
4649 4871
4650 (c-decl-block-key): Changed to tell apart ambiguous and 4872 (c-decl-block-key): Change to tell apart ambiguous and
4651 unambiguous keywords. Pike specials are now handled directly in 4873 unambiguous keywords. Pike specials are now handled directly in
4652 the code instead. 4874 the code instead.
4653 4875
4654 (c-block-prefix-disallowed-chars, c-block-prefix-charset): New 4876 (c-block-prefix-disallowed-chars, c-block-prefix-charset):
4655 language constants and variables to make the backward skip in 4877 New language constants and variables to make the backward skip in
4656 `c-looking-at-decl-block' as tight as possible. 4878 `c-looking-at-decl-block' as tight as possible.
4657 4879
4658 (c-nonsymbol-token-char-list): New language constant. 4880 (c-nonsymbol-token-char-list): New language constant.
@@ -4663,7 +4885,7 @@
4663 * progmodes/cc-defs.el (c-make-bare-char-alt): New helper for 4885 * progmodes/cc-defs.el (c-make-bare-char-alt): New helper for
4664 making char classes for `c-syntactic-skip-backward'. 4886 making char classes for `c-syntactic-skip-backward'.
4665 4887
4666 * progmodes/cc-engine.el (c-guess-basic-syntax): Simplified case 4888 * progmodes/cc-engine.el (c-guess-basic-syntax): Simplify case
4667 16D - can't be a class-close at that point. 4889 16D - can't be a class-close at that point.
4668 4890
4669 * progmodes/cc-engine.el (c-guess-basic-syntax) 4891 * progmodes/cc-engine.el (c-guess-basic-syntax)
@@ -4674,17 +4896,16 @@
4674 `c-guess-basic-syntax' never will look at things outside the 4896 `c-guess-basic-syntax' never will look at things outside the
4675 current narrowment now. The anchor position for `topmost-intro' 4897 current narrowment now. The anchor position for `topmost-intro'
4676 is affected by this, but it was so bogus it was basically useless 4898 is affected by this, but it was so bogus it was basically useless
4677 before, and now it's equally bogus but in a slightly different 4899 before, and now it's equally bogus but in a slightly different way.
4678 way.
4679 4900
4680 (c-narrow-out-enclosing-class): Gone. 4901 (c-narrow-out-enclosing-class): Gone.
4681 4902
4682 (c-most-enclosing-brace, c-least-enclosing-brace): Don't filter to 4903 (c-most-enclosing-brace, c-least-enclosing-brace): Don't filter to
4683 the narrowed region. 4904 the narrowed region.
4684 4905
4685 (c-least-enclosing-brace): Removed silly optional argument. 4906 (c-least-enclosing-brace): Remove silly optional argument.
4686 4907
4687 * progmodes/cc-engine.el (c-beginning-of-decl-1): Fixed bug where 4908 * progmodes/cc-engine.el (c-beginning-of-decl-1): Fix bug where
4688 the point could be left directly after an open paren when finding 4909 the point could be left directly after an open paren when finding
4689 the beginning of the first decl in the block. 4910 the beginning of the first decl in the block.
4690 4911
@@ -4709,13 +4930,11 @@
4709 (c-identifier-start, c-identifier-key): Now completely calculated 4930 (c-identifier-start, c-identifier-key): Now completely calculated
4710 from other constants. 4931 from other constants.
4711 4932
4712 (c-identifier-last-sym-match): Decommissioned since it's no longer 4933 (c-identifier-last-sym-match): Decommission since it's no longer used.
4713 used.
4714 4934
4715 (c-operators): Use `c-identifier-ops'. Documented 4935 (c-operators): Use `c-identifier-ops'. Document `postfix-if-paren'.
4716 `postfix-if-paren'.
4717 4936
4718 * progmodes/cc-engine.el (c-forward-name): Removed the 4937 * progmodes/cc-engine.el (c-forward-name): Remove the
4719 optimization when c-identifier-key is equal to c-symbol-key since 4938 optimization when c-identifier-key is equal to c-symbol-key since
4720 it doesn't work in byte compiled files. Don't record empty 4939 it doesn't work in byte compiled files. Don't record empty
4721 regions as identifiers. 4940 regions as identifiers.
@@ -4731,13 +4950,13 @@
4731 * progmodes/cc-defs.el (c-lang-const): Fixes to allow use without 4950 * progmodes/cc-defs.el (c-lang-const): Fixes to allow use without
4732 an explicit language in functions. 4951 an explicit language in functions.
4733 4952
4734 * progmodes/cc-defs.el (c-make-keywords-re): Added an appendable 4953 * progmodes/cc-defs.el (c-make-keywords-re): Add an appendable
4735 variant of adornment. 4954 variant of adornment.
4736 4955
4737 * progmodes/cc-langs.el (c-any-class-key): Removed unused language 4956 * progmodes/cc-langs.el (c-any-class-key): Remove unused language
4738 variable. 4957 variable.
4739 4958
4740 (c-type-decl-prefix-key): Removed some now unnecessary cruft from 4959 (c-type-decl-prefix-key): Remove some now unnecessary cruft from
4741 the Pike value. 4960 the Pike value.
4742 4961
4743 * progmodes/cc-engine.el (c-on-identifier) 4962 * progmodes/cc-engine.el (c-on-identifier)
@@ -4745,7 +4964,7 @@
4745 correctly in `skip-chars-backward'. Affected the operator lfun 4964 correctly in `skip-chars-backward'. Affected the operator lfun
4746 syntax in Pike. 4965 syntax in Pike.
4747 4966
4748 * progmodes/cc-langs.el (c-make-init-lang-vars-fun): Disabled the 4967 * progmodes/cc-langs.el (c-make-init-lang-vars-fun): Disable the
4749 diagnostic message about precompiled language vars not being used. 4968 diagnostic message about precompiled language vars not being used.
4750 4969
4751 * progmodes/cc-langs.el (c-paren-nontype-kwds): The GCC keyword 4970 * progmodes/cc-langs.el (c-paren-nontype-kwds): The GCC keyword
@@ -4755,9 +4974,9 @@
4755 (c-specifier-key, c-not-decl-init-keywords): Some cleanup using new 4974 (c-specifier-key, c-not-decl-init-keywords): Some cleanup using new
4756 language constants `c-type-start-kwds' and `c-prefix-spec-kwds'. 4975 language constants `c-type-start-kwds' and `c-prefix-spec-kwds'.
4757 4976
4758 * progmodes/cc-fonts.el, cc-langs.el, cc-engine.el: Internal 4977 * progmodes/cc-fonts.el, cc-langs.el, cc-engine.el:
4759 cleanups to properly detect the declared identifiers in various 4978 Internal cleanups to properly detect the declared identifiers in
4760 declarations. 4979 various declarations.
4761 4980
4762 (c-decl-start-kwds): New language constant to recognize 4981 (c-decl-start-kwds): New language constant to recognize
4763 declarations that can start anywhere. Used for class declarations 4982 declarations that can start anywhere. Used for class declarations
@@ -4768,7 +4987,7 @@
4768 (c-find-decl-spots): Implement `c-decl-start-kwds'. 4987 (c-find-decl-spots): Implement `c-decl-start-kwds'.
4769 4988
4770 (c-other-decl-kwds, c-postfix-decl-spec-kwds, c-decl-hangon-kwds) 4989 (c-other-decl-kwds, c-postfix-decl-spec-kwds, c-decl-hangon-kwds)
4771 (c-decl-hangon-key, c-forward-decl-or-cast-1): Separated the 4990 (c-decl-hangon-key, c-forward-decl-or-cast-1): Separate the
4772 handling of the compiler specific extension keywords into a new 4991 handling of the compiler specific extension keywords into a new
4773 language constant `c-decl-hangon-kwds' that defines keyword 4992 language constant `c-decl-hangon-kwds' that defines keyword
4774 clauses to be ignored in declarations. 4993 clauses to be ignored in declarations.
@@ -4784,9 +5003,8 @@
4784 (c-forward-decl-or-cast-1): Recognize the declared identifier in 5003 (c-forward-decl-or-cast-1): Recognize the declared identifier in
4785 class and enum declarations as such and not as part of the type. 5004 class and enum declarations as such and not as part of the type.
4786 5005
4787 (c-forward-decl-or-cast-1, c-forward-label): Relaxed the 5006 (c-forward-decl-or-cast-1, c-forward-label): Relax the
4788 interpretation of PRECEDING-TOKEN-END when there's no preceding 5007 interpretation of PRECEDING-TOKEN-END when there's no preceding token.
4789 token.
4790 5008
4791 (c-forward-decl-or-cast-1): Don't disregard sure signs of 5009 (c-forward-decl-or-cast-1): Don't disregard sure signs of
4792 declarations when there's some syntax error later on. 5010 declarations when there's some syntax error later on.
@@ -4799,7 +5017,7 @@
4799 5017
4800 * progmodes/cc-engine.el, cc-fonts.el, cc-langs.el, cc-menus.el 5018 * progmodes/cc-engine.el, cc-fonts.el, cc-langs.el, cc-menus.el
4801 * cc-mode.el, cc-styles.el, cc-vars.el, cc-align.el, cc-awk.el 5019 * cc-mode.el, cc-styles.el, cc-vars.el, cc-align.el, cc-awk.el
4802 * cc-cmds.el, cc-defs.el: Changed the policy for marking up 5020 * cc-cmds.el, cc-defs.el: Change the policy for marking up
4803 functions that might do hidden buffer changes: All such internal 5021 functions that might do hidden buffer changes: All such internal
4804 functions are now marked instead of those that don't. 5022 functions are now marked instead of those that don't.
4805 5023
@@ -4814,10 +5032,10 @@
4814 (c-electric-semi&comma, c-electric-colon, c-electric-lt-gt) 5032 (c-electric-semi&comma, c-electric-colon, c-electric-lt-gt)
4815 (c-electric-paren, c-electric-continued-statement, c-indent-command) 5033 (c-electric-paren, c-electric-continued-statement, c-indent-command)
4816 (c-indent-region, c-mask-paragraph, c-indent-new-comment-line) 5034 (c-indent-region, c-mask-paragraph, c-indent-new-comment-line)
4817 (c-context-line-break): Added `c-save-buffer-state' calls to comply 5035 (c-context-line-break): Add `c-save-buffer-state' calls to comply
4818 with the changed semantics of the functions above. 5036 with the changed semantics of the functions above.
4819 5037
4820 * progmodes/cc-engine.el (c-beginning-of-statement-1): Fixed a bug 5038 * progmodes/cc-engine.el (c-beginning-of-statement-1): Fix a bug
4821 when macros occur in obscure places. Optimized the sexp movement 5039 when macros occur in obscure places. Optimized the sexp movement
4822 a bit. 5040 a bit.
4823 5041
@@ -4849,13 +5067,13 @@
4849 * progmodes/cc-engine.el, cc-fonts.el, cc-langs.el: Cleaned up the 5067 * progmodes/cc-engine.el, cc-fonts.el, cc-langs.el: Cleaned up the
4850 label handling. Labels are now recognized in a uniform and more 5068 label handling. Labels are now recognized in a uniform and more
4851 robust way, regardless of context. Text properties are put on all 5069 robust way, regardless of context. Text properties are put on all
4852 labels to recognize the following declarations better. Multiword 5070 labels to recognize the following declarations better.
4853 labels are handled both in indentation and fontification for the 5071 Multiword labels are handled both in indentation and fontification for
4854 benefit of language extensions like Qt. For consistency, keywords 5072 the benefit of language extensions like Qt. For consistency, keywords
4855 in labels are now fontified with the label face instead. That 5073 in labels are now fontified with the label face instead.
4856 also applies to "case" and "default". 5074 That also applies to "case" and "default".
4857 5075
4858 (c-beginning-of-statement-1): Fixed some bugs in the label 5076 (c-beginning-of-statement-1): Fix some bugs in the label
4859 handling. Disregard `c-nonlabel-token-key' in labels that begin 5077 handling. Disregard `c-nonlabel-token-key' in labels that begin
4860 with `c-label-kwds'. 5078 with `c-label-kwds'.
4861 5079
@@ -4867,70 +5085,68 @@
4867 5085
4868 (c-forward-label): New function to recognize labels. 5086 (c-forward-label): New function to recognize labels.
4869 5087
4870 (c-guess-basic-syntax): Replaced uses of `c-label-key' with 5088 (c-guess-basic-syntax): Replace uses of `c-label-key' with
4871 `c-forward-label'. Moved the label recognition cases (14 and 15) 5089 `c-forward-label'. Moved the label recognition cases (14 and 15)
4872 earlier since they aren't so context sensitive now. Handle labels 5090 earlier since they aren't so context sensitive now. Handle labels
4873 on the top level gracefully. Moved access label recognition to 5091 on the top level gracefully. Moved access label recognition to
4874 the generic label case (CASE 15) - removed CASE 5E. 5092 the generic label case (CASE 15) - removed CASE 5E.
4875 5093
4876 (c-font-lock-declarations): Added recognition of labels in the 5094 (c-font-lock-declarations): Add recognition of labels in the
4877 same round since we need to handle labels in parallell with other 5095 same round since we need to handle labels in parallell with other
4878 declarations to recognize both accurately. It should also improve 5096 declarations to recognize both accurately. It should also improve
4879 speed. 5097 speed.
4880 5098
4881 (c-simple-decl-matchers, c-basic-matchers-after): Moved 5099 (c-simple-decl-matchers, c-basic-matchers-after):
4882 `c-font-lock-labels' so that it only is used on decoration level 2 5100 Move `c-font-lock-labels' so that it only is used on decoration level 2
4883 since `c-font-lock-declarations' handles it otherwise. 5101 since `c-font-lock-declarations' handles it otherwise.
4884 5102
4885 (c-complex-decl-matchers): Removed the simplistic recognition of 5103 (c-complex-decl-matchers): Remove the simplistic recognition of
4886 access labels. 5104 access labels.
4887 5105
4888 (c-decl-prefix-re): Removed the kludges that was necessary to cope 5106 (c-decl-prefix-re): Remove the kludges that was necessary to cope
4889 with labels earlier. 5107 with labels earlier.
4890 5108
4891 (c-decl-start-re): New language variable to make 5109 (c-decl-start-re): New language variable to make
4892 `c-font-lock-declarations' stop for the special protection labels 5110 `c-font-lock-declarations' stop for the special protection labels
4893 in Objective-C that start with `@'. 5111 in Objective-C that start with `@'.
4894 5112
4895 (c-label-key): Removed since it's no longer used. 5113 (c-label-key): Remove since it's no longer used.
4896 5114
4897 (c-recognize-colon-labels, c-label-prefix-re): New language 5115 (c-recognize-colon-labels, c-label-prefix-re): New language
4898 constants to support recognition of generic colon-terminated 5116 constants to support recognition of generic colon-terminated labels.
4899 labels.
4900 5117
4901 (c-type-decl-end-used): `c-decl-end' is now used whenever there 5118 (c-type-decl-end-used): `c-decl-end' is now used whenever there
4902 are colon terminated labels. 5119 are colon terminated labels.
4903 5120
4904 * progmodes/cc-align.el (c-lineup-arglist): Fixed bug when the 5121 * progmodes/cc-align.el (c-lineup-arglist): Fix bug when the
4905 first argument starts with a special brace list. 5122 first argument starts with a special brace list.
4906 5123
4907 * progmodes/cc-engine.el, cc-fonts.el (c-forward-decl-or-cast-1) 5124 * progmodes/cc-engine.el, cc-fonts.el (c-forward-decl-or-cast-1)
4908 (c-font-lock-declarations): Broke out the declaration and cast 5125 (c-font-lock-declarations): Break out the declaration and cast
4909 recognition from `c-font-lock-declarations' to a new function, so 5126 recognition from `c-font-lock-declarations' to a new function, so
4910 that it can be used in the indentation engine. 5127 that it can be used in the indentation engine.
4911 5128
4912 * progmodes/cc-engine.el (c-find-decl-spots): Fixed bug in backing 5129 * progmodes/cc-engine.el (c-find-decl-spots): Fix bug in backing
4913 up to the start of the literal. Fixed bug with the point on the 5130 up to the start of the literal. Fixed bug with the point on the
4914 wrong side of the search limit that could happen when the start 5131 wrong side of the search limit that could happen when the start
4915 position is inside a literal. 5132 position is inside a literal.
4916 5133
4917 * progmodes/cc-engine.el (c-parse-state) 5134 * progmodes/cc-engine.el (c-parse-state)
4918 (c-invalidate-state-cache): Modified the use of `c-state-cache-end' 5135 (c-invalidate-state-cache): Modify the use of `c-state-cache-end'
4919 so that it's kept a little bit back to increase the hit rate. 5136 so that it's kept a little bit back to increase the hit rate.
4920 5137
4921 (c-parse-state): Changed the macro handling and fixed some 5138 (c-parse-state): Change the macro handling and fixed some
4922 glitches. Macro context is checked more often than necessary now, 5139 glitches. Macro context is checked more often than necessary now,
4923 but otoh less garbage conses are generated. 5140 but otoh less garbage conses are generated.
4924 5141
4925 * progmodes/cc-engine.el (c-parse-state) 5142 * progmodes/cc-engine.el (c-parse-state)
4926 (c-invalidate-state-cache): Cache the last position where 5143 (c-invalidate-state-cache): Cache the last position where
4927 `c-state-cache' applies. This can speed up refontification quite 5144 `c-state-cache' applies. This can speed up refontification quite
4928 a bit in blocks where there are many non-brace parens before the 5145 a bit in blocks where there are many non-brace parens before the point.
4929 point.
4930 5146
4931 (c-state-cache-end): New variable for this. 5147 (c-state-cache-end): New variable for this.
4932 5148
4933 (c-guess-basic-syntax, c-debug-parse-state): Adapted for the new 5149 (c-guess-basic-syntax, c-debug-parse-state): Adapt for the new
4934 cache variable. 5150 cache variable.
4935 5151
4936 * progmodes/cc-engine.el (c-find-decl-spots): Take more care to 5152 * progmodes/cc-engine.el (c-find-decl-spots): Take more care to
@@ -4941,39 +5157,39 @@
4941 region is a single line inside a literal or macro (typically when 5157 region is a single line inside a literal or macro (typically when
4942 the current line is refontified). 5158 the current line is refontified).
4943 5159
4944 * progmodes/cc-engine.el (c-guess-basic-syntax): Simplified calls 5160 * progmodes/cc-engine.el (c-guess-basic-syntax): Simplify calls
4945 to `c-add-stmt-syntax' - there's no need to explicitly whack off 5161 to `c-add-stmt-syntax' - there's no need to explicitly whack off
4946 entries from the paren state. 5162 entries from the paren state.
4947 5163
4948 * progmodes/cc-engine.el (c-add-stmt-syntax): Narrowed down the 5164 * progmodes/cc-engine.el (c-add-stmt-syntax): Narrow down the
4949 special case for "else if" clauses. 5165 special case for "else if" clauses.
4950 5166
4951 * progmodes/cc-engine.el (c-looking-at-inexpr-block) 5167 * progmodes/cc-engine.el (c-looking-at-inexpr-block)
4952 (c-add-stmt-syntax): Use `c-recognize-paren-inexpr-blocks'. 5168 (c-add-stmt-syntax): Use `c-recognize-paren-inexpr-blocks'.
4953 5169
4954 * progmodes/cc-langs.el (c-recognize-paren-inexpr-blocks): New 5170 * progmodes/cc-langs.el (c-recognize-paren-inexpr-blocks):
4955 language variable to recognize the gcc extension with statement 5171 New language variable to recognize the gcc extension with statement
4956 blocks inside expressions. 5172 blocks inside expressions.
4957 5173
4958 * progmodes/cc-engine.el (c-add-stmt-syntax): Restructured to make 5174 * progmodes/cc-engine.el (c-add-stmt-syntax): Restructure to make
4959 it somewhat more comprehensible. The argument AT-BLOCK-START is 5175 it somewhat more comprehensible. The argument AT-BLOCK-START is
4960 no longer used and hence removed. 5176 no longer used and hence removed.
4961 5177
4962 (c-guess-continued-construct, c-guess-basic-syntax): Updated calls 5178 (c-guess-continued-construct, c-guess-basic-syntax): Update calls
4963 to `c-add-stmt-syntax'. 5179 to `c-add-stmt-syntax'.
4964 5180
4965 * progmodes/cc-engine.el (c-backward-to-decl-anchor): Use 5181 * progmodes/cc-engine.el (c-backward-to-decl-anchor):
4966 `c-beginning-of-statement-1' instead of duplicating parts of it. 5182 Use `c-beginning-of-statement-1' instead of duplicating parts of it.
4967 This fixes bogus label recognition. 5183 This fixes bogus label recognition.
4968 5184
4969 * progmodes/cc-engine.el (c-add-type, c-check-type) 5185 * progmodes/cc-engine.el (c-add-type, c-check-type)
4970 (c-forward-name, c-forward-type): Improved storage of template 5186 (c-forward-name, c-forward-type): Improve storage of template
4971 types in `c-found-types' so that they can be recognized better. 5187 types in `c-found-types' so that they can be recognized better.
4972 5188
4973 (c-syntactic-content): Added option to skip past nested parens. 5189 (c-syntactic-content): Add option to skip past nested parens.
4974 5190
4975 * progmodes/cc-engine.el (c-forward-name): Set 5191 * progmodes/cc-engine.el (c-forward-name):
4976 `c-last-identifier-range' all the time. It's less work that way. 5192 Set `c-last-identifier-range' all the time. It's less work that way.
4977 Handle that there might not be an identifier to store in 5193 Handle that there might not be an identifier to store in
4978 `c-last-identifier-range'. 5194 `c-last-identifier-range'.
4979 5195
@@ -4981,7 +5197,7 @@
4981 nil from `c-forward-name'. 5197 nil from `c-forward-name'.
4982 5198
4983 * progmodes/cc-defs.el (c-safe-scan-lists) 5199 * progmodes/cc-defs.el (c-safe-scan-lists)
4984 (c-(go-)?(up|down)-list-(forward|backward)): Added limit arguments. 5200 (c-(go-)?(up|down)-list-(forward|backward)): Add limit arguments.
4985 5201
4986 * progmodes/cc-defs.el (c-save-buffer-state): Use `unwind-protect' 5202 * progmodes/cc-defs.el (c-save-buffer-state): Use `unwind-protect'
4987 to work even if the form fails. 5203 to work even if the form fails.
@@ -4989,14 +5205,13 @@
4989 * progmodes/cc-engine.el (c-parse-state): Speedup when moving far 5205 * progmodes/cc-engine.el (c-parse-state): Speedup when moving far
4990 down in a large file in one go. 5206 down in a large file in one go.
4991 5207
4992 (c-get-fallback-start-pos): New helper function for 5208 (c-get-fallback-start-pos): New helper function for `c-parse-state'.
4993 `c-parse-state'.
4994 5209
4995 * progmodes/cc-align.el (c-lineup-assignments): New lineup 5210 * progmodes/cc-align.el (c-lineup-assignments): New lineup
4996 function which is like `c-lineup-math' but returns nil instead of 5211 function which is like `c-lineup-math' but returns nil instead of
4997 `c-basic-offset' when it doesn't match. 5212 `c-basic-offset' when it doesn't match.
4998 5213
4999 (c-lineup-math): Changed to use `c-lineup-assignments'. 5214 (c-lineup-math): Change to use `c-lineup-assignments'.
5000 5215
50012005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org> 52162005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
5002 5217
@@ -5011,7 +5226,7 @@
5011 places to use skip by syntax instead of skip by char class. 5226 places to use skip by syntax instead of skip by char class.
5012 5227
5013 * progmodes/cc-langs.el (c-unterminated-block-comment-regexp): 5228 * progmodes/cc-langs.el (c-unterminated-block-comment-regexp):
5014 Fixed a bug in the regexp that caused extreme backtracking. 5229 Fix a bug in the regexp that caused extreme backtracking.
5015 5230
5016 * progmodes/cc-langs.el (c-block-comment-starter) 5231 * progmodes/cc-langs.el (c-block-comment-starter)
5017 (c-block-comment-ender): New language constants to specify in a 5232 (c-block-comment-ender): New language constants to specify in a
@@ -5030,18 +5245,16 @@
5030 5245
5031 (c-simple-ws): New language constant for simple whitespace. 5246 (c-simple-ws): New language constant for simple whitespace.
5032 5247
5033 * progmodes/cc-defs.el (c-concat-separated): New convenience 5248 * progmodes/cc-defs.el (c-concat-separated): New convenience function.
5034 function.
5035 5249
5036 * progmodes/cc-defs.el (c-make-keywords-re): Added kludge for bug 5250 * progmodes/cc-defs.el (c-make-keywords-re): Add kludge for bug
5037 in `regexp-opt' in Emacs 20 and XEmacs when strings contain 5251 in `regexp-opt' in Emacs 20 and XEmacs when strings contain
5038 newlines. Allow and ignore nil elements in the list. 5252 newlines. Allow and ignore nil elements in the list.
5039 5253
50402005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org> 52542005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
5041 5255
5042 * progmodes/cc-cmds.el: Comment out a (n almost certainly 5256 * progmodes/cc-cmds.el: Comment out a (n almost certainly
5043 superfluous) check, (eq here (point-max)) in 5257 superfluous) check, (eq here (point-max)) in c-beginning-of-statement.
5044 c-beginning-of-statement.
5045 5258
5046 * progmodes/cc-cmds.el: Tidy up the comments in 5259 * progmodes/cc-cmds.el: Tidy up the comments in
5047 c-beginning-of-statement and subfunctions. 5260 c-beginning-of-statement and subfunctions.
@@ -5050,8 +5263,7 @@
5050 more flexible c-put-char-property and c-clear-char-properties. 5263 more flexible c-put-char-property and c-clear-char-properties.
5051 Add the author's email address. 5264 Add the author's email address.
5052 5265
5053 * progmodes/cc-langs.el: New variable, 5266 * progmodes/cc-langs.el (c-block-comment-start-regexp): New variable.
5054 c-block-comment-start-regexp.
5055 5267
5056 * progmodes/cc-cmds.el: Fix bug with M-e, when point is inside the 5268 * progmodes/cc-cmds.el: Fix bug with M-e, when point is inside the
5057 closing "*/" of a block comment. 5269 closing "*/" of a block comment.
@@ -5075,11 +5287,11 @@
5075 * progmodes/cc-fonts.el (c-font-lock-invalid-string): Fix when 5287 * progmodes/cc-fonts.el (c-font-lock-invalid-string): Fix when
5076 there are several strings on the same line. 5288 there are several strings on the same line.
5077 5289
5078 * progmodes/cc-engine.el (c-literal-limits): Removed the 5290 * progmodes/cc-engine.el (c-literal-limits): Remove the
5079 compatibility function for older emacsen. `c-literal-limits-fast' 5291 compatibility function for older emacsen. `c-literal-limits-fast'
5080 has now taken the place of this function. 5292 has now taken the place of this function.
5081 5293
5082 * progmodes/cc-vars.el (c-emacs-features): Removed compatibility 5294 * progmodes/cc-vars.el (c-emacs-features): Remove compatibility
5083 with older emacsen: We now require `pps-extended-state'. 5295 with older emacsen: We now require `pps-extended-state'.
5084 5296
50852005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org> 52972005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
@@ -5095,19 +5307,18 @@
5095 eachother. Correct a few incidental bugs. 5307 eachother. Correct a few incidental bugs.
5096 5308
5097 * progmodes/cc-cmds.el: Restructure c-beginning-of-statement: 5309 * progmodes/cc-cmds.el: Restructure c-beginning-of-statement:
5098 Improve its doc-string. Improve the handling of certain specific 5310 Improve its doc-string. Improve the handling of certain specific cases.
5099 cases.
5100 5311
51012005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org> 53122005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
5102 5313
5103 * progmodes/cc-engine.el, cc-fonts.el, cc-langs.el 5314 * progmodes/cc-engine.el, cc-fonts.el, cc-langs.el
5104 (c-guess-basic-syntax): Changed the way class-level labels are 5315 (c-guess-basic-syntax): Change the way class-level labels are
5105 recognized; they can now contain essentially any symbols. 5316 recognized; they can now contain essentially any symbols.
5106 5317
5107 (c-opt-extra-label-key): New language variable to cope with the 5318 (c-opt-extra-label-key): New language variable to cope with the
5108 special protection label syntax in Objective-C. 5319 special protection label syntax in Objective-C.
5109 5320
5110 (c-opt-access-key): Removed; this is now handled better by 5321 (c-opt-access-key): Remove; this is now handled better by
5111 `c-nonlabel-token-key' and `c-opt-extra-label-key'. 5322 `c-nonlabel-token-key' and `c-opt-extra-label-key'.
5112 5323
5113 (c-complex-decl-matchers): Update to handle that 5324 (c-complex-decl-matchers): Update to handle that
@@ -5120,11 +5331,11 @@
5120 Recognize bitfields better. 5331 Recognize bitfields better.
5121 5332
5122 * progmodes/cc-engine.el (c-beginning-of-inheritance-list): 5333 * progmodes/cc-engine.el (c-beginning-of-inheritance-list):
5123 Removed some cruft and fixed a bug that could cause it to go to a 5334 Remove some cruft and fixed a bug that could cause it to go to a
5124 position further down. 5335 position further down.
5125 5336
5126 * progmodes/cc-langs.el, cc-engine.el 5337 * progmodes/cc-langs.el, cc-engine.el
5127 (c-beginning-of-statement-1): Improved detection of labels in 5338 (c-beginning-of-statement-1): Improve detection of labels in
5128 declaration contexts. 5339 declaration contexts.
5129 5340
5130 (c-beginning-of-decl-1): Use it. 5341 (c-beginning-of-decl-1): Use it.
@@ -5132,11 +5343,11 @@
5132 (c-nonlabel-token-key): New language constant and variable needed 5343 (c-nonlabel-token-key): New language constant and variable needed
5133 by `c-beginning-of-statement-1'. 5344 by `c-beginning-of-statement-1'.
5134 5345
5135 * progmodes/cc-engine.el (c-guess-basic-syntax): Fixed bug that 5346 * progmodes/cc-engine.el (c-guess-basic-syntax): Fix bug that
5136 manifested itself due to the correction in `c-forward-sexp'. 5347 manifested itself due to the correction in `c-forward-sexp'.
5137 5348
5138 * progmodes/cc-defs.el (c-forward-sexp, c-backward-sexp): Made 5349 * progmodes/cc-defs.el (c-forward-sexp, c-backward-sexp):
5139 these behave as documented when used at the buffer limits. 5350 Make these behave as documented when used at the buffer limits.
5140 5351
5141 * progmodes/cc-mode.el, cc-engine.el, cc-langs.el 5352 * progmodes/cc-mode.el, cc-engine.el, cc-langs.el
5142 (c-type-decl-end-used): Made this a language variable. 5353 (c-type-decl-end-used): Made this a language variable.
@@ -5145,20 +5356,20 @@
5145 correctly when `combine-after-change-calls' is used together with 5356 correctly when `combine-after-change-calls' is used together with
5146 temporary narrowings. 5357 temporary narrowings.
5147 5358
5148 * progmodes/cc-engine.el (c-beginning-of-statement-1): Report 5359 * progmodes/cc-engine.el (c-beginning-of-statement-1):
5149 labels correctly when the start point is immediately after the 5360 Report labels correctly when the start point is immediately after the
5150 colon. 5361 colon.
5151 5362
5152 * progmodes/cc-defs.el (c-parse-sexp-lookup-properties): Removed 5363 * progmodes/cc-defs.el (c-parse-sexp-lookup-properties):
5153 since it isn't used anymore. 5364 Remove since it isn't used anymore.
5154 5365
5155 * progmodes/cc-cmds.el (c-electric-lt-gt): Detect and mark angle 5366 * progmodes/cc-cmds.el (c-electric-lt-gt): Detect and mark angle
5156 bracket arglists such as template parens in C++. 5367 bracket arglists such as template parens in C++.
5157 5368
5158 * progmodes/cc-engine.el (c-syntactic-skip-backward): Fixed a bug 5369 * progmodes/cc-engine.el (c-syntactic-skip-backward): Fix a bug
5159 in the last check-in. Some optimization. 5370 in the last check-in. Some optimization.
5160 5371
5161 * progmodes/cc-engine.el (c-syntactic-skip-backward): Fixed bug 5372 * progmodes/cc-engine.el (c-syntactic-skip-backward): Fix bug
5162 where it could stop at the same level in a preceding sexp when 5373 where it could stop at the same level in a preceding sexp when
5163 PAREN-LEVEL is set. 5374 PAREN-LEVEL is set.
5164 5375
@@ -5166,7 +5377,7 @@
5166 text property lookup only when it's needed. 5377 text property lookup only when it's needed.
5167 5378
5168 * progmodes/cc-langs.el, cc-engine.el, cc-fonts.el, cc-mode.el: 5379 * progmodes/cc-langs.el, cc-engine.el, cc-fonts.el, cc-mode.el:
5169 Changed the policy for paren marked angle brackets to be more 5380 Change the policy for paren marked angle brackets to be more
5170 persistent; once marked they remain marked even when they're found 5381 persistent; once marked they remain marked even when they're found
5171 to be unbalanced in the searched region. This should keep the 5382 to be unbalanced in the searched region. This should keep the
5172 paren syntax around even when individual lines are refontified in 5383 paren syntax around even when individual lines are refontified in
@@ -5180,7 +5391,7 @@
5180 (c-forward-<>-arglist, c-forward-<>-arglist-recur): The reparse 5391 (c-forward-<>-arglist, c-forward-<>-arglist-recur): The reparse
5181 argument has become `c-parse-and-markup-<>-arglists'. 5392 argument has become `c-parse-and-markup-<>-arglists'.
5182 5393
5183 (c-remove-<>-arglist-properties): Removed - no longer used. 5394 (c-remove-<>-arglist-properties): Remove - no longer used.
5184 5395
5185 (c-after-change-check-<>-operators): New function used on 5396 (c-after-change-check-<>-operators): New function used on
5186 `after-change-functions' to avoid that "<" and ">" characters that 5397 `after-change-functions' to avoid that "<" and ">" characters that
@@ -5192,28 +5403,26 @@
5192 (c-after-change): Call `c-after-change-check-<>-operators'. 5403 (c-after-change): Call `c-after-change-check-<>-operators'.
5193 5404
5194 (c-font-lock-<>-arglists): Use the context properties set by 5405 (c-font-lock-<>-arglists): Use the context properties set by
5195 `c-font-lock-declarations' to set 5406 `c-font-lock-declarations' to set `c-disallow-comma-in-<>-arglists'
5196 `c-disallow-comma-in-<>-arglists' correctly to avoid doing invalid 5407 correctly to avoid doing invalid markup.
5197 markup.
5198 5408
5199 (c-font-lock-declarations): Removed code that undoes the invalid 5409 (c-font-lock-declarations): Remove code that undoes the invalid
5200 markup done by `c-font-lock-<>-arglists'. 5410 markup done by `c-font-lock-<>-arglists'.
5201 5411
5202 (c-complex-decl-matchers): `c-font-lock-<>-arglists' now runs 5412 (c-complex-decl-matchers): `c-font-lock-<>-arglists' now runs
5203 after `c-font-lock-declarations'. 5413 after `c-font-lock-declarations'.
5204 5414
5205 * progmodes/cc-engine.el (c-syntactic-skip-backward): Added 5415 * progmodes/cc-engine.el (c-syntactic-skip-backward):
5206 paren-level feature. 5416 Add paren-level feature.
5207 5417
5208 (c-guess-basic-syntax): Improved the anchor position for 5418 (c-guess-basic-syntax): Improve the anchor position for
5209 `template-args-cont' in nested template arglists. There's still 5419 `template-args-cont' in nested template arglists. There's still
5210 much to be desired in this area, though. 5420 much to be desired in this area, though.
5211 5421
52122005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org> 54222005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
5213 5423
5214 * progmodes/cc-cmds.el, cc-engine.el, cc-langs.el, cc-vars.el: 5424 * progmodes/cc-cmds.el, cc-engine.el, cc-langs.el, cc-vars.el:
5215 Make the "Text Filling and Line Breaking" commands work for AWK 5425 Make the "Text Filling and Line Breaking" commands work for AWK buffers.
5216 buffers.
5217 5426
52182005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org> 54272005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
5219 5428
@@ -5252,7 +5461,7 @@
5252 5461
52532005-12-08 Kim F. Storm <storm@cua.dk> 54622005-12-08 Kim F. Storm <storm@cua.dk>
5254 5463
5255 * emulation/cua-base.el (cua-use-hyper-key): Replaced by ... 5464 * emulation/cua-base.el (cua-use-hyper-key): Replace by ...
5256 (cua-rectangle-modifier-key): ... this. New defcustom. Can now 5465 (cua-rectangle-modifier-key): ... this. New defcustom. Can now
5257 select either meta, hyper, or super modifier for rectangle commands. 5466 select either meta, hyper, or super modifier for rectangle commands.
5258 (cua--rectangle-modifier-key): New defvar. 5467 (cua--rectangle-modifier-key): New defvar.
@@ -5261,8 +5470,8 @@
5261 on X, to meta otherwise. Always bind C-return to toggle 5470 on X, to meta otherwise. Always bind C-return to toggle
5262 rectangle. Pass ?\s instead of `space' to cua--M/H-key. 5471 rectangle. Pass ?\s instead of `space' to cua--M/H-key.
5263 5472
5264 * emulation/cua-rect.el (cua-help-for-rectangle): Use 5473 * emulation/cua-rect.el (cua-help-for-rectangle):
5265 cua--rectangle-modifier-key. Handle super modifier too. 5474 Use cua--rectangle-modifier-key. Handle super modifier too.
5266 (cua--init-rectangles): Always bind C-return to toggle rectangle. 5475 (cua--init-rectangles): Always bind C-return to toggle rectangle.
5267 Pass ?\s instead of `space' to cua--M/H-key and cua--rect-M/H-key. 5476 Pass ?\s instead of `space' to cua--M/H-key and cua--rect-M/H-key.
5268 5477
@@ -5273,8 +5482,8 @@
5273 keymap if cua--prefix-override-timer is `shift'. 5482 keymap if cua--prefix-override-timer is `shift'.
5274 (cua--shift-control-prefix): New function; emulate "type prefix 5483 (cua--shift-control-prefix): New function; emulate "type prefix
5275 key twice" functionality to handle shifted prefix key override. 5484 key twice" functionality to handle shifted prefix key override.
5276 (cua--shift-control-c-prefix, cua--shift-control-x-prefix): New 5485 (cua--shift-control-c-prefix, cua--shift-control-x-prefix):
5277 commands. 5486 New commands.
5278 (cua--init-keymaps): Bind them to S-C-c and S-C-x. 5487 (cua--init-keymaps): Bind them to S-C-c and S-C-x.
5279 5488
52802005-12-08 Carsten Dominik <dominik@science.uva.nl> 54892005-12-08 Carsten Dominik <dominik@science.uva.nl>
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index 60705b30552..e2275ce356d 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -1092,7 +1092,11 @@ or default values have changed since the previous major Emacs release.
1092With argument SINCE-VERSION (a string), customize all settings 1092With argument SINCE-VERSION (a string), customize all settings
1093that were added or redefined since that version." 1093that were added or redefined since that version."
1094 1094
1095 (interactive "sCustomize options changed, since version (default all versions): ") 1095 (interactive
1096 (list
1097 (read-from-minibuffer
1098 (format "Customize options changed, since version (default %s): "
1099 customize-changed-options-previous-release))))
1096 (if (equal since-version "") 1100 (if (equal since-version "")
1097 (setq since-version nil) 1101 (setq since-version nil)
1098 (unless (condition-case nil 1102 (unless (condition-case nil
@@ -3408,12 +3412,12 @@ Optional EVENT is the location for the menu."
3408 ;; Make the comment invisible by hand if it's empty 3412 ;; Make the comment invisible by hand if it's empty
3409 (custom-comment-hide comment-widget)) 3413 (custom-comment-hide comment-widget))
3410 (put symbol 'customized-face value) 3414 (put symbol 'customized-face value)
3415 (custom-push-theme 'theme-face symbol 'user 'set value)
3411 (if (face-spec-choose value) 3416 (if (face-spec-choose value)
3412 (face-spec-set symbol value) 3417 (face-spec-set symbol value)
3413 ;; face-set-spec ignores empty attribute lists, so just give it 3418 ;; face-set-spec ignores empty attribute lists, so just give it
3414 ;; something harmless instead. 3419 ;; something harmless instead.
3415 (face-spec-set symbol '((t :foreground unspecified)))) 3420 (face-spec-set symbol '((t :foreground unspecified))))
3416 (custom-push-theme 'theme-face symbol 'user 'set value)
3417 (put symbol 'customized-face-comment comment) 3421 (put symbol 'customized-face-comment comment)
3418 (put symbol 'face-comment comment) 3422 (put symbol 'face-comment comment)
3419 (custom-face-state-set widget) 3423 (custom-face-state-set widget)
@@ -3486,13 +3490,17 @@ restoring it to the state of a face that has never been customized."
3486 (put symbol 'customized-face nil) 3490 (put symbol 'customized-face nil)
3487 (put symbol 'customized-face-comment nil) 3491 (put symbol 'customized-face-comment nil)
3488 (custom-push-theme 'theme-face symbol 'user 'reset) 3492 (custom-push-theme 'theme-face symbol 'user 'reset)
3493 (face-spec-set symbol value)
3489 (custom-theme-recalc-face symbol) 3494 (custom-theme-recalc-face symbol)
3490 (when (or (get symbol 'saved-face) (get symbol 'saved-face-comment)) 3495 (when (or (get symbol 'saved-face) (get symbol 'saved-face-comment))
3491 (put symbol 'saved-face nil) 3496 (put symbol 'saved-face nil)
3492 (put symbol 'saved-face-comment nil) 3497 (put symbol 'saved-face-comment nil)
3493 (custom-save-all)) 3498 (custom-save-all))
3494 (put symbol 'face-comment nil) 3499 (put symbol 'face-comment nil)
3495 (widget-value-set child value) 3500 (widget-value-set child
3501 (custom-pre-filter-face-spec
3502 (list (list t (custom-face-attributes-get
3503 symbol nil)))))
3496 ;; This call manages the comment visibility 3504 ;; This call manages the comment visibility
3497 (widget-value-set comment-widget "") 3505 (widget-value-set comment-widget "")
3498 (custom-face-state-set widget) 3506 (custom-face-state-set widget)
diff --git a/lisp/custom.el b/lisp/custom.el
index 15b5b4a815c..c67f3b06272 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -819,7 +819,8 @@ See `custom-known-themes' for a list of known themes."
819 (not (equal (eval (car (get symbol 'standard-value))) 819 (not (equal (eval (car (get symbol 'standard-value)))
820 (symbol-value symbol))))) 820 (symbol-value symbol)))))
821 (setq old (list (list 'changed (symbol-value symbol)))) 821 (setq old (list (list 'changed (symbol-value symbol))))
822 (if (facep symbol) 822 (if (and (facep symbol)
823 (not (face-spec-match-p symbol (get symbol 'face-defface-spec))))
823 (setq old (list (list 'changed (list 824 (setq old (list (list 'changed (list
824 (append '(t) (custom-face-attributes-get symbol nil))))))))) 825 (append '(t) (custom-face-attributes-get symbol nil)))))))))
825 (put symbol prop (cons (list theme value) old)) 826 (put symbol prop (cons (list theme value) old))
diff --git a/lisp/diff-mode.el b/lisp/diff-mode.el
index 09645864573..7c7f7902d82 100644
--- a/lisp/diff-mode.el
+++ b/lisp/diff-mode.el
@@ -274,7 +274,7 @@ when editing big diffs)."
274(defvar diff-indicator-changed-face 'diff-indicator-changed) 274(defvar diff-indicator-changed-face 'diff-indicator-changed)
275 275
276(defface diff-function 276(defface diff-function
277 '((t :inherit diff-context)) 277 '((t :inherit diff-header))
278 "`diff-mode' face used to highlight function names produced by \"diff -p\"." 278 "`diff-mode' face used to highlight function names produced by \"diff -p\"."
279 :group 'diff-mode) 279 :group 'diff-mode)
280;; backward-compatibility alias 280;; backward-compatibility alias
diff --git a/lisp/emulation/cua-rect.el b/lisp/emulation/cua-rect.el
index 120866e7925..33b38552595 100644
--- a/lisp/emulation/cua-rect.el
+++ b/lisp/emulation/cua-rect.el
@@ -799,8 +799,8 @@ If command is repeated at same position, delete the rectangle."
799 (if cua--virtual-edges-debug ?, ?\s)) 799 (if cua--virtual-edges-debug ?, ?\s))
800 'face rface)) 800 'face rface))
801 (if (cua--rectangle-right-side) 801 (if (cua--rectangle-right-side)
802 (put-text-property (1- (length ms)) (length ms) 'cursor t ms) 802 (put-text-property (1- (length ms)) (length ms) 'cursor 2 ms)
803 (put-text-property 0 1 'cursor t ms)) 803 (put-text-property 0 1 'cursor 2 ms))
804 (setq bs (concat bs ms)) 804 (setq bs (concat bs ms))
805 (setq rface nil)) 805 (setq rface nil))
806 (t 806 (t
@@ -810,8 +810,8 @@ If command is repeated at same position, delete the rectangle."
810 (if cua--virtual-edges-debug ?~ ?\s)) 810 (if cua--virtual-edges-debug ?~ ?\s))
811 'face rface)) 811 'face rface))
812 (if (cua--rectangle-right-side) 812 (if (cua--rectangle-right-side)
813 (put-text-property (1- (length as)) (length as) 'cursor t as) 813 (put-text-property (1- (length as)) (length as) 'cursor 2 as)
814 (put-text-property 0 1 'cursor t as)) 814 (put-text-property 0 1 'cursor 2 as))
815 (if (/= pr le) 815 (if (/= pr le)
816 (setq e (1- e)))))))) 816 (setq e (1- e))))))))
817 ;; Trim old leading overlays. 817 ;; Trim old leading overlays.
diff --git a/lisp/files.el b/lisp/files.el
index c1fbf37da4a..e4610ac1d3c 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -990,6 +990,20 @@ documentation for additional customization information."
990 (pop-to-buffer buffer t norecord) 990 (pop-to-buffer buffer t norecord)
991 (raise-frame (window-frame (selected-window))))) 991 (raise-frame (window-frame (selected-window)))))
992 992
993(defun display-buffer-other-frame (buffer)
994 "Switch to buffer BUFFER in another frame.
995This uses the function `display-buffer' as a subroutine; see its
996documentation for additional customization information."
997 (interactive "BDisplay buffer in other frame: ")
998 (let ((pop-up-frames t)
999 same-window-buffer-names same-window-regexps
1000 (old-window (selected-window))
1001 new-window)
1002 (setq new-window (display-buffer buffer t))
1003 (lower-frame (window-frame new-window))
1004 (make-frame-invisible (window-frame old-window))
1005 (make-frame-visible (window-frame old-window))))
1006
993(defvar find-file-default nil 1007(defvar find-file-default nil
994 "Used within `find-file-read-args'.") 1008 "Used within `find-file-read-args'.")
995 1009
@@ -5154,6 +5168,7 @@ only these files will be asked to be saved."
5154(define-key ctl-x-5-map "f" 'find-file-other-frame) 5168(define-key ctl-x-5-map "f" 'find-file-other-frame)
5155(define-key ctl-x-5-map "\C-f" 'find-file-other-frame) 5169(define-key ctl-x-5-map "\C-f" 'find-file-other-frame)
5156(define-key ctl-x-5-map "r" 'find-file-read-only-other-frame) 5170(define-key ctl-x-5-map "r" 'find-file-read-only-other-frame)
5171(define-key ctl-x-4-map "\C-o" 'display-buffer-other-frame)
5157 5172
5158;; arch-tag: bc68d3ea-19ca-468b-aac6-3a4a7766101f 5173;; arch-tag: bc68d3ea-19ca-468b-aac6-3a4a7766101f
5159;;; files.el ends here 5174;;; files.el ends here
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index 1b4e79a0c87..c2b8d7200da 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -281,12 +281,6 @@ If a number, only buffers greater than this size have fontification messages."
281 (other :tag "always" t) 281 (other :tag "always" t)
282 (integer :tag "size")) 282 (integer :tag "size"))
283 :group 'font-lock) 283 :group 'font-lock)
284
285(defcustom font-lock-lines-before 0
286 "*Number of lines before the changed text to include in refontification."
287 :type 'integer
288 :group 'font-lock
289 :version "22.1")
290 284
291 285
292;; Originally these variable values were face names such as `bold' etc. 286;; Originally these variable values were face names such as `bold' etc.
@@ -1098,9 +1092,8 @@ what properties to clear before refontifying a region.")
1098 ;; Fontify the region the major mode has specified. 1092 ;; Fontify the region the major mode has specified.
1099 (setq beg (car region) end (cdr region)) 1093 (setq beg (car region) end (cdr region))
1100 ;; Fontify the whole lines which enclose the region. 1094 ;; Fontify the whole lines which enclose the region.
1101 (setq beg (progn (goto-char beg) 1095 (setq beg (progn (goto-char beg) (line-beginning-position))
1102 (forward-line (- font-lock-lines-before))) 1096 end (progn (goto-char end) (line-beginning-position 2))))
1103 end (progn (goto-char end) (forward-line 1) (point))))
1104 (font-lock-fontify-region beg end))))) 1097 (font-lock-fontify-region beg end)))))
1105 1098
1106(defun font-lock-fontify-block (&optional arg) 1099(defun font-lock-fontify-block (&optional arg)
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 8023af47bfd..966451cce3c 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,65 @@
12006-03-21 Daniel Pittman <daniel@rimspace.net>
2
3 * nnimap.el (nnimap-request-update-info-internal): Optimize.
4 Don't `gnus-uncompress-range' to avoid excessive memory usage.
5
62006-03-21 Reiner Steib <Reiner.Steib@gmx.de>
7
8 * gnus-agent.el (gnus-agent-queue-mail): Fix custom tag for `t'.
9
10 * spam.el (spam-mark-new-messages-in-spam-group-as-spam): Add
11 comment on version.
12
132006-03-20 Teodor Zlatanov <tzz@lifelogs.com>
14
15 * spam.el (spam-mark-new-messages-in-spam-group-as-spam): New
16 variable.
17 (spam-mark-junk-as-spam-routine): Use it. Allow to disable
18 assigning the spam-mark to new messages.
19
202006-03-20 Adam Sj,Ax(Bgren <asjo@koldfront.dk> (tiny change)
21
22 (spam-ham-copy-or-move-routine): Don't declare `todo' twice.
23
242006-03-20 Reiner Steib <Reiner.Steib@gmx.de>
25
26 * smiley.el: Add missing test smiley.
27
282006-03-17 Katsumi Yamaoka <yamaoka@jpl.org>
29
30 * mm-decode.el (mm-with-part): New macro.
31 (mm-get-part): Use it; work with message/external-body as well.
32 (mm-save-part): Treat name and filename equally.
33
34 * mm-extern.el (mm-extern-cache-contents): New function.
35 (mm-inline-external-body): Use it; force the part to be displayed;
36 move undisplayer added to the cached handle to the parent.
37
38 * gnus-art.el (gnus-mime-save-part-and-strip): Add name parameter.
39 (gnus-mime-view-part-as-type): Work with message/external-body.
40
41 * gnus-util.el (gnus-tool-bar-update): Bind tool-bar-mode.
42
432006-03-15 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
44
45 * gnus-art.el (gnus-article-only-boring-p): Bind
46 inhibit-point-motion-hooks to avoid infinite loop when entering
47 intangible text. Reported by Ralf Wachinger
48 <rwnewsmampfer@geekmail.de>.
49
502006-03-14 Simon Josefsson <jas@extundo.com>
51
52 * message.el (message-unique-id): Don't use message-number-base36
53 if (user-uid) is a float. Reported by Bjorn Solberg
54 <bjorn_ding1@hekneby.org>.
55
562006-03-13 Katsumi Yamaoka <yamaoka@jpl.org>
57
58 * mm-uu.el (mm-uu-dissect): Dissect all parts correctly.
59
60 * gnus-art.el (gnus-mime-display-single): Make sure there is an
61 empty line between a part and a message part.
62
12006-03-10 Reiner Steib <Reiner.Steib@gmx.de> 632006-03-10 Reiner Steib <Reiner.Steib@gmx.de>
2 64
3 * smiley.el: Add more test smileys. 65 * smiley.el: Add more test smileys.
diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el
index c467c296fa0..123ad340ae1 100644
--- a/lisp/gnus/gnus-agent.el
+++ b/lisp/gnus/gnus-agent.el
@@ -204,7 +204,7 @@ queue. Otherwise, queue if and only if unplugged."
204 :group 'gnus-agent 204 :group 'gnus-agent
205 :type '(radio (const :format "Always" always) 205 :type '(radio (const :format "Always" always)
206 (const :format "Never" nil) 206 (const :format "Never" nil)
207 (const :format "When plugged" t))) 207 (const :format "When unplugged" t)))
208 208
209(defcustom gnus-agent-prompt-send-queue nil 209(defcustom gnus-agent-prompt-send-queue nil
210 "If non-nil, `gnus-group-send-queue' will prompt if called when 210 "If non-nil, `gnus-group-send-queue' will prompt if called when
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index 0c9cb18506a..69fe8159c10 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -49,6 +49,7 @@
49(autoload 'gnus-button-mailto "gnus-msg") 49(autoload 'gnus-button-mailto "gnus-msg")
50(autoload 'gnus-button-reply "gnus-msg" nil t) 50(autoload 'gnus-button-reply "gnus-msg" nil t)
51(autoload 'parse-time-string "parse-time" nil nil) 51(autoload 'parse-time-string "parse-time" nil nil)
52(autoload 'mm-extern-cache-contents "mm-extern")
52 53
53(defgroup gnus-article nil 54(defgroup gnus-article nil
54 "Article display." 55 "Article display."
@@ -4151,6 +4152,9 @@ Deleting parts may malfunction or destroy the article; continue? ")
4151 (insert "Content-Type: " (mm-handle-media-type data)) 4152 (insert "Content-Type: " (mm-handle-media-type data))
4152 (mml-insert-parameter-string (cdr (mm-handle-type data)) 4153 (mml-insert-parameter-string (cdr (mm-handle-type data))
4153 '(charset)) 4154 '(charset))
4155 ;; Add a filename for the sake of saving the part again.
4156 (mml-insert-parameter
4157 (mail-header-encode-parameter "name" (file-name-nondirectory file)))
4154 (insert "\n") 4158 (insert "\n")
4155 (insert "Content-ID: " (message-make-message-id) "\n") 4159 (insert "Content-ID: " (message-make-message-id) "\n")
4156 (insert "Content-Transfer-Encoding: binary\n") 4160 (insert "Content-Transfer-Encoding: binary\n")
@@ -4330,6 +4334,10 @@ Deleting parts may malfunction or destroy the article; continue? ")
4330 (gnus-article-check-buffer) 4334 (gnus-article-check-buffer)
4331 (let ((handle (get-text-property (point) 'gnus-data))) 4335 (let ((handle (get-text-property (point) 'gnus-data)))
4332 (when handle 4336 (when handle
4337 (when (equal (mm-handle-media-type handle) "message/external-body")
4338 (unless (mm-handle-cache handle)
4339 (mm-extern-cache-contents handle))
4340 (setq handle (mm-handle-cache handle)))
4333 (setq handle 4341 (setq handle
4334 (mm-make-handle (mm-handle-buffer handle) 4342 (mm-make-handle (mm-handle-buffer handle)
4335 (cons mime-type (cdr (mm-handle-type handle))) 4343 (cons mime-type (cdr (mm-handle-type handle)))
@@ -4889,13 +4897,18 @@ If displaying \"text/html\" is discouraged \(see
4889 (let ((id (1+ (length gnus-article-mime-handle-alist))) 4897 (let ((id (1+ (length gnus-article-mime-handle-alist)))
4890 beg) 4898 beg)
4891 (push (cons id handle) gnus-article-mime-handle-alist) 4899 (push (cons id handle) gnus-article-mime-handle-alist)
4900 (when (and display
4901 (equal (mm-handle-media-supertype handle) "message"))
4902 (insert-char
4903 ?\n
4904 (cond ((not (bolp)) 2)
4905 ((or (bobp) (eq (char-before (1- (point))) ?\n)) 0)
4906 (t 1))))
4892 (when (or (not display) 4907 (when (or (not display)
4893 (not (gnus-unbuttonized-mime-type-p type))) 4908 (not (gnus-unbuttonized-mime-type-p type)))
4894 ;(gnus-article-insert-newline)
4895 (gnus-insert-mime-button 4909 (gnus-insert-mime-button
4896 handle id (list (or display (and not-attachment text)))) 4910 handle id (list (or display (and not-attachment text))))
4897 (gnus-article-insert-newline) 4911 (gnus-article-insert-newline)
4898 ;(gnus-article-insert-newline)
4899 ;; Remember modify the number of forward lines. 4912 ;; Remember modify the number of forward lines.
4900 (setq move t)) 4913 (setq move t))
4901 (setq beg (point)) 4914 (setq beg (point))
@@ -5313,14 +5326,15 @@ not have a face in `gnus-article-boring-faces'."
5313 (boundp 'gnus-article-boring-faces) 5326 (boundp 'gnus-article-boring-faces)
5314 (symbol-value 'gnus-article-boring-faces)) 5327 (symbol-value 'gnus-article-boring-faces))
5315 (save-excursion 5328 (save-excursion
5316 (catch 'only-boring 5329 (let ((inhibit-point-motion-hooks t))
5317 (while (re-search-forward "\\b\\w\\w" nil t) 5330 (catch 'only-boring
5318 (forward-char -1) 5331 (while (re-search-forward "\\b\\w\\w" nil t)
5319 (when (not (gnus-intersection 5332 (forward-char -1)
5320 (gnus-faces-at (point)) 5333 (when (not (gnus-intersection
5321 (symbol-value 'gnus-article-boring-faces))) 5334 (gnus-faces-at (point))
5322 (throw 'only-boring nil))) 5335 (symbol-value 'gnus-article-boring-faces)))
5323 (throw 'only-boring t))))) 5336 (throw 'only-boring nil)))
5337 (throw 'only-boring t))))))
5324 5338
5325(defun gnus-article-refer-article () 5339(defun gnus-article-refer-article ()
5326 "Read article specified by message-id around point." 5340 "Read article specified by message-id around point."
diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el
index 686fe1cf837..cb3a4e9209c 100644
--- a/lisp/gnus/gnus-util.el
+++ b/lisp/gnus/gnus-util.el
@@ -1459,6 +1459,9 @@ Return nil otherwise."
1459 display)) 1459 display))
1460 display))))) 1460 display)))))
1461 1461
1462(eval-when-compile
1463 (defvar tool-bar-mode))
1464
1462(defun gnus-tool-bar-update (&rest ignore) 1465(defun gnus-tool-bar-update (&rest ignore)
1463 "Update the tool bar." 1466 "Update the tool bar."
1464 (when (and (boundp 'tool-bar-mode) 1467 (when (and (boundp 'tool-bar-mode)
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 1bdc2f6a11f..236ec1bc23f 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -4671,7 +4671,9 @@ If NOW, use that time instead."
4671 (* 25 25))) 4671 (* 25 25)))
4672 (let ((tm (current-time))) 4672 (let ((tm (current-time)))
4673 (concat 4673 (concat
4674 (if (memq system-type '(ms-dos emx vax-vms)) 4674 (if (or (memq system-type '(ms-dos emx vax-vms))
4675 ;; message-number-base36 doesn't handle bigints.
4676 (floatp (user-uid)))
4675 (let ((user (downcase (user-login-name)))) 4677 (let ((user (downcase (user-login-name))))
4676 (while (string-match "[^a-z0-9_]" user) 4678 (while (string-match "[^a-z0-9_]" user)
4677 (aset user (match-beginning 0) ?_)) 4679 (aset user (match-beginning 0) ?_))
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index 01557659fd6..f0f1ee430ff 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -36,6 +36,7 @@
36 (autoload 'executable-find "executable") 36 (autoload 'executable-find "executable")
37 (autoload 'mm-inline-partial "mm-partial") 37 (autoload 'mm-inline-partial "mm-partial")
38 (autoload 'mm-inline-external-body "mm-extern") 38 (autoload 'mm-inline-external-body "mm-extern")
39 (autoload 'mm-extern-cache-contents "mm-extern")
39 (autoload 'mm-insert-inline "mm-view")) 40 (autoload 'mm-insert-inline "mm-view"))
40 41
41(defvar gnus-current-window-configuration) 42(defvar gnus-current-window-configuration)
@@ -1082,17 +1083,35 @@ external if displayed external."
1082;;; Functions for outputting parts 1083;;; Functions for outputting parts
1083;;; 1084;;;
1084 1085
1086(defmacro mm-with-part (handle &rest forms)
1087 "Run FORMS in the temp buffer containing the contents of HANDLE."
1088 `(let* ((handle ,handle)
1089 ;; The multibyteness of the temp buffer should be turned on
1090 ;; if inserting a multibyte string. Contrarily, the buffer's
1091 ;; multibyteness should be off if inserting a unibyte string,
1092 ;; especially if a string contains 8bit data.
1093 (default-enable-multibyte-characters
1094 (with-current-buffer (mm-handle-buffer handle)
1095 (mm-multibyte-p))))
1096 (with-temp-buffer
1097 (insert-buffer-substring (mm-handle-buffer handle))
1098 (mm-disable-multibyte)
1099 (mm-decode-content-transfer-encoding
1100 (mm-handle-encoding handle)
1101 (mm-handle-media-type handle))
1102 ,@forms)))
1103(put 'mm-with-part 'lisp-indent-function 1)
1104(put 'mm-with-part 'edebug-form-spec '(body))
1105
1085(defun mm-get-part (handle) 1106(defun mm-get-part (handle)
1086 "Return the contents of HANDLE as a string." 1107 "Return the contents of HANDLE as a string."
1087 (let ((default-enable-multibyte-characters 1108 (if (equal (mm-handle-media-type handle) "message/external-body")
1088 (with-current-buffer (mm-handle-buffer handle) 1109 (progn
1089 (mm-multibyte-p)))) 1110 (unless (mm-handle-cache handle)
1090 (with-temp-buffer 1111 (mm-extern-cache-contents handle))
1091 (insert-buffer-substring (mm-handle-buffer handle)) 1112 (with-current-buffer (mm-handle-buffer (mm-handle-cache handle))
1092 (mm-disable-multibyte) 1113 (buffer-string)))
1093 (mm-decode-content-transfer-encoding 1114 (mm-with-part handle
1094 (mm-handle-encoding handle)
1095 (mm-handle-media-type handle))
1096 (buffer-string)))) 1115 (buffer-string))))
1097 1116
1098(defun mm-insert-part (handle) 1117(defun mm-insert-part (handle)
@@ -1148,18 +1167,19 @@ string if you do not like underscores."
1148 1167
1149(defun mm-save-part (handle) 1168(defun mm-save-part (handle)
1150 "Write HANDLE to a file." 1169 "Write HANDLE to a file."
1151 (let* ((name (mail-content-type-get (mm-handle-type handle) 'name)) 1170 (let ((filename (or (mail-content-type-get
1152 (filename (mail-content-type-get 1171 (mm-handle-disposition handle) 'filename)
1153 (mm-handle-disposition handle) 'filename)) 1172 (mail-content-type-get
1154 file) 1173 (mm-handle-type handle) 'name)))
1174 file)
1155 (when filename 1175 (when filename
1156 (setq filename (gnus-map-function mm-file-name-rewrite-functions 1176 (setq filename (gnus-map-function mm-file-name-rewrite-functions
1157 (file-name-nondirectory filename)))) 1177 (file-name-nondirectory filename))))
1158 (setq file 1178 (setq file
1159 (mm-with-multibyte 1179 (mm-with-multibyte
1160 (read-file-name "Save MIME part to: " 1180 (read-file-name "Save MIME part to: "
1161 (or mm-default-directory default-directory) 1181 (or mm-default-directory default-directory)
1162 nil nil (or filename name "")))) 1182 nil nil (or filename ""))))
1163 (setq mm-default-directory (file-name-directory file)) 1183 (setq mm-default-directory (file-name-directory file))
1164 (and (or (not (file-exists-p file)) 1184 (and (or (not (file-exists-p file))
1165 (yes-or-no-p (format "File %s already exists; overwrite? " 1185 (yes-or-no-p (format "File %s already exists; overwrite? "
diff --git a/lisp/gnus/mm-extern.el b/lisp/gnus/mm-extern.el
index da3ecb8f351..b736374f016 100644
--- a/lisp/gnus/mm-extern.el
+++ b/lisp/gnus/mm-extern.el
@@ -112,11 +112,8 @@
112 (insert "[" info "]\n\n"))) 112 (insert "[" info "]\n\n")))
113 113
114;;;###autoload 114;;;###autoload
115(defun mm-inline-external-body (handle &optional no-display) 115(defun mm-extern-cache-contents (handle)
116 "Show the external-body part of HANDLE. 116 "Put the external-body part of HANDLE into its cache."
117This function replaces the buffer of HANDLE with a buffer contains
118the entire message.
119If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing."
120 (let* ((access-type (cdr (assq 'access-type 117 (let* ((access-type (cdr (assq 'access-type
121 (cdr (mm-handle-type handle))))) 118 (cdr (mm-handle-type handle)))))
122 (func (cdr (assq (intern 119 (func (cdr (assq (intern
@@ -124,48 +121,61 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing."
124 (or access-type 121 (or access-type
125 (error "Couldn't find access type")))) 122 (error "Couldn't find access type"))))
126 mm-extern-function-alist))) 123 mm-extern-function-alist)))
127 gnus-displaying-mime buf 124 buf handles)
128 handles) 125 (unless func
129 (unless (mm-handle-cache handle) 126 (error "Access type (%s) is not supported" access-type))
130 (unless func 127 (mm-with-part handle
131 (error "Access type (%s) is not supported" access-type)) 128 (goto-char (point-max))
132 (with-temp-buffer 129 (insert "\n\n")
133 (mm-insert-part handle) 130 ;; It should be just a single MIME handle.
134 (goto-char (point-max)) 131 (setq handles (mm-dissect-buffer t)))
135 (insert "\n\n") 132 (unless (bufferp (car handles))
136 (setq handles (mm-dissect-buffer t))) 133 (mm-destroy-parts handles)
137 (unless (bufferp (car handles)) 134 (error "Multipart external body is not supported"))
138 (mm-destroy-parts handles) 135 (save-excursion
139 (error "Multipart external body is not supported")) 136 (set-buffer (setq buf (mm-handle-buffer handles)))
140 (save-excursion ;; single part 137 (let (good)
141 (set-buffer (setq buf (mm-handle-buffer handles))) 138 (unwind-protect
142 (let (good) 139 (progn
143 (unwind-protect 140 (funcall func handle)
144 (progn 141 (setq good t))
145 (funcall func handle) 142 (unless good
146 (setq good t)) 143 (mm-destroy-parts handles))))
147 (unless good 144 (mm-handle-set-cache handle handles))
148 (mm-destroy-parts handles)))) 145 (setq gnus-article-mime-handles
149 (mm-handle-set-cache handle handles)) 146 (mm-merge-handles gnus-article-mime-handles handles))))
150 (setq gnus-article-mime-handles 147
151 (mm-merge-handles gnus-article-mime-handles handles))) 148;;;###autoload
152 (unless no-display 149(defun mm-inline-external-body (handle &optional no-display)
153 (save-excursion 150 "Show the external-body part of HANDLE.
154 (save-restriction 151This function replaces the buffer of HANDLE with a buffer contains
155 (narrow-to-region (point) (point)) 152the entire message.
156 (gnus-display-mime (mm-handle-cache handle)) 153If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing."
157 (mm-handle-set-undisplayer 154 (unless (mm-handle-cache handle)
158 handle 155 (mm-extern-cache-contents handle))
159 `(lambda () 156 (unless no-display
160 (let (buffer-read-only) 157 (save-excursion
161 (condition-case nil 158 (save-restriction
162 ;; This is only valid on XEmacs. 159 (narrow-to-region (point) (point))
163 (mapcar (lambda (prop) 160 (let* ((type (regexp-quote
164 (remove-specifier 161 (mm-handle-media-type (mm-handle-cache handle))))
165 (face-property 'default prop) (current-buffer))) 162 ;; Force the part to be displayed (but if there is no
166 '(background background-pixmap foreground)) 163 ;; method to display, a user will be prompted to save).
167 (error nil)) 164 ;; See `gnus-mime-display-single'.
168 (delete-region ,(point-min-marker) ,(point-max-marker)))))))))) 165 (mm-inline-override-types nil)
166 (mm-attachment-override-types
167 (cons type mm-attachment-override-types))
168 (mm-automatic-display (cons type mm-automatic-display))
169 (mm-automatic-external-display
170 (cons type mm-automatic-external-display))
171 ;; Suppress adding of button to the cached part.
172 (gnus-inhibit-mime-unbuttonizing nil))
173 (gnus-display-mime (mm-handle-cache handle)))
174 ;; Move undisplayer added to the cached handle to the parent.
175 (mm-handle-set-undisplayer
176 handle
177 (mm-handle-undisplayer (mm-handle-cache handle)))
178 (mm-handle-set-undisplayer (mm-handle-cache handle) nil)))))
169 179
170(provide 'mm-extern) 180(provide 'mm-extern)
171 181
diff --git a/lisp/gnus/mm-uu.el b/lisp/gnus/mm-uu.el
index eb5afa794f5..9029e0d699c 100644
--- a/lisp/gnus/mm-uu.el
+++ b/lisp/gnus/mm-uu.el
@@ -464,7 +464,8 @@ value of `mm-uu-text-plain-type'."
464 (t (goto-char (point-max)))) 464 (t (goto-char (point-max))))
465 (setq text-start (point)) 465 (setq text-start (point))
466 (while (re-search-forward mm-uu-beginning-regexp nil t) 466 (while (re-search-forward mm-uu-beginning-regexp nil t)
467 (setq start-point (match-beginning 0)) 467 (setq start-point (match-beginning 0)
468 entry nil)
468 (let ((alist mm-uu-type-alist) 469 (let ((alist mm-uu-type-alist)
469 (beginning-regexp (match-string 0))) 470 (beginning-regexp (match-string 0)))
470 (while (not entry) 471 (while (not entry)
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index 3c05b3713ea..bada9da6891 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -1127,18 +1127,12 @@ function is generally only called when Gnus is shutting down."
1127 (let (seen unseen) 1127 (let (seen unseen)
1128 ;; read info could contain articles marked unread by other 1128 ;; read info could contain articles marked unread by other
1129 ;; imap clients! we correct this 1129 ;; imap clients! we correct this
1130 (setq seen (gnus-uncompress-range (gnus-info-read info)) 1130 (setq unseen (gnus-compress-sequence
1131 unseen (imap-search "UNSEEN UNDELETED") 1131 (imap-search "UNSEEN UNDELETED"))
1132 seen (gnus-set-difference seen unseen) 1132 seen (gnus-range-difference (gnus-info-read info) unseen)
1133 ;; seen might lack articles marked as read by other 1133 seen (gnus-range-add seen
1134 ;; imap clients! we correct this 1134 (gnus-compress-sequence
1135 seen (append seen (imap-search "SEEN")) 1135 (imap-search "SEEN")))
1136 ;; remove dupes
1137 seen (sort seen '<)
1138 seen (gnus-compress-sequence seen t)
1139 ;; we can't return '(1) since this isn't a "list of ranges",
1140 ;; and we can't return '((1)) since g-list-of-unread-articles
1141 ;; is buggy so we return '((1 . 1)).
1142 seen (if (and (integerp (car seen)) 1136 seen (if (and (integerp (car seen))
1143 (null (cdr seen))) 1137 (null (cdr seen)))
1144 (list (cons (car seen) (car seen))) 1138 (list (cons (car seen) (car seen)))
diff --git a/lisp/gnus/smiley.el b/lisp/gnus/smiley.el
index e8afe9dd10d..6476340f7bf 100644
--- a/lisp/gnus/smiley.el
+++ b/lisp/gnus/smiley.el
@@ -42,6 +42,7 @@
42;; indifferent :-| 42;; indifferent :-|
43;; wry :-/ :-\ 43;; wry :-/ :-\
44;; sad :-( 44;; sad :-(
45;; frown :-{
45;; evil >:-) 46;; evil >:-)
46;; cry ;-( 47;; cry ;-(
47;; dead X-) 48;; dead X-)
diff --git a/lisp/gnus/spam.el b/lisp/gnus/spam.el
index ed5fd6e7980..047035536f2 100644
--- a/lisp/gnus/spam.el
+++ b/lisp/gnus/spam.el
@@ -100,6 +100,12 @@ spam groups."
100 :type 'boolean 100 :type 'boolean
101 :group 'spam) 101 :group 'spam)
102 102
103(defcustom spam-mark-new-messages-in-spam-group-as-spam t
104 "Whether new messages in a spam group should get the spam-mark."
105 :type 'boolean
106 ;; :version "22.1" ;; Gnus 5.10.8 / No Gnus 0.3
107 :group 'spam)
108
103(defcustom spam-log-to-registry nil 109(defcustom spam-log-to-registry nil
104 "Whether spam/ham processing should be logged in the registry." 110 "Whether spam/ham processing should be logged in the registry."
105 :type 'boolean 111 :type 'boolean
@@ -676,15 +682,17 @@ spam-use-* variable.")
676 ;; check the global list of group names spam-junk-mailgroups and the 682 ;; check the global list of group names spam-junk-mailgroups and the
677 ;; group parameters 683 ;; group parameters
678 (when (spam-group-spam-contents-p gnus-newsgroup-name) 684 (when (spam-group-spam-contents-p gnus-newsgroup-name)
679 (gnus-message 5 "Marking %s articles as spam" 685 (gnus-message 6 "Marking %s articles as spam"
680 (if spam-mark-only-unseen-as-spam 686 (if spam-mark-only-unseen-as-spam
681 "unseen" 687 "unseen"
682 "unread")) 688 "unread"))
683 (let ((articles (if spam-mark-only-unseen-as-spam 689 (let ((articles (if spam-mark-only-unseen-as-spam
684 gnus-newsgroup-unseen 690 gnus-newsgroup-unseen
685 gnus-newsgroup-unreads))) 691 gnus-newsgroup-unreads)))
686 (dolist (article articles) 692 (if spam-mark-new-messages-in-spam-group-as-spam
687 (gnus-summary-mark-article article gnus-spam-mark))))) 693 (dolist (article articles)
694 (gnus-summary-mark-article article gnus-spam-mark))
695 (gnus-message 9 "Did not mark new messages as spam.")))))
688 696
689(defun spam-mark-spam-as-expired-and-move-routine (&rest groups) 697(defun spam-mark-spam-as-expired-and-move-routine (&rest groups)
690 (if (and (car-safe groups) (listp (car-safe groups))) 698 (if (and (car-safe groups) (listp (car-safe groups)))
@@ -732,7 +740,7 @@ spam-use-* variable.")
732 (gnus-check-backend-function 740 (gnus-check-backend-function
733 'request-move-article gnus-newsgroup-name)) 741 'request-move-article gnus-newsgroup-name))
734 (respool-method (gnus-find-method-for-group gnus-newsgroup-name)) 742 (respool-method (gnus-find-method-for-group gnus-newsgroup-name))
735 article mark todo deletep respool) 743 article mark deletep respool)
736 744
737 (when (member 'respool groups) 745 (when (member 'respool groups)
738 (setq respool t) ; boolean for later 746 (setq respool t) ; boolean for later
diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index c2e1f59e578..94621535154 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -40,7 +40,7 @@
40 40
41(define-key help-mode-map [mouse-2] 'help-follow-mouse) 41(define-key help-mode-map [mouse-2] 'help-follow-mouse)
42(define-key help-mode-map "\C-c\C-b" 'help-go-back) 42(define-key help-mode-map "\C-c\C-b" 'help-go-back)
43(define-key help-mode-map "\C-c\C-c" 'help-follow) 43(define-key help-mode-map "\C-c\C-c" 'help-follow-symbol)
44;; Documentation only, since we use minor-mode-overriding-map-alist. 44;; Documentation only, since we use minor-mode-overriding-map-alist.
45(define-key help-mode-map "\r" 'help-follow) 45(define-key help-mode-map "\r" 'help-follow)
46 46
@@ -233,10 +233,10 @@ Commands:
233 "Label to use by `help-make-xrefs' for the go-back reference.") 233 "Label to use by `help-make-xrefs' for the go-back reference.")
234 234
235(defconst help-xref-symbol-regexp 235(defconst help-xref-symbol-regexp
236 (purecopy (concat "\\(\\<\\(\\(variable\\|option\\)\\|" 236 (purecopy (concat "\\(\\<\\(\\(variable\\|option\\)\\|" ; Link to var
237 "\\(function\\|command\\)\\|" 237 "\\(function\\|command\\)\\|" ; Link to function
238 "\\(face\\)\\|" 238 "\\(face\\)\\|" ; Link to face
239 "\\(symbol\\)\\|" 239 "\\(symbol\\|program\\)\\|" ; Don't link
240 "\\(source \\(?:code \\)?\\(?:of\\|for\\)\\)\\)" 240 "\\(source \\(?:code \\)?\\(?:of\\|for\\)\\)\\)"
241 "[ \t\n]+\\)?" 241 "[ \t\n]+\\)?"
242 ;; Note starting with word-syntax character: 242 ;; Note starting with word-syntax character:
@@ -584,15 +584,6 @@ help buffer."
584 584
585;; Navigation/hyperlinking with xrefs 585;; Navigation/hyperlinking with xrefs
586 586
587(defun help-follow-mouse (click)
588 "Follow the cross-reference that you CLICK on."
589 (interactive "e")
590 (let* ((start (event-start click))
591 (window (car start))
592 (pos (car (cdr start))))
593 (with-current-buffer (window-buffer window)
594 (help-follow pos))))
595
596(defun help-xref-go-back (buffer) 587(defun help-xref-go-back (buffer)
597 "From BUFFER, go back to previous help buffer text using `help-xref-stack'." 588 "From BUFFER, go back to previous help buffer text using `help-xref-stack'."
598 (let (item position method args) 589 (let (item position method args)
@@ -627,26 +618,38 @@ a proper [back] button."
627 (let ((help-xref-following t)) 618 (let ((help-xref-following t))
628 (apply function args))) 619 (apply function args)))
629 620
630(defun help-follow (&optional pos) 621;; The doc string is meant to explain what buttons do.
631 "Follow cross-reference at POS, defaulting to point. 622(defun help-follow-mouse ()
623 "Follow the cross-reference that you click on."
624 (interactive)
625 (error "No cross-reference here"))
626
627;; The doc string is meant to explain what buttons do.
628(defun help-follow ()
629 "Follow cross-reference at point.
632 630
633For the cross-reference format, see `help-make-xrefs'." 631For the cross-reference format, see `help-make-xrefs'."
632 (interactive)
633 (error "No cross-reference here"))
634
635(defun help-follow-symbol (&optional pos)
636 "In help buffer, show docs for symbol at POS, defaulting to point.
637Show all docs for that symbol as either a variable, function or face."
634 (interactive "d") 638 (interactive "d")
635 (unless pos 639 (unless pos
636 (setq pos (point))) 640 (setq pos (point)))
637 (unless (push-button pos) 641 ;; check if the symbol under point is a function, variable or face
638 ;; check if the symbol under point is a function or variable 642 (let ((sym
639 (let ((sym 643 (intern
640 (intern 644 (save-excursion
641 (save-excursion 645 (goto-char pos) (skip-syntax-backward "w_")
642 (goto-char pos) (skip-syntax-backward "w_") 646 (buffer-substring (point)
643 (buffer-substring (point) 647 (progn (skip-syntax-forward "w_")
644 (progn (skip-syntax-forward "w_") 648 (point)))))))
645 (point))))))) 649 (when (or (boundp sym)
646 (when (or (boundp sym) 650 (get sym 'variable-documentation)
647 (get sym 'variable-documentation) 651 (fboundp sym) (facep sym))
648 (fboundp sym) (facep sym)) 652 (help-do-xref pos #'help-xref-interned (list sym)))))
649 (help-do-xref pos #'help-xref-interned (list sym))))))
650 653
651(defun help-insert-string (string) 654(defun help-insert-string (string)
652 "Insert STRING to the help buffer and install xref info for it. 655 "Insert STRING to the help buffer and install xref info for it.
diff --git a/lisp/ido.el b/lisp/ido.el
index cae5446abcd..6bc2f45709f 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -613,6 +613,7 @@ A tramp file name uses the following syntax: /method:user@host:filename."
613 613
614(defcustom ido-cache-ftp-work-directory-time 1.0 614(defcustom ido-cache-ftp-work-directory-time 1.0
615 "*Maximum time to cache contents of an ftp directory (in hours). 615 "*Maximum time to cache contents of an ftp directory (in hours).
616Use C-l in prompt to refresh list.
616If zero, ftp directories are not cached." 617If zero, ftp directories are not cached."
617 :type 'number 618 :type 'number
618 :group 'ido) 619 :group 'ido)
@@ -629,6 +630,18 @@ equivalent function, e.g. `find-file' rather than `ido-find-file'."
629 :type '(repeat regexp) 630 :type '(repeat regexp)
630 :group 'ido) 631 :group 'ido)
631 632
633(defcustom ido-unc-hosts nil
634 "*List of known UNC host names to complete after initial //."
635 :type '(repeat string)
636 :group 'ido)
637
638(defcustom ido-cache-unc-host-shares-time 8.0
639 "*Maximum time to cache shares of an UNC host (in hours).
640Use C-l in prompt to refresh list.
641If zero, unc host shares are not cached."
642 :type 'number
643 :group 'ido)
644
632(defcustom ido-max-work-file-list 10 645(defcustom ido-max-work-file-list 10
633 "*Maximum number of names of recently opened files to record. 646 "*Maximum number of names of recently opened files to record.
634This is the list the file names (sans directory) which have most recently 647This is the list the file names (sans directory) which have most recently
@@ -1103,6 +1116,16 @@ it doesn't interfere with other minibuffer usage.")
1103 (string-match "\\`/[^/]+[@:]\\'" 1116 (string-match "\\`/[^/]+[@:]\\'"
1104 (or dir ido-current-directory)))) 1117 (or dir ido-current-directory))))
1105 1118
1119(defun ido-is-unc-root (&optional dir)
1120 (and ido-unc-hosts
1121 (string-equal "//"
1122 (or dir ido-current-directory))))
1123
1124(defun ido-is-unc-host (&optional dir)
1125 (and ido-unc-hosts
1126 (string-match "\\`//[^/]+/\\'"
1127 (or dir ido-current-directory))))
1128
1106(defun ido-is-root-directory (&optional dir) 1129(defun ido-is-root-directory (&optional dir)
1107 (setq dir (or dir ido-current-directory)) 1130 (setq dir (or dir ido-current-directory))
1108 (or 1131 (or
@@ -1148,6 +1171,12 @@ it doesn't interfere with other minibuffer usage.")
1148 (or (not time) 1171 (or (not time)
1149 (< (- (ido-time-stamp) time) ido-cache-ftp-work-directory-time)))) 1172 (< (- (ido-time-stamp) time) ido-cache-ftp-work-directory-time))))
1150 1173
1174(defun ido-cache-unc-valid (&optional time)
1175 (and (numberp ido-cache-unc-host-shares-time)
1176 (> ido-cache-unc-host-shares-time 0)
1177 (or (not time)
1178 (< (- (ido-time-stamp) time) ido-cache-unc-host-shares-time))))
1179
1151(defun ido-may-cache-directory (&optional dir) 1180(defun ido-may-cache-directory (&optional dir)
1152 (setq dir (or dir ido-current-directory)) 1181 (setq dir (or dir ido-current-directory))
1153 (cond 1182 (cond
@@ -1157,10 +1186,11 @@ it doesn't interfere with other minibuffer usage.")
1157 (or ido-enable-tramp-completion 1186 (or ido-enable-tramp-completion
1158 (memq system-type '(windows-nt ms-dos)))) 1187 (memq system-type '(windows-nt ms-dos))))
1159 nil) 1188 nil)
1160 ((not (ido-is-ftp-directory dir)) 1189 ((ido-is-unc-host dir)
1161 t) 1190 (ido-cache-unc-valid))
1162 ((ido-cache-ftp-valid) 1191 ((ido-is-ftp-directory dir)
1163 t))) 1192 (ido-cache-ftp-valid))
1193 (t t)))
1164 1194
1165(defun ido-pp (list &optional sep) 1195(defun ido-pp (list &optional sep)
1166 (let ((print-level nil) (eval-expression-print-level nil) 1196 (let ((print-level nil) (eval-expression-print-level nil)
@@ -1262,15 +1292,21 @@ Removes badly formatted data and ignored directories."
1262 (and 1292 (and
1263 (stringp dir) 1293 (stringp dir)
1264 (consp time) 1294 (consp time)
1265 (if (integerp (car time)) 1295 (cond
1266 (and (/= (car time) 0) 1296 ((integerp (car time))
1267 (integerp (car (cdr time))) 1297 (and (/= (car time) 0)
1268 (/= (car (cdr time)) 0) 1298 (integerp (car (cdr time)))
1269 (ido-may-cache-directory dir)) 1299 (/= (car (cdr time)) 0)
1270 (and (eq (car time) 'ftp) 1300 (ido-may-cache-directory dir)))
1271 (numberp (cdr time)) 1301 ((eq (car time) 'ftp)
1302 (and (numberp (cdr time))
1272 (ido-is-ftp-directory dir) 1303 (ido-is-ftp-directory dir)
1273 (ido-cache-ftp-valid (cdr time)))) 1304 (ido-cache-ftp-valid (cdr time))))
1305 ((eq (car time) 'unc)
1306 (and (numberp (cdr time))
1307 (ido-is-unc-host dir)
1308 (ido-cache-unc-valid (cdr time))))
1309 (t nil))
1274 (let ((s files) (ok t)) 1310 (let ((s files) (ok t))
1275 (while s 1311 (while s
1276 (if (stringp (car s)) 1312 (if (stringp (car s))
@@ -1535,6 +1571,7 @@ With ARG, turn ido speed-up on if arg is positive, off otherwise."
1535 ;; connect on incomplete tramp paths (after entring just method:). 1571 ;; connect on incomplete tramp paths (after entring just method:).
1536 (let ((ido-enable-tramp-completion nil)) 1572 (let ((ido-enable-tramp-completion nil))
1537 (and (ido-final-slash dir) 1573 (and (ido-final-slash dir)
1574 (not (ido-is-unc-host dir))
1538 (file-directory-p dir) 1575 (file-directory-p dir)
1539 (not (file-readable-p dir))))) 1576 (not (file-readable-p dir)))))
1540 1577
@@ -1545,6 +1582,7 @@ With ARG, turn ido speed-up on if arg is positive, off otherwise."
1545 (let ((ido-enable-tramp-completion nil)) 1582 (let ((ido-enable-tramp-completion nil))
1546 (and (numberp ido-max-directory-size) 1583 (and (numberp ido-max-directory-size)
1547 (ido-final-slash dir) 1584 (ido-final-slash dir)
1585 (not (ido-is-unc-host dir))
1548 (file-directory-p dir) 1586 (file-directory-p dir)
1549 (> (nth 7 (file-attributes dir)) ido-max-directory-size)))) 1587 (> (nth 7 (file-attributes dir)) ido-max-directory-size))))
1550 1588
@@ -1560,8 +1598,18 @@ With ARG, turn ido speed-up on if arg is positive, off otherwise."
1560 (unless (and ido-enable-tramp-completion 1598 (unless (and ido-enable-tramp-completion
1561 (string-match "\\`/[^/]*@\\'" dir)) 1599 (string-match "\\`/[^/]*@\\'" dir))
1562 (setq dir (ido-final-slash dir t)))) 1600 (setq dir (ido-final-slash dir t))))
1563 (if (equal dir ido-current-directory) 1601 (if (get-buffer ido-completion-buffer)
1564 nil 1602 (kill-buffer ido-completion-buffer))
1603 (cond
1604 ((equal dir ido-current-directory)
1605 nil)
1606 ((ido-is-unc-root dir)
1607 (ido-trace "unc" dir)
1608 (setq ido-current-directory dir)
1609 (setq ido-directory-nonreadable nil)
1610 (setq ido-directory-too-big nil)
1611 t)
1612 (t
1565 (ido-trace "cd" dir) 1613 (ido-trace "cd" dir)
1566 (setq ido-current-directory dir) 1614 (setq ido-current-directory dir)
1567 (if (get-buffer ido-completion-buffer) 1615 (if (get-buffer ido-completion-buffer)
@@ -1569,7 +1617,7 @@ With ARG, turn ido speed-up on if arg is positive, off otherwise."
1569 (setq ido-directory-nonreadable (ido-nonreadable-directory-p dir)) 1617 (setq ido-directory-nonreadable (ido-nonreadable-directory-p dir))
1570 (setq ido-directory-too-big (and (not ido-directory-nonreadable) 1618 (setq ido-directory-too-big (and (not ido-directory-nonreadable)
1571 (ido-directory-too-big-p dir))) 1619 (ido-directory-too-big-p dir)))
1572 t)) 1620 t)))
1573 1621
1574(defun ido-set-current-home (&optional dir) 1622(defun ido-set-current-home (&optional dir)
1575 ;; Set ido's current directory to user's home directory 1623 ;; Set ido's current directory to user's home directory
@@ -1940,6 +1988,7 @@ If INITIAL is non-nil, it specifies the initial input string."
1940 (setq ido-exit 'fallback 1988 (setq ido-exit 'fallback
1941 done t) 1989 done t)
1942 (setq ido-set-default-item t))) 1990 (setq ido-set-default-item t)))
1991
1943 ((or (string-match "[/\\][^/\\]" ido-selected) 1992 ((or (string-match "[/\\][^/\\]" ido-selected)
1944 (and (memq system-type '(windows-nt ms-dos)) 1993 (and (memq system-type '(windows-nt ms-dos))
1945 (string-match "\\`.:" ido-selected))) 1994 (string-match "\\`.:" ido-selected)))
@@ -1973,7 +2022,7 @@ If INITIAL is non-nil, it specifies the initial input string."
1973(defun ido-edit-input () 2022(defun ido-edit-input ()
1974 "Edit absolute file name entered so far with ido; terminate by RET." 2023 "Edit absolute file name entered so far with ido; terminate by RET."
1975 (interactive) 2024 (interactive)
1976 (setq ido-text-init ido-text) 2025 (setq ido-text-init (if ido-matches (car ido-matches) ido-text))
1977 (setq ido-exit 'edit) 2026 (setq ido-exit 'edit)
1978 (exit-minibuffer)) 2027 (exit-minibuffer))
1979 2028
@@ -3184,36 +3233,52 @@ for first matching file."
3184(defun ido-file-name-all-completions (dir) 3233(defun ido-file-name-all-completions (dir)
3185 ;; Return name of all files in DIR 3234 ;; Return name of all files in DIR
3186 ;; Uses and updates ido-dir-file-cache 3235 ;; Uses and updates ido-dir-file-cache
3187 (if (and (numberp ido-max-dir-file-cache) (> ido-max-dir-file-cache 0) 3236 (cond
3188 (stringp dir) (> (length dir) 0) 3237 ((ido-is-unc-root dir)
3189 (ido-may-cache-directory dir)) 3238 (mapcar
3190 (let* ((cached (assoc dir ido-dir-file-cache)) 3239 (lambda (host)
3240 (if (string-match "/\\'" host) host (concat host "/")))
3241 ido-unc-hosts))
3242 ((and (numberp ido-max-dir-file-cache) (> ido-max-dir-file-cache 0)
3243 (stringp dir) (> (length dir) 0)
3244 (ido-may-cache-directory dir))
3245 (let* ((cached (assoc dir ido-dir-file-cache))
3191 (ctime (nth 1 cached)) 3246 (ctime (nth 1 cached))
3192 (ftp (ido-is-ftp-directory dir)) 3247 (ftp (ido-is-ftp-directory dir))
3193 (attr (if ftp nil (file-attributes dir))) 3248 (unc (ido-is-unc-host dir))
3249 (attr (if (or ftp unc) nil (file-attributes dir)))
3194 (mtime (nth 5 attr)) 3250 (mtime (nth 5 attr))
3195 valid) 3251 valid)
3196 (when cached ; should we use the cached entry ? 3252 (when cached ; should we use the cached entry ?
3197 (if ftp 3253 (cond
3198 (setq valid (and (eq (car ctime) 'ftp) 3254 (ftp
3199 (ido-cache-ftp-valid (cdr ctime)))) 3255 (setq valid (and (eq (car ctime) 'ftp)
3256 (ido-cache-ftp-valid (cdr ctime)))))
3257 (unc
3258 (setq valid (and (eq (car ctime) 'unc)
3259 (ido-cache-unc-valid (cdr ctime)))))
3260 (t
3200 (if attr 3261 (if attr
3201 (setq valid (and (= (car ctime) (car mtime)) 3262 (setq valid (and (= (car ctime) (car mtime))
3202 (= (car (cdr ctime)) (car (cdr mtime))))))) 3263 (= (car (cdr ctime)) (car (cdr mtime))))))))
3203 (if (not valid) 3264 (unless valid
3204 (setq ido-dir-file-cache (delq cached ido-dir-file-cache) 3265 (setq ido-dir-file-cache (delq cached ido-dir-file-cache)
3205 cached nil))) 3266 cached nil)))
3206 (unless cached 3267 (unless cached
3207 (if (and ftp (file-readable-p dir)) 3268 (cond
3208 (setq mtime (cons 'ftp (ido-time-stamp)))) 3269 (unc
3270 (setq mtime (cons 'unc (ido-time-stamp))))
3271 ((and ftp (file-readable-p dir))
3272 (setq mtime (cons 'ftp (ido-time-stamp)))))
3209 (if mtime 3273 (if mtime
3210 (setq cached (cons dir (cons mtime (ido-file-name-all-completions-1 dir))) 3274 (setq cached (cons dir (cons mtime (ido-file-name-all-completions-1 dir)))
3211 ido-dir-file-cache (cons cached ido-dir-file-cache))) 3275 ido-dir-file-cache (cons cached ido-dir-file-cache)))
3212 (if (> (length ido-dir-file-cache) ido-max-dir-file-cache) 3276 (if (> (length ido-dir-file-cache) ido-max-dir-file-cache)
3213 (setcdr (nthcdr (1- ido-max-dir-file-cache) ido-dir-file-cache) nil))) 3277 (setcdr (nthcdr (1- ido-max-dir-file-cache) ido-dir-file-cache) nil)))
3214 (and cached 3278 (and cached
3215 (cdr (cdr cached)))) 3279 (cdr (cdr cached)))))
3216 (ido-file-name-all-completions-1 dir))) 3280 (t
3281 (ido-file-name-all-completions-1 dir))))
3217 3282
3218(defun ido-remove-cached-dir (dir) 3283(defun ido-remove-cached-dir (dir)
3219 ;; Remove dir from ido-dir-file-cache 3284 ;; Remove dir from ido-dir-file-cache
@@ -3227,7 +3292,8 @@ for first matching file."
3227(defun ido-make-file-list-1 (dir &optional merged) 3292(defun ido-make-file-list-1 (dir &optional merged)
3228 ;; Return list of non-ignored files in DIR 3293 ;; Return list of non-ignored files in DIR
3229 ;; If MERGED is non-nil, each file is cons'ed with DIR 3294 ;; If MERGED is non-nil, each file is cons'ed with DIR
3230 (and (or (ido-is-tramp-root dir) (file-directory-p dir)) 3295 (and (or (ido-is-tramp-root dir) (ido-is-unc-root dir)
3296 (file-directory-p dir))
3231 (delq nil 3297 (delq nil
3232 (mapcar 3298 (mapcar
3233 (lambda (name) 3299 (lambda (name)
@@ -3956,10 +4022,16 @@ For details of keybindings, do `\\[describe-function] ido-find-file'."
3956 ) 4022 )
3957 4023
3958 ((= (length contents) 1) 4024 ((= (length contents) 1)
3959 (when (and (ido-is-tramp-root) (string-equal contents "/")) 4025 (cond
4026 ((and (ido-is-tramp-root) (string-equal contents "/"))
3960 (ido-set-current-directory ido-current-directory contents) 4027 (ido-set-current-directory ido-current-directory contents)
3961 (setq refresh t)) 4028 (setq refresh t))
3962 ) 4029 ((and ido-unc-hosts (string-equal contents "/")
4030 (let ((ido-enable-tramp-completion nil))
4031 (ido-is-root-directory)))
4032 (ido-set-current-directory "//")
4033 (setq refresh t))
4034 ))
3963 4035
3964 ((and (string-match (if ido-enable-tramp-completion "..[:@]\\'" "..:\\'") contents) 4036 ((and (string-match (if ido-enable-tramp-completion "..[:@]\\'" "..:\\'") contents)
3965 (ido-is-root-directory)) ;; Ange-ftp or tramp 4037 (ido-is-root-directory)) ;; Ange-ftp or tramp
diff --git a/lisp/image.el b/lisp/image.el
index 6938dba05cb..2212b0fb471 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -79,12 +79,13 @@ value is used as a list of directories to search.")
79 79
80 80
81(defun image-load-path-for-library (library image &optional path no-error) 81(defun image-load-path-for-library (library image &optional path no-error)
82 "Return a suitable search path for images relative to LIBRARY. 82 "Return a suitable search path for images used by LIBRARY.
83 83
84First it searches for IMAGE in a path suitable for LIBRARY, which 84It searches for IMAGE in `image-load-path' (excluding
85includes \"../../etc/images\" and \"../etc/images\" relative to 85\"`data-directory'/images\") and `load-path', followed by a path
86the library file itself, followed by `image-load-path' and 86suitable for LIBRARY, which includes \"../../etc/images\" and
87`load-path'. 87\"../etc/images\" relative to the library file itself, and then
88in \"`data-directory'/images\".
88 89
89Then this function returns a list of directories which contains 90Then this function returns a list of directories which contains
90first the directory in which IMAGE was found, followed by the 91first the directory in which IMAGE was found, followed by the
@@ -99,16 +100,46 @@ Here is an example that uses a common idiom to provide
99compatibility with versions of Emacs that lack the variable 100compatibility with versions of Emacs that lack the variable
100`image-load-path': 101`image-load-path':
101 102
102 ;; Avoid errors on Emacsen without `image-load-path'. 103 ;; Shush compiler.
103 (if (not (boundp 'image-load-path)) (defvar image-load-path nil)) 104 (defvar image-load-path)
104 105
105 (let* ((load-path (image-load-path-for-library \"mh-e\" \"mh-logo.xpm\")) 106 (let* ((load-path (image-load-path-for-library \"mh-e\" \"mh-logo.xpm\"))
106 (image-load-path (cons (car load-path) image-load-path))) 107 (image-load-path (cons (car load-path)
108 (when (boundp 'image-load-path)
109 image-load-path))))
107 (mh-tool-bar-folder-buttons-init))" 110 (mh-tool-bar-folder-buttons-init))"
108 (unless library (error "No library specified")) 111 (unless library (error "No library specified"))
109 (unless image (error "No image specified")) 112 (unless image (error "No image specified"))
110 (let ((image-directory)) 113 (let (image-directory image-directory-load-path)
114 ;; Check for images in image-load-path or load-path.
115 (let ((img image)
116 (dir (or
117 ;; Images in image-load-path.
118 (image-search-load-path image)
119 ;; Images in load-path.
120 (locate-library image)))
121 parent)
122 ;; Since the image might be in a nested directory (for
123 ;; example, mail/attach.pbm), adjust `image-directory'
124 ;; accordingly.
125 (when dir
126 (setq dir (file-name-directory dir))
127 (while (setq parent (file-name-directory img))
128 (setq img (directory-file-name parent)
129 dir (expand-file-name "../" dir))))
130 (setq image-directory-load-path dir))
131
132 ;; If `image-directory-load-path' isn't Emacs' image directory,
133 ;; it's probably a user preference, so use it. Then use a
134 ;; relative setting if possible; otherwise, use
135 ;; `image-directory-load-path'.
111 (cond 136 (cond
137 ;; User-modified image-load-path?
138 ((and image-directory-load-path
139 (not (equal image-directory-load-path
140 (file-name-as-directory
141 (expand-file-name "images" data-directory)))))
142 (setq image-directory image-directory-load-path))
112 ;; Try relative setting. 143 ;; Try relative setting.
113 ((let (library-name d1ei d2ei) 144 ((let (library-name d1ei d2ei)
114 ;; First, find library in the load-path. 145 ;; First, find library in the load-path.
@@ -118,33 +149,20 @@ compatibility with versions of Emacs that lack the variable
118 ;; And then set image-directory relative to that. 149 ;; And then set image-directory relative to that.
119 (setq 150 (setq
120 ;; Go down 2 levels. 151 ;; Go down 2 levels.
121 d2ei (expand-file-name 152 d2ei (file-name-as-directory
122 (concat (file-name-directory library-name) "../../etc/images")) 153 (expand-file-name
154 (concat (file-name-directory library-name) "../../etc/images")))
123 ;; Go down 1 level. 155 ;; Go down 1 level.
124 d1ei (expand-file-name 156 d1ei (file-name-as-directory
125 (concat (file-name-directory library-name) "../etc/images"))) 157 (expand-file-name
158 (concat (file-name-directory library-name) "../etc/images"))))
126 (setq image-directory 159 (setq image-directory
127 ;; Set it to nil if image is not found. 160 ;; Set it to nil if image is not found.
128 (cond ((file-exists-p (expand-file-name image d2ei)) d2ei) 161 (cond ((file-exists-p (expand-file-name image d2ei)) d2ei)
129 ((file-exists-p (expand-file-name image d1ei)) d1ei))))) 162 ((file-exists-p (expand-file-name image d1ei)) d1ei)))))
130 ;; Check for images in image-load-path or load-path. 163 ;; Use Emacs' image directory.
131 ((let ((img image) 164 (image-directory-load-path
132 (dir (or 165 (setq image-directory image-directory-load-path))
133 ;; Images in image-load-path.
134 (image-search-load-path image)
135 ;; Images in load-path.
136 (locate-library image)))
137 parent)
138 ;; Since the image might be in a nested directory (for
139 ;; example, mail/attach.pbm), adjust `image-directory'
140 ;; accordingly.
141 (and dir
142 (setq dir (file-name-directory dir))
143 (progn
144 (while (setq parent (file-name-directory img))
145 (setq img (directory-file-name parent)
146 dir (expand-file-name "../" dir)))
147 (setq image-directory dir)))))
148 (no-error 166 (no-error
149 (message "Could not find image %s for library %s" image library)) 167 (message "Could not find image %s for library %s" image library))
150 (t 168 (t
diff --git a/lisp/international/mule.el b/lisp/international/mule.el
index ca8e29b52e6..bf9a9570216 100644
--- a/lisp/international/mule.el
+++ b/lisp/international/mule.el
@@ -1593,7 +1593,10 @@ and the contents of `file-coding-system-alist'."
1593 (symbol :tag "Coding system")))) 1593 (symbol :tag "Coding system"))))
1594 1594
1595(defcustom auto-coding-regexp-alist 1595(defcustom auto-coding-regexp-alist
1596 '(("^BABYL OPTIONS:[ \t]*-\\*-[ \t]*rmail[ \t]*-\\*-" . no-conversion)) 1596 '(("^BABYL OPTIONS:[ \t]*-\\*-[ \t]*rmail[ \t]*-\\*-" . no-conversion)
1597 ("\\`\xFE\xFF" . utf-16be-with-signature)
1598 ("\\`\xFF\xFE" . utf-16le-with-signature)
1599 ("\\`\xEF\xBB\xBF" . utf-8))
1597 "Alist of patterns vs corresponding coding systems. 1600 "Alist of patterns vs corresponding coding systems.
1598Each element looks like (REGEXP . CODING-SYSTEM). 1601Each element looks like (REGEXP . CODING-SYSTEM).
1599A file whose first bytes match REGEXP is decoded by CODING-SYSTEM on reading. 1602A file whose first bytes match REGEXP is decoded by CODING-SYSTEM on reading.
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 0a85f10cf40..13b54a02467 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -1696,12 +1696,15 @@ Isearch mode."
1696 (and (integerp main-event) 1696 (and (integerp main-event)
1697 (memq 'shift mods) 1697 (memq 'shift mods)
1698 (memq 'control mods) 1698 (memq 'control mods)
1699 (lookup-key isearch-mode-map 1699 (not (memq (lookup-key isearch-mode-map
1700 (let ((copy (copy-sequence key))) 1700 (let ((copy (copy-sequence key)))
1701 (aset copy 0 1701 (aset copy 0
1702 (- main-event (- ?\C-\S-a ?\C-a))) 1702 (- main-event
1703 copy) 1703 (- ?\C-\S-a ?\C-a)))
1704 nil))) 1704 copy)
1705 nil)
1706 '(nil
1707 isearch-other-control-char)))))
1705 (setcar keylist (- main-event (- ?\C-\S-a ?\C-a))) 1708 (setcar keylist (- main-event (- ?\C-\S-a ?\C-a)))
1706 (cancel-kbd-macro-events) 1709 (cancel-kbd-macro-events)
1707 (apply 'isearch-unread keylist)) 1710 (apply 'isearch-unread keylist))
diff --git a/lisp/iswitchb.el b/lisp/iswitchb.el
index d7d82ae5551..93d4755cf3a 100644
--- a/lisp/iswitchb.el
+++ b/lisp/iswitchb.el
@@ -6,7 +6,6 @@
6;; Author: Stephen Eglen <stephen@gnu.org> 6;; Author: Stephen Eglen <stephen@gnu.org>
7;; Maintainer: Stephen Eglen <stephen@gnu.org> 7;; Maintainer: Stephen Eglen <stephen@gnu.org>
8;; Keywords: completion convenience 8;; Keywords: completion convenience
9;; location: http://www.anc.ed.ac.uk/~stephen/emacs/
10 9
11;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
12 11
diff --git a/lisp/jit-lock.el b/lisp/jit-lock.el
index f82ead462f0..0e131b665ef 100644
--- a/lisp/jit-lock.el
+++ b/lisp/jit-lock.el
@@ -301,7 +301,7 @@ Only applies to the current buffer."
301This function is added to `fontification-functions' when `jit-lock-mode' 301This function is added to `fontification-functions' when `jit-lock-mode'
302is active." 302is active."
303 (when (and jit-lock-mode (not memory-full)) 303 (when (and jit-lock-mode (not memory-full))
304 (if (null jit-lock-defer-time) 304 (if (null jit-lock-defer-timer)
305 ;; No deferral. 305 ;; No deferral.
306 (jit-lock-fontify-now start (+ start jit-lock-chunk-size)) 306 (jit-lock-fontify-now start (+ start jit-lock-chunk-size))
307 ;; Record the buffer for later fontification. 307 ;; Record the buffer for later fontification.
@@ -510,7 +510,7 @@ This functions is called after Emacs has been idle for
510 (setq pos (next-single-property-change pos 'fontified))))))))) 510 (setq pos (next-single-property-change pos 'fontified)))))))))
511 (setq jit-lock-defer-buffers nil) 511 (setq jit-lock-defer-buffers nil)
512 ;; Force fontification of the visible parts. 512 ;; Force fontification of the visible parts.
513 (let ((jit-lock-defer-time nil)) 513 (let ((jit-lock-defer-timer nil))
514 ;; (message "Jit-Defer Now") 514 ;; (message "Jit-Defer Now")
515 (sit-for 0) 515 (sit-for 0)
516 ;; (message "Jit-Defer Done") 516 ;; (message "Jit-Defer Done")
@@ -571,7 +571,7 @@ will take place when text is fontified stealthily."
571 (setq start (if region 571 (setq start (if region
572 (car region) 572 (car region)
573 (goto-char start) 573 (goto-char start)
574 (line-beginning-position (- 1 font-lock-lines-before)))) 574 (line-beginning-position)))
575 575
576 ;; If we're in text that matches a multi-line font-lock pattern, 576 ;; If we're in text that matches a multi-line font-lock pattern,
577 ;; make sure the whole text will be redisplayed. 577 ;; make sure the whole text will be redisplayed.
diff --git a/lisp/locate.el b/lisp/locate.el
index bca53a32152..702ae98ecd6 100644
--- a/lisp/locate.el
+++ b/lisp/locate.el
@@ -122,7 +122,26 @@
122 :group 'external) 122 :group 'external)
123 123
124(defcustom locate-command "locate" 124(defcustom locate-command "locate"
125 "*The executable program used to search a database of files." 125 "Executable program for searching a database of files.
126The Emacs commands `locate' and `locate-with-filter' use this.
127The value should be a program that can be called from a shell
128with one argument, SEARCH-STRING. The program determines which
129database it searches. The output of the program should consist
130of those file names in the database that match SEARCH-STRING,
131listed one per line, possibly with leading or trailing
132whitespace. If the output is in another form, you may have to
133redefine the function `locate-get-file-positions'.
134
135The program may interpret SEARCH-STRING as a literal string, a
136shell pattern or a regular expression. The exact rules of what
137constitutes a match may also depend on the program.
138
139The standard value of this variable is \"locate\".
140This program normally searches a database of all files on your
141system, or of all files that you have access to. Consult the
142documentation of that program for the details about how it determines
143which file names match SEARCH-STRING. (Those details vary highly with
144the version.)"
126 :type 'string 145 :type 'string
127 :group 'locate) 146 :group 'locate)
128 147
@@ -133,22 +152,34 @@
133 "The history list used by the \\[locate-with-filter] command.") 152 "The history list used by the \\[locate-with-filter] command.")
134 153
135(defcustom locate-make-command-line 'locate-default-make-command-line 154(defcustom locate-make-command-line 'locate-default-make-command-line
136 "*Function used to create the locate command line." 155 "Function used to create the locate command line.
156The Emacs commands `locate' and `locate-with-filter' use this.
157This function should take one argument, a string (the name to find)
158and return a list of strings. The first element of the list should be
159the name of a command to be executed by a shell, the remaining elements
160should be the arguments to that command (including the name to find)."
137 :type 'function 161 :type 'function
138 :group 'locate) 162 :group 'locate)
139 163
140(defcustom locate-buffer-name "*Locate*" 164(defcustom locate-buffer-name "*Locate*"
141 "*Name of the buffer to show results from the \\[locate] command." 165 "Name of the buffer to show results from the \\[locate] command."
142 :type 'string 166 :type 'string
143 :group 'locate) 167 :group 'locate)
144 168
145(defcustom locate-fcodes-file nil 169(defcustom locate-fcodes-file nil
146 "*File name for the database of file names." 170 "File name for the database of file names used by `locate'.
171If non-nil, `locate' uses this name in the header of the `*Locate*'
172buffer. If nil, it mentions no file name in that header.
173
174Just setting this variable does not actually change the database
175that `locate' searches. The executive program that the Emacs
176function `locate' uses, as given by the variables `locate-command'
177or `locate-make-command-line', determines the database."
147 :type '(choice (const :tag "None" nil) file) 178 :type '(choice (const :tag "None" nil) file)
148 :group 'locate) 179 :group 'locate)
149 180
150(defcustom locate-header-face nil 181(defcustom locate-header-face nil
151 "*Face used to highlight the locate header." 182 "Face used to highlight the locate header."
152 :type '(choice (const :tag "None" nil) face) 183 :type '(choice (const :tag "None" nil) face)
153 :group 'locate) 184 :group 'locate)
154 185
@@ -161,12 +192,12 @@ This should contain the \"-l\" switch, but not the \"-F\" or \"-b\" switches."
161 :version "22.1") 192 :version "22.1")
162 193
163(defcustom locate-update-command "updatedb" 194(defcustom locate-update-command "updatedb"
164 "The command used to update the locate database." 195 "The executable program used to update the locate database."
165 :type 'string 196 :type 'string
166 :group 'locate) 197 :group 'locate)
167 198
168(defcustom locate-prompt-for-command nil 199(defcustom locate-prompt-for-command nil
169 "If non-nil, the locate command prompts for a command to run. 200 "If non-nil, the `locate' command prompts for a command to run.
170Otherwise, that behavior is invoked via a prefix argument." 201Otherwise, that behavior is invoked via a prefix argument."
171 :group 'locate 202 :group 'locate
172 :type 'boolean 203 :type 'boolean
@@ -191,7 +222,22 @@ Otherwise, that behavior is invoked via a prefix argument."
191;;;###autoload 222;;;###autoload
192(defun locate (search-string &optional filter) 223(defun locate (search-string &optional filter)
193 "Run the program `locate', putting results in `*Locate*' buffer. 224 "Run the program `locate', putting results in `*Locate*' buffer.
194With prefix arg, prompt for the locate command to run." 225Pass it SEARCH-STRING as argument. Interactively, prompt for SEARCH-STRING.
226With prefix arg, prompt for the exact shell command to run instead.
227
228This program searches for those file names in a database that match
229SEARCH-STRING and normally outputs all matching absolute file names,
230one per line. The database normally consists of all files on your
231system, or of all files that you have access to. Consult the
232documentation of the program for the details about how it determines
233which file names match SEARCH-STRING. (Those details vary highly with
234the version.)
235
236You can specify another program for this command to run by customizing
237the variables `locate-command' or `locate-make-command-line'.
238
239The main use of FILTER is to implement `locate-with-filter'. See
240the docstring of that function for its meaning."
195 (interactive 241 (interactive
196 (list 242 (list
197 (if (or (and current-prefix-arg 243 (if (or (and current-prefix-arg
@@ -255,10 +301,17 @@ With prefix arg, prompt for the locate command to run."
255 301
256;;;###autoload 302;;;###autoload
257(defun locate-with-filter (search-string filter) 303(defun locate-with-filter (search-string filter)
258 "Run the locate command with a filter. 304 "Run the executable program `locate' with a filter.
259 305This function is similar to the function `locate', which see.
260The filter is a regular expression. Only results matching the filter are 306The difference is that, when invoked interactively, the present function
261shown; this is often useful to constrain a big search." 307prompts for both SEARCH-STRING and FILTER. It passes SEARCH-STRING
308to the locate executable program. It produces a `*Locate*' buffer
309that lists only those lines in the output of the locate program that
310contain a match for the regular expression FILTER; this is often useful
311to constrain a big search.
312
313When called from Lisp, this function is identical with `locate',
314except that FILTER is not optional."
262 (interactive 315 (interactive
263 (list (read-from-minibuffer "Locate: " nil nil 316 (list (read-from-minibuffer "Locate: " nil nil
264 nil 'locate-history-list) 317 nil 'locate-history-list)
@@ -269,7 +322,7 @@ shown; this is often useful to constrain a big search."
269(defun locate-filter-output (filter) 322(defun locate-filter-output (filter)
270 "Filter output from the locate command." 323 "Filter output from the locate command."
271 (goto-char (point-min)) 324 (goto-char (point-min))
272 (delete-non-matching-lines filter)) 325 (keep-lines filter))
273 326
274(defvar locate-mode-map nil 327(defvar locate-mode-map nil
275 "Local keymap for Locate mode buffers.") 328 "Local keymap for Locate mode buffers.")
@@ -303,6 +356,15 @@ shown; this is often useful to constrain a big search."
303 "The amount of indentation for each file.") 356 "The amount of indentation for each file.")
304 357
305(defun locate-get-file-positions () 358(defun locate-get-file-positions ()
359 "Return list of start and end of the file name on the current line.
360This is a list of two buffer positions.
361
362You should only call this function on lines that contain a file name
363listed by the locate program. Inside inserted subdirectories, or if
364there is no file name on the current line, the return value is
365meaningless. You can check whether the current line contains a file
366listed by the locate program, using the function
367`locate-main-listing-line-p'."
306 (save-excursion 368 (save-excursion
307 (end-of-line) 369 (end-of-line)
308 (let ((eol (point))) 370 (let ((eol (point)))
@@ -320,6 +382,12 @@ shown; this is often useful to constrain a big search."
320 1 382 1
321 0))) 383 0)))
322 384
385;; You should only call this function on lines that contain a file name
386;; listed by the locate program. Inside inserted subdirectories, or if
387;; there is no file name on the current line, the return value is
388;; meaningless. You can check whether the current line contains a file
389;; listed by the locate program, using the function
390;; `locate-main-listing-line-p'.
323(defun locate-get-filename () 391(defun locate-get-filename ()
324 (let ((pos (locate-get-file-positions)) 392 (let ((pos (locate-get-file-positions))
325 (lineno (locate-current-line-number))) 393 (lineno (locate-current-line-number)))
@@ -516,8 +584,16 @@ Database is updated using the shell command in `locate-update-command'."
516(defun locate-find-directory-other-window () 584(defun locate-find-directory-other-window ()
517 "Visit the directory of the file named on this line in other window." 585 "Visit the directory of the file named on this line in other window."
518 (interactive) 586 (interactive)
519 (find-file-other-window (locate-get-dirname))) 587 (if (locate-main-listing-line-p)
588 (find-file-other-window (locate-get-dirname))
589 (message "This command only works inside main listing.")))
520 590
591;; You should only call this function on lines that contain a file name
592;; listed by the locate program. Inside inserted subdirectories, or if
593;; there is no file name on the current line, the return value is
594;; meaningless. You can check whether the current line contains a file
595;; listed by the locate program, using the function
596;; `locate-main-listing-line-p'.
521(defun locate-get-dirname () 597(defun locate-get-dirname ()
522 "Return the directory name of the file mentioned on this line." 598 "Return the directory name of the file mentioned on this line."
523 (let (file (filepos (locate-get-file-positions))) 599 (let (file (filepos (locate-get-file-positions)))
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 935e7d1b92c..5c06a1fe1ad 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -453,10 +453,10 @@ examples:
453 "String to prepend to Subject line when replying to a message.") 453 "String to prepend to Subject line when replying to a message.")
454 454
455;; Some mailers use "Re(2):" or "Re^2:" or "Re: Re:" or "Re[2]:". 455;; Some mailers use "Re(2):" or "Re^2:" or "Re: Re:" or "Re[2]:".
456;; This pattern should catch all the common variants. The pattern 456;; This pattern should catch all the common variants.
457;; also ignores mailing list identifiers sometimes added in square 457;; rms: I deleted the change to delete tags in square brackets
458;; brackets at the beginning of subject lines. 458;; because they mess up RT tags.
459(defvar rmail-reply-regexp "\\`\\(\\[.+?\\] \\)?\\(Re\\(([0-9]+)\\|\\[[0-9]+\\]\\|\\^[0-9]+\\)?: *\\)*" 459(defvar rmail-reply-regexp "\\`\\(Re\\(([0-9]+)\\|\\[[0-9]+\\]\\|\\^[0-9]+\\)?: *\\)*"
460 "Regexp to delete from Subject line before inserting `rmail-reply-prefix'.") 460 "Regexp to delete from Subject line before inserting `rmail-reply-prefix'.")
461 461
462(defcustom rmail-display-summary nil 462(defcustom rmail-display-summary nil
diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog
index ecdf207d252..7a6cf778bbe 100644
--- a/lisp/mh-e/ChangeLog
+++ b/lisp/mh-e/ChangeLog
@@ -1,3 +1,42 @@
12006-03-19 Bill Wohler <wohler@newt.com>
2
3 * mh-comp.el (mh-reply): Sync docstring with manual.
4
5 * mh-compat.el (mh-image-load-path-for-library): Shorten first line in
6 docstring.
7
82006-03-17 Bill Wohler <wohler@newt.com>
9
10 * mh-compat.el (mh-image-load-path-for-library): Minor docstring
11 fix.
12
132006-03-16 Bill Wohler <wohler@newt.com>
14
15 * mh-comp.el (mh-send-letter): Use split-string to break up
16 mh-send-args (closes SF #1448604).
17 (mh-compose-and-send-mail): Use run-hook-with-args for
18 mh-compose-letter-function.
19
20 * mh-e.el (mh-list-to-string-1): Use dolist.
21
22 * mh-compat.el (mh-image-load-path-for-library): Prefer user's
23 images.
24
252006-03-15 Bill Wohler <wohler@newt.com>
26
27 * mh-compat.el (mh-image-load-path-for-library): Fix example by
28 not recommending that one binds image-load-path. Just defvar it to
29 placate compiler and only use it if previously defined.
30
31 * mh-e.el (image-load-path): Don't bind!
32
33 * mh-folder.el (mh-folder-mode): Only use image-load-path if
34 previously defined.
35
36 * mh-letter.el (mh-letter-mode): Ditto.
37
38 * mh-utils.el (mh-logo-display): Ditto.
39
12006-03-14 Bill Wohler <wohler@newt.com> 402006-03-14 Bill Wohler <wohler@newt.com>
2 41
3 * mh-compat.el (mh-image-load-path-for-library): Incorporate 42 * mh-compat.el (mh-image-load-path-for-library): Incorporate
diff --git a/lisp/mh-e/mh-comp.el b/lisp/mh-e/mh-comp.el
index 0cedc83719c..27806dc9ab9 100644
--- a/lisp/mh-e/mh-comp.el
+++ b/lisp/mh-e/mh-comp.el
@@ -287,7 +287,7 @@ use `mh-send-prog' to tell MH-E the name."
287 (set-buffer draft-buffer)) ; for annotation below 287 (set-buffer draft-buffer)) ; for annotation below
288 (t 288 (t
289 (mh-exec-cmd-daemon mh-send-prog nil "-nodraftfolder" "-noverbose" 289 (mh-exec-cmd-daemon mh-send-prog nil "-nodraftfolder" "-noverbose"
290 mh-send-args file-name))) 290 (split-string mh-send-args) file-name)))
291 (if mh-annotate-char 291 (if mh-annotate-char
292 (mh-annotate-msg mh-sent-from-msg 292 (mh-annotate-msg mh-sent-from-msg
293 mh-sent-from-folder 293 mh-sent-from-folder
@@ -580,14 +580,16 @@ You have several choices here.
580 580
581 Response Reply Goes To 581 Response Reply Goes To
582 582
583 from The person who sent the message. This is the 583 from The person who sent the message. This is the
584 default, so <RET> is sufficient. 584 default, so <RET> is sufficient.
585 585
586 to Replies to the sender, plus all recipients in the 586 to Replies to the sender, plus all recipients in the
587 \"To:\" header field. 587 \"To:\" header field.
588 588
589 all 589 all cc Forms a reply to the addresses in the
590 cc Forms a reply to the sender, plus all recipients. 590 \"Mail-Followup-To:\" header field if one
591 exists; otherwise forms a reply to the sender,
592 plus all recipients.
591 593
592Depending on your answer, \"repl\" is given a different argument 594Depending on your answer, \"repl\" is given a different argument
593to form your reply. Specifically, a choice of \"from\" or none at 595to form your reply. Specifically, a choice of \"from\" or none at
@@ -597,7 +599,11 @@ all runs \"repl -nocc all\", and a choice of \"to\" runs \"repl
597 599
598Two windows are then created. One window contains the message to 600Two windows are then created. One window contains the message to
599which you are replying in an MH-Show buffer. Your draft, in 601which you are replying in an MH-Show buffer. Your draft, in
600MH-Letter mode (see `mh-letter-mode'), is in the other window. 602MH-Letter mode (*note `mh-letter-mode'), is in the other window.
603If the reply draft was not one that you expected, check the
604things that affect the behavior of \"repl\" which include the
605\"repl:\" profile component and the \"replcomps\" and
606\"replgroupcomps\" files.
601 607
602If you supply a prefix argument INCLUDEP, the message you are 608If you supply a prefix argument INCLUDEP, the message you are
603replying to is inserted in your reply after having first been run 609replying to is inserted in your reply after having first been run
@@ -895,15 +901,7 @@ letter."
895 (mh-logo-display) 901 (mh-logo-display)
896 (mh-make-local-hook 'kill-buffer-hook) 902 (mh-make-local-hook 'kill-buffer-hook)
897 (add-hook 'kill-buffer-hook 'mh-tidy-draft-buffer nil t) 903 (add-hook 'kill-buffer-hook 'mh-tidy-draft-buffer nil t)
898 (if (and (boundp 'mh-compose-letter-function) 904 (run-hook-with-args 'mh-compose-letter-function to subject cc))
899 mh-compose-letter-function)
900 ;; run-hooks will not pass arguments.
901 (let ((value mh-compose-letter-function))
902 (if (and (listp value) (not (eq (car value) 'lambda)))
903 (while value
904 (funcall (car value) to subject cc)
905 (setq value (cdr value)))
906 (funcall mh-compose-letter-function to subject cc)))))
907 905
908(defun mh-insert-x-mailer () 906(defun mh-insert-x-mailer ()
909 "Append an X-Mailer field to the header. 907 "Append an X-Mailer field to the header.
diff --git a/lisp/mh-e/mh-compat.el b/lisp/mh-e/mh-compat.el
index 50542d67f4e..256a8cfe831 100644
--- a/lisp/mh-e/mh-compat.el
+++ b/lisp/mh-e/mh-compat.el
@@ -117,12 +117,13 @@ introduced in Emacs 22."
117 117
118(mh-defun-compat mh-image-load-path-for-library 118(mh-defun-compat mh-image-load-path-for-library
119 image-load-path-for-library (library image &optional path no-error) 119 image-load-path-for-library (library image &optional path no-error)
120 "Return a suitable search path for images relative to LIBRARY. 120 "Return a suitable search path for images used by LIBRARY.
121 121
122First it searches for IMAGE in a path suitable for LIBRARY, which 122It searches for IMAGE in `image-load-path' (excluding
123includes \"../../etc/images\" and \"../etc/images\" relative to 123\"`data-directory'/images\") and `load-path', followed by a path
124the library file itself, followed by `image-load-path' and 124suitable for LIBRARY, which includes \"../../etc/images\" and
125`load-path'. 125\"../etc/images\" relative to the library file itself, and then
126in \"`data-directory'/images\".
126 127
127Then this function returns a list of directories which contains 128Then this function returns a list of directories which contains
128first the directory in which IMAGE was found, followed by the 129first the directory in which IMAGE was found, followed by the
@@ -137,16 +138,46 @@ Here is an example that uses a common idiom to provide
137compatibility with versions of Emacs that lack the variable 138compatibility with versions of Emacs that lack the variable
138`image-load-path': 139`image-load-path':
139 140
140 ;; Avoid errors on Emacsen without `image-load-path'. 141 ;; Shush compiler.
141 (if (not (boundp 'image-load-path)) (defvar image-load-path nil)) 142 (defvar image-load-path)
142 143
143 (let* ((load-path (image-load-path-for-library \"mh-e\" \"mh-logo.xpm\")) 144 (let* ((load-path (image-load-path-for-library \"mh-e\" \"mh-logo.xpm\"))
144 (image-load-path (cons (car load-path) image-load-path))) 145 (image-load-path (cons (car load-path)
146 (when (boundp 'image-load-path)
147 image-load-path))))
145 (mh-tool-bar-folder-buttons-init))" 148 (mh-tool-bar-folder-buttons-init))"
146 (unless library (error "No library specified")) 149 (unless library (error "No library specified"))
147 (unless image (error "No image specified")) 150 (unless image (error "No image specified"))
148 (let ((image-directory)) 151 (let (image-directory image-directory-load-path)
152 ;; Check for images in image-load-path or load-path.
153 (let ((img image)
154 (dir (or
155 ;; Images in image-load-path.
156 (mh-image-search-load-path image)
157 ;; Images in load-path.
158 (locate-library image)))
159 parent)
160 ;; Since the image might be in a nested directory (for
161 ;; example, mail/attach.pbm), adjust `image-directory'
162 ;; accordingly.
163 (when dir
164 (setq dir (file-name-directory dir))
165 (while (setq parent (file-name-directory img))
166 (setq img (directory-file-name parent)
167 dir (expand-file-name "../" dir))))
168 (setq image-directory-load-path dir))
169
170 ;; If `image-directory-load-path' isn't Emacs' image directory,
171 ;; it's probably a user preference, so use it. Then use a
172 ;; relative setting if possible; otherwise, use
173 ;; `image-directory-load-path'.
149 (cond 174 (cond
175 ;; User-modified image-load-path?
176 ((and image-directory-load-path
177 (not (equal image-directory-load-path
178 (file-name-as-directory
179 (expand-file-name "images" data-directory)))))
180 (setq image-directory image-directory-load-path))
150 ;; Try relative setting. 181 ;; Try relative setting.
151 ((let (library-name d1ei d2ei) 182 ((let (library-name d1ei d2ei)
152 ;; First, find library in the load-path. 183 ;; First, find library in the load-path.
@@ -156,33 +187,20 @@ compatibility with versions of Emacs that lack the variable
156 ;; And then set image-directory relative to that. 187 ;; And then set image-directory relative to that.
157 (setq 188 (setq
158 ;; Go down 2 levels. 189 ;; Go down 2 levels.
159 d2ei (expand-file-name 190 d2ei (file-name-as-directory
160 (concat (file-name-directory library-name) "../../etc/images")) 191 (expand-file-name
192 (concat (file-name-directory library-name) "../../etc/images")))
161 ;; Go down 1 level. 193 ;; Go down 1 level.
162 d1ei (expand-file-name 194 d1ei (file-name-as-directory
163 (concat (file-name-directory library-name) "../etc/images"))) 195 (expand-file-name
196 (concat (file-name-directory library-name) "../etc/images"))))
164 (setq image-directory 197 (setq image-directory
165 ;; Set it to nil if image is not found. 198 ;; Set it to nil if image is not found.
166 (cond ((file-exists-p (expand-file-name image d2ei)) d2ei) 199 (cond ((file-exists-p (expand-file-name image d2ei)) d2ei)
167 ((file-exists-p (expand-file-name image d1ei)) d1ei))))) 200 ((file-exists-p (expand-file-name image d1ei)) d1ei)))))
168 ;; Check for images in image-load-path or load-path. 201 ;; Use Emacs' image directory.
169 ((let ((img image) 202 (image-directory-load-path
170 (dir (or 203 (setq image-directory image-directory-load-path))
171 ;; Images in image-load-path.
172 (mh-image-search-load-path image)
173 ;; Images in load-path.
174 (locate-library image)))
175 parent)
176 ;; Since the image might be in a nested directory (for
177 ;; example, mail/attach.pbm), adjust `image-directory'
178 ;; accordingly.
179 (and dir
180 (setq dir (file-name-directory dir))
181 (progn
182 (while (setq parent (file-name-directory img))
183 (setq img (directory-file-name parent)
184 dir (expand-file-name "../" dir)))
185 (setq image-directory dir)))))
186 (no-error 204 (no-error
187 (message "Could not find image %s for library %s" image library)) 205 (message "Could not find image %s for library %s" image library))
188 (t 206 (t
diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el
index 2f29a678f13..84e569bab81 100644
--- a/lisp/mh-e/mh-e.el
+++ b/lisp/mh-e/mh-e.el
@@ -325,9 +325,6 @@ Name of the Previous sequence.")
325 325
326;; Etc. (alphabetical) 326;; Etc. (alphabetical)
327 327
328;; Avoid errors on Emacsen without image-load-path.
329(if (not (boundp 'image-load-path)) (defvar image-load-path nil))
330
331(defvar mh-flists-present-flag nil 328(defvar mh-flists-present-flag nil
332 "Non-nil means that we have \"flists\".") 329 "Non-nil means that we have \"flists\".")
333 330
@@ -430,20 +427,20 @@ gnus-version)
430 427
431(defun mh-list-to-string-1 (l) 428(defun mh-list-to-string-1 (l)
432 "Flatten the list L and make every element of the new list into a string." 429 "Flatten the list L and make every element of the new list into a string."
433 (let ((new-list nil)) 430 (let (new-list)
434 (while l 431 (dolist (element l)
435 (cond ((null (car l))) 432 (cond ((null element))
436 ((symbolp (car l)) 433 ((symbolp element)
437 (setq new-list (cons (symbol-name (car l)) new-list))) 434 (push (symbol-name element) new-list))
438 ((numberp (car l)) 435 ((numberp element)
439 (setq new-list (cons (int-to-string (car l)) new-list))) 436 (push (int-to-string element) new-list))
440 ((equal (car l) "")) 437 ((equal element ""))
441 ((stringp (car l)) (setq new-list (cons (car l) new-list))) 438 ((stringp element)
442 ((listp (car l)) 439 (push element new-list))
443 (setq new-list (nconc (mh-list-to-string-1 (car l)) 440 ((listp element)
444 new-list))) 441 (setq new-list (nconc (mh-list-to-string-1 element) new-list)))
445 (t (error "Bad element in `mh-list-to-string': %s" (car l)))) 442 (t
446 (setq l (cdr l))) 443 (error "Bad element: %s" element))))
447 new-list)) 444 new-list))
448 445
449 446
diff --git a/lisp/mh-e/mh-folder.el b/lisp/mh-e/mh-folder.el
index 2c32d1433f1..b1b8c7d859c 100644
--- a/lisp/mh-e/mh-folder.el
+++ b/lisp/mh-e/mh-folder.el
@@ -525,6 +525,7 @@ font-lock is done highlighting.")
525(eval-when-compile 525(eval-when-compile
526 (defvar desktop-save-buffer) 526 (defvar desktop-save-buffer)
527 (defvar font-lock-auto-fontify) 527 (defvar font-lock-auto-fontify)
528 (defvar image-load-path)
528 (mh-do-in-xemacs (defvar font-lock-defaults))) 529 (mh-do-in-xemacs (defvar font-lock-defaults)))
529 530
530(defvar mh-folder-buttons-init-flag nil) 531(defvar mh-folder-buttons-init-flag nil)
@@ -592,7 +593,9 @@ perform the operation on all messages in that region.
592 (mh-do-in-gnu-emacs 593 (mh-do-in-gnu-emacs
593 (unless mh-folder-buttons-init-flag 594 (unless mh-folder-buttons-init-flag
594 (let* ((load-path (mh-image-load-path-for-library "mh-e" "mh-logo.xpm")) 595 (let* ((load-path (mh-image-load-path-for-library "mh-e" "mh-logo.xpm"))
595 (image-load-path (cons (car load-path) image-load-path))) 596 (image-load-path (cons (car load-path)
597 (when (boundp 'image-load-path)
598 image-load-path))))
596 (mh-tool-bar-folder-buttons-init) 599 (mh-tool-bar-folder-buttons-init)
597 (setq mh-folder-buttons-init-flag t))) 600 (setq mh-folder-buttons-init-flag t)))
598 (set (make-local-variable 'tool-bar-map) mh-folder-tool-bar-map)) 601 (set (make-local-variable 'tool-bar-map) mh-folder-tool-bar-map))
diff --git a/lisp/mh-e/mh-letter.el b/lisp/mh-e/mh-letter.el
index a7290cf5ae9..024c1875eac 100644
--- a/lisp/mh-e/mh-letter.el
+++ b/lisp/mh-e/mh-letter.el
@@ -278,7 +278,9 @@ searching for `mh-mail-header-separator' in the buffer."
278(defvar mh-letter-buttons-init-flag nil) 278(defvar mh-letter-buttons-init-flag nil)
279 279
280;; Shush compiler. 280;; Shush compiler.
281(eval-when-compile (mh-do-in-xemacs (defvar font-lock-defaults))) 281(eval-when-compile
282 (defvar image-load-path)
283 (mh-do-in-xemacs (defvar font-lock-defaults)))
282 284
283;; Ensure new buffers won't get this mode if default-major-mode is nil. 285;; Ensure new buffers won't get this mode if default-major-mode is nil.
284(put 'mh-letter-mode 'mode-class 'special) 286(put 'mh-letter-mode 'mode-class 'special)
@@ -314,7 +316,9 @@ order).
314 (mh-do-in-gnu-emacs 316 (mh-do-in-gnu-emacs
315 (unless mh-letter-buttons-init-flag 317 (unless mh-letter-buttons-init-flag
316 (let* ((load-path (mh-image-load-path-for-library "mh-e" "mh-logo.xpm")) 318 (let* ((load-path (mh-image-load-path-for-library "mh-e" "mh-logo.xpm"))
317 (image-load-path (cons (car load-path) image-load-path))) 319 (image-load-path (cons (car load-path)
320 (when (boundp 'image-load-path)
321 image-load-path))))
318 (mh-tool-bar-letter-buttons-init) 322 (mh-tool-bar-letter-buttons-init)
319 (setq mh-letter-buttons-init-flag t))) 323 (setq mh-letter-buttons-init-flag t)))
320 (set (make-local-variable 'tool-bar-map) mh-letter-tool-bar-map)) 324 (set (make-local-variable 'tool-bar-map) mh-letter-tool-bar-map))
diff --git a/lisp/mh-e/mh-utils.el b/lisp/mh-e/mh-utils.el
index 44e15f3cb19..e41ee0bcc4f 100644
--- a/lisp/mh-e/mh-utils.el
+++ b/lisp/mh-e/mh-utils.el
@@ -127,12 +127,17 @@ Ignores case when searching for OLD."
127 127
128(defvar mh-logo-cache nil) 128(defvar mh-logo-cache nil)
129 129
130;; Shush compiler.
131(defvar image-load-path)
132
130;;;###mh-autoload 133;;;###mh-autoload
131(defun mh-logo-display () 134(defun mh-logo-display ()
132 "Modify mode line to display MH-E logo." 135 "Modify mode line to display MH-E logo."
133 (mh-do-in-gnu-emacs 136 (mh-do-in-gnu-emacs
134 (let* ((load-path (mh-image-load-path-for-library "mh-e" "mh-logo.xpm")) 137 (let* ((load-path (mh-image-load-path-for-library "mh-e" "mh-logo.xpm"))
135 (image-load-path (cons (car load-path) image-load-path))) 138 (image-load-path (cons (car load-path)
139 (when (boundp 'image-load-path)
140 image-load-path))))
136 (add-text-properties 141 (add-text-properties
137 0 2 142 0 2
138 `(display ,(or mh-logo-cache 143 `(display ,(or mh-logo-cache
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 3a22fb49b04..c399515a3d2 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -538,19 +538,20 @@ resized by dragging their header-line."
538 (echo-keystrokes 0) 538 (echo-keystrokes 0)
539 (start-event-frame (window-frame (car (car (cdr start-event))))) 539 (start-event-frame (window-frame (car (car (cdr start-event)))))
540 (start-event-window (car (car (cdr start-event)))) 540 (start-event-window (car (car (cdr start-event))))
541 (start-nwindows (count-windows t))
542 event mouse x left right edges wconfig growth 541 event mouse x left right edges wconfig growth
543 (which-side 542 (which-side
544 (or (cdr (assq 'vertical-scroll-bars (frame-parameters start-event-frame))) 543 (or (cdr (assq 'vertical-scroll-bars (frame-parameters start-event-frame)))
545 'right))) 544 'right)))
546 (if (one-window-p t) 545 (cond
547 (error "Attempt to resize sole ordinary window")) 546 ((one-window-p t)
548 (if (eq which-side 'right) 547 (error "Attempt to resize sole ordinary window"))
549 (if (= (nth 2 (window-edges start-event-window)) 548 ((and (eq which-side 'right)
550 (frame-width start-event-frame)) 549 (>= (nth 2 (window-inside-edges start-event-window))
551 (error "Attempt to drag rightmost scrollbar")) 550 (frame-width start-event-frame)))
552 (if (= (nth 0 (window-edges start-event-window)) 0) 551 (error "Attempt to drag rightmost scrollbar"))
553 (error "Attempt to drag leftmost scrollbar"))) 552 ((and (eq which-side 'left)
553 (= (nth 0 (window-inside-edges start-event-window)) 0))
554 (error "Attempt to drag leftmost scrollbar")))
554 (track-mouse 555 (track-mouse
555 (progn 556 (progn
556 ;; enlarge-window only works on the selected window, so 557 ;; enlarge-window only works on the selected window, so
diff --git a/lisp/pgg-gpg.el b/lisp/pgg-gpg.el
index 0c9f45ab5b9..a9608b7f4f2 100644
--- a/lisp/pgg-gpg.el
+++ b/lisp/pgg-gpg.el
@@ -51,6 +51,13 @@
51 :type '(choice (const :tag "New `--recipient' option" "--recipient") 51 :type '(choice (const :tag "New `--recipient' option" "--recipient")
52 (const :tag "Old `--remote-user' option" "--remote-user"))) 52 (const :tag "Old `--remote-user' option" "--remote-user")))
53 53
54(defcustom pgg-gpg-use-agent (if (getenv "GPG_AGENT_INFO") t nil)
55 "Whether to use gnupg agent for key caching.
56By default, it will be enabled iff the environment variable
57\"GPG_AGENT_INFO\" is set."
58 :group 'pgg-gpg
59 :type 'boolean)
60
54(defvar pgg-gpg-user-id nil 61(defvar pgg-gpg-user-id nil
55 "GnuPG ID of your default identity.") 62 "GnuPG ID of your default identity.")
56 63
@@ -58,7 +65,8 @@
58 (let* ((output-file-name (pgg-make-temp-file "pgg-output")) 65 (let* ((output-file-name (pgg-make-temp-file "pgg-output"))
59 (args 66 (args
60 `("--status-fd" "2" 67 `("--status-fd" "2"
61 ,@(if passphrase '("--passphrase-fd" "0")) 68 ,@(if pgg-gpg-use-agent '("--use-agent")
69 (if passphrase '("--passphrase-fd" "0")))
62 "--yes" ; overwrite 70 "--yes" ; overwrite
63 "--output" ,output-file-name 71 "--output" ,output-file-name
64 ,@pgg-gpg-extra-args ,@args)) 72 ,@pgg-gpg-extra-args ,@args))
@@ -100,7 +108,8 @@
100 (set-default-file-modes orig-mode)))) 108 (set-default-file-modes orig-mode))))
101 109
102(defun pgg-gpg-possibly-cache-passphrase (passphrase &optional key notruncate) 110(defun pgg-gpg-possibly-cache-passphrase (passphrase &optional key notruncate)
103 (if (and pgg-cache-passphrase 111 (if (and passphrase
112 pgg-cache-passphrase
104 (progn 113 (progn
105 (goto-char (point-min)) 114 (goto-char (point-min))
106 (re-search-forward "^\\[GNUPG:] \\(GOOD_PASSPHRASE\\>\\)\\|\\(SIG_CREATED\\)" nil t))) 115 (re-search-forward "^\\[GNUPG:] \\(GOOD_PASSPHRASE\\>\\)\\|\\(SIG_CREATED\\)" nil t)))
@@ -154,24 +163,22 @@ Optional ALL non-nil means search all keys, including secret keys."
154 (let ((args (list "--with-colons" "--no-greeting" "--batch" 163 (let ((args (list "--with-colons" "--no-greeting" "--batch"
155 (if all "--list-secret-keys" "--list-keys") 164 (if all "--list-secret-keys" "--list-keys")
156 string)) 165 string))
157 (key-regexp (concat "^\\(sec\\|pub\\)" 166 (key-regexp (concat "^\\(sec\\|pub\\)"
158 ":[^:]*:[^:]*:[^:]*:\\([^:]*\\):[^:]*" 167 ":[^:]*:[^:]*:[^:]*:\\([^:]*\\):[^:]*"
159 ":[^:]*:[^:]*:[^:]*:\\([^:]*\\):")) 168 ":[^:]*:[^:]*:[^:]*:\\([^:]*\\):")))
160 )
161 (with-temp-buffer 169 (with-temp-buffer
162 (apply #'call-process pgg-gpg-program nil t nil args) 170 (apply #'call-process pgg-gpg-program nil t nil args)
163 (goto-char (point-min)) 171 (goto-char (point-min))
164 (if (re-search-forward key-regexp 172 (if (re-search-forward key-regexp
165 nil t) 173 nil t)
166 (match-string 3))))) 174 (match-string 3)))))
167 175
168(defun pgg-gpg-key-id-from-key-owner (key-owner) 176(defun pgg-gpg-key-id-from-key-owner (key-owner)
169 (cond ((not key-owner) nil) 177 (cond ((not key-owner) nil)
170 ;; Extract bare key id from outermost paired angle brackets, if any: 178 ;; Extract bare key id from outermost paired angle brackets, if any:
171 ((string-match "[^<]*<\\(.+\\)>[^>]*" key-owner) 179 ((string-match "[^<]*<\\(.+\\)>[^>]*" key-owner)
172 (substring key-owner (match-beginning 1)(match-end 1))) 180 (substring key-owner (match-beginning 1)(match-end 1)))
173 (key-owner)) 181 (key-owner)))
174 )
175 182
176(defun pgg-gpg-encrypt-region (start end recipients &optional sign passphrase) 183(defun pgg-gpg-encrypt-region (start end recipients &optional sign passphrase)
177 "Encrypt the current region between START and END. 184 "Encrypt the current region between START and END.
@@ -182,11 +189,11 @@ If optional PASSPHRASE is not specified, it will be obtained from the
182passphrase cache or user." 189passphrase cache or user."
183 (let* ((pgg-gpg-user-id (or pgg-gpg-user-id pgg-default-user-id)) 190 (let* ((pgg-gpg-user-id (or pgg-gpg-user-id pgg-default-user-id))
184 (passphrase (or passphrase 191 (passphrase (or passphrase
185 (when sign 192 (when (and sign (not pgg-gpg-use-agent))
186 (pgg-read-passphrase 193 (pgg-read-passphrase
187 (format "GnuPG passphrase for %s: " 194 (format "GnuPG passphrase for %s: "
188 pgg-gpg-user-id) 195 pgg-gpg-user-id)
189 pgg-gpg-user-id)))) 196 pgg-gpg-user-id))))
190 (args 197 (args
191 (append 198 (append
192 (list "--batch" "--armor" "--always-trust" "--encrypt") 199 (list "--batch" "--armor" "--always-trust" "--encrypt")
@@ -214,8 +221,9 @@ passphrase cache or user."
214If optional PASSPHRASE is not specified, it will be obtained from the 221If optional PASSPHRASE is not specified, it will be obtained from the
215passphrase cache or user." 222passphrase cache or user."
216 (let* ((passphrase (or passphrase 223 (let* ((passphrase (or passphrase
217 (pgg-read-passphrase 224 (when (not pgg-gpg-use-agent)
218 "GnuPG passphrase for symmetric encryption: "))) 225 (pgg-read-passphrase
226 "GnuPG passphrase for symmetric encryption: "))))
219 (args 227 (args
220 (append (list "--batch" "--armor" "--symmetric" ) 228 (append (list "--batch" "--armor" "--symmetric" )
221 (if pgg-text-mode (list "--textmode"))))) 229 (if pgg-text-mode (list "--textmode")))))
@@ -232,22 +240,23 @@ passphrase cache or user."
232 (insert-buffer-substring current-buffer) 240 (insert-buffer-substring current-buffer)
233 (pgg-decode-armor-region (point-min) (point-max)))) 241 (pgg-decode-armor-region (point-min) (point-max))))
234 (secret-keys (pgg-gpg-lookup-all-secret-keys)) 242 (secret-keys (pgg-gpg-lookup-all-secret-keys))
235 ;; XXX the user is stuck if they need to use the passphrase for 243 ;; XXX the user is stuck if they need to use the passphrase for
236 ;; any but the first secret key for which the message is 244 ;; any but the first secret key for which the message is
237 ;; encrypted. ideally, we would incrementally give them a 245 ;; encrypted. ideally, we would incrementally give them a
238 ;; chance with subsequent keys each time they fail with one. 246 ;; chance with subsequent keys each time they fail with one.
239 (key (pgg-gpg-select-matching-key message-keys secret-keys)) 247 (key (pgg-gpg-select-matching-key message-keys secret-keys))
240 (key-owner (and key (pgg-gpg-lookup-key-owner key t))) 248 (key-owner (and key (pgg-gpg-lookup-key-owner key t)))
241 (key-id (pgg-gpg-key-id-from-key-owner key-owner)) 249 (key-id (pgg-gpg-key-id-from-key-owner key-owner))
242 (pgg-gpg-user-id (or key-id key 250 (pgg-gpg-user-id (or key-id key
243 pgg-gpg-user-id pgg-default-user-id)) 251 pgg-gpg-user-id pgg-default-user-id))
244 (passphrase (or passphrase 252 (passphrase (or passphrase
245 (pgg-read-passphrase 253 (when (not pgg-gpg-use-agent)
246 (format (if (pgg-gpg-symmetric-key-p message-keys) 254 (pgg-read-passphrase
247 "Passphrase for symmetric decryption: " 255 (format (if (pgg-gpg-symmetric-key-p message-keys)
248 "GnuPG passphrase for %s: ") 256 "Passphrase for symmetric decryption: "
249 (or key-owner "??")) 257 "GnuPG passphrase for %s: ")
250 pgg-gpg-user-id))) 258 (or key-owner "??"))
259 pgg-gpg-user-id))))
251 (args '("--batch" "--decrypt"))) 260 (args '("--batch" "--decrypt")))
252 (pgg-gpg-process-region start end passphrase pgg-gpg-program args) 261 (pgg-gpg-process-region start end passphrase pgg-gpg-program args)
253 (with-current-buffer pgg-errors-buffer 262 (with-current-buffer pgg-errors-buffer
@@ -269,7 +278,7 @@ passphrase cache or user."
269 (loop for message-key in message-keys 278 (loop for message-key in message-keys
270 for message-key-id = (and (equal (car message-key) 1) 279 for message-key-id = (and (equal (car message-key) 1)
271 (cdr (assq 'key-identifier 280 (cdr (assq 'key-identifier
272 (cdr message-key)))) 281 (cdr message-key))))
273 for key = (and message-key-id (pgg-lookup-key message-key-id 'encrypt)) 282 for key = (and message-key-id (pgg-lookup-key message-key-id 'encrypt))
274 when (and key (member key secret-keys)) return key)) 283 when (and key (member key secret-keys)) return key))
275 284
@@ -277,9 +286,11 @@ passphrase cache or user."
277 "Make detached signature from text between START and END." 286 "Make detached signature from text between START and END."
278 (let* ((pgg-gpg-user-id (or pgg-gpg-user-id pgg-default-user-id)) 287 (let* ((pgg-gpg-user-id (or pgg-gpg-user-id pgg-default-user-id))
279 (passphrase (or passphrase 288 (passphrase (or passphrase
280 (pgg-read-passphrase 289 (when (not pgg-gpg-use-agent)
281 (format "GnuPG passphrase for %s: " pgg-gpg-user-id) 290 (pgg-read-passphrase
282 pgg-gpg-user-id))) 291 (format "GnuPG passphrase for %s: "
292 pgg-gpg-user-id)
293 pgg-gpg-user-id))))
283 (args 294 (args
284 (append (list (if cleartext "--clearsign" "--detach-sign") 295 (append (list (if cleartext "--clearsign" "--detach-sign")
285 "--armor" "--batch" "--verbose" 296 "--armor" "--batch" "--verbose"
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el
index db704985f2a..5b657b1555b 100644
--- a/lisp/progmodes/gdb-ui.el
+++ b/lisp/progmodes/gdb-ui.el
@@ -4,7 +4,7 @@
4;; Maintainer: FSF 4;; Maintainer: FSF
5;; Keywords: unix, tools 5;; Keywords: unix, tools
6 6
7;; Copyright (C) 2002, 2003, 2004, 2005, 2006 7;; Copyright (C) 2002, 2003, 2004, 2005, 2006
8;; Free Software Foundation, Inc. 8;; Free Software Foundation, Inc.
9 9
10;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
@@ -125,6 +125,7 @@ and #define directives otherwise.")
125(defvar gdb-buffer-fringe-width nil) 125(defvar gdb-buffer-fringe-width nil)
126(defvar gdb-signalled nil) 126(defvar gdb-signalled nil)
127(defvar gdb-source-window nil) 127(defvar gdb-source-window nil)
128(defvar gdb-inferior-status nil)
128 129
129(defvar gdb-buffer-type nil 130(defvar gdb-buffer-type nil
130 "One of the symbols bound in `gdb-buffer-rules'.") 131 "One of the symbols bound in `gdb-buffer-rules'.")
@@ -317,6 +318,16 @@ of the inferior. Non-nil means display the layout shown for
317 :group 'gud 318 :group 'gud
318 :version "22.1") 319 :version "22.1")
319 320
321(defun gdb-force-mode-line-update (status)
322 (let ((buffer gud-comint-buffer))
323 (if (and buffer (buffer-name buffer))
324 (with-current-buffer buffer
325 (setq mode-line-process
326 (format ":%s [%s]"
327 (process-status (get-buffer-process buffer)) status))
328 ;; Force mode line redisplay soon.
329 (force-mode-line-update)))))
330
320(defun gdb-many-windows (arg) 331(defun gdb-many-windows (arg)
321 "Toggle the number of windows in the basic arrangement. 332 "Toggle the number of windows in the basic arrangement.
322With arg, display additional buffers iff arg is positive." 333With arg, display additional buffers iff arg is positive."
@@ -524,7 +535,9 @@ With arg, use separate IO iff arg is positive."
524 gdb-buffer-fringe-width (car (window-fringes)) 535 gdb-buffer-fringe-width (car (window-fringes))
525 gdb-debug-ring nil 536 gdb-debug-ring nil
526 gdb-signalled nil 537 gdb-signalled nil
527 gdb-source-window nil) 538 gdb-source-window nil
539 gdb-inferior-status nil
540 gdb-continuation nil)
528 541
529 (setq gdb-buffer-type 'gdba) 542 (setq gdb-buffer-type 'gdba)
530 543
@@ -670,7 +683,8 @@ With arg, enter name of variable to be watched in the minibuffer."
670 (require 'tooltip) 683 (require 'tooltip)
671 (save-selected-window 684 (save-selected-window
672 (let ((expr (if arg 685 (let ((expr (if arg
673 (read-string "Name of variable: ") 686 (completing-read "Name of variable: "
687 'gud-gdb-complete-command)
674 (tooltip-identifier-from-point (point))))) 688 (tooltip-identifier-from-point (point)))))
675 (catch 'already-watched 689 (catch 'already-watched
676 (dolist (var gdb-var-list) 690 (dolist (var gdb-var-list)
@@ -1064,6 +1078,7 @@ The key should be one of the cars in `gdb-buffer-rules-assoc'."
1064;; 1078;;
1065;; These lists are consumed tail first. 1079;; These lists are consumed tail first.
1066;; 1080;;
1081(defvar gdb-continuation nil)
1067 1082
1068(defun gdb-send (proc string) 1083(defun gdb-send (proc string)
1069 "A comint send filter for gdb. 1084 "A comint send filter for gdb.
@@ -1071,12 +1086,15 @@ This filter may simply queue input for a later time."
1071 (with-current-buffer gud-comint-buffer 1086 (with-current-buffer gud-comint-buffer
1072 (let ((inhibit-read-only t)) 1087 (let ((inhibit-read-only t))
1073 (remove-text-properties (point-min) (point-max) '(face)))) 1088 (remove-text-properties (point-min) (point-max) '(face))))
1074 (let ((item (concat string "\n"))) 1089 (if (string-match "\\\\$" string)
1075 (if gud-running 1090 (setq gdb-continuation (concat gdb-continuation string "\n"))
1076 (progn 1091 (let ((item (concat gdb-continuation string "\n")))
1077 (if gdb-enable-debug (push (cons 'send item) gdb-debug-ring)) 1092 (if gud-running
1078 (process-send-string proc item)) 1093 (progn
1079 (gdb-enqueue-input item)))) 1094 (if gdb-enable-debug (push (cons 'send item) gdb-debug-ring))
1095 (process-send-string proc item))
1096 (gdb-enqueue-input item)))
1097 (setq gdb-continuation nil)))
1080 1098
1081;; Note: Stuff enqueued here will be sent to the next prompt, even if it 1099;; Note: Stuff enqueued here will be sent to the next prompt, even if it
1082;; is a query, or other non-top-level prompt. 1100;; is a query, or other non-top-level prompt.
@@ -1152,7 +1170,7 @@ This filter may simply queue input for a later time."
1152 ("starting" gdb-starting) 1170 ("starting" gdb-starting)
1153 ("exited" gdb-exited) 1171 ("exited" gdb-exited)
1154 ("signalled" gdb-signalled) 1172 ("signalled" gdb-signalled)
1155 ("signal" gdb-stopping) 1173 ("signal" gdb-signal)
1156 ("breakpoint" gdb-stopping) 1174 ("breakpoint" gdb-stopping)
1157 ("watchpoint" gdb-stopping) 1175 ("watchpoint" gdb-stopping)
1158 ("frame-begin" gdb-frame-begin) 1176 ("frame-begin" gdb-frame-begin)
@@ -1164,6 +1182,7 @@ This filter may simply queue input for a later time."
1164(defun gdb-resync() 1182(defun gdb-resync()
1165 (setq gdb-flush-pending-output t) 1183 (setq gdb-flush-pending-output t)
1166 (setq gud-running nil) 1184 (setq gud-running nil)
1185 (gdb-force-mode-line-update "stopped")
1167 (setq gdb-output-sink 'user) 1186 (setq gdb-output-sink 'user)
1168 (setq gdb-input-queue nil) 1187 (setq gdb-input-queue nil)
1169 (setq gdb-pending-triggers nil) 1188 (setq gdb-pending-triggers nil)
@@ -1238,6 +1257,8 @@ not GDB."
1238 ((eq sink 'user) 1257 ((eq sink 'user)
1239 (progn 1258 (progn
1240 (setq gud-running t) 1259 (setq gud-running t)
1260 (setq gdb-inferior-status "running")
1261 (gdb-force-mode-line-update gdb-inferior-status)
1241 (gdb-remove-text-properties) 1262 (gdb-remove-text-properties)
1242 (setq gud-overlay-arrow-position nil) 1263 (setq gud-overlay-arrow-position nil)
1243 (setq gdb-overlay-arrow-position nil) 1264 (setq gdb-overlay-arrow-position nil)
@@ -1247,6 +1268,11 @@ not GDB."
1247 (gdb-resync) 1268 (gdb-resync)
1248 (error "Unexpected `starting' annotation"))))) 1269 (error "Unexpected `starting' annotation")))))
1249 1270
1271(defun gdb-signal (ignored)
1272 (setq gdb-inferior-status "signal")
1273 (gdb-force-mode-line-update gdb-inferior-status)
1274 (gdb-stopping ignored))
1275
1250(defun gdb-stopping (ignored) 1276(defun gdb-stopping (ignored)
1251 "An annotation handler for `breakpoint' and other annotations. 1277 "An annotation handler for `breakpoint' and other annotations.
1252They say that I/O for the subprocess is now GDB, not the program 1278They say that I/O for the subprocess is now GDB, not the program
@@ -1269,6 +1295,8 @@ directives."
1269 (setq gdb-active-process nil) 1295 (setq gdb-active-process nil)
1270 (setq gud-overlay-arrow-position nil) 1296 (setq gud-overlay-arrow-position nil)
1271 (setq gdb-overlay-arrow-position nil) 1297 (setq gdb-overlay-arrow-position nil)
1298 (setq gdb-inferior-status "exited")
1299 (gdb-force-mode-line-update gdb-inferior-status)
1272 (gdb-stopping ignored)) 1300 (gdb-stopping ignored))
1273 1301
1274(defun gdb-signalled (ignored) 1302(defun gdb-signalled (ignored)
@@ -1290,6 +1318,11 @@ directives."
1290It is just like `gdb-stopping', except that if we already set the output 1318It is just like `gdb-stopping', except that if we already set the output
1291sink to `user' in `gdb-stopping', that is fine." 1319sink to `user' in `gdb-stopping', that is fine."
1292 (setq gud-running nil) 1320 (setq gud-running nil)
1321 (unless (or gud-overlay-arrow-position gud-last-frame)
1322 (gud-display-line (car gud-last-last-frame) (cdr gud-last-last-frame)))
1323 (unless (member gdb-inferior-status '("exited" "signal"))
1324 (setq gdb-inferior-status "stopped")
1325 (gdb-force-mode-line-update gdb-inferior-status))
1293 (let ((sink gdb-output-sink)) 1326 (let ((sink gdb-output-sink))
1294 (cond 1327 (cond
1295 ((eq sink 'inferior) 1328 ((eq sink 'inferior)
@@ -1628,10 +1661,13 @@ static char *magick[] = {
1628(defvar breakpoint-disabled-icon nil 1661(defvar breakpoint-disabled-icon nil
1629 "Icon for disabled breakpoint in display margin.") 1662 "Icon for disabled breakpoint in display margin.")
1630 1663
1631;; Bitmap for breakpoint in fringe
1632(and (display-images-p) 1664(and (display-images-p)
1665 ;; Bitmap for breakpoint in fringe
1633 (define-fringe-bitmap 'breakpoint 1666 (define-fringe-bitmap 'breakpoint
1634 "\x3c\x7e\xff\xff\xff\xff\x7e\x3c")) 1667 "\x3c\x7e\xff\xff\xff\xff\x7e\x3c")
1668 ;; Bitmap for gud-overlay-arrow in fringe
1669 (define-fringe-bitmap 'hollow-right-triangle
1670 "\xe0\x90\x88\x84\x84\x88\x90\xe0"))
1635 1671
1636(defface breakpoint-enabled 1672(defface breakpoint-enabled
1637 '((t 1673 '((t
@@ -1887,11 +1923,11 @@ static char *magick[] = {
1887 1923
1888(def-gdb-auto-updated-buffer gdb-stack-buffer 1924(def-gdb-auto-updated-buffer gdb-stack-buffer
1889 gdb-invalidate-frames 1925 gdb-invalidate-frames
1890 "server where\n" 1926 "server info stack\n"
1891 gdb-info-frames-handler 1927 gdb-info-stack-handler
1892 gdb-info-frames-custom) 1928 gdb-info-stack-custom)
1893 1929
1894(defun gdb-info-frames-custom () 1930(defun gdb-info-stack-custom ()
1895 (with-current-buffer (gdb-get-buffer 'gdb-stack-buffer) 1931 (with-current-buffer (gdb-get-buffer 'gdb-stack-buffer)
1896 (save-excursion 1932 (save-excursion
1897 (let ((buffer-read-only nil) 1933 (let ((buffer-read-only nil)
@@ -1952,7 +1988,7 @@ static char *magick[] = {
1952 map)) 1988 map))
1953 1989
1954(defun gdb-frames-mode () 1990(defun gdb-frames-mode ()
1955 "Major mode for gdb frames. 1991 "Major mode for gdb call stack.
1956 1992
1957\\{gdb-frames-mode-map}" 1993\\{gdb-frames-mode-map}"
1958 (kill-all-local-variables) 1994 (kill-all-local-variables)
@@ -2033,15 +2069,13 @@ static char *magick[] = {
2033 map)) 2069 map))
2034 2070
2035(defvar gdb-threads-font-lock-keywords 2071(defvar gdb-threads-font-lock-keywords
2036 '( 2072 '((") +\\([^ ]+\\) (" (1 font-lock-function-name-face))
2037 (") +\\([^ ]+\\) (" (1 font-lock-function-name-face))
2038 ("in \\([^ ]+\\) (" (1 font-lock-function-name-face)) 2073 ("in \\([^ ]+\\) (" (1 font-lock-function-name-face))
2039 ("\\(\\(\\sw\\|[_.]\\)+\\)=" (1 font-lock-variable-name-face)) 2074 ("\\(\\(\\sw\\|[_.]\\)+\\)=" (1 font-lock-variable-name-face)))
2040 )
2041 "Font lock keywords used in `gdb-threads-mode'.") 2075 "Font lock keywords used in `gdb-threads-mode'.")
2042 2076
2043(defun gdb-threads-mode () 2077(defun gdb-threads-mode ()
2044 "Major mode for gdb frames. 2078 "Major mode for gdb threads.
2045 2079
2046\\{gdb-threads-mode-map}" 2080\\{gdb-threads-mode-map}"
2047 (kill-all-local-variables) 2081 (kill-all-local-variables)
@@ -2101,7 +2135,7 @@ static char *magick[] = {
2101 (unless (string-equal (match-string 0) "The") 2135 (unless (string-equal (match-string 0) "The")
2102 (put-text-property start (match-end 0) 2136 (put-text-property start (match-end 0)
2103 'face font-lock-variable-name-face) 2137 'face font-lock-variable-name-face)
2104 (add-text-properties start end 2138 (add-text-properties start end
2105 '(help-echo "mouse-2: edit value" 2139 '(help-echo "mouse-2: edit value"
2106 mouse-face highlight)))) 2140 mouse-face highlight))))
2107 (forward-line 1)))))) 2141 (forward-line 1))))))
@@ -2754,6 +2788,7 @@ Kills the gdb buffers, and resets variables and the source buffers."
2754 (setq gdb-overlay-arrow-position nil)) 2788 (setq gdb-overlay-arrow-position nil))
2755 (setq overlay-arrow-variable-list 2789 (setq overlay-arrow-variable-list
2756 (delq 'gdb-overlay-arrow-position overlay-arrow-variable-list)) 2790 (delq 'gdb-overlay-arrow-position overlay-arrow-variable-list))
2791 (setq fringe-indicator-alist '((overlay-arrow . right-triangle)))
2757 (if (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 2792 (if (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))
2758 (speedbar-refresh)) 2793 (speedbar-refresh))
2759 (setq gud-running nil) 2794 (setq gud-running nil)
@@ -3079,6 +3114,17 @@ BUFFER nil or omitted means use the current buffer."
3079 (goto-char (point-min)) 3114 (goto-char (point-min))
3080 (if (re-search-forward "Stack level \\([0-9]+\\)" nil t) 3115 (if (re-search-forward "Stack level \\([0-9]+\\)" nil t)
3081 (setq gdb-frame-number (match-string 1))) 3116 (setq gdb-frame-number (match-string 1)))
3117 (if gud-overlay-arrow-position
3118 (let ((buffer (marker-buffer gud-overlay-arrow-position))
3119 (position (marker-position gud-overlay-arrow-position)))
3120 (when buffer
3121 (with-current-buffer buffer
3122 (setq fringe-indicator-alist
3123 (if (string-equal gdb-frame-number "0")
3124 nil
3125 '((overlay-arrow . hollow-right-triangle))))
3126 (setq gud-overlay-arrow-position (make-marker))
3127 (set-marker gud-overlay-arrow-position position)))))
3082 (goto-char (point-min)) 3128 (goto-char (point-min))
3083 (if (re-search-forward 3129 (if (re-search-forward
3084 ".*=\\s-+0x0*\\(\\S-*\\)\\s-+in\\s-+\\(\\S-*?\\);? " nil t) 3130 ".*=\\s-+0x0*\\(\\S-*\\)\\s-+in\\s-+\\(\\S-*?\\);? " nil t)
@@ -3123,7 +3169,7 @@ is set in them."
3123 (gdb-enqueue-input 3169 (gdb-enqueue-input
3124 (list 3170 (list
3125 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) 3171 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
3126 (concat "server interpreter mi \"-var-list-children --all-values " 3172 (concat "server interpreter mi \"-var-list-children --all-values "
3127 varnum "\"\n") 3173 varnum "\"\n")
3128 (concat "-var-list-children --all-values " varnum "\n")) 3174 (concat "-var-list-children --all-values " varnum "\n"))
3129 `(lambda () (gdb-var-list-children-handler-1 ,varnum))))) 3175 `(lambda () (gdb-var-list-children-handler-1 ,varnum)))))
@@ -3252,7 +3298,7 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
3252 (unless (string-equal (match-string 0) "No registers.") 3298 (unless (string-equal (match-string 0) "No registers.")
3253 (put-text-property start (match-end 0) 3299 (put-text-property start (match-end 0)
3254 'face font-lock-variable-name-face) 3300 'face font-lock-variable-name-face)
3255 (add-text-properties start end 3301 (add-text-properties start end
3256 '(help-echo "mouse-2: edit value" 3302 '(help-echo "mouse-2: edit value"
3257 mouse-face highlight)))) 3303 mouse-face highlight))))
3258 (forward-line 1)))))) 3304 (forward-line 1))))))
@@ -3334,7 +3380,7 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
3334 help-echo "mouse-2: create watch expression" 3380 help-echo "mouse-2: create watch expression"
3335 local-map ,gdb-locals-watch-map-1) 3381 local-map ,gdb-locals-watch-map-1)
3336 name)) 3382 name))
3337 (insert 3383 (insert
3338 (concat name "\t" (nth 1 local) 3384 (concat name "\t" (nth 1 local)
3339 "\t" (nth 2 local) "\n"))) 3385 "\t" (nth 2 local) "\n")))
3340 (set-window-start window start) 3386 (set-window-start window start)
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 0e151ce9be2..6afa3f29348 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -33,8 +33,6 @@
33 33
34(require 'compile) 34(require 'compile)
35 35
36(defvar font-lock-lines-before)
37
38 36
39(defgroup grep nil 37(defgroup grep nil
40 "Run compiler as inferior of Emacs, parse error messages." 38 "Run compiler as inferior of Emacs, parse error messages."
@@ -536,10 +534,7 @@ temporarily highlight in visited source lines."
536 grep-regexp-alist) 534 grep-regexp-alist)
537 (set (make-local-variable 'compilation-process-setup-function) 535 (set (make-local-variable 'compilation-process-setup-function)
538 'grep-process-setup) 536 'grep-process-setup)
539 (set (make-local-variable 'compilation-disable-input) t) 537 (set (make-local-variable 'compilation-disable-input) t))
540 ;; Set `font-lock-lines-before' to 0 to not refontify the previous
541 ;; line where grep markers may be already removed.
542 (set (make-local-variable 'font-lock-lines-before) 0))
543 538
544;;;###autoload 539;;;###autoload
545(defun grep-find (command-args) 540(defun grep-find (command-args)
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index f98ee3540d8..7fa5a0b6dcc 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -740,14 +740,18 @@ To run GDB in text command mode, set `gud-gdb-command-name' to
740 740
741(defvar gud-comint-buffer nil) 741(defvar gud-comint-buffer nil)
742 742
743(defun gud-gdb-complete-command () 743(defun gud-gdb-complete-command (&optional command a b)
744 "Perform completion on the GDB command preceding point. 744 "Perform completion on the GDB command preceding point.
745This is implemented using the GDB `complete' command which isn't 745This is implemented using the GDB `complete' command which isn't
746available with older versions of GDB." 746available with older versions of GDB."
747 (interactive) 747 (interactive)
748 (let* ((end (point)) 748 (if command
749 (command (buffer-substring (comint-line-beginning-position) end)) 749 ;; Used by gud-watch in mini-buffer.
750 (command-word 750 (setq command (concat "p " command))
751 ;; Used in GUD buffer.
752 (let ((end (point)))
753 (setq command (buffer-substring (comint-line-beginning-position) end))))
754 (let* ((command-word
751 ;; Find the word break. This match will always succeed. 755 ;; Find the word break. This match will always succeed.
752 (and (string-match "\\(\\`\\| \\)\\([^ ]*\\)\\'" command) 756 (and (string-match "\\(\\`\\| \\)\\([^ ]*\\)\\'" command)
753 (substring command (match-beginning 2)))) 757 (substring command (match-beginning 2))))
@@ -866,13 +870,14 @@ It is passed through FILTER before we look at it."
866 870
867(defun gud-gdb-run-command-fetch-lines (command buffer &optional skip) 871(defun gud-gdb-run-command-fetch-lines (command buffer &optional skip)
868 "Run COMMAND, and return the list of lines it outputs. 872 "Run COMMAND, and return the list of lines it outputs.
869BUFFER is the GUD buffer in which to run the command. 873BUFFER is the current buffer which may be the GUD buffer in which to run.
870SKIP is the number of chars to skip on each lines, it defaults to 0." 874SKIP is the number of chars to skip on each lines, it defaults to 0."
871 (with-current-buffer buffer 875 (with-current-buffer gud-comint-buffer
872 (if (save-excursion 876 (if (and (eq gud-comint-buffer buffer)
873 (goto-char (point-max)) 877 (save-excursion
874 (forward-line 0) 878 (goto-char (point-max))
875 (not (looking-at comint-prompt-regexp))) 879 (forward-line 0)
880 (not (looking-at comint-prompt-regexp))))
876 nil 881 nil
877 ;; Much of this copied from GDB complete, but I'm grabbing the stack 882 ;; Much of this copied from GDB complete, but I'm grabbing the stack
878 ;; frame instead. 883 ;; frame instead.
@@ -881,12 +886,13 @@ SKIP is the number of chars to skip on each lines, it defaults to 0."
881 (gud-gdb-fetch-lines-string nil) 886 (gud-gdb-fetch-lines-string nil)
882 (gud-gdb-fetch-lines-break (or skip 0)) 887 (gud-gdb-fetch-lines-break (or skip 0))
883 (gud-marker-filter 888 (gud-marker-filter
884 `(lambda (string) (gud-gdb-fetch-lines-filter string ',gud-marker-filter)))) 889 `(lambda (string)
890 (gud-gdb-fetch-lines-filter string ',gud-marker-filter))))
885 ;; Issue the command to GDB. 891 ;; Issue the command to GDB.
886 (gud-basic-call command) 892 (gud-basic-call command)
887 ;; Slurp the output. 893 ;; Slurp the output.
888 (while gud-gdb-fetch-lines-in-progress 894 (while gud-gdb-fetch-lines-in-progress
889 (accept-process-output (get-buffer-process buffer))) 895 (accept-process-output (get-buffer-process gud-comint-buffer)))
890 (nreverse gud-gdb-fetched-lines))))) 896 (nreverse gud-gdb-fetched-lines)))))
891 897
892 898
@@ -3270,11 +3276,10 @@ Treats actions as defuns."
3270 (remove-hook 'tooltip-hook 'gud-tooltip-tips) 3276 (remove-hook 'tooltip-hook 'gud-tooltip-tips)
3271 (define-key global-map [mouse-movement] 'ignore))) 3277 (define-key global-map [mouse-movement] 'ignore)))
3272 (gud-tooltip-activate-mouse-motions-if-enabled) 3278 (gud-tooltip-activate-mouse-motions-if-enabled)
3273 (if (and 3279 (if (and gud-comint-buffer
3274 gud-comint-buffer 3280 (buffer-name gud-comint-buffer); gud-comint-buffer might be killed
3275 (buffer-name gud-comint-buffer); gud-comint-buffer might be killed 3281 (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
3276 (with-current-buffer gud-comint-buffer 3282 '(gdbmi gdba)))
3277 (memq gud-minor-mode '(gdbmi gdba))))
3278 (if gud-tooltip-mode 3283 (if gud-tooltip-mode
3279 (progn 3284 (progn
3280 (dolist (buffer (buffer-list)) 3285 (dolist (buffer (buffer-list))
diff --git a/lisp/simple.el b/lisp/simple.el
index 9b232dee4cc..812c2d1fa2e 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -3188,6 +3188,9 @@ With a double \\[universal-argument] prefix argument, e.g. \\[universal-argument
3188\\[universal-argument] \\[set-mark-command], unconditionally 3188\\[universal-argument] \\[set-mark-command], unconditionally
3189set mark where point is. 3189set mark where point is.
3190 3190
3191Setting the mark also sets the \"region\", which is the closest
3192equivalent in Emacs to what some editors call the \"selection\".
3193
3191Novice Emacs Lisp programmers often try to use the mark for the wrong 3194Novice Emacs Lisp programmers often try to use the mark for the wrong
3192purposes. See the documentation of `set-mark' for more information." 3195purposes. See the documentation of `set-mark' for more information."
3193 (interactive "P") 3196 (interactive "P")
diff --git a/lisp/sort.el b/lisp/sort.el
index 5183bf65afa..c3d135f4c66 100644
--- a/lisp/sort.el
+++ b/lisp/sort.el
@@ -121,6 +121,9 @@ it defaults to `<', otherwise it defaults to `string<'."
121(defun sort-build-lists (nextrecfun endrecfun startkeyfun endkeyfun) 121(defun sort-build-lists (nextrecfun endrecfun startkeyfun endkeyfun)
122 (let ((sort-lists ()) 122 (let ((sort-lists ())
123 (start-rec nil) 123 (start-rec nil)
124 ;; To avoid such functins as `end-of-line' being affected by
125 ;; fields.
126 (inhibit-field-text-motion t)
124 done key) 127 done key)
125 ;; Loop over sort records. 128 ;; Loop over sort records.
126 ;(goto-char (point-min)) -- it is the caller's responsibility to 129 ;(goto-char (point-min)) -- it is the caller's responsibility to
diff --git a/lisp/term/w32-win.el b/lisp/term/w32-win.el
index 1b81ef362d2..3987ad66f6a 100644
--- a/lisp/term/w32-win.el
+++ b/lisp/term/w32-win.el
@@ -1198,11 +1198,15 @@ See the documentation of `create-fontset-from-fontset-spec for the format.")
1198(set-fontset-font nil (make-char 'japanese-jisx0208-1978) '("*" . "JISX0208-SJIS")) 1198(set-fontset-font nil (make-char 'japanese-jisx0208-1978) '("*" . "JISX0208-SJIS"))
1199 1199
1200(defun mouse-set-font (&rest fonts) 1200(defun mouse-set-font (&rest fonts)
1201 "Select a font. 1201 "Select an Emacs font from a list of known good fonts and fontsets.
1202
1202If `w32-use-w32-font-dialog' is non-nil (the default), use the Windows 1203If `w32-use-w32-font-dialog' is non-nil (the default), use the Windows
1203font dialog to get the matching FONTS. Otherwise use a pop-up menu 1204font dialog to display the list of possible fonts. Otherwise use a
1204\(like Emacs on other platforms) initialized with the fonts in 1205pop-up menu (like Emacs does on other platforms) initialized with
1205`w32-fixed-font-alist'." 1206the fonts in `w32-fixed-font-alist'.
1207If `w32-list-proportional-fonts' is non-nil, add proportional fonts
1208to the list in the font selection dialog (the fonts listed by the
1209pop-up menu are unaffected by `w32-list-proportional-fonts')."
1206 (interactive 1210 (interactive
1207 (if w32-use-w32-font-dialog 1211 (if w32-use-w32-font-dialog
1208 (let ((chosen-font (w32-select-font (selected-frame) 1212 (let ((chosen-font (w32-select-font (selected-frame)
diff --git a/lisp/textmodes/bibtex.el b/lisp/textmodes/bibtex.el
index f1e055594b7..daca0502454 100644
--- a/lisp/textmodes/bibtex.el
+++ b/lisp/textmodes/bibtex.el
@@ -88,6 +88,7 @@ If this is a function, call it to generate the initial field text."
88 (string :tag "Initial text") 88 (string :tag "Initial text")
89 (function :tag "Initialize Function" :value fun) 89 (function :tag "Initialize Function" :value fun)
90 (other :tag "Default" t))) 90 (other :tag "Default" t)))
91(put 'bibtex-include-OPTkey 'risky-local-variable t)
91 92
92(defcustom bibtex-user-optional-fields 93(defcustom bibtex-user-optional-fields
93 '(("annote" "Personal annotation (ignored)")) 94 '(("annote" "Personal annotation (ignored)"))
@@ -437,6 +438,7 @@ field or a function, which is called to determine the initial content
437of the field, and ALTERNATIVE-FLAG (either nil or t) marks if the 438of the field, and ALTERNATIVE-FLAG (either nil or t) marks if the
438field is an alternative. ALTERNATIVE-FLAG may be t only in the 439field is an alternative. ALTERNATIVE-FLAG may be t only in the
439REQUIRED or CROSSREF-REQUIRED lists.") 440REQUIRED or CROSSREF-REQUIRED lists.")
441(put 'bibtex-entry-field-alist 'risky-local-variable t)
440 442
441(defcustom bibtex-comment-start "@Comment" 443(defcustom bibtex-comment-start "@Comment"
442 "String starting a BibTeX comment." 444 "String starting a BibTeX comment."
@@ -595,7 +597,7 @@ See `bibtex-generate-autokey' for details."
595 :type '(repeat (cons (regexp :tag "Old") 597 :type '(repeat (cons (regexp :tag "Old")
596 (string :tag "New")))) 598 (string :tag "New"))))
597 599
598(defcustom bibtex-autokey-name-case-convert 'downcase 600(defcustom bibtex-autokey-name-case-convert-function 'downcase
599 "Function called for each name to perform case conversion. 601 "Function called for each name to perform case conversion.
600See `bibtex-generate-autokey' for details." 602See `bibtex-generate-autokey' for details."
601 :group 'bibtex-autokey 603 :group 'bibtex-autokey
@@ -604,6 +606,8 @@ See `bibtex-generate-autokey' for details."
604 (const :tag "Capitalize" capitalize) 606 (const :tag "Capitalize" capitalize)
605 (const :tag "Upcase" upcase) 607 (const :tag "Upcase" upcase)
606 (function :tag "Conversion function"))) 608 (function :tag "Conversion function")))
609(defvaralias 'bibtex-autokey-name-case-convert
610 'bibtex-autokey-name-case-convert-function)
607 611
608(defcustom bibtex-autokey-name-length 'infty 612(defcustom bibtex-autokey-name-length 'infty
609 "Number of characters from name to incorporate into key. 613 "Number of characters from name to incorporate into key.
@@ -666,7 +670,7 @@ See `bibtex-generate-autokey' for details."
666 :group 'bibtex-autokey 670 :group 'bibtex-autokey
667 :type '(repeat regexp)) 671 :type '(repeat regexp))
668 672
669(defcustom bibtex-autokey-titleword-case-convert 'downcase 673(defcustom bibtex-autokey-titleword-case-convert-function 'downcase
670 "Function called for each titleword to perform case conversion. 674 "Function called for each titleword to perform case conversion.
671See `bibtex-generate-autokey' for details." 675See `bibtex-generate-autokey' for details."
672 :group 'bibtex-autokey 676 :group 'bibtex-autokey
@@ -675,6 +679,8 @@ See `bibtex-generate-autokey' for details."
675 (const :tag "Capitalize" capitalize) 679 (const :tag "Capitalize" capitalize)
676 (const :tag "Upcase" upcase) 680 (const :tag "Upcase" upcase)
677 (function :tag "Conversion function"))) 681 (function :tag "Conversion function")))
682(defvaralias 'bibtex-autokey-titleword-case-convert
683 'bibtex-autokey-titleword-case-convert-function)
678 684
679(defcustom bibtex-autokey-titleword-abbrevs nil 685(defcustom bibtex-autokey-titleword-abbrevs nil
680 "Determines exceptions to the usual abbreviation mechanism. 686 "Determines exceptions to the usual abbreviation mechanism.
@@ -847,6 +853,7 @@ The following is a complex example, see http://link.aps.org/linkfaq.html.
847 (choice (string :tag "Replacement") 853 (choice (string :tag "Replacement")
848 (integer :tag "Sub-match") 854 (integer :tag "Sub-match")
849 (function :tag "Filter")))))))) 855 (function :tag "Filter"))))))))
856(put 'bibtex-generate-url-list 'risky-local-variable t)
850 857
851(defcustom bibtex-expand-strings nil 858(defcustom bibtex-expand-strings nil
852 "If non-nil, expand strings when extracting the content of a BibTeX field." 859 "If non-nil, expand strings when extracting the content of a BibTeX field."
@@ -1164,7 +1171,7 @@ The CDRs of the elements are t for header keys and nil for crossref keys.")
1164 (,(concat "^[ \t]*\\(" bibtex-field-name "\\)[ \t]*=") 1171 (,(concat "^[ \t]*\\(" bibtex-field-name "\\)[ \t]*=")
1165 1 font-lock-variable-name-face) 1172 1 font-lock-variable-name-face)
1166 ;; url 1173 ;; url
1167 bibtex-font-lock-url bibtex-font-lock-crossref) 1174 (bibtex-font-lock-url) (bibtex-font-lock-crossref))
1168 "*Default expressions to highlight in BibTeX mode.") 1175 "*Default expressions to highlight in BibTeX mode.")
1169 1176
1170(defvar bibtex-font-lock-url-regexp 1177(defvar bibtex-font-lock-url-regexp
@@ -2085,7 +2092,7 @@ and `bibtex-autokey-names-stretch'."
2085 ;; --> take the last token 2092 ;; --> take the last token
2086 (match-string 1 fullname)) 2093 (match-string 1 fullname))
2087 (t (error "Name `%s' is incorrectly formed" fullname))))) 2094 (t (error "Name `%s' is incorrectly formed" fullname)))))
2088 (funcall bibtex-autokey-name-case-convert 2095 (funcall bibtex-autokey-name-case-convert-function
2089 (bibtex-autokey-abbrev name bibtex-autokey-name-length)))) 2096 (bibtex-autokey-abbrev name bibtex-autokey-name-length))))
2090 2097
2091(defun bibtex-autokey-get-year () 2098(defun bibtex-autokey-get-year ()
@@ -2147,7 +2154,7 @@ and `bibtex-autokey-titleword-length'."
2147 (setq alist (cdr alist))) 2154 (setq alist (cdr alist)))
2148 (if alist 2155 (if alist
2149 (cdar alist) 2156 (cdar alist)
2150 (funcall bibtex-autokey-titleword-case-convert 2157 (funcall bibtex-autokey-titleword-case-convert-function
2151 (bibtex-autokey-abbrev titleword bibtex-autokey-titleword-length))))) 2158 (bibtex-autokey-abbrev titleword bibtex-autokey-titleword-length)))))
2152 2159
2153(defun bibtex-generate-autokey () 2160(defun bibtex-generate-autokey ()
@@ -2167,7 +2174,7 @@ The name part:
2167 take at least `bibtex-autokey-name-length' characters (truncate only 2174 take at least `bibtex-autokey-name-length' characters (truncate only
2168 after a consonant or at a word end). 2175 after a consonant or at a word end).
2169 5. Convert all last names using the function 2176 5. Convert all last names using the function
2170 `bibtex-autokey-name-case-convert'. 2177 `bibtex-autokey-name-case-convert-function'.
2171 6. Build the name part of the key by concatenating all abbreviated last 2178 6. Build the name part of the key by concatenating all abbreviated last
2172 names with the string `bibtex-autokey-name-separator' between any two. 2179 names with the string `bibtex-autokey-name-separator' between any two.
2173 If there are more names in the name field than names used in the name 2180 If there are more names in the name field than names used in the name
@@ -2199,7 +2206,7 @@ The title part
2199 `bibtex-autokey-titleword-length' characters (truncate only after 2206 `bibtex-autokey-titleword-length' characters (truncate only after
2200 a consonant or at a word end). 2207 a consonant or at a word end).
2201 5. Convert all title words using the function 2208 5. Convert all title words using the function
2202 `bibtex-autokey-titleword-case-convert'. 2209 `bibtex-autokey-titleword-case-convert-function'.
2203 6. Build the title part by concatenating all abbreviated title words with 2210 6. Build the title part by concatenating all abbreviated title words with
2204 the string `bibtex-autokey-titleword-separator' between any two. 2211 the string `bibtex-autokey-titleword-separator' between any two.
2205 2212
@@ -2531,7 +2538,7 @@ Use `bibtex-summary-function' to generate summary."
2531Used as default value of `bibtex-summary-function'." 2538Used as default value of `bibtex-summary-function'."
2532 ;; It would be neat to customize this function. How? 2539 ;; It would be neat to customize this function. How?
2533 (if (looking-at bibtex-entry-maybe-empty-head) 2540 (if (looking-at bibtex-entry-maybe-empty-head)
2534 (let* ((bibtex-autokey-name-case-convert 'identity) 2541 (let* ((bibtex-autokey-name-case-convert-function 'identity)
2535 (bibtex-autokey-name-length 'infty) 2542 (bibtex-autokey-name-length 'infty)
2536 (bibtex-autokey-names 1) 2543 (bibtex-autokey-names 1)
2537 (bibtex-autokey-names-stretch 0) 2544 (bibtex-autokey-names-stretch 0)
@@ -2542,7 +2549,7 @@ Used as default value of `bibtex-summary-function'."
2542 (year (bibtex-autokey-get-year)) 2549 (year (bibtex-autokey-get-year))
2543 (bibtex-autokey-titlewords 5) 2550 (bibtex-autokey-titlewords 5)
2544 (bibtex-autokey-titlewords-stretch 2) 2551 (bibtex-autokey-titlewords-stretch 2)
2545 (bibtex-autokey-titleword-case-convert 'identity) 2552 (bibtex-autokey-titleword-case-convert-function 'identity)
2546 (bibtex-autokey-titleword-length 5) 2553 (bibtex-autokey-titleword-length 5)
2547 (bibtex-autokey-titleword-separator " ") 2554 (bibtex-autokey-titleword-separator " ")
2548 (title (bibtex-autokey-get-title)) 2555 (title (bibtex-autokey-get-title))
@@ -2785,7 +2792,6 @@ if that value is non-nil.
2785 (list (list nil bibtex-entry-head bibtex-key-in-head)) 2792 (list (list nil bibtex-entry-head bibtex-key-in-head))
2786 imenu-case-fold-search t) 2793 imenu-case-fold-search t)
2787 (make-local-variable 'choose-completion-string-functions) 2794 (make-local-variable 'choose-completion-string-functions)
2788 (make-local-variable 'completion-ignore-case)
2789 ;; XEmacs needs easy-menu-add, Emacs does not care 2795 ;; XEmacs needs easy-menu-add, Emacs does not care
2790 (easy-menu-add bibtex-edit-menu) 2796 (easy-menu-add bibtex-edit-menu)
2791 (easy-menu-add bibtex-entry-menu) 2797 (easy-menu-add bibtex-entry-menu)
@@ -4155,9 +4161,9 @@ An error is signaled if point is outside key or BibTeX field."
4155 4161
4156 (cond ((eq compl 'key) 4162 (cond ((eq compl 'key)
4157 ;; key completion: no cleanup needed 4163 ;; key completion: no cleanup needed
4158 (setq choose-completion-string-functions nil 4164 (setq choose-completion-string-functions nil)
4159 completion-ignore-case nil) 4165 (let (completion-ignore-case)
4160 (bibtex-complete-internal (bibtex-global-key-alist))) 4166 (bibtex-complete-internal (bibtex-global-key-alist))))
4161 4167
4162 ((eq compl 'crossref-key) 4168 ((eq compl 'crossref-key)
4163 ;; crossref key completion 4169 ;; crossref key completion
@@ -4167,40 +4173,35 @@ An error is signaled if point is outside key or BibTeX field."
4167 ;; non-nil. Therefore, `choose-completion-string-functions' is 4173 ;; non-nil. Therefore, `choose-completion-string-functions' is
4168 ;; always set (either to non-nil or nil) when a new completion 4174 ;; always set (either to non-nil or nil) when a new completion
4169 ;; is requested. 4175 ;; is requested.
4170 ;; Also, `choose-completion-delete-max-match' requires 4176 (let (completion-ignore-case)
4171 ;; that we set `completion-ignore-case' (i.e., binding via `let' 4177 (setq choose-completion-string-functions
4172 ;; is not sufficient). 4178 (lambda (choice buffer mini-p base-size)
4173 (setq completion-ignore-case nil 4179 (setq choose-completion-string-functions nil)
4174 choose-completion-string-functions 4180 (choose-completion-string choice buffer base-size)
4175 (lambda (choice buffer mini-p base-size) 4181 (bibtex-complete-crossref-cleanup choice)
4176 (setq choose-completion-string-functions nil) 4182 t)) ; needed by choose-completion-string-functions
4177 (choose-completion-string choice buffer base-size) 4183 (bibtex-complete-crossref-cleanup
4178 (bibtex-complete-crossref-cleanup choice) 4184 (bibtex-complete-internal (bibtex-global-key-alist)))))
4179 t)) ; needed by choose-completion-string-functions
4180
4181 (bibtex-complete-crossref-cleanup (bibtex-complete-internal
4182 (bibtex-global-key-alist))))
4183 4185
4184 ((eq compl 'string) 4186 ((eq compl 'string)
4185 ;; string key completion: no cleanup needed 4187 ;; string key completion: no cleanup needed
4186 (setq choose-completion-string-functions nil 4188 (setq choose-completion-string-functions nil)
4187 completion-ignore-case t) 4189 (let ((completion-ignore-case t))
4188 (bibtex-complete-internal bibtex-strings)) 4190 (bibtex-complete-internal bibtex-strings)))
4189 4191
4190 (compl 4192 (compl
4191 ;; string completion 4193 ;; string completion
4192 (setq completion-ignore-case t 4194 (let ((completion-ignore-case t))
4193 choose-completion-string-functions 4195 (setq choose-completion-string-functions
4194 `(lambda (choice buffer mini-p base-size) 4196 `(lambda (choice buffer mini-p base-size)
4195 (setq choose-completion-string-functions nil) 4197 (setq choose-completion-string-functions nil)
4196 (choose-completion-string choice buffer base-size) 4198 (choose-completion-string choice buffer base-size)
4197 (bibtex-complete-string-cleanup choice ',compl) 4199 (bibtex-complete-string-cleanup choice ',compl)
4198 t)) ; needed by choose-completion-string-functions 4200 t)) ; needed by choose-completion-string-functions
4199 (bibtex-complete-string-cleanup (bibtex-complete-internal compl) 4201 (bibtex-complete-string-cleanup (bibtex-complete-internal compl)
4200 compl)) 4202 compl)))
4201 4203
4202 (t (setq choose-completion-string-functions nil 4204 (t (setq choose-completion-string-functions nil)
4203 completion-ignore-case nil) ; default
4204 (error "Point outside key or BibTeX field"))))) 4205 (error "Point outside key or BibTeX field")))))
4205 4206
4206(defun bibtex-Article () 4207(defun bibtex-Article ()
@@ -4334,16 +4335,16 @@ The URL is generated using the schemes defined in `bibtex-generate-url-list'
4334 (dolist (step scheme) 4335 (dolist (step scheme)
4335 (setq field (cdr (assoc-string (car step) fields-alist t))) 4336 (setq field (cdr (assoc-string (car step) fields-alist t)))
4336 (if (string-match (nth 1 step) field) 4337 (if (string-match (nth 1 step) field)
4337 (setq field (cond ((functionp (nth 2 step)) 4338 (push (cond ((functionp (nth 2 step))
4338 (funcall (nth 2 step) field)) 4339 (funcall (nth 2 step) field))
4339 ((numberp (nth 2 step)) 4340 ((numberp (nth 2 step))
4340 (match-string (nth 2 step) field)) 4341 (match-string (nth 2 step) field))
4341 (t 4342 (t
4342 (replace-match (nth 2 step) t nil field)))) 4343 (replace-match (nth 2 step) t nil field)))
4344 obj)
4343 ;; If the scheme is set up correctly, 4345 ;; If the scheme is set up correctly,
4344 ;; we should never reach this point 4346 ;; we should never reach this point
4345 (error "Match failed: %s" field)) 4347 (error "Match failed: %s" field)))
4346 (push field obj))
4347 (if fmt (apply 'format fmt (nreverse obj)) 4348 (if fmt (apply 'format fmt (nreverse obj))
4348 (apply 'concat (nreverse obj))))) 4349 (apply 'concat (nreverse obj)))))
4349 (browse-url (message "%s" url)))) 4350 (browse-url (message "%s" url))))
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index 1991a73e8e2..64314c772b2 100644
--- a/lisp/textmodes/ispell.el
+++ b/lisp/textmodes/ispell.el
@@ -1325,9 +1325,10 @@ The last occurring definition in the buffer will be used.")
1325 ("^%!PS-Adobe-[123].0" . "\n%%EOF\n") 1325 ("^%!PS-Adobe-[123].0" . "\n%%EOF\n")
1326 ("^---* \\(Start of \\)?[Ff]orwarded [Mm]essage" 1326 ("^---* \\(Start of \\)?[Ff]orwarded [Mm]essage"
1327 . "^---* End of [Ff]orwarded [Mm]essage") 1327 . "^---* End of [Ff]orwarded [Mm]essage")
1328 ;; Matches e-mail addresses, file names, http addresses, etc. The `-+' 1328 ;; Matches e-mail addresses, file names, http addresses, etc. The
1329 ;; pattern necessary for performance reasons when `-' part of word syntax. 1329 ;; `-+' `_+' patterns are necessary for performance reasons when
1330 ("\\(--+\\|\\(/\\w\\|\\(\\(\\w\\|[-_]\\)+[.:@]\\)\\)\\(\\w\\|[-_]\\)*\\([.:/@]+\\(\\w\\|[-_~=?&]\\)+\\)+\\)") 1330 ;; `-' or `_' part of word syntax.
1331 ("\\(--+\\|_+\\|\\(/\\w\\|\\(\\(\\w\\|[-_]\\)+[.:@]\\)\\)\\(\\w\\|[-_]\\)*\\([.:/@]+\\(\\w\\|[-_~=?&]\\)+\\)+\\)")
1331 ;; above checks /.\w sequences 1332 ;; above checks /.\w sequences
1332 ;;("\\(--+\\|\\(/\\|\\(\\(\\w\\|[-_]\\)+[.:@]\\)\\)\\(\\w\\|[-_]\\)*\\([.:/@]+\\(\\w\\|[-_~=?&]\\)+\\)+\\)") 1333 ;;("\\(--+\\|\\(/\\|\\(\\(\\w\\|[-_]\\)+[.:@]\\)\\)\\(\\w\\|[-_]\\)*\\([.:/@]+\\(\\w\\|[-_~=?&]\\)+\\)+\\)")
1333 ;; This is a pretty complex regexp. It can be simplified to the following: 1334 ;; This is a pretty complex regexp. It can be simplified to the following:
diff --git a/lisp/textmodes/org.el b/lisp/textmodes/org.el
index 3c77560a9cc..ad4744adf15 100644
--- a/lisp/textmodes/org.el
+++ b/lisp/textmodes/org.el
@@ -5,7 +5,7 @@
5;; Author: Carsten Dominik <dominik at science dot uva dot nl> 5;; Author: Carsten Dominik <dominik at science dot uva dot nl>
6;; Keywords: outlines, hypermedia, calendar, wp 6;; Keywords: outlines, hypermedia, calendar, wp
7;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/ 7;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/
8;; Version: 4.09 8;; Version: 4.10
9;; 9;;
10;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
11;; 11;;
@@ -81,6 +81,9 @@
81;; 81;;
82;; Changes since version 4.00: 82;; Changes since version 4.00:
83;; --------------------------- 83;; ---------------------------
84;; Version 4.10
85;; - Bug fixes.
86;;
84;; Version 4.09 87;; Version 4.09
85;; - Bug fixes. 88;; - Bug fixes.
86;; - Small improvements to font-lock support. 89;; - Small improvements to font-lock support.
@@ -145,7 +148,7 @@
145 148
146;;; Customization variables 149;;; Customization variables
147 150
148(defvar org-version "4.09" 151(defvar org-version "4.10"
149 "The version number of the file org.el.") 152 "The version number of the file org.el.")
150(defun org-version () 153(defun org-version ()
151 (interactive) 154 (interactive)
@@ -445,7 +448,7 @@ In the calendar, the date can be selected with mouse-1. However, the
445minibuffer will also be active, and you can simply enter the date as well. 448minibuffer will also be active, and you can simply enter the date as well.
446When nil, only the minibuffer will be available." 449When nil, only the minibuffer will be available."
447 :group 'org-time 450 :group 'org-time
448 :type 'number) 451 :type 'boolean)
449 452
450(defcustom org-calendar-follow-timestamp-change t 453(defcustom org-calendar-follow-timestamp-change t
451 "Non-nil means, make the calendar window follow timestamp changes. 454 "Non-nil means, make the calendar window follow timestamp changes.
@@ -1739,7 +1742,8 @@ Changing this variable requires a restart of Emacs to take effect."
1739 :type 'boolean) 1742 :type 'boolean)
1740 1743
1741(defface org-hide 1744(defface org-hide
1742 '((((type tty) (class color)) (:foreground "blue" :weight bold)) 1745 '(
1746 (((type tty) (class color)) (:foreground "white"))
1743 (((class color) (background light)) (:foreground "white")) 1747 (((class color) (background light)) (:foreground "white"))
1744 (((class color) (background dark)) (:foreground "black")) 1748 (((class color) (background dark)) (:foreground "black"))
1745; (((class color) (background light)) (:foreground "grey90")) 1749; (((class color) (background light)) (:foreground "grey90"))
@@ -2589,6 +2593,7 @@ Optional argument N means, put the headline into the Nth line of the window."
2589(define-key org-goto-map [(?q)] 'org-goto-quit) 2593(define-key org-goto-map [(?q)] 'org-goto-quit)
2590(define-key org-goto-map [(control ?g)] 'org-goto-quit) 2594(define-key org-goto-map [(control ?g)] 'org-goto-quit)
2591(define-key org-goto-map "\C-i" 'org-cycle) 2595(define-key org-goto-map "\C-i" 'org-cycle)
2596(define-key org-goto-map [(tab)] 'org-cycle)
2592(define-key org-goto-map [(down)] 'outline-next-visible-heading) 2597(define-key org-goto-map [(down)] 'outline-next-visible-heading)
2593(define-key org-goto-map [(up)] 'outline-previous-visible-heading) 2598(define-key org-goto-map [(up)] 'outline-previous-visible-heading)
2594(define-key org-goto-map "n" 'outline-next-visible-heading) 2599(define-key org-goto-map "n" 'outline-next-visible-heading)
@@ -4001,8 +4006,8 @@ used to insert the time stamp into the buffer to include the time."
4001 month (string-to-number (match-string 3 ans)) 4006 month (string-to-number (match-string 3 ans))
4002 day (string-to-number (match-string 4 ans))) 4007 day (string-to-number (match-string 4 ans)))
4003 (if (< year 100) (setq year (+ 2000 year))) 4008 (if (< year 100) (setq year (+ 2000 year)))
4004 (setq ans (replace-match (format "%04d-%02d-%02d" year month day) 4009 (setq ans (replace-match (format "%04d-%02d-%02d\\5" year month day)
4005 t t ans)))) 4010 t nil ans))))
4006 (setq tl (parse-time-string ans) 4011 (setq tl (parse-time-string ans)
4007 year (or (nth 5 tl) (string-to-number (format-time-string "%Y"))) 4012 year (or (nth 5 tl) (string-to-number (format-time-string "%Y")))
4008 month (or (nth 4 tl) (string-to-number (format-time-string "%m"))) 4013 month (or (nth 4 tl) (string-to-number (format-time-string "%m")))
@@ -4377,6 +4382,7 @@ The following commands are available:
4377 (list 'org-agenda-mode-hook))) 4382 (list 'org-agenda-mode-hook)))
4378 4383
4379(define-key org-agenda-mode-map "\C-i" 'org-agenda-goto) 4384(define-key org-agenda-mode-map "\C-i" 'org-agenda-goto)
4385(define-key org-agenda-mode-map [(tab)] 'org-agenda-goto)
4380(define-key org-agenda-mode-map "\C-m" 'org-agenda-switch-to) 4386(define-key org-agenda-mode-map "\C-m" 'org-agenda-switch-to)
4381(define-key org-agenda-mode-map " " 'org-agenda-show) 4387(define-key org-agenda-mode-map " " 'org-agenda-show)
4382(define-key org-agenda-mode-map "\C-c\C-t" 'org-agenda-todo) 4388(define-key org-agenda-mode-map "\C-c\C-t" 'org-agenda-todo)
@@ -6827,8 +6833,8 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file."
6827 (while (string-match " *\n *" link) 6833 (while (string-match " *\n *" link)
6828 (setq link (replace-match " " t t link))) 6834 (setq link (replace-match " " t t link)))
6829 (if (string-match org-link-regexp link) 6835 (if (string-match org-link-regexp link)
6830 (setq type (match-string 1) 6836 (setq type (match-string 1 link)
6831 path (match-string 2)) 6837 path (match-string 2 link))
6832 (setq type "thisfile" 6838 (setq type "thisfile"
6833 path link)) 6839 path link))
6834 (throw 'match t))) 6840 (throw 'match t)))
@@ -6887,6 +6893,10 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file."
6887 6893
6888 (cond 6894 (cond
6889 6895
6896 ((member type '("http" "https" "ftp" "mailto" "news"))
6897 ;; give these to some browser
6898 (browse-url (concat type ":" path)))
6899
6890 ((string= type "tags") 6900 ((string= type "tags")
6891 (org-tags-view in-emacs path)) 6901 (org-tags-view in-emacs path))
6892 ((or (string= type "camel") 6902 ((or (string= type "camel")
@@ -10801,11 +10811,11 @@ underlined headlines. The default is 3."
10801 10811
10802(defun org-insert-centered (s &optional underline) 10812(defun org-insert-centered (s &optional underline)
10803 "Insert the string S centered and underline it with character UNDERLINE." 10813 "Insert the string S centered and underline it with character UNDERLINE."
10804 (let ((ind (max (/ (- 80 (length s)) 2) 0))) 10814 (let ((ind (max (/ (- 80 (string-width s)) 2) 0)))
10805 (insert (make-string ind ?\ ) s "\n") 10815 (insert (make-string ind ?\ ) s "\n")
10806 (if underline 10816 (if underline
10807 (insert (make-string ind ?\ ) 10817 (insert (make-string ind ?\ )
10808 (make-string (length s) underline) 10818 (make-string (string-width s) underline)
10809 "\n")))) 10819 "\n"))))
10810 10820
10811(defun org-ascii-level-start (level title umax) 10821(defun org-ascii-level-start (level title umax)
@@ -11915,6 +11925,7 @@ a time), or the day by one (if it does not contain a time)."
11915 11925
11916;; TAB key with modifiers 11926;; TAB key with modifiers
11917(define-key org-mode-map "\C-i" 'org-cycle) 11927(define-key org-mode-map "\C-i" 'org-cycle)
11928(define-key org-mode-map [(tab)] 'org-cycle)
11918(define-key org-mode-map [(meta tab)] 'org-complete) 11929(define-key org-mode-map [(meta tab)] 'org-complete)
11919(define-key org-mode-map "\M-\C-i" 'org-complete) ; for tty emacs 11930(define-key org-mode-map "\M-\C-i" 'org-complete) ; for tty emacs
11920;; The following line is necessary under Suse GNU/Linux 11931;; The following line is necessary under Suse GNU/Linux
@@ -12925,4 +12936,3 @@ Show the heading too, if it is currently invisible."
12925 12936
12926;; arch-tag: e77da1a7-acc7-4336-b19e-efa25af3f9fd 12937;; arch-tag: e77da1a7-acc7-4336-b19e-efa25af3f9fd
12927;;; org.el ends here 12938;;; org.el ends here
12928