summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>2006-02-17 09:10:23 +0000
committerMiles Bader <miles@gnu.org>2006-02-17 09:10:23 +0000
commitea3ac1d302c2b7c3754a58127a32b9bb53588f80 (patch)
treec389d4b639b8f81657bd1e4055db45e84fadb42a
parented1dba9d3f568168b1ca68537560c8b855818259 (diff)
parent6d21875b1f1fbb570ffefdfb93c8ff444a593348 (diff)
downloademacs-ea3ac1d302c2b7c3754a58127a32b9bb53588f80.tar.gz
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-17
Merge from emacs--devo--0 Patches applied: * emacs--devo--0 (patch 85-96) - Update from CVS - Merge from erc--emacs--0 - Merge from gnus--rel--5.10 * gnus--rel--5.10 (patch 30-36) - Merge from emacs--devo--0 - Update from CVS
-rw-r--r--ChangeLog4
-rw-r--r--configure.in3
-rw-r--r--etc/ChangeLog8
-rw-r--r--etc/ERC-NEWS36
-rw-r--r--etc/NEWS19
-rw-r--r--lisp/ChangeLog112
-rw-r--r--lisp/bs.el19
-rw-r--r--lisp/calc/calc-arith.el1
-rw-r--r--lisp/calc/calcalg2.el8
-rw-r--r--lisp/calendar/icalendar.el4
-rw-r--r--lisp/cus-edit.el11
-rw-r--r--lisp/cus-start.el1
-rw-r--r--lisp/cus-theme.el1
-rw-r--r--lisp/erc/ChangeLog22
-rw-r--r--lisp/erc/erc-stamp.el9
-rw-r--r--lisp/erc/erc.el3
-rw-r--r--lisp/files.el100
-rw-r--r--lisp/gnus/ChangeLog47
-rw-r--r--lisp/gnus/gnus-art.el28
-rw-r--r--lisp/gnus/gnus-cus.el16
-rw-r--r--lisp/gnus/gnus-draft.el35
-rw-r--r--lisp/gnus/html2text.el2
-rw-r--r--lisp/gnus/mm-decode.el29
-rw-r--r--lisp/gnus/mm-util.el81
-rw-r--r--lisp/gnus/nnoo.el16
-rw-r--r--lisp/gnus/rfc2231.el48
-rw-r--r--lisp/gnus/spam-stat.el2
-rw-r--r--lisp/help.el2
-rw-r--r--lisp/mh-e/ChangeLog36
-rw-r--r--lisp/mh-e/mh-compat.el8
-rw-r--r--lisp/mh-e/mh-e.el386
-rw-r--r--lisp/mh-e/mh-mime.el4
-rw-r--r--lisp/mh-e/mh-utils.el49
-rw-r--r--lisp/mwheel.el4
-rw-r--r--lisp/progmodes/flymake.el2
-rw-r--r--lisp/progmodes/gdb-ui.el188
-rw-r--r--lisp/progmodes/gud.el11
-rw-r--r--lisp/speedbar.el27
-rw-r--r--lisp/wid-edit.el123
-rw-r--r--lispref/ChangeLog15
-rw-r--r--lispref/display.texi13
-rw-r--r--lispref/variables.texi50
-rw-r--r--man/ChangeLog25
-rw-r--r--man/building.texi14
-rw-r--r--man/custom.texi86
-rw-r--r--man/maintaining.texi3
-rw-r--r--src/ChangeLog34
-rw-r--r--src/frame.c10
-rw-r--r--src/gtkutil.c36
-rw-r--r--src/m/ibms390x.h163
-rw-r--r--src/macfns.c35
-rw-r--r--src/macmenu.c2
-rw-r--r--src/xfns.c10
-rw-r--r--src/xterm.c5
-rw-r--r--src/xterm.h2
55 files changed, 1374 insertions, 634 deletions
diff --git a/ChangeLog b/ChangeLog
index cb2d6730c2e..cf4d78a6069 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2006-02-14 Richard M. Stallman <rms@gnu.org>
+
+ * configure.in (s390x-*-linux-gnu*): New configuration.
+
2006-01-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* configure.in: Require GTK 2.4 or newer.
diff --git a/configure.in b/configure.in
index 0e6dada6986..1e1c2e93a09 100644
--- a/configure.in
+++ b/configure.in
@@ -654,6 +654,9 @@ dnl see the `changequote' comment above.
s390-*-linux-gnu* )
machine=ibms390 opsys=gnu-linux
;;
+ s390x-*-linux-gnu* )
+ machine=ibms390x opsys=gnu-linux
+ ;;
rs6000-ibm-aix3.1* | powerpc-ibm-aix3.1* )
machine=ibmrs6000 opsys=aix3-1
;;
diff --git a/etc/ChangeLog b/etc/ChangeLog
index 382a97ab50a..565b2d3e220 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,11 @@
+2006-02-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * NEWS: Changes in handling of file local variables.
+
+2006-02-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * NEWS: Gtk+ 2.4 is required.
+
2006-02-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* PROBLEMS (Mac OS X): Add QuickTime 7.0.4 / Mac OS X 10.3.9 breakage.
diff --git a/etc/ERC-NEWS b/etc/ERC-NEWS
index eee5589ad8d..ada1d02785d 100644
--- a/etc/ERC-NEWS
+++ b/etc/ERC-NEWS
@@ -1,5 +1,41 @@
ERC NEWS -*- outline -*-
+* Changes in ERC 5.1.2 (unreleased)
+
+** Fix compiler errors in erc-autojoin.el and erc-dcc.el.
+
+** Move to end of prompt when ERC reconnects to a server.
+
+** Changes and additions to modules
+
+*** Spell-checking (erc-spelling.el)
+
+**** Don't spell-check nicks or words that are prefixed with '/'.
+
+**** Remove flyspell properties from words we shouldn't spell-check.
+
+**** Fix an issue that caused the ispell process to reload every time
+we switch to an ERC buffer.
+
+*** Timestamps (erc-stamp.el)
+
+**** Fix an inconsistency in calculating width of right timestamps.
+
+**** Rename option `erc-timestamp-right-align-by-pixel' to
+`erc-timestamp-use-align-to'. This controls whether to use the more
+fail-proof method of aligning right timestamps, as mentioned below.
+
+**** Fix a right timestamp spacing problem that used to occur when
+erc-stamp.el was byte-compiled. Now that this is fixed, it is safe to
+use the method that aligns right timestamps perfectly in Emacs22 with
+X. If the current version of Emacs doesn't support this method, use
+the simpler method, which is prone to alignment issues for math
+symbols and other variable-width text.
+
+A side effect of using this new method is that there will only be one
+space before a right timestamp in any saved logs. If this is
+unacceptable, set `erc-timestamp-use-align-to' to nil.
+
* Changes in ERC 5.1.1
** Fix a requirement on cl.el.
diff --git a/etc/NEWS b/etc/NEWS
index 7723adc8f8c..970cacec975 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -102,7 +102,7 @@ installed programs.
---
** You can build Emacs with Gtk+ widgets by specifying `--with-x-toolkit=gtk'
-when you run configure. This requires Gtk+ 2.0 or newer. This port
+when you run configure. This requires Gtk+ 2.4 or newer. This port
provides a way to display multilingual text in menus (with some caveats).
---
@@ -650,6 +650,21 @@ is only rarely needed.
suffix from every line before processing all the lines.
+++
+*** If the local variables list contains any variable-value pairs that
+are not known to be safe, Emacs shows a prompt asking whether to apply
+the local variables list as a whole. In earlier versions, a prompt
+was only issued for variables explicitly marked as risky (for the
+definition of risky variables, see `risky-local-variable-p').
+
+At the prompt, the user can choose to save the contents of this local
+variables list to `safe-local-variable-values'. This new customizable
+option is a list of variable-value pairs that are known to be safe.
+Variables can also be marked as safe with the existing
+`safe-local-variable' property (see `safe-local-variable-p').
+However, risky variables will not be added to
+`safe-local-variable-values' in this way.
+
++++
*** find-file-read-only visits multiple files in read-only mode,
when the file name contains wildcard characters.
@@ -1017,7 +1032,7 @@ to explicitly specify a fontSet resource for this to work, for example
ESC, like they do for Gtk+, Mac and W32.
+++
-*** For Gtk+ version 2.4, you can make Emacs use the old file dialog
+*** For the Gtk+ version, you can make Emacs use the old file dialog
by setting the variable `x-use-old-gtk-file-dialog' to t. Default is to use
the new dialog.
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index cea0e376416..b0b7945e007 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,95 @@
+2006-02-17 Nick Roberts <nickrob@snap.net.nz>
+
+ * speedbar.el (speedbar-frame-width): Make an inline function
+ instead of a macro. Use frame-width.
+ (speedbar-try-completion, speedbar-update-contents)
+ (speedbar-timer-fn): Use consp.
+ (speedbar-update-localized-contents): Try to preserve point.
+
+ * progmodes/gdb-ui.el (gdba, gdb-var-list): Improve doc strings.
+ (menu): Re-order menu items.
+ (gdb-var-update-regexp, gdb-var-update-regexp-1): Match "in_scope"
+ field.
+ (gdb-var-update-handler-1): Use it for GDB 6.4+.
+ (gdb-post-prompt): Speed things by not forcing update.
+
+2006-02-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * wid-edit.el (widget-button-click): For mouse-1, cancel button
+ press and perform default action if we get a mouse movement event.
+
+2006-02-16 Juanma Barranquero <lekktu@gmail.com>
+
+ * calendar/icalendar.el (icalendar--get-event-property)
+ (icalendar--get-event-property-attributes): Fix typos in
+ docstrings.
+
+ * progmodes/flymake.el (flymake-fix-file-name): Fix typo in
+ docstring.
+
+2006-02-15 Juanma Barranquero <lekktu@gmail.com>
+
+ * bs.el (bs-mode): Use `buffer-disable-undo'.
+ (bs--get-file-name): Simplify.
+ (bs-show-in-buffer): Mark the buffer as not modified.
+
+2006-02-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * wid-edit.el (widget-keymap): Bind down-mouse-1 to
+ widget-button-click.
+
+ * cus-edit.el (custom-mode-map): Remove mouse-1 binding.
+ (custom-mode): Update docstring.
+
+ * cus-theme.el (custom-new-theme-mode-map): Remove mouse-1
+ binding.
+
+ * files.el (hack-local-variables-confirm): Allow scrolling if the
+ file variable list is too long. Kill temp buffer after use.
+
+2006-02-15 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gdb): Improve doc string.
+ (gdb-script-font-lock-keywords): Expand allowed character set.
+
+ * progmodes/gdb-ui.el (gdb-use-separate-io-buffer)
+ (gdb-display-separate-io-buffer, gdb-frame-separate-io-buffer)
+ (gdb-separate-io-interrupt, gdb-separate-io-quit)
+ (gdb-separate-io-stop, gdb-separate-io-eof):
+ Rename from gdb-inferior-* to gdb-separate-*.
+ (gdb-set-gud-minor-mode-existing-buffers-1): Improve doc string.
+
+2006-02-14 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-arith.el (math-check-known-scalarp): Make sure
+ expression is a symbol before checking that it is bound.
+
+ * calc/calcalg2.el (math-integrate-by-parts): Do a more careful
+ test to see if equation can be solved.
+
+2006-02-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * wid-edit.el (widget-button-click): Use :pressed-face property
+ for overlay face, if it exists.
+
+ * cus-edit.el (custom-manual, custom-add-see-also)
+ (custom-add-parent-links, custom-group-link): Add :pressed-face
+ property to links.
+
+ * files.el (hack-local-variables): Remove ignored variables before
+ checking if any variables need setting.
+
+2006-02-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * cus-start.el (all): Add x-gtk-whole-detached-tool-bar.
+
+2006-02-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * help.el (where-is): Fix message for remapped commands.
+
+ * mwheel.el (mouse-wheel-click-event, mouse-wheel-mode):
+ Fix typos in docstrings.
+
2006-02-13 Chong Yidong <cyd@stupidchicken.com>
* files.el (safe-local-variable-values): New option.
@@ -17,13 +109,13 @@
moved to safe-local-variable-p.
(hack-one-local-variable): Checks moved to hack-local-variables.
- (byte-compile-dynamic, c-basic-offset, c-file-style,
- c-indent-level, comment-column, fill-column, fill-prefix,
- indent-tabs-mode, kept-new-versions, no-byte-compile,
- no-update-autoloads, outline-regexp, page-delimiter,
- paragraph-start, paragraph-separate, sentence-end,
- sentence-end-double-space tab-width, version-control): Add
- `safe-local-variable' property.
+ (byte-compile-dynamic, c-basic-offset, c-file-style)
+ (c-indent-level, comment-column, fill-column, fill-prefix)
+ (indent-tabs-mode, kept-new-versions, no-byte-compile)
+ (no-update-autoloads, outline-regexp, page-delimiter)
+ (paragraph-start, paragraph-separate, sentence-end)
+ (sentence-end-double-space tab-width, version-control):
+ Add `safe-local-variable' property.
* find-lisp.el: Delete nonexistent `autocompile' file variable.
@@ -49,7 +141,7 @@
2006-02-13 Jay Belanger <belanger@truman.edu>
- * calc/calc-arith.el: (math-check-known-matrixp): Make sure
+ * calc/calc-arith.el (math-check-known-matrixp): Make sure
expression is a symbol before checking that it is bound.
2006-02-13 Richard M. Stallman <rms@gnu.org>
@@ -61,7 +153,7 @@
inside `interactive' spec.
(describe-key-briefly-internal, describe-key-internal):
Functions merged back into their callers.
-
+
2006-02-13 Martin Rudalics <rudalics@gmx.at> (tiny change)
* info.el (info-xref-visited): Inherit from info-xref too.
@@ -179,7 +271,7 @@
2006-02-11 Martin Rudalics <rudalics@gmx.at>
* files.el (revert-buffer, recover-file): Replace buffer-read-only
- with inhibit-read-only. Suggested by Stefan Monnier.
+ with inhibit-read-only. Suggested by Stefan Monnier.
(revert-buffer): Let insert-file-contents discard
buffer-undo-list. Simplify code.
(find-file, find-file-existing, revert-buffer): Doc-string fixes.
diff --git a/lisp/bs.el b/lisp/bs.el
index a1dfad6ac7a..f095a98dc00 100644
--- a/lisp/bs.el
+++ b/lisp/bs.el
@@ -652,6 +652,7 @@ to show always.
(use-local-map bs-mode-map)
(make-local-variable 'font-lock-defaults)
(make-local-variable 'font-lock-verbose)
+ (buffer-disable-undo)
(setq major-mode 'bs-mode
mode-name "Buffer-Selection-Menu"
buffer-read-only t
@@ -1164,7 +1165,8 @@ and move point to current buffer."
(bs--set-window-height)
(bs--goto-current-buffer)
(font-lock-fontify-buffer)
- (bs-apply-sort-faces)))
+ (bs-apply-sort-faces)
+ (set-buffer-modified-p nil)))
(defun bs-next-buffer (&optional buffer-list sorting-p)
"Return next buffer and buffer list for buffer cycling in BUFFER-LIST.
@@ -1338,16 +1340,11 @@ If current mode is `dired-mode' or `shell-mode' it returns the
default directory.
START-BUFFER is the buffer where we started buffer selection.
ALL-BUFFERS is the list of buffer appearing in Buffer Selection Menu."
- (let ((string (copy-sequence (if (member major-mode
- '(shell-mode dired-mode))
- default-directory
- (or buffer-file-name "")))))
- (add-text-properties
- 0 (length string)
- '(mouse-face highlight
- help-echo "mouse-2: select this buffer, mouse-3: select in other frame")
- string)
- string))
+ (propertize (if (member major-mode '(shell-mode dired-mode))
+ default-directory
+ (or buffer-file-name ""))
+ 'mouse-face 'highlight
+ 'help-echo "mouse-2: select this buffer, mouse-3: select in other frame"))
(defun bs--insert-one-entry (buffer)
"Generate one entry for buffer BUFFER in Buffer Selection Menu.
diff --git a/lisp/calc/calc-arith.el b/lisp/calc/calc-arith.el
index a5f25e2464e..ec09ae29318 100644
--- a/lisp/calc/calc-arith.el
+++ b/lisp/calc/calc-arith.el
@@ -334,6 +334,7 @@
((memq 'scalar (nth 1 decl))
t)
((and (eq (car a) 'var)
+ (symbolp (nth 2 a))
(boundp (nth 2 a))
(setq val (symbol-value (nth 2 a))))
(math-check-known-scalarp val))
diff --git a/lisp/calc/calcalg2.el b/lisp/calc/calcalg2.el
index facb691c08b..f71e58e223a 100644
--- a/lisp/calc/calcalg2.el
+++ b/lisp/calc/calcalg2.el
@@ -1253,9 +1253,11 @@
(calcFunc-expand temp)
(setq v (list 'var 'PARTS math-cur-record)
temp (let (calc-next-why)
- (math-solve-for (math-sub v temp) 0 v nil)))
- (and temp (not (integerp temp))
- (math-simplify-extended temp)))))
+ (math-simplify-extended
+ (math-solve-for (math-sub v temp) 0 v nil)))
+ temp (if (and (eq (car-safe temp) '/)
+ (math-zerop (nth 2 temp)))
+ nil temp)))))
(setcar (cdr math-cur-record) 'busy)))))
;;; This tries two different formulations, hoping the algebraic simplifier
diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el
index e1d513ce680..570fb626747 100644
--- a/lisp/calendar/icalendar.el
+++ b/lisp/calendar/icalendar.el
@@ -293,7 +293,7 @@ it finds"
;; (car (cddr event)))
(defun icalendar--get-event-property (event prop)
- "For the given EVENT return the value of the first occurence of PROP."
+ "For the given EVENT return the value of the first occurrence of PROP."
(catch 'found
(let ((props (car (cddr event))) pp)
(while props
@@ -304,7 +304,7 @@ it finds"
nil))
(defun icalendar--get-event-property-attributes (event prop)
- "For the given EVENT return attributes of the first occurence of PROP."
+ "For the given EVENT return attributes of the first occurrence of PROP."
(catch 'found
(let ((props (car (cddr event))) pp)
(while props
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index 763b4b8c57f..3d06bd0fcae 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -1720,6 +1720,7 @@ item in another window.\n\n"))
:help-echo "Read the manual entry for this option."
:button-face 'custom-link
:mouse-face 'highlight
+ :pressed-face 'highlight
:tag "Manual")
;;; The `custom-magic' Widget.
@@ -2201,7 +2202,8 @@ Insert PREFIX first if non-nil."
(push (widget-create-child-and-convert
widget (car links)
:button-face 'custom-link
- :mouse-face 'highlight)
+ :mouse-face 'highlight
+ :pressed-face 'highlight)
buttons)
(setq links (cdr links))
(cond ((null links)
@@ -2247,7 +2249,8 @@ If INITIAL-STRING is non-nil, use that rather than \"Parent groups:\"."
(push (widget-create-child-and-convert
widget (car links)
:button-face 'custom-link
- :mouse-face 'highlight)
+ :mouse-face 'highlight
+ :pressed-face 'highlight)
buttons)
(setq links (cdr links))
(cond ((null links)
@@ -3590,6 +3593,7 @@ restoring it to the state of a face that has never been customized."
"Show parent in other window when activated."
:button-face 'custom-link
:mouse-face 'highlight
+ :pressed-face 'highlight
:help-echo "Create customization buffer for this group."
:action 'custom-group-link-action)
@@ -4365,7 +4369,6 @@ The format is suitable for use with `easy-menu-define'."
(define-key map "u" 'Custom-goto-parent)
(define-key map "n" 'widget-forward)
(define-key map "p" 'widget-backward)
- (define-key map [mouse-1] 'widget-move-and-invoke)
map)
"Keymap for `custom-mode'.")
@@ -4421,7 +4424,7 @@ Move to previous button, link or editable field. \\[advertised-widget-backward]
\\<custom-field-keymap>\
Complete content of editable text field. \\[widget-complete]
\\<custom-mode-map>\
-Invoke button under the mouse pointer. \\[widget-move-and-invoke]
+Invoke button under the mouse pointer. \\[widget-button-click]
Invoke button under point. \\[widget-button-press]
Set all options from current text. \\[Custom-set]
Make values in current text permanent. \\[Custom-save]
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 81d1ab7cf6f..24c19fcb36e 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -362,6 +362,7 @@ since it could result in memory overflow and make Emacs crash."
(repeat (directory :format "%v")))
(x-use-old-gtk-file-dialog menu boolean "22.1")
(x-gtk-show-hidden-files menu boolean "22.1")
+ (x-gtk-whole-detached-tool-bar x boolean "22.1")
;; xterm.c
(mouse-autoselect-window display boolean "21.3")
(x-use-underline-position-properties display boolean "21.3")
diff --git a/lisp/cus-theme.el b/lisp/cus-theme.el
index 3a89c6a664e..53f530505ae 100644
--- a/lisp/cus-theme.el
+++ b/lisp/cus-theme.el
@@ -38,7 +38,6 @@
(suppress-keymap map)
(define-key map "n" 'widget-forward)
(define-key map "p" 'widget-backward)
- (define-key map [mouse-1] 'widget-move-and-invoke)
map)
"Keymap for `custom-new-theme-mode'.")
diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog
index 3d44f87777c..ec2098c7bd3 100644
--- a/lisp/erc/ChangeLog
+++ b/lisp/erc/ChangeLog
@@ -1,3 +1,25 @@
+2006-02-15 Michael Olson <mwolson@gnu.org>
+
+ * erc.el (erc): Move to the end of the buffer when a continued
+ session is detected. Thanks to e1f and indio for the report and
+ testing a potential fix.
+
+2006-02-14 Michael Olson <mwolson@gnu.org>
+
+ * debian/changelog: Prepare a new Debian package.
+
+ * Makefile (debprepare): New rule that creates an ERC snapshot
+ directory for use in both new Debian releases and revisions for
+ Debian packages.
+ (debrelease, debrevision-mwolson): Use debprepare.
+
+ * NEWS: Bring up-to-date.
+
+ * erc-stamp.el (erc-insert-timestamp-right): For now, put
+ timestamps before rather than after erc-fill-column when
+ erc-timestamp-right-column is nil. This way we won't surprise
+ anyone unpleasantly, or so it is hoped.
+
2006-02-13 Michael Olson <mwolson@gnu.org>
* erc-dcc.el: Use (eval-when-compile (require 'cl)).
diff --git a/lisp/erc/erc-stamp.el b/lisp/erc/erc-stamp.el
index e5d4250d142..5d43baab6c9 100644
--- a/lisp/erc/erc-stamp.el
+++ b/lisp/erc/erc-stamp.el
@@ -240,19 +240,18 @@ be printed just before the window-width."
(goto-char (point-max))
(forward-char -1);; before the last newline
(let* ((current-window (get-buffer-window (current-buffer)))
+ (str-width (string-width string))
(pos (cond
(erc-timestamp-right-column erc-timestamp-right-column)
((and (boundp 'erc-fill-mode)
erc-fill-mode
(boundp 'erc-fill-column)
erc-fill-column)
- (1+ erc-fill-column))
+ (1+ (- erc-fill-column str-width)))
(fill-column
- (1+ fill-column))
+ (1+ (- fill-column str-width)))
(t
- (- (window-width)
- (string-width string)
- 1))))
+ (- (window-width) str-width 1))))
(from (point))
(col (current-column))
indent)
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index d444ab2af0f..e1dc240901b 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -1927,7 +1927,8 @@ Returns the buffer for the given server or channel."
(goto-char (point-max))
(insert "\n"))
(set-marker (process-mark erc-server-process) (point))
- (unless continued-session
+ (if continued-session
+ (goto-char (point-max))
(set-marker erc-insert-marker (point))
(erc-display-prompt)
(goto-char (point-max)))
diff --git a/lisp/files.el b/lisp/files.el
index 0096916ce0b..285cd50e6af 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -2225,58 +2225,68 @@ Otherwise, return nil; point may be changed."
(let ((name (if buffer-file-name
(file-name-nondirectory buffer-file-name)
(concat "buffer " (buffer-name))))
- char)
+ prompt char)
(save-window-excursion
- (with-output-to-temp-buffer "*Local Variables*"
+ (let ((buf (get-buffer-create "*Local Variables*")))
+ (pop-to-buffer buf)
+ (set (make-local-variable 'cursor-type) nil)
+ (erase-buffer)
(if unsafe-vars
- (progn (princ "The local variables list in ")
- (princ name)
- (princ "\ncontains values that may not be safe (*)")
- (if risky-vars
- (princ ", and variables that are risky (**).")
- (princ ".")))
+ (insert "The local variables list in " name
+ "\ncontains values that may not be safe (*)"
+ (if risky-vars
+ ", and variables that are risky (**)."
+ "."))
(if risky-vars
- (progn (princ "The local variables list in ")
- (princ name)
- (princ "\ncontains variables that are risky (**)."))
- (princ "A local variables list is specified in ")
- (princ name)
- (princ ".")))
- (princ "\n\nDo you want to apply it? You can type
+ (insert "The local variables list in " name
+ "\ncontains variables that are risky (**).")
+ (insert "A local variables list is specified in " name ".")))
+ (insert "\n\nDo you want to apply it? You can type
y -- to apply the local variables list.
n -- to ignore the local variables list.
! -- to apply the local variables list, and mark these values (*) as
safe (in the future, they can be set automatically.)\n\n")
(dolist (elt vars)
(cond ((member elt unsafe-vars)
- (princ " * "))
+ (insert " * "))
((member elt risky-vars)
- (princ " ** "))
+ (insert " ** "))
(t
- (princ " ")))
- (princ (car elt))
- (princ " : ")
- (princ (cdr elt))
- (princ "\n")))
- (message "Please type y, n, or !: ")
- (let ((inhibit-quit t)
- (cursor-in-echo-area t))
- (while (or (not (numberp (setq char (read-event))))
- (not (memq (downcase char)
- '(?! ?y ?n ?\s ?\C-g))))
- (message "Please type y, n, or !: "))
- (if (= char ?\C-g)
- (setq quit-flag nil)))
- (setq char (downcase char))
- (when (and (= char ?!) unsafe-vars)
- (dolist (elt unsafe-vars)
- (push elt safe-local-variable-values))
- (customize-save-variable
- 'safe-local-variable-values
- safe-local-variable-values))
- (or (= char ?!)
- (= char ?\s)
- (= char ?y))))))
+ (insert " ")))
+ (princ (car elt) buf)
+ (insert " : ")
+ (princ (cdr elt) buf)
+ (insert "\n"))
+ (if (< (line-number-at-pos) (window-body-height))
+ (setq prompt "Please type y, n, or !: ")
+ (goto-char (point-min))
+ (setq prompt "Please type y, n, or !, or C-v to scroll: "))
+ (let ((inhibit-quit t)
+ (cursor-in-echo-area t)
+ done)
+ (while (not done)
+ (message prompt)
+ (setq char (read-event))
+ (if (numberp char)
+ (if (eq char ?\C-v)
+ (condition-case nil
+ (scroll-up)
+ (error (goto-char (point-min))))
+ (setq done (memq (downcase char)
+ '(?! ?y ?n ?\s ?\C-g))))))
+ (if (= char ?\C-g)
+ (setq quit-flag nil)))
+ (setq char (downcase char))
+ (when (and (= char ?!) unsafe-vars)
+ (dolist (elt unsafe-vars)
+ (add-to-list 'safe-local-variable-values elt))
+ (customize-save-variable
+ 'safe-local-variable-values
+ safe-local-variable-values))
+ (kill-buffer buf)
+ (or (= char ?!)
+ (= char ?\s)
+ (= char ?y)))))))
(defun hack-local-variables-prop-line (&optional mode-only)
"Return local variables specified in the -*- line.
@@ -2439,12 +2449,12 @@ is specified, returning t if it is specified."
;; variables (if MODE-ONLY is nil.)
(if mode-only
result
+ (dolist (ignored ignored-local-variables)
+ (setq result (assq-delete-all ignored result)))
+ (if (null enable-local-eval)
+ (setq result (assq-delete-all 'eval result)))
(when result
(setq result (nreverse result))
- (dolist (ignored ignored-local-variables)
- (setq result (assq-delete-all ignored result)))
- (if (null enable-local-eval)
- (setq result (assq-delete-all 'eval result)))
;; Find those variables that we may want to save to
;; `safe-local-variable-values'.
(let (risky-vars unsafe-vars)
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index be9436d350c..903be005174 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,50 @@
+2006-02-16 Juanma Barranquero <lekktu@gmail.com>
+
+ * html2text.el (html2text-remove-tag-list):
+ * spam-stat.el (spam-stat-buffer-words): Fix typo in docstring.
+
+2006-02-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * gnus-cus.el: Revert 2005-10-17 change.
+
+2006-02-17 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (article-strip-banner): Call
+ article-really-strip-banner only when the regexp match is made.
+
+2006-02-16 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (article-strip-banner): Use
+ gnus-extract-address-components instead of
+ mail-header-parse-addresses to make it work with non-ASCII text.
+
+ * rfc2231.el (rfc2231-parse-string): Attempt to parse parameter
+ values which are surrounded with \"...\"; make it never cause a
+ Lisp error; give up parsing of parameters if it failed in
+ extracting type.
+
+2006-02-15 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-util.el (mm-make-temp-file): Import the Emacs 22 version of
+ make-temp-file; make it work with Emacs 20 and XEmacs as well.
+
+ * mm-decode.el (mm-display-external): Use the 3rd arg of
+ mm-make-temp-file.
+ (mm-create-image-xemacs): Ditto.
+
+2006-02-14 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-draft.el (gnus-draft-send): Replace message-narrow-to-head
+ with message-narrow-to-headers.
+ (gnus-draft-setup): Narrow to header to run message-fetch-field.
+ (gnus-draft-check-draft-articles): New function.
+ (gnus-draft-edit-message, gnus-draft-send-message): Use it.
+
+2006-02-13 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nnoo.el (nnoo-declare): Don't generate duplicate entries when
+ re-loading nn* modules.
+
2006-02-10 Reiner Steib <Reiner.Steib@gmx.de>
* gnus.el: Remove bogus comment.
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index c15151729a0..0c9cb18506a 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -2608,18 +2608,22 @@ always hide."
(article-really-strip-banner
(gnus-parameter-banner gnus-newsgroup-name)))
(when gnus-article-address-banner-alist
- (article-really-strip-banner
- (let ((from (save-restriction
- (widen)
- (article-narrow-to-head)
- (mail-fetch-field "from"))))
- (when (and from
- (setq from
- (caar (mail-header-parse-addresses from))))
- (catch 'found
- (dolist (pair gnus-article-address-banner-alist)
- (when (string-match (car pair) from)
- (throw 'found (cdr pair)))))))))))))
+ ;; Note that the From header is decoded here, so it is
+ ;; required that the *-extract-address-components function
+ ;; supports non-ASCII text.
+ (let ((from (save-restriction
+ (widen)
+ (article-narrow-to-head)
+ (mail-fetch-field "from"))))
+ (when (and from
+ (setq from
+ (cadr (funcall gnus-extract-address-components
+ from))))
+ (catch 'found
+ (dolist (pair gnus-article-address-banner-alist)
+ (when (string-match (car pair) from)
+ (throw 'found
+ (article-really-strip-banner (cdr pair)))))))))))))
(defun article-really-strip-banner (banner)
"Strip the banner specified by the argument."
diff --git a/lisp/gnus/gnus-cus.el b/lisp/gnus/gnus-cus.el
index fdce8d1b665..5acad8f721b 100644
--- a/lisp/gnus/gnus-cus.el
+++ b/lisp/gnus/gnus-cus.el
@@ -36,14 +36,6 @@
;;; Widgets:
-(defvar gnus-custom-map
- (let ((map (make-keymap)))
- (set-keymap-parent map widget-keymap)
- (suppress-keymap map)
- (define-key map [mouse-1] 'widget-move-and-invoke)
- map)
- "Keymap for editing Gnus customization buffers.")
-
(defun gnus-custom-mode ()
"Major mode for editing Gnus customization buffers.
@@ -59,7 +51,7 @@ if that value is non-nil."
(kill-all-local-variables)
(setq major-mode 'gnus-custom-mode
mode-name "Gnus Customize")
- (use-local-map gnus-custom-map)
+ (use-local-map widget-keymap)
;; Emacs 21 stuff:
(when (and (facep 'custom-button-face)
(facep 'custom-button-pressed-face))
@@ -490,7 +482,7 @@ form, but who cares?"
(widget-create 'sexp
:tag "Method"
:value (gnus-info-method info))))
- (use-local-map gnus-custom-map)
+ (use-local-map widget-keymap)
(widget-setup)
(buffer-enable-undo)
(goto-char (point-min))))
@@ -884,7 +876,7 @@ articles in the thread.
'(repeat :inline t
:tag "Unknown entries"
sexp)))
- (use-local-map gnus-custom-map)
+ (use-local-map widget-keymap)
(widget-setup)))
(defun gnus-score-customize-done (&rest ignore)
@@ -1061,7 +1053,7 @@ articles in the thread.
(gnus-agent-cat-prepare-category-field agent-enable-undownloaded-faces)
- (use-local-map gnus-custom-map)
+ (use-local-map widget-keymap)
(widget-setup)
(buffer-enable-undo))))
diff --git a/lisp/gnus/gnus-draft.el b/lisp/gnus/gnus-draft.el
index 0d250a3ad0b..f9ff9d7122e 100644
--- a/lisp/gnus/gnus-draft.el
+++ b/lisp/gnus/gnus-draft.el
@@ -98,6 +98,7 @@
(interactive)
(let ((article (gnus-summary-article-number))
(group gnus-newsgroup-name))
+ (gnus-draft-check-draft-articles (list article))
(gnus-summary-mark-as-read article gnus-canceled-mark)
(gnus-draft-setup article group t)
(set-buffer-modified-p t)
@@ -122,6 +123,7 @@
(let* ((articles (gnus-summary-work-articles n))
(total (length articles))
article)
+ (gnus-draft-check-draft-articles articles)
(while (setq article (pop articles))
(gnus-summary-remove-process-mark article)
(unless (memq article gnus-newsgroup-unsendable)
@@ -152,7 +154,7 @@
;; We read the meta-information that says how and where
;; this message is to be sent.
(save-restriction
- (message-narrow-to-head)
+ (message-narrow-to-headers)
(when (re-search-forward
(concat "^" (regexp-quote gnus-agent-target-move-group-header)
":") nil t)
@@ -258,9 +260,12 @@
(goto-char (point-min))
(search-forward "\n\n")
(forward-char -1)
+ (save-restriction
+ (narrow-to-region (point-min) (point))
+ (setq ga
+ (message-fetch-field gnus-draft-meta-information-header)))
(insert mail-header-separator)
(forward-line 1)
- (setq ga (message-fetch-field gnus-draft-meta-information-header))
(message-set-auto-save-file-name))))
(gnus-backlog-remove-article group narticle)
(when (and ga
@@ -285,6 +290,32 @@
"Say whether ARTICLE is sendable."
(not (memq article gnus-newsgroup-unsendable)))
+(defun gnus-draft-check-draft-articles (articles)
+ "Check whether the draft articles ARTICLES are under edit."
+ (when (equal gnus-newsgroup-name "nndraft:drafts")
+ (let ((buffers (buffer-list))
+ file buffs buff)
+ (save-current-buffer
+ (while (and articles
+ (not buff))
+ (setq file (nndraft-article-filename (pop articles))
+ buffs buffers)
+ (while buffs
+ (set-buffer (setq buff (pop buffs)))
+ (if (and buffer-file-name
+ (string-equal (file-truename buffer-file-name)
+ (file-truename file))
+ (buffer-modified-p))
+ (setq buffs nil)
+ (setq buff nil)))))
+ (when buff
+ (let* ((window (get-buffer-window buff t))
+ (frame (and window (window-frame window))))
+ (if frame
+ (gnus-select-frame-set-input-focus frame)
+ (pop-to-buffer buff t)))
+ (error "The draft %s is under edit" file)))))
+
(provide 'gnus-draft)
;;; arch-tag: 3d92af58-8c97-4a5c-9db4-a98e85198022
diff --git a/lisp/gnus/html2text.el b/lisp/gnus/html2text.el
index ceba84decf1..68934c909e9 100644
--- a/lisp/gnus/html2text.el
+++ b/lisp/gnus/html2text.el
@@ -59,7 +59,7 @@ completely verbatim - without any use of REGEXP.")
This is a list of tags which should be removed, without any
formatting. Note that tags in the list are presented *without*
-any \"<\" or \">\". All occurences of a tag appearing in this
+any \"<\" or \">\". All occurrences of a tag appearing in this
list are removed, irrespective of whether it is a closing or
opening tag, or if the tag has additional attributes. The
deletion is done by the function `html2text-remove-tags'.
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index 996c934191c..fa77b7776f0 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -769,19 +769,18 @@ external if displayed external."
(gnus-map-function mm-file-name-rewrite-functions
(file-name-nondirectory filename))
dir))
- (setq file (mm-make-temp-file (expand-file-name "mm." dir)))
- (let ((newname
- ;; Use nametemplate (defined in RFC1524) if it is
- ;; specified in mailcap.
- (if (assoc "nametemplate" mime-info)
- (format (cdr (assoc "nametemplate" mime-info)) file)
- ;; Add a suffix according to `mailcap-mime-extensions'.
- (concat file (car (rassoc (mm-handle-media-type handle)
- mailcap-mime-extensions))))))
- (unless (string-equal file newname)
- (when (file-exists-p file)
- (rename-file file newname))
- (setq file newname))))
+ ;; Use nametemplate (defined in RFC1524) if it is specified
+ ;; in mailcap.
+ (let ((suffix (cdr (assoc "nametemplate" mime-info))))
+ (if (and suffix
+ (string-match "\\`%s\\(\\..+\\)\\'" suffix))
+ (setq suffix (match-string 1 suffix))
+ ;; Otherwise, use a suffix according to
+ ;; `mailcap-mime-extensions'.
+ (setq suffix (car (rassoc (mm-handle-media-type handle)
+ mailcap-mime-extensions))))
+ (setq file (mm-make-temp-file (expand-file-name "mm." dir)
+ nil suffix))))
(let ((coding-system-for-write mm-binary-coding-system))
(write-region (point-min) (point-max) file nil 'nomesg))
(message "Viewing with %s" method)
@@ -1312,8 +1311,8 @@ be determined."
;; out to a file, and then create a file
;; specifier.
(let ((file (mm-make-temp-file
- (expand-file-name "emm.xbm"
- mm-tmp-directory))))
+ (expand-file-name "emm" mm-tmp-directory)
+ nil ".xbm")))
(unwind-protect
(progn
(write-region (point-min) (point-max) file)
diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el
index 13d786f7a99..804a5b2294c 100644
--- a/lisp/gnus/mm-util.el
+++ b/lisp/gnus/mm-util.el
@@ -99,16 +99,6 @@
(lambda (ch) (mm-string-as-multibyte (char-to-string ch)))
string "")))
(multibyte-string-p . ignore)
- ;; It is not a MIME function, but some MIME functions use it.
- (make-temp-file . (lambda (prefix &optional dir-flag)
- (let ((file (expand-file-name
- (make-temp-name prefix)
- (if (fboundp 'temp-directory)
- (temp-directory)
- temporary-file-directory))))
- (if dir-flag
- (make-directory file))
- file)))
(insert-byte . insert-char)
(multibyte-char-to-unibyte . identity))))
@@ -902,6 +892,77 @@ If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'."
inhibit-file-name-handlers)))
(write-region start end filename append visit lockname)))
+;; It is not a MIME function, but some MIME functions use it.
+(if (and (fboundp 'make-temp-file)
+ (ignore-errors
+ (let ((def (symbol-function 'make-temp-file)))
+ (and (byte-code-function-p def)
+ (setq def (if (fboundp 'compiled-function-arglist)
+ ;; XEmacs
+ (eval (list 'compiled-function-arglist def))
+ (aref def 0)))
+ (>= (length def) 4)
+ (eq (nth 3 def) 'suffix)))))
+ (defalias 'mm-make-temp-file 'make-temp-file)
+ ;; Stolen (and modified for Emacs 20 and XEmacs) from Emacs 22.
+ (defun mm-make-temp-file (prefix &optional dir-flag suffix)
+ "Create a temporary file.
+The returned file name (created by appending some random characters at the end
+of PREFIX, and expanding against `temporary-file-directory' if necessary),
+is guaranteed to point to a newly created empty file.
+You can then use `write-region' to write new data into the file.
+
+If DIR-FLAG is non-nil, create a new empty directory instead of a file.
+
+If SUFFIX is non-nil, add that at the end of the file name."
+ (let ((umask (default-file-modes))
+ file)
+ (unwind-protect
+ (progn
+ ;; Create temp files with strict access rights. It's easy to
+ ;; loosen them later, whereas it's impossible to close the
+ ;; time-window of loose permissions otherwise.
+ (set-default-file-modes 448)
+ (while (condition-case err
+ (progn
+ (setq file
+ (make-temp-name
+ (expand-file-name
+ prefix
+ (if (fboundp 'temp-directory)
+ ;; XEmacs
+ (temp-directory)
+ temporary-file-directory))))
+ (if suffix
+ (setq file (concat file suffix)))
+ (if dir-flag
+ (make-directory file)
+ (if (or (featurep 'xemacs)
+ (= emacs-major-version 20))
+ ;; NOTE: This is unsafe if Emacs 20
+ ;; users and XEmacs users don't use
+ ;; a secure temp directory.
+ (if (file-exists-p file)
+ (signal 'file-already-exists
+ (list "File exists" file))
+ (write-region "" nil file nil 'silent))
+ (write-region "" nil file nil 'silent
+ nil 'excl)))
+ nil)
+ (file-already-exists t)
+ ;; The Emacs 20 and XEmacs versions of
+ ;; `make-directory' issue `file-error'.
+ (file-error (or (and (or (featurep 'xemacs)
+ (= emacs-major-version 20))
+ (file-exists-p file))
+ (signal (car err) (cdr err)))))
+ ;; the file was somehow created by someone else between
+ ;; `make-temp-name' and `write-region', let's try again.
+ nil)
+ file)
+ ;; Reset the umask.
+ (set-default-file-modes umask)))))
+
(defun mm-image-load-path (&optional package)
(let (dir result)
(dolist (path load-path (nreverse result))
diff --git a/lisp/gnus/nnoo.el b/lisp/gnus/nnoo.el
index 7a66b4c55aa..122183057b9 100644
--- a/lisp/gnus/nnoo.el
+++ b/lisp/gnus/nnoo.el
@@ -61,12 +61,16 @@
(defmacro nnoo-declare (backend &rest parents)
`(eval-and-compile
- (push (list ',backend
- (mapcar (lambda (p) (list p)) ',parents)
- nil nil)
- nnoo-definition-alist)
- (push (list ',backend "*internal-non-initialized-backend*")
- nnoo-state-alist)))
+ (if (assq ',backend nnoo-definition-alist)
+ (setcar (cdr (assq ',backend nnoo-definition-alist))
+ (mapcar 'list ',parents))
+ (push (list ',backend
+ (mapcar 'list ',parents)
+ nil nil)
+ nnoo-definition-alist))
+ (unless (assq ',backend nnoo-state-alist)
+ (push (list ',backend "*internal-non-initialized-backend*")
+ nnoo-state-alist))))
(put 'nnoo-declare 'lisp-indent-function 1)
(defun nnoo-parents (backend)
diff --git a/lisp/gnus/rfc2231.el b/lisp/gnus/rfc2231.el
index 7b4cf2447f4..2099b20195d 100644
--- a/lisp/gnus/rfc2231.el
+++ b/lisp/gnus/rfc2231.el
@@ -47,15 +47,45 @@ The list will be on the form
`(name (attribute . value) (attribute . value)...)'.
If the optional SIGNAL-ERROR is non-nil, signal an error when this
-function fails in parsing of parameters."
+function fails in parsing of parameters. Otherwise, this function
+must never cause a Lisp error."
(with-temp-buffer
(let ((ttoken (ietf-drums-token-to-list ietf-drums-text-token))
(stoken (ietf-drums-token-to-list ietf-drums-tspecials))
(ntoken (ietf-drums-token-to-list "0-9"))
c type attribute encoded number prev-attribute vals
prev-encoded parameters value)
- (ietf-drums-init (mail-header-remove-whitespace
- (mail-header-remove-comments string)))
+ (ietf-drums-init
+ (condition-case nil
+ (mail-header-remove-whitespace
+ (mail-header-remove-comments string))
+ ;; The most likely cause of an error is unbalanced parentheses
+ ;; or double-quotes. If all parentheses and double-quotes are
+ ;; quoted meaninglessly with backslashes, removing them might
+ ;; make it parseable. Let's try...
+ (error
+ (let (mod)
+ (when (and (string-match "\\\\\"" string)
+ (not (string-match "\\`\"\\|[^\\]\"" string)))
+ (setq string (mm-replace-in-string string "\\\\\"" "\"")
+ mod t))
+ (when (and (string-match "\\\\(" string)
+ (string-match "\\\\)" string)
+ (not (string-match "\\`(\\|[^\\][()]" string)))
+ (setq string (mm-replace-in-string string "\\\\\\([()]\\)" "\\1")
+ mod t))
+ (or (and mod
+ (ignore-errors
+ (mail-header-remove-whitespace
+ (mail-header-remove-comments string))))
+ ;; Finally, attempt to extract only type.
+ (if (string-match
+ (concat "\\`[\t\n ]*\\([^" ietf-drums-tspecials "\t\n ]+"
+ "\\(/[^" ietf-drums-tspecials
+ "\t\n ]+\\)?\\)\\([\t\n ;]\\|\\'\\)")
+ string)
+ (match-string 1 string)
+ ""))))))
(let ((table (copy-syntax-table ietf-drums-syntax-table)))
(modify-syntax-entry ?\' "w" table)
(modify-syntax-entry ?* " " table)
@@ -67,9 +97,12 @@ function fails in parsing of parameters."
(set-syntax-table table))
(setq c (char-after))
(when (and (memq c ttoken)
- (not (memq c stoken)))
- (setq type (downcase (buffer-substring
- (point) (progn (forward-sexp 1) (point)))))
+ (not (memq c stoken))
+ (setq type (ignore-errors
+ (downcase
+ (buffer-substring (point) (progn
+ (forward-sexp 1)
+ (point)))))))
;; Do the params
(condition-case err
(progn
@@ -180,8 +213,7 @@ function fails in parsing of parameters."
;;(message "%s" (error-message-string err))
)))
- (when type
- `(,type ,@(nreverse parameters)))))))
+ (cons type (nreverse parameters))))))
(defun rfc2231-decode-encoded-string (string)
"Decode an RFC2231-encoded string.
diff --git a/lisp/gnus/spam-stat.el b/lisp/gnus/spam-stat.el
index 66f302d32e5..e21372bd649 100644
--- a/lisp/gnus/spam-stat.el
+++ b/lisp/gnus/spam-stat.el
@@ -323,7 +323,7 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good',
,@body))
(defun spam-stat-buffer-words ()
- "Return a hash table of words and number of occurences in the buffer."
+ "Return a hash table of words and number of occurrences in the buffer."
(with-spam-stat-max-buffer-size
(with-syntax-table spam-stat-syntax-table
(goto-char (point-min))
diff --git a/lisp/help.el b/lisp/help.el
index 76aeac0ef62..02045948ecb 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -510,7 +510,7 @@ If INSERT (the prefix arg) is non-nil, insert the message in the buffer."
(if (> (length keys) 0)
(if remapped
(format "%s is remapped to %s which is on %s"
- definition symbol keys)
+ symbol remapped keys)
(format "%s is on %s" symbol keys))
;; If this is the command the user asked about,
;; and it is not on any key, say so.
diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog
index 349bae9f072..e5262693d8a 100644
--- a/lisp/mh-e/ChangeLog
+++ b/lisp/mh-e/ChangeLog
@@ -1,3 +1,39 @@
+2006-02-16 Bill Wohler <wohler@newt.com>
+
+ * mh-e.el (mh-inherit-face-flag): New variable. Non-nil means that
+ the defface :inherit keyword is available.
+ (mh-face-data): New variable (contains all face specs) and
+ function (accessor).
+ (mh-folder-address, mh-folder-body, mh-folder-cur-msg-number)
+ (mh-folder-date, mh-folder-deleted, mh-folder-followup)
+ (mh-folder-msg-number, mh-folder-refiled)
+ (mh-folder-sent-to-me-hint, mh-folder-sent-to-me-sender)
+ (mh-folder-subject, mh-folder-tick, mh-folder-to)
+ (mh-search-folder, mh-letter-header-field, mh-show-cc)
+ (mh-show-date, mh-show-from)
+ (mh-show-header, mh-show-pgg-bad, mh-show-pgg-good)
+ (mh-show-pgg-unknown, mh-show-signature, mh-show-subject)
+ (mh-show-to, mh-show-xface, mh-speedbar-folder)
+ (mh-speedbar-folder-with-unseen-messages)
+ (mh-speedbar-selected-folder)
+ (mh-speedbar-selected-folder-with-unseen-messages): Use
+ mh-face-data.
+
+ * mh-utils.el (mh-image-load-path): The variables image-load-path
+ or load-path would not get updated if user set mh-image-load-path.
+ Moved tests and add-to-list calls outside of cond so they are
+ applied consistently, even if they are redundant in some
+ circumstances. Efficiency isn't a concern here. Made error
+ messages more user-friendly.
+
+2006-02-15 Peter S Galbraith <psg@debian.org>
+
+ * mh-compat.el (mh-image-search-load-path): Compatibility code.
+ Emacs 21 and XEmacs don't have `image-search-load-path'.
+
+ * mh-utils.el (mh-image-load-path): Don't bail out on error if the
+ images are already found.
+
2006-02-10 Bill Wohler <wohler@newt.com>
* mh-search.el (mh-search): Wrap code in (block mh-search ...)
diff --git a/lisp/mh-e/mh-compat.el b/lisp/mh-e/mh-compat.el
index 090ee51c5fc..4bc5fdf36f7 100644
--- a/lisp/mh-e/mh-compat.el
+++ b/lisp/mh-e/mh-compat.el
@@ -115,6 +115,12 @@ introduced in Emacs 22."
`(face-background ,face ,frame)
`(face-background ,face ,frame ,inherit)))
+(mh-defun-compat mh-image-search-load-path
+ image-search-load-path (file &optional path)
+ "Emacs 21 and XEmacs don't have `image-search-load-path'.
+This function returns nil on those systems."
+ nil)
+
;; For XEmacs.
(defalias 'mh-line-beginning-position
(if (fboundp 'line-beginning-position)
@@ -131,7 +137,7 @@ introduced in Emacs 22."
(mh-defun-compat mh-mail-abbrev-make-syntax-table
mail-abbrev-make-syntax-table ()
"Emacs 21 and XEmacs don't have `mail-abbrev-make-syntax-table'.
-This function does nothing on those systems."
+This function returns nil on those systems."
nil)
(mh-defun-compat mh-match-string-no-properties
diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el
index ab0143c0c85..26b1ddd8050 100644
--- a/lisp/mh-e/mh-e.el
+++ b/lisp/mh-e/mh-e.el
@@ -2968,6 +2968,8 @@ sequence."
(if (boundp 'facemenu-unlisted-faces)
(add-to-list 'facemenu-unlisted-faces "^mh-"))
+;; Temporary function and data structure used for defining faces.
+;; These will be unbound after the faces are defined.
(defvar mh-min-colors-defined-flag (and (not mh-xemacs-flag)
(>= emacs-major-version 22))
"Non-nil means defface supports min-colors display requirement.")
@@ -2999,80 +3001,217 @@ colors."
(setq new-spec (cons entry new-spec)))))
new-spec)))
-(defface mh-folder-address '((t (:inherit mh-folder-subject)))
+(defvar mh-inherit-face-flag (assq :inherit custom-face-attributes)
+ "Non-nil means that the `defface' :inherit keyword is available.
+The :inherit keyword is available on all supported versions of
+GNU Emacs and XEmacs from at least 21.5.23 on.")
+
+(defvar mh-face-data
+ '((mh-folder-followup
+ ((((class color) (background light))
+ (:foreground "blue3"))
+ (((class color) (background dark))
+ (:foreground "LightGoldenRod"))
+ (t
+ (:bold t))))
+ (mh-folder-msg-number
+ ((((class color) (min-colors 64) (background light))
+ (:foreground "snow4"))
+ (((class color) (min-colors 64) (background dark))
+ (:foreground "snow3"))
+ (((class color))
+ (:foreground "cyan"))))
+ (mh-folder-refiled
+ ((((class color) (min-colors 64) (background light))
+ (:foreground "DarkGoldenrod"))
+ (((class color) (min-colors 64) (background dark))
+ (:foreground "LightGoldenrod"))
+ (((class color))
+ (:foreground "yellow" :weight light))
+ (((class grayscale) (background light))
+ (:foreground "Gray90" :bold t :italic t))
+ (((class grayscale) (background dark))
+ (:foreground "DimGray" :bold t :italic t))
+ (t
+ (:bold t :italic t))))
+ (mh-folder-subject
+ ((((class color) (background light))
+ (:foreground "blue4"))
+ (((class color) (background dark))
+ (:foreground "yellow"))
+ (t
+ (:bold t))))
+ (mh-folder-tick
+ ((((class color) (background dark))
+ (:background "#dddf7e"))
+ (((class color) (background light))
+ (:background "#dddf7e"))
+ (t
+ (:underline t))))
+ (mh-folder-to
+ ((((class color) (min-colors 64) (background light))
+ (:foreground "RosyBrown"))
+ (((class color) (min-colors 64) (background dark))
+ (:foreground "LightSalmon"))
+ (((class color))
+ (:foreground "green"))
+ (((class grayscale) (background light))
+ (:foreground "DimGray" :italic t))
+ (((class grayscale) (background dark))
+ (:foreground "LightGray" :italic t))
+ (t
+ (:italic t))))
+ (mh-letter-header-field
+ ((((class color) (background light))
+ (:background "gray90"))
+ (((class color) (background dark))
+ (:background "gray10"))
+ (t
+ (:bold t))))
+ (mh-search-folder
+ ((((class color) (background light))
+ (:foreground "dark green" :bold t))
+ (((class color) (background dark))
+ (:foreground "indian red" :bold t))
+ (t
+ (:bold t))))
+ (mh-show-cc
+ ((((class color) (min-colors 64) (background light))
+ (:foreground "DarkGoldenrod"))
+ (((class color) (min-colors 64) (background dark))
+ (:foreground "LightGoldenrod"))
+ (((class color))
+ (:foreground "yellow" :weight light))
+ (((class grayscale) (background light))
+ (:foreground "Gray90" :bold t :italic t))
+ (((class grayscale) (background dark))
+ (:foreground "DimGray" :bold t :italic t))
+ (t
+ (:bold t :italic t))))
+ (mh-show-date
+ ((((class color) (min-colors 64) (background light))
+ (:foreground "ForestGreen"))
+ (((class color) (min-colors 64) (background dark))
+ (:foreground "PaleGreen"))
+ (((class color))
+ (:foreground "green"))
+ (((class grayscale) (background light))
+ (:foreground "Gray90" :bold t))
+ (((class grayscale) (background dark))
+ (:foreground "DimGray" :bold t))
+ (t
+ (:bold t :underline t))))
+ (mh-show-from
+ ((((class color) (background light))
+ (:foreground "red3"))
+ (((class color) (background dark))
+ (:foreground "cyan"))
+ (t
+ (:bold t))))
+ (mh-show-header
+ ((((class color) (min-colors 64) (background light))
+ (:foreground "RosyBrown"))
+ (((class color) (min-colors 64) (background dark))
+ (:foreground "LightSalmon"))
+ (((class color))
+ (:foreground "green"))
+ (((class grayscale) (background light))
+ (:foreground "DimGray" :italic t))
+ (((class grayscale) (background dark))
+ (:foreground "LightGray" :italic t))
+ (t
+ (:italic t))))
+ (mh-show-pgg-bad ((t (:bold t :foreground "DeepPink1"))))
+ (mh-show-pgg-good ((t (:bold t :foreground "LimeGreen"))))
+ (mh-show-pgg-unknown ((t (:bold t :foreground "DarkGoldenrod2"))))
+ (mh-show-signature ((t (:italic t))))
+ (mh-show-to
+ ((((class color) (background light))
+ (:foreground "SaddleBrown"))
+ (((class color) (background dark))
+ (:foreground "burlywood"))
+ (((class grayscale) (background light))
+ (:foreground "DimGray" :underline t))
+ (((class grayscale) (background dark))
+ (:foreground "LightGray" :underline t))
+ (t (:underline t))))
+ (mh-speedbar-folder
+ ((((class color) (background light))
+ (:foreground "blue4"))
+ (((class color) (background dark))
+ (:foreground "light blue"))))
+ (mh-speedbar-selected-folder
+ ((((class color) (background light))
+ (:foreground "red1" :underline t))
+ (((class color) (background dark))
+ (:foreground "red1" :underline t))
+ (t
+ (:underline t))))))
+
+(defun mh-face-data (face &optional inherit)
+ "Return spec for FACE.
+If INHERIT is non-nil and `defface' supports the :inherit
+keyword, return INHERIT literally; otherwise, return spec for FACE.
+
+This isn't a perfect implementation. In the case that
+the :inherit keyword is not supported, any additional attributes
+in the inherit parameter are not added to the returned spec."
+ (if (and inherit mh-inherit-face-flag)
+ inherit
+ (mh-defface-compat (cadr (assoc face mh-face-data)))))
+
+(defface mh-folder-address
+ (mh-face-data 'mh-folder-subject '((t (:inherit mh-folder-subject))))
"Recipient face."
:group 'mh-faces
:group 'mh-folder)
(defface mh-folder-body
- '((((class color))
- (:inherit mh-folder-msg-number))
- (t
- (:inherit mh-folder-msg-number :italic t)))
+ (mh-face-data 'mh-folder-msg-number
+ '((((class color))
+ (:inherit mh-folder-msg-number))
+ (t
+ (:inherit mh-folder-msg-number :italic t))))
"Body text face."
:group 'mh-faces
:group 'mh-folder)
(defface mh-folder-cur-msg-number
- '((t
- (:inherit mh-folder-msg-number :bold t)))
+ (mh-face-data 'mh-folder-msg-number
+ '((t (:inherit mh-folder-msg-number :bold t))))
"Current message number face."
:group 'mh-faces
:group 'mh-folder)
-(defface mh-folder-date '((t (:inherit mh-folder-msg-number)))
+(defface mh-folder-date
+ (mh-face-data 'mh-folder-msg-number '((t (:inherit mh-folder-msg-number))))
"Date face."
:group 'mh-faces
:group 'mh-folder)
-(defface mh-folder-deleted '((t (:inherit mh-folder-msg-number)))
+(defface mh-folder-deleted
+ (mh-face-data 'mh-folder-msg-number '((t (:inherit mh-folder-msg-number))))
"Deleted message face."
:group 'mh-faces
:group 'mh-folder)
-(defface mh-folder-followup
- '((((class color) (background light))
- (:foreground "blue3"))
- (((class color) (background dark))
- (:foreground "LightGoldenRod"))
- (t
- (:bold t)))
+(defface mh-folder-followup (mh-face-data 'mh-folder-followup)
"\"Re:\" face."
:group 'mh-faces
:group 'mh-folder)
-(defface mh-folder-msg-number
- (mh-defface-compat
- '((((class color) (min-colors 64) (background light))
- (:foreground "snow4"))
- (((class color) (min-colors 64) (background dark))
- (:foreground "snow3"))
- (((class color))
- (:foreground "cyan"))))
-
+(defface mh-folder-msg-number (mh-face-data 'mh-folder-msg-number)
"Message number face."
:group 'mh-faces
:group 'mh-folder)
-(defface mh-folder-refiled
- (mh-defface-compat
- '((((class color) (min-colors 64) (background light))
- (:foreground "DarkGoldenrod"))
- (((class color) (min-colors 64) (background dark))
- (:foreground "LightGoldenrod"))
- (((class color))
- (:foreground "yellow" :weight light))
- (((class grayscale) (background light))
- (:foreground "Gray90" :bold t :italic t))
- (((class grayscale) (background dark))
- (:foreground "DimGray" :bold t :italic t))
- (t
- (:bold t :italic t))))
+(defface mh-folder-refiled (mh-face-data 'mh-folder-refiled)
"Refiled message face."
:group 'mh-faces
:group 'mh-folder)
-(defface mh-folder-sent-to-me-hint '((t (:inherit mh-folder-date)))
+(defface mh-folder-sent-to-me-hint
+ (mh-face-data 'mh-folder-msg-number '((t (:inherit mh-folder-date))))
"Fontification hint face in messages sent directly to us.
The detection of messages sent to us is governed by the scan
format `mh-scan-format-nmh' and the regular expression
@@ -3080,7 +3219,8 @@ format `mh-scan-format-nmh' and the regular expression
:group 'mh-faces
:group 'mh-folder)
-(defface mh-folder-sent-to-me-sender '((t (:inherit mh-folder-followup)))
+(defface mh-folder-sent-to-me-sender
+ (mh-face-data 'mh-folder-followup '((t (:inherit mh-folder-followup))))
"Sender face in messages sent directly to us.
The detection of messages sent to us is governed by the scan
format `mh-scan-format-nmh' and the regular expression
@@ -3088,212 +3228,122 @@ format `mh-scan-format-nmh' and the regular expression
:group 'mh-faces
:group 'mh-folder)
-(defface mh-folder-subject
- '((((class color) (background light))
- (:foreground "blue4"))
- (((class color) (background dark))
- (:foreground "yellow"))
- (t
- (:bold t)))
+(defface mh-folder-subject (mh-face-data 'mh-folder-subject)
"Subject face."
:group 'mh-faces
:group 'mh-folder)
-(defface mh-folder-tick
- '((((class color) (background dark))
- (:background "#dddf7e"))
- (((class color) (background light))
- (:background "#dddf7e"))
- (t
- (:underline t)))
+(defface mh-folder-tick (mh-face-data 'mh-folder-tick)
"Ticked message face."
:group 'mh-faces
:group 'mh-folder)
-(defface mh-folder-to
- (mh-defface-compat
- '((((class color) (min-colors 64) (background light))
- (:foreground "RosyBrown"))
- (((class color) (min-colors 64) (background dark))
- (:foreground "LightSalmon"))
- (((class color))
- (:foreground "green"))
- (((class grayscale) (background light))
- (:foreground "DimGray" :italic t))
- (((class grayscale) (background dark))
- (:foreground "LightGray" :italic t))
- (t
- (:italic t))))
+(defface mh-folder-to (mh-face-data 'mh-folder-to)
"\"To:\" face."
:group 'mh-faces
:group 'mh-folder)
-(defface mh-search-folder
- '((((class color) (background light))
- (:foreground "dark green" :bold t))
- (((class color) (background dark))
- (:foreground "indian red" :bold t))
- (t
- (:bold t)))
- "Folder heading face in MH-Folder buffers created by searches."
- :group 'mh-faces
- :group 'mh-search)
-
-(defface mh-letter-header-field
- '((((class color) (background light))
- (:background "gray90"))
- (((class color) (background dark))
- (:background "gray10"))
- (t
- (:bold t)))
+(defface mh-letter-header-field (mh-face-data 'mh-letter-header-field)
"Editable header field value face in draft buffers."
:group 'mh-faces
:group 'mh-letter)
-(defface mh-show-cc
- (mh-defface-compat
- '((((class color) (min-colors 64) (background light))
- (:foreground "DarkGoldenrod"))
- (((class color) (min-colors 64) (background dark))
- (:foreground "LightGoldenrod"))
- (((class color))
- (:foreground "yellow" :weight light))
- (((class grayscale) (background light))
- (:foreground "Gray90" :bold t :italic t))
- (((class grayscale) (background dark))
- (:foreground "DimGray" :bold t :italic t))
- (t
- (:bold t :italic t))))
+(defface mh-search-folder (mh-face-data 'mh-search-folder)
+ "Folder heading face in MH-Folder buffers created by searches."
+ :group 'mh-faces
+ :group 'mh-search)
+
+(defface mh-show-cc (mh-face-data 'mh-show-cc)
"Face used to highlight \"cc:\" header fields."
:group 'mh-faces
:group 'mh-show)
-(defface mh-show-date
- (mh-defface-compat
- '((((class color) (min-colors 64) (background light))
- (:foreground "ForestGreen"))
- (((class color) (min-colors 64) (background dark))
- (:foreground "PaleGreen"))
- (((class color))
- (:foreground "green"))
- (((class grayscale) (background light))
- (:foreground "Gray90" :bold t))
- (((class grayscale) (background dark))
- (:foreground "DimGray" :bold t))
- (t
- (:bold t :underline t))))
+(defface mh-show-date (mh-face-data 'mh-show-date)
"Face used to highlight \"Date:\" header fields."
:group 'mh-faces
:group 'mh-show)
-(defface mh-show-from
- '((((class color) (background light))
- (:foreground "red3"))
- (((class color) (background dark))
- (:foreground "cyan"))
- (t
- (:bold t)))
+(defface mh-show-from (mh-face-data 'mh-show-from)
"Face used to highlight \"From:\" header fields."
:group 'mh-faces
:group 'mh-show)
-(defface mh-show-header
- (mh-defface-compat
- '((((class color) (min-colors 64) (background light))
- (:foreground "RosyBrown"))
- (((class color) (min-colors 64) (background dark))
- (:foreground "LightSalmon"))
- (((class color))
- (:foreground "green"))
- (((class grayscale) (background light))
- (:foreground "DimGray" :italic t))
- (((class grayscale) (background dark))
- (:foreground "LightGray" :italic t))
- (t
- (:italic t))))
+(defface mh-show-header (mh-face-data 'mh-show-header)
"Face used to deemphasize less interesting header fields."
:group 'mh-faces
:group 'mh-show)
-(defface mh-show-pgg-bad '((t (:bold t :foreground "DeepPink1")))
+(defface mh-show-pgg-bad (mh-face-data 'mh-show-pgg-bad)
"Bad PGG signature face."
:group 'mh-faces
:group 'mh-show)
-(defface mh-show-pgg-good '((t (:bold t :foreground "LimeGreen")))
+(defface mh-show-pgg-good (mh-face-data 'mh-show-pgg-good)
"Good PGG signature face."
:group 'mh-faces
:group 'mh-show)
-(defface mh-show-pgg-unknown '((t (:bold t :foreground "DarkGoldenrod2")))
+(defface mh-show-pgg-unknown (mh-face-data 'mh-show-pgg-unknown)
"Unknown or untrusted PGG signature face."
:group 'mh-faces
:group 'mh-show)
-(defface mh-show-signature '((t (:italic t)))
+(defface mh-show-signature (mh-face-data 'mh-show-signature)
"Signature face."
:group 'mh-faces
:group 'mh-show)
-(defface mh-show-subject '((t (:inherit mh-folder-subject)))
+(defface mh-show-subject
+ (mh-face-data 'mh-folder-subject '((t (:inherit mh-folder-subject))))
"Face used to highlight \"Subject:\" header fields."
:group 'mh-faces
:group 'mh-show)
-(defface mh-show-to
- '((((class color) (background light))
- (:foreground "SaddleBrown"))
- (((class color) (background dark))
- (:foreground "burlywood"))
- (((class grayscale) (background light))
- (:foreground "DimGray" :underline t))
- (((class grayscale) (background dark))
- (:foreground "LightGray" :underline t))
- (t (:underline t)))
+(defface mh-show-to (mh-face-data 'mh-show-to)
"Face used to highlight \"To:\" header fields."
:group 'mh-faces
:group 'mh-show)
-(defface mh-show-xface '((t (:inherit (mh-show-from highlight))))
- "X-Face image face.
+(defface mh-show-xface
+ (mh-face-data 'mh-show-from '((t (:inherit (mh-show-from highlight)))))
+
+"X-Face image face.
The background and foreground are used in the image."
:group 'mh-faces
:group 'mh-show)
-(defface mh-speedbar-folder
- '((((class color) (background light))
- (:foreground "blue4"))
- (((class color) (background dark))
- (:foreground "light blue")))
+(defface mh-speedbar-folder (mh-face-data 'mh-speedbar-folder)
"Basic folder face."
:group 'mh-faces
:group 'mh-speedbar)
(defface mh-speedbar-folder-with-unseen-messages
- '((t
- (:inherit mh-speedbar-folder :bold t)))
+ (mh-face-data 'mh-speedbar-folder
+ '((t (:inherit mh-speedbar-folder :bold t))))
"Folder face when folder contains unread messages."
:group 'mh-faces
:group 'mh-speedbar)
(defface mh-speedbar-selected-folder
- '((((class color) (background light))
- (:foreground "red1" :underline t))
- (((class color) (background dark))
- (:foreground "red1" :underline t))
- (t
- (:underline t)))
+ (mh-face-data 'mh-speedbar-selected-folder)
"Selected folder face."
:group 'mh-faces
:group 'mh-speedbar)
(defface mh-speedbar-selected-folder-with-unseen-messages
- '((t
- (:inherit mh-speedbar-selected-folder :bold t)))
+ (mh-face-data 'mh-speedbar-selected-folder
+ '((t (:inherit mh-speedbar-selected-folder :bold t))))
"Selected folder face when folder contains unread messages."
:group 'mh-faces
:group 'mh-speedbar)
+;; Get rid of temporary functions and data structures.
+(fmakunbound 'mh-defface-compat)
+(fmakunbound 'mh-face-data)
+(makunbound 'mh-face-data)
+(makunbound 'mh-inherit-face-flag)
+(makunbound 'mh-min-colors-defined-flag)
+
(provide 'mh-e)
;; Local Variables:
diff --git a/lisp/mh-e/mh-mime.el b/lisp/mh-e/mh-mime.el
index b35b1e6aace..4b0ce65cf5d 100644
--- a/lisp/mh-e/mh-mime.el
+++ b/lisp/mh-e/mh-mime.el
@@ -1741,9 +1741,9 @@ Returns nil if file command not on system."
("application/x-zip" "\.sxw" "application/vnd.sun.xml.writer")
("application/x-zip" "\.odg" "application/vnd.oasis.opendocument.graphics")
("application/x-zip" "\.odi" "application/vnd.oasis.opendocument.image")
- ("application/x-zip" "\.odp"
+ ("application/x-zip" "\.odp"
"application/vnd.oasis.opendocument.presentation")
- ("application/x-zip" "\.ods"
+ ("application/x-zip" "\.ods"
"application/vnd.oasis.opendocument.spreadsheet")
("application/x-zip" "\.odt" "application/vnd.oasis.opendocument.text"))
"Substitutions to make for Content-Type returned from file command.
diff --git a/lisp/mh-e/mh-utils.el b/lisp/mh-e/mh-utils.el
index dc86d19ae77..58d29bc5d1c 100644
--- a/lisp/mh-e/mh-utils.el
+++ b/lisp/mh-e/mh-utils.el
@@ -96,10 +96,11 @@ This variable is used by that function to avoid doing the work repeatedly.")
"Ensure that the MH-E images are accessible by `find-image'.
Images for MH-E are found in \"../../etc/images\" relative to the
-files in \"lisp/mh-e\". This function saves the actual location
-found in the variable `mh-image-load-path'. If the images on your
-system are actually located elsewhere, then set the variable
-`mh-image-load-path' before starting MH-E.
+files in \"lisp/mh-e\", in `image-load-path', or in `load-path'.
+This function saves the actual location found in the variable
+`mh-image-load-path'. If the images on your system are actually
+located elsewhere, then set the variable `mh-image-load-path'
+before starting MH-E.
If `image-load-path' exists (since Emacs 22), then the contents
of the variable `mh-image-load-path' is added to it if isn't
@@ -109,21 +110,39 @@ already there.
See also variable `mh-image-load-path-called-flag'."
(unless mh-image-load-path-called-flag
- (if (or (not mh-image-load-path)
- (not (file-exists-p mh-image-load-path)))
- (let (mh-library-name)
- ;; First, find mh-e in the load-path.
- (setq mh-library-name (locate-library "mh-e"))
- (if (not mh-library-name)
- (error "Can not find MH-E in load-path"))
- (setq mh-image-load-path
- (expand-file-name (concat (file-name-directory mh-library-name)
- "../../etc/images")))))
+ (cond
+ (mh-image-load-path) ; user setting exists; we're done
+ ((mh-image-search-load-path "mh-logo.xpm")
+ ;; Images already in image-load-path.
+ (setq mh-image-load-path
+ (file-name-directory (mh-image-search-load-path "mh-logo.xpm"))))
+ ((locate-library "mh-logo.xpm")
+ ;; Images already in load-path.
+ (setq mh-image-load-path
+ (file-name-directory (locate-library "mh-logo.xpm"))))
+ (t
+ ;; Guess `mh-image-load-path' if it wasn't provided by the user.
+ (let (mh-library-name)
+ ;; First, find mh-e in the load-path.
+ (setq mh-library-name (locate-library "mh-e"))
+ (if (not mh-library-name)
+ (error "Can not find MH-E in load-path"))
+ ;; And then set mh-image-load-path relative to that.
+ (setq mh-image-load-path
+ (expand-file-name (concat
+ (file-name-directory mh-library-name)
+ "../../etc/images"))))))
(if (not (file-exists-p mh-image-load-path))
- (error "Can not find image directory %s" mh-image-load-path))
+ (error "Directory %s in mh-image-load-path does not exist"
+ mh-image-load-path))
+ (if (not (file-exists-p
+ (expand-file-name "mh-logo.xpm" mh-image-load-path)))
+ (error "Directory %s in mh-image-load-path does not contain MH-E images"
+ mh-image-load-path))
(if (boundp 'image-load-path)
(add-to-list 'image-load-path mh-image-load-path)
(add-to-list 'load-path mh-image-load-path))
+
(setq mh-image-load-path-called-flag t)))
;;;###mh-autoload
diff --git a/lisp/mwheel.el b/lisp/mwheel.el
index aca959e8577..662b992b343 100644
--- a/lisp/mwheel.el
+++ b/lisp/mwheel.el
@@ -91,7 +91,7 @@
mouse-wheel-click-button))
"Event that should be temporarily inhibited after mouse scrolling.
The mouse wheel is typically on the mouse-2 button, so it may easily
-happen that text is accidentially yanked into the buffer when
+happen that text is accidentally yanked into the buffer when
scrolling with the mouse wheel. To prevent that, this variable can be
set to the event sent when clicking on the mouse wheel button."
:group 'mouse
@@ -220,7 +220,7 @@ This should only be bound to mouse buttons 4 and 5."
(define-minor-mode mouse-wheel-mode
"Toggle mouse wheel support.
With prefix argument ARG, turn on if positive, otherwise off.
-Returns non-nil if the new state is enabled."
+Return non-nil if the new state is enabled."
:global t
:group 'mouse
(let* ((dn mouse-wheel-down-event)
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 9a6024c8e8b..4f197e34bfe 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -339,7 +339,7 @@ Return its file name if found, or nil if not found."
nil)))))
(defun flymake-fix-file-name (name)
- "Replace all occurences of '\' with '/'."
+ "Replace all occurrences of '\' with '/'."
(when name
(setq name (expand-file-name name))
(setq name (abbreviate-file-name name))
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el
index 93eeaeac4f6..2e7fa41d622 100644
--- a/lisp/progmodes/gdb-ui.el
+++ b/lisp/progmodes/gdb-ui.el
@@ -72,8 +72,16 @@
;; 1) Strings that are watched don't update in the speedbar when their
;; contents change.
-;; 2) Watch expressions go out of scope when the inferior is re-run.
-;; 3) Cannot handle multiple debug sessions.
+;; 2) Cannot handle multiple debug sessions.
+
+;;; Problems with watch expressions:
+
+;; 1) They go out of scope when the inferior is re-run.
+;; 2) -var-update reports that an out of scope variable has changed:
+;; changelist=[{name="var1",in_scope="false"}], but the value can't be accessed.
+;; (-var-list-children, in contrast allows you to create variable objects of
+;; the children when they are out of scope and get their values).
+;; 3) VARNUM increments even when vaiable object is not created (maybe trivial).
;;; TODO:
@@ -97,7 +105,9 @@
(defvar gdb-selected-frame nil)
(defvar gdb-frame-number nil)
(defvar gdb-current-language nil)
-(defvar gdb-var-list nil "List of variables in watch window.")
+(defvar gdb-var-list nil
+ "List of variables in watch window.
+Each element has the form (EXPRESSION VARNUM NUMCHILD TYPE VALUE CHANGED-P).")
(defvar gdb-var-changed nil "Non-nil means that `gdb-var-list' has changed.")
(defvar gdb-main-file nil "Source file from which program execution begins.")
(defvar gdb-overlay-arrow-position nil)
@@ -185,7 +195,6 @@ handlers.")
"Font lock keywords used in `gdb-local-mode'.")
;; Variables for GDB 6.4+
-
(defvar gdb-register-names nil "List of register names.")
(defvar gdb-changed-registers nil
"List of changed register numbers (strings).")
@@ -203,9 +212,9 @@ other with the source file with the main routine of the inferior.
If `gdb-many-windows' is t, regardless of the value of
`gdb-show-main', the layout below will appear unless
-`gdb-use-inferior-io-buffer' is nil when the source buffer
-occupies the full width of the frame. Keybindings are given in
-relevant buffer.
+`gdb-use-separate-io-buffer' is nil when the source buffer
+occupies the full width of the frame. Keybindings are shown in
+some of the buffers.
Watch expressions appear in the speedbar/slowbar.
@@ -218,28 +227,28 @@ See Info node `(emacs)GDB Graphical Interface' for a more
detailed description of this mode.
-+--------------------------------------------------------------+
-| GDB Toolbar |
-+-------------------------------+------------------------------+
-| GUD buffer (I/O of GDB) | Locals buffer |
-| | |
-| | |
-| | |
-+-------------------------------+------------------------------+
-| Source buffer | I/O buffer (of inferior) |
-| | (comint-mode) |
-| | |
-| | |
-| | |
-| | |
-| | |
-| | |
-+-------------------------------+------------------------------+
-| Stack buffer | Breakpoints buffer |
-| RET gdb-frames-select | SPC gdb-toggle-breakpoint |
-| | RET gdb-goto-breakpoint |
-| | d gdb-delete-breakpoint |
-+-------------------------------+------------------------------+"
++----------------------------------------------------------------------+
+| GDB Toolbar |
++-----------------------------------+----------------------------------+
+| GUD buffer (I/O of GDB) | Locals buffer |
+| | |
+| | |
+| | |
++-----------------------------------+----------------------------------+
+| Source buffer | I/O buffer (of debugged program) |
+| | (comint-mode) |
+| | |
+| | |
+| | |
+| | |
+| | |
+| | |
++-----------------------------------+----------------------------------+
+| Stack buffer | Breakpoints buffer |
+| RET gdb-frames-select | SPC gdb-toggle-breakpoint |
+| | RET gdb-goto-breakpoint |
+| | D gdb-delete-breakpoint |
++-----------------------------------+----------------------------------+"
;;
(interactive (list (gud-query-cmdline 'gdba)))
;;
@@ -281,26 +290,26 @@ Also display the main routine in the disassembly buffer if present."
:group 'gud
:version "22.1")
-(defcustom gdb-use-inferior-io-buffer nil
+(defcustom gdb-use-separate-io-buffer nil
"Non-nil means display output from the inferior in a separate buffer."
:type 'boolean
:group 'gud
:version "22.1")
-(defun gdb-use-inferior-io-buffer (arg)
+(defun gdb-use-separate-io-buffer (arg)
"Toggle separate IO for inferior.
With arg, use separate IO iff arg is positive."
(interactive "P")
- (setq gdb-use-inferior-io-buffer
+ (setq gdb-use-separate-io-buffer
(if (null arg)
- (not gdb-use-inferior-io-buffer)
+ (not gdb-use-separate-io-buffer)
(> (prefix-numeric-value arg) 0)))
(message (format "Separate inferior IO %sabled"
- (if gdb-use-inferior-io-buffer "en" "dis")))
+ (if gdb-use-separate-io-buffer "en" "dis")))
(if (and gud-comint-buffer
(buffer-name gud-comint-buffer))
(condition-case nil
- (if gdb-use-inferior-io-buffer
+ (if gdb-use-separate-io-buffer
(gdb-restore-windows)
(kill-buffer (gdb-inferior-io-name)))
(error nil))))
@@ -462,7 +471,7 @@ With arg, use separate IO iff arg is positive."
(setq gdb-buffer-type 'gdba)
- (if gdb-use-inferior-io-buffer (gdb-clear-inferior-io))
+ (if gdb-use-separate-io-buffer (gdb-clear-inferior-io))
;; Hack to see test for GDB 6.4+ (-stack-info-frame was implemented in 6.4)
(setq gdb-version nil)
@@ -664,7 +673,7 @@ type=\"\\(.*?\\)\"")
'gdb-var-update-handler))
(push 'gdb-var-update gdb-pending-triggers)))
-(defconst gdb-var-update-regexp "name=\"\\(.*?\\)\"")
+(defconst gdb-var-update-regexp "name=\"\\(.*?\\)\",in_scope=\"\\(.*?\\)\"")
(defun gdb-var-update-handler ()
(goto-char (point-min))
@@ -853,10 +862,10 @@ The key should be one of the cars in `gdb-buffer-rules-assoc'."
(gdb-get-target-string)
"*"))
-(defun gdb-display-inferior-io-buffer ()
+(defun gdb-display-separate-io-buffer ()
"Display IO of inferior in a separate window."
(interactive)
- (if gdb-use-inferior-io-buffer
+ (if gdb-use-separate-io-buffer
(gdb-display-buffer
(gdb-get-create-buffer 'gdb-inferior-io))))
@@ -867,21 +876,21 @@ The key should be one of the cars in `gdb-buffer-rules-assoc'."
(menu-bar-lines . nil)
(minibuffer . nil)))
-(defun gdb-frame-inferior-io-buffer ()
+(defun gdb-frame-separate-io-buffer ()
"Display IO of inferior in a new frame."
(interactive)
- (if gdb-use-inferior-io-buffer
+ (if gdb-use-separate-io-buffer
(let ((special-display-regexps (append special-display-regexps '(".*")))
(special-display-frame-alist gdb-frame-parameters))
(display-buffer (gdb-get-create-buffer 'gdb-inferior-io)))))
(defvar gdb-inferior-io-mode-map
(let ((map (make-sparse-keymap)))
- (define-key map "\C-c\C-c" 'gdb-inferior-io-interrupt)
- (define-key map "\C-c\C-z" 'gdb-inferior-io-stop)
- (define-key map "\C-c\C-\\" 'gdb-inferior-io-quit)
- (define-key map "\C-c\C-d" 'gdb-inferior-io-eof)
- (define-key map "\C-d" 'gdb-inferior-io-eof)
+ (define-key map "\C-c\C-c" 'gdb-separate-io-interrupt)
+ (define-key map "\C-c\C-z" 'gdb-separate-io-stop)
+ (define-key map "\C-c\C-\\" 'gdb-separate-io-quit)
+ (define-key map "\C-c\C-d" 'gdb-separate-io-eof)
+ (define-key map "\C-d" 'gdb-separate-io-eof)
map))
(define-derived-mode gdb-inferior-io-mode comint-mode "Inferior I/O"
@@ -902,25 +911,25 @@ The key should be one of the cars in `gdb-buffer-rules-assoc'."
(process-send-string proc string)
(process-send-string proc "\n")))
-(defun gdb-inferior-io-interrupt ()
+(defun gdb-separate-io-interrupt ()
"Interrupt the program being debugged."
(interactive)
(interrupt-process
(get-buffer-process gud-comint-buffer) comint-ptyp))
-(defun gdb-inferior-io-quit ()
+(defun gdb-separate-io-quit ()
"Send quit signal to the program being debugged."
(interactive)
(quit-process
(get-buffer-process gud-comint-buffer) comint-ptyp))
-(defun gdb-inferior-io-stop ()
+(defun gdb-separate-io-stop ()
"Stop the program being debugged."
(interactive)
(stop-process
(get-buffer-process gud-comint-buffer) comint-ptyp))
-(defun gdb-inferior-io-eof ()
+(defun gdb-separate-io-eof ()
"Send end-of-file to the program being debugged."
(interactive)
(process-send-eof
@@ -1116,7 +1125,7 @@ not GDB."
((eq sink 'user)
(progn
(setq gud-running t)
- (if gdb-use-inferior-io-buffer
+ (if gdb-use-separate-io-buffer
(setq gdb-output-sink 'inferior))))
(t
(gdb-resync)
@@ -1126,7 +1135,7 @@ not GDB."
"An annotation handler for `breakpoint' and other annotations.
They say that I/O for the subprocess is now GDB, not the program
being debugged."
- (if gdb-use-inferior-io-buffer
+ (if gdb-use-separate-io-buffer
(let ((sink gdb-output-sink))
(cond
((eq sink 'inferior)
@@ -1205,7 +1214,6 @@ happens to be appropriate."
;; FIXME: with GDB-6 on Darwin, this might very well work.
;; Only needed/used with speedbar/watch expressions.
(when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))
- (setq gdb-var-changed t) ; force update
(dolist (var gdb-var-list)
(setcar (nthcdr 5 var) nil))
(if (string-equal gdb-version "pre-6.4")
@@ -2462,17 +2470,17 @@ corresponding to the mode line clicked."
:visible (memq gud-minor-mode '(gdbmi gdba))))
(define-key menu [gdb] '("Gdb" . gdb-display-gdb-buffer))
(define-key menu [threads] '("Threads" . gdb-display-threads-buffer))
+ (define-key menu [inferior]
+ '(menu-item "Inferior IO" gdb-display-separate-io-buffer
+ :enable gdb-use-separate-io-buffer))
(define-key menu [memory] '("Memory" . gdb-display-memory-buffer))
+ (define-key menu [registers] '("Registers" . gdb-display-registers-buffer))
(define-key menu [disassembly]
'("Disassembly" . gdb-display-assembler-buffer))
- (define-key menu [registers] '("Registers" . gdb-display-registers-buffer))
- (define-key menu [inferior]
- '(menu-item "Inferior IO" gdb-display-inferior-io-buffer
- :enable gdb-use-inferior-io-buffer))
- (define-key menu [locals] '("Locals" . gdb-display-locals-buffer))
- (define-key menu [frames] '("Stack" . gdb-display-stack-buffer))
(define-key menu [breakpoints]
- '("Breakpoints" . gdb-display-breakpoints-buffer)))
+ '("Breakpoints" . gdb-display-breakpoints-buffer))
+ (define-key menu [locals] '("Locals" . gdb-display-locals-buffer))
+ (define-key menu [frames] '("Stack" . gdb-display-stack-buffer)))
(let ((menu (make-sparse-keymap "GDB-Frames")))
(define-key gud-menu-map [frames]
@@ -2481,25 +2489,25 @@ corresponding to the mode line clicked."
(define-key menu [gdb] '("Gdb" . gdb-frame-gdb-buffer))
(define-key menu [threads] '("Threads" . gdb-frame-threads-buffer))
(define-key menu [memory] '("Memory" . gdb-frame-memory-buffer))
- (define-key menu [disassembly] '("Disassembiy" . gdb-frame-assembler-buffer))
- (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer))
(define-key menu [inferior]
- '(menu-item "Inferior IO" gdb-frame-inferior-io-buffer
- :enable gdb-use-inferior-io-buffer))
- (define-key menu [locals] '("Locals" . gdb-frame-locals-buffer))
- (define-key menu [frames] '("Stack" . gdb-frame-stack-buffer))
+ '(menu-item "Inferior IO" gdb-frame-separate-io-buffer
+ :enable gdb-use-separate-io-buffer))
+ (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer))
+ (define-key menu [disassembly] '("Disassembiy" . gdb-frame-assembler-buffer))
(define-key menu [breakpoints]
- '("Breakpoints" . gdb-frame-breakpoints-buffer)))
+ '("Breakpoints" . gdb-frame-breakpoints-buffer))
+ (define-key menu [locals] '("Locals" . gdb-frame-locals-buffer))
+ (define-key menu [frames] '("Stack" . gdb-frame-stack-buffer)))
(let ((menu (make-sparse-keymap "GDB-UI/MI")))
(define-key gud-menu-map [ui]
`(menu-item (if (eq gud-minor-mode 'gdba) "GDB-UI" "GDB-MI")
,menu :visible (memq gud-minor-mode '(gdbmi gdba))))
- (define-key menu [gdb-use-inferior-io]
- '(menu-item "Separate inferior IO" gdb-use-inferior-io-buffer
+ (define-key menu [gdb-use-separate-io]
+ '(menu-item "Separate inferior IO" gdb-use-separate-io-buffer
:visible (eq gud-minor-mode 'gdba)
:help "Toggle separate IO for inferior."
- :button (:toggle . gdb-use-inferior-io-buffer)))
+ :button (:toggle . gdb-use-separate-io-buffer)))
(define-key menu [gdb-many-windows]
'(menu-item "Display Other Windows" gdb-many-windows
:help "Toggle display of locals, stack and breakpoint information"
@@ -2545,7 +2553,7 @@ corresponding to the mode line clicked."
(if gud-last-last-frame
(gud-find-file (car gud-last-last-frame))
(gud-find-file gdb-main-file)))
- (when gdb-use-inferior-io-buffer
+ (when gdb-use-separate-io-buffer
(split-window-horizontally)
(other-window 1)
(gdb-set-window-buffer
@@ -2957,37 +2965,15 @@ BUFFER nil or omitted means use the current buffer."
(if (re-search-forward " source language \\(\\S-*\\)\." nil t)
(setq gdb-current-language (match-string 1)))
(gdb-invalidate-assembler))
-
-
-;; For debugging Emacs only (assumes that usual stack buffer already exists).
-(defun gdb-xbacktrace ()
- "Generate a full lisp level backtrace with arguments."
- (interactive)
- (let ((frames nil)
- (frame-number gdb-frame-number))
- (with-current-buffer (gdb-get-buffer 'gdb-stack-buffer)
- (save-excursion
- (goto-char (point-min))
- (while (search-forward "in Ffuncall " nil t)
- (goto-char (line-beginning-position))
- (looking-at "^#\\([0-9]+\\)")
- (push (match-string-no-properties 1) frames)
- (forward-line 1))))
- (dolist (frame frames)
- (gdb-enqueue-input (list (concat "server frame " frame "\n")
- 'ignore))
-; can't use separate buffer because Emacs gets confused by starting
-; annotation from debug1_print (with output-sink eq 'emacs)
-; (gdb-enqueue-input (list "server ppargs\n" 'gdb-get-arguments))
- (gud-basic-call "server ppargs"))
- (gdb-enqueue-input (list (concat "server frame " frame-number "\n")
- 'ignore))))
+
;; Code specific to GDB 6.4
(defconst gdb-source-file-regexp-1 "fullname=\"\\(.*?\\)\"")
(defun gdb-set-gud-minor-mode-existing-buffers-1 ()
- "Create list of source files for current GDB session."
+ "Create list of source files for current GDB session.
+If buffers already exist for any of these files, gud-minor-mode
+is set in them."
(goto-char (point-min))
(while (re-search-forward gdb-source-file-regexp-1 nil t)
(push (match-string 1) gdb-source-file-list))
@@ -3051,7 +3037,8 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
'gdb-var-update-handler-1))
(push 'gdb-var-update gdb-pending-triggers))))
-(defconst gdb-var-update-regexp-1 "name=\"\\(.*?\\)\",value=\\(\".*?\"\\),")
+(defconst gdb-var-update-regexp-1
+ "name=\"\\(.*?\\)\",\\(?:value=\\(\".*?\"\\),\\)?in_scope=\"\\(.*?\\)\"")
(defun gdb-var-update-handler-1 ()
(goto-char (point-min))
@@ -3063,7 +3050,10 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
(if (string-equal varnum (cadr var))
(progn
(setcar (nthcdr 5 var) t)
- (setcar (nthcdr 4 var) (read (match-string 2)))
+ (setcar (nthcdr 4 var)
+ (if (string-equal (match-string 3) "true")
+ (read (match-string 2))
+ "*changed*"))
(setcar (nthcdr num gdb-var-list) var)
(throw 'var-found1 nil)))
(setq num (+ num 1))))))
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index b927c765476..1d5172a1a52 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -656,8 +656,13 @@ required by the caller."
;;;###autoload
(defun gdb (command-line)
"Run gdb on program FILE in buffer *gud-FILE*.
-The directory containing FILE becomes the initial working directory
-and source-file directory for your debugger."
+The directory containing FILE becomes the initial working
+directory and source-file directory for your debugger. By
+default this command starts GDB using a graphical interface. See
+`gdba' for more information.
+
+To run GDB in text command mode, set `gud-gdb-command-name' to
+\"gdb --fullname\" and include the pathname, if necessary."
(interactive (list (gud-query-cmdline 'gdb)))
(if (and gud-comint-buffer
@@ -3120,7 +3125,7 @@ class of the file (using s to separate nested class ids)."
(defvar gdb-script-font-lock-keywords
'(("^define\\s-+\\(\\(\\w\\|\\s_\\)+\\)" (1 font-lock-function-name-face))
("\\$\\(\\w+\\)" (1 font-lock-variable-name-face))
- ("^\\s-*\\([a-z]+\\)" (1 font-lock-keyword-face))))
+ ("^\\s-*\\(\\(\\w\\|\\s_\\)+\\)" (1 font-lock-keyword-face))))
;; FIXME: The keyword "end" associated with "document"
;; should have font-lock-keyword-face (currently font-lock-doc-face).
diff --git a/lisp/speedbar.el b/lisp/speedbar.el
index c3f949ead37..4e639c586f2 100644
--- a/lisp/speedbar.el
+++ b/lisp/speedbar.el
@@ -1019,10 +1019,10 @@ selected. If the speedbar frame is active, then select the attached frame."
(lambda () (let ((speedbar-update-flag t))
(speedbar-timer-fn)))))
-(defmacro speedbar-frame-width ()
+(defsubst speedbar-frame-width ()
"Return the width of the speedbar frame in characters.
nil if it doesn't exist."
- '(window-width (get-buffer-window speedbar-buffer)))
+ (frame-width speedbar-frame))
(defun speedbar-mode ()
"Major mode for managing a display of directories and tags.
@@ -2123,7 +2123,7 @@ Groups may optionally contain a position."
"A wrapper for `try-completion'.
Passes STRING and ALIST to `try-completion' if ALIST
passes some tests."
- (if (and (listp alist) (not (null alist))
+ (if (and (consp alist)
(listp (car alist)) (stringp (car (car alist))))
(try-completion string alist)
nil))
@@ -2423,8 +2423,7 @@ name will have the function FIND-FUN and not token."
;; Choose the correct method of doodling.
(if (and speedbar-mode-specific-contents-flag
- (listp speedbar-special-mode-expansion-list)
- speedbar-special-mode-expansion-list
+ (consp speedbar-special-mode-expansion-list)
(local-variable-p
'speedbar-special-mode-expansion-list
(current-buffer)))
@@ -2463,12 +2462,14 @@ name will have the function FIND-FUN and not token."
)
(set-buffer speedbar-buffer)
(speedbar-with-writable
- (erase-buffer)
- (dolist (func funclst)
- (setq default-directory cbd)
- (funcall func cbd 0))
- (speedbar-reconfigure-keymaps)
- (goto-char (point-min)))
+ (let* ((window (get-buffer-window speedbar-buffer 0))
+ (p (window-point window)))
+ (erase-buffer)
+ (dolist (func funclst)
+ (setq default-directory cbd)
+ (funcall func cbd 0))
+ (speedbar-reconfigure-keymaps)
+ (set-window-point window p)))
))))
(defun speedbar-update-directory-contents ()
@@ -2572,7 +2573,6 @@ This should only be used by modes classified as special."
;; We do not erase the buffer because these functions may
;; decide NOT to update themselves.
(funcall func specialbuff)))
-
(goto-char (point-min))))
(speedbar-reconfigure-keymaps))
@@ -2614,8 +2614,7 @@ Also resets scanner functions."
(speedbar-maybe-add-localized-support (current-buffer))
;; Update for special mode all the time!
(if (and speedbar-mode-specific-contents-flag
- (listp speedbar-special-mode-expansion-list)
- speedbar-special-mode-expansion-list
+ (consp speedbar-special-mode-expansion-list)
(local-variable-p
'speedbar-special-mode-expansion-list
(current-buffer)))
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index 8cd784ccf39..30828c8d93e 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -860,6 +860,7 @@ button end points."
(define-key map [(shift tab)] 'advertised-widget-backward)
(define-key map [backtab] 'widget-backward)
(define-key map [down-mouse-2] 'widget-button-click)
+ (define-key map [down-mouse-1] 'widget-button-click)
(define-key map "\C-m" 'widget-button-press)
map)
"Keymap containing useful binding for buffers containing widgets.
@@ -915,71 +916,79 @@ Recommended as a parent keymap for modes using widgets.")
"Invoke the button that the mouse is pointing at."
(interactive "e")
(if (widget-event-point event)
- (let* ((pos (widget-event-point event))
+ (let* ((oevent event)
+ (mouse-1 (memq (event-basic-type event) '(mouse-1 down-mouse-1)))
+ (pos (widget-event-point event))
(start (event-start event))
(button (get-char-property
pos 'button (and (windowp (posn-window start))
(window-buffer (posn-window start))))))
- (if button
- ;; Mouse click on a widget button. Do the following
- ;; in a save-excursion so that the click on the button
- ;; doesn't change point.
- (save-selected-window
- (select-window (posn-window (event-start event)))
- (save-excursion
- (goto-char (posn-point (event-start event)))
- (let* ((overlay (widget-get button :button-overlay))
- (face (overlay-get overlay 'face))
- (mouse-face (overlay-get overlay 'mouse-face)))
- (unwind-protect
- ;; Read events, including mouse-movement events
- ;; until we receive a release event. Highlight/
- ;; unhighlight the button the mouse was initially
- ;; on when we move over it.
- (save-excursion
- (when face ; avoid changing around image
- (overlay-put overlay
- 'face widget-button-pressed-face)
- (overlay-put overlay
- 'mouse-face widget-button-pressed-face))
- (unless (widget-apply button :mouse-down-action event)
- (let ((track-mouse t))
- (while (not (widget-button-release-event-p event))
- (setq event (read-event)
- pos (widget-event-point event))
- (if (and pos
- (eq (get-char-property pos 'button)
- button))
- (when face
- (overlay-put overlay
- 'face
- widget-button-pressed-face)
- (overlay-put overlay
- 'mouse-face
- widget-button-pressed-face))
- (overlay-put overlay 'face face)
- (overlay-put overlay 'mouse-face mouse-face)))))
-
- ;; When mouse is released over the button, run
- ;; its action function.
- (when (and pos
- (eq (get-char-property pos 'button) button))
- (widget-apply-action button event)))
- (overlay-put overlay 'face face)
- (overlay-put overlay 'mouse-face mouse-face))))
-
- (unless (pos-visible-in-window-p (widget-event-point event))
- (mouse-set-point event)
- (beginning-of-line)
- (recenter))
- )
-
+ (when (or (null button)
+ (catch 'button-press-cancelled
+ ;; Mouse click on a widget button. Do the following
+ ;; in a save-excursion so that the click on the button
+ ;; doesn't change point.
+ (save-selected-window
+ (select-window (posn-window (event-start event)))
+ (save-excursion
+ (goto-char (posn-point (event-start event)))
+ (let* ((overlay (widget-get button :button-overlay))
+ (pressed-face (or (widget-get button :pressed-face)
+ widget-button-pressed-face))
+ (face (overlay-get overlay 'face))
+ (mouse-face (overlay-get overlay 'mouse-face)))
+ (unwind-protect
+ ;; Read events, including mouse-movement
+ ;; events, waiting for a release event. If we
+ ;; began with a mouse-1 event and receive a
+ ;; movement event, that means the user wants
+ ;; to perform drag-selection, so cancel the
+ ;; button press and do the default mouse-1
+ ;; action. For mouse-2, just highlight/
+ ;; unhighlight the button the mouse was
+ ;; initially on when we move over it.
+ (save-excursion
+ (when face ; avoid changing around image
+ (overlay-put overlay 'face pressed-face)
+ (overlay-put overlay 'mouse-face pressed-face))
+ (unless (widget-apply button :mouse-down-action event)
+ (let ((track-mouse t))
+ (while (not (widget-button-release-event-p event))
+ (setq event (read-event))
+ (when (and mouse-1 (mouse-movement-p event))
+ (push event unread-command-events)
+ (setq event oevent)
+ (throw 'button-press-cancelled t))
+ (setq pos (widget-event-point event))
+ (if (and pos
+ (eq (get-char-property pos 'button)
+ button))
+ (when face
+ (overlay-put overlay 'face pressed-face)
+ (overlay-put overlay 'mouse-face pressed-face))
+ (overlay-put overlay 'face face)
+ (overlay-put overlay 'mouse-face mouse-face)))))
+
+ ;; When mouse is released over the button, run
+ ;; its action function.
+ (when (and pos
+ (eq (get-char-property pos 'button) button))
+ (widget-apply-action button event)))
+ (overlay-put overlay 'face face)
+ (overlay-put overlay 'mouse-face mouse-face))))
+
+ ;; This loses if the widget action switches windows. -- cyd
+ ;; (unless (pos-visible-in-window-p (widget-event-point event))
+ ;; (mouse-set-point event)
+ ;; (beginning-of-line)
+ ;; (recenter))
+ )
+ nil))
(let ((up t) command)
;; Mouse click not on a widget button. Find the global
;; command to run, and check whether it is bound to an
;; up event.
- (mouse-set-point event)
- (if (memq (event-basic-type event) '(mouse-1 down-mouse-1))
+ (if mouse-1
(cond ((setq command ;down event
(lookup-key widget-global-map [down-mouse-1]))
(setq up nil))
diff --git a/lispref/ChangeLog b/lispref/ChangeLog
index 250d5450608..480676a8c5f 100644
--- a/lispref/ChangeLog
+++ b/lispref/ChangeLog
@@ -1,3 +1,18 @@
+2006-02-16 Johan Bockg,AC%(Brd <bojohan+mail@dd.chalmers.se> (tiny change)
+
+ * display.texi (Other Display Specs, Image Descriptors): Revert
+ erroneous changes. The previous description of image-descriptors
+ as `(image . PROPS)' was correct.
+
+2006-02-14 Richard M. Stallman <rms@gnu.org>
+
+ * variables.texi (File Local Variables): Clarifications.
+
+2006-02-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * variables.texi (File Local Variables): Use @code for a cons
+ cell, not @var.
+
2006-02-13 Chong Yidong <cyd@stupidchicken.com>
* variables.texi (File Local Variables): Document new file local
diff --git a/lispref/display.texi b/lispref/display.texi
index c6bc63d2ff9..20b8df8d466 100644
--- a/lispref/display.texi
+++ b/lispref/display.texi
@@ -3280,7 +3280,7 @@ Display @var{string} instead of the text that has this property.
Recursive display specifications are not supported---@var{string}'s
@code{display} properties, if any, are not used.
-@item (image @var{image-props})
+@item (image . @var{image-props})
This kind of display specification is an image descriptor (@pxref{Images}).
When used as a display specification, it means to display the image
instead of the text that has the display specification.
@@ -3507,12 +3507,11 @@ function always returns @code{t}; for other image types, it returns
@subsection Image Descriptors
@cindex image descriptor
- An image description is a list of the form @code{(image
-@var{props})}, where @var{props} is a property list containing
-alternating keyword symbols (symbols whose names start with a colon) and
-their values. You can use any Lisp object as a property, but the only
-properties that have any special meaning are certain symbols, all of
-them keywords.
+ An image description is a list of the form @code{(image . @var{props})},
+where @var{props} is a property list containing alternating keyword
+symbols (symbols whose names start with a colon) and their values.
+You can use any Lisp object as a property, but the only properties
+that have any special meaning are certain symbols, all of them keywords.
Every image descriptor must contain the property @code{:type
@var{type}} to specify the format of the image. The value of @var{type}
diff --git a/lispref/variables.texi b/lispref/variables.texi
index 8b54d02758e..f3e81c3ddd3 100644
--- a/lispref/variables.texi
+++ b/lispref/variables.texi
@@ -1777,30 +1777,26 @@ visiting a file could take over your Emacs. Emacs takes several
measures to prevent this.
@cindex safe local variable
- When Emacs encounters a file local variable whose safety is not
-guaranteed, it asks the user whether or not to obey the file variable
-specifications. If the user says no, Emacs ignores @emph{all} the
-file variables specified in that file. A variable can be marked as
-@dfn{safe} by setting its @code{safe-local-variable} property. If the
-property is @code{t}, that variable is always considered safe,
-regardless of the value assigned to it. The
-@code{safe-local-variable} property can also be a a function taking
-exactly one argument. In that case, Emacs considers it safe to give
-the variable a certain value if the function returns non-@code{nil}
-when called with that value as argument. Many commonly-encountered
-file variables possess @code{safe-local-variable} by default,
-including @code{fill-column}, @code{fill-prefix}, and
-@code{indent-tabs-mode}.
+ You can specify safe values for a variable with a
+@code{safe-local-variable} property. If the property is @code{t},
+setting that variable in a file is always considered safe, regardless
+of the value used. If the property is a function of one argument,
+then any value is safe if the function returns non-@code{nil} given
+that value. Many commonly encountered file variables standardly have
+@code{safe-local-variable} properties, including @code{fill-column},
+@code{fill-prefix}, and @code{indent-tabs-mode}.
@defopt safe-local-variable-values
-This variable provides another way to mark variables as safe. It is a
-list of cons cells @var{(var . val)}, where @var{var} is a variable
-name and @var{val} is a value of that variable that is safe.
-
-When Emacs asks the user whether or not to obey a set of file variable
-specifications, the user can choose to mark them as safe. This adds
-those variable-value pairs to @code{safe-local-variable-values}, and
-saves it to the user's custom file.
+This variable provides another way to mark some variable values as
+safe. It is a list of cons cells @code{(@var{var} . @var{val})},
+where @var{var} is a variable name and @var{val} is a value which is
+safe for that variable.
+
+When Emacs asks the user whether or not to obey a set of file local
+variable specifications, the user can choose to mark them as safe.
+Doing so adds those variable/value pairs to
+@code{safe-local-variable-values}, and saves it to the user's custom
+file.
@end defopt
@defun safe-local-variable-p sym val
@@ -1809,8 +1805,8 @@ the value @var{val}, based on the above criteria.
@end defun
@cindex risky local variable
-Some variables are considered @dfn{risky}. A variable whose name ends
-in any of @samp{-command}, @samp{-frame-alist}, @samp{-function},
+ Some variables are considered @dfn{risky}. A variable whose name
+ends in any of @samp{-command}, @samp{-frame-alist}, @samp{-function},
@samp{-functions}, @samp{-hook}, @samp{-hooks}, @samp{-form},
@samp{-forms}, @samp{-map}, @samp{-map-alist}, @samp{-mode-alist},
@samp{-program}, or @samp{-predicate} is considered risky. The
@@ -1825,11 +1821,11 @@ This function returns non-@code{nil} if @var{sym} is a risky variable,
based on the above criteria.
@end defun
-If a variable is risky, it will not be entered automatically into
+ If a variable is risky, it will not be entered automatically into
@code{safe-local-variable-values} as described above. Therefore,
Emacs will always query before setting a risky variable, unless the
-user explicitly allows it by editing @code{safe-local-variable-values}
-via Customize.
+user explicitly allows the setting by customizing
+@code{safe-local-variable-values} directly.
@defvar ignored-local-variables
This variable holds a list of variables that should not be given local
diff --git a/man/ChangeLog b/man/ChangeLog
index eedc1755f88..0d22e6d17bc 100644
--- a/man/ChangeLog
+++ b/man/ChangeLog
@@ -1,3 +1,28 @@
+2006-02-15 Francesco Potort,Al(B <pot@gnu.org>
+
+ * maintaining.texi (Create Tags Table): Explain why the
+ exception when etags writes to files under the /dev tree.
+
+2006-02-14 Richard M. Stallman <rms@gnu.org>
+
+ * custom.texi (Safe File Variables): Lots of clarification.
+ Renamed from Unsafe File Variables.
+
+2006-02-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * custom.texi (Unsafe File Variables): File variable confirmation
+ assumed denied in batch mode.
+
+2006-02-14 Richard M. Stallman <rms@gnu.org>
+
+ * building.texi (GDB User Interface Layout): Don't say `inferior'
+ for program being debugged.
+
+2006-02-15 Nick Roberts <nickrob@snap.net.nz>
+
+ * building.texi (GDB Graphical Interface): Replace
+ gdb-use-inferior-io-buffer with gdb-use-separate-io-buffer.
+
2006-02-13 Chong Yidong <cyd@stupidchicken.com>
* custom.texi (Specifying File Variables, Unsafe File Variables):
diff --git a/man/building.texi b/man/building.texi
index f621706fbbe..497c2777a5a 100644
--- a/man/building.texi
+++ b/man/building.texi
@@ -828,20 +828,20 @@ displays the following frame layout:
@example
+--------------------------------+--------------------------------+
| | |
-| GUD buffer (I/O of GDB) | Locals buffer |
+| GUD buffer (I/O of GDB) | Locals buffer |
| | |
|--------------------------------+--------------------------------+
| | |
-| Source buffer | I/O buffer (of inferior) |
+| Source buffer | I/O buffer for debugged pgm |
| | |
|--------------------------------+--------------------------------+
| | |
-| Stack buffer | Breakpoints buffer |
+| Stack buffer | Breakpoints buffer |
| | |
+--------------------------------+--------------------------------+
@end example
- However, if @code{gdb-use-inferior-io-buffer} is @code{nil}, the I/O
+ However, if @code{gdb-use-separate-io-buffer} is @code{nil}, the I/O
buffer does not appear and the source buffer occupies the full width
of the frame.
@@ -972,12 +972,12 @@ for variables defined in compound statements, the default value is
@table @asis
@item Input/Output Buffer
-@vindex gdb-use-inferior-io-buffer
-If the variable @code{gdb-use-inferior-io-buffer} is non-@code{nil},
+@vindex gdb-use-separate-io-buffer
+If the variable @code{gdb-use-separate-io-buffer} is non-@code{nil},
the executable program that is being debugged takes its input and
displays its output here. Otherwise it uses the GUD buffer for that.
To toggle whether GUD mode uses this buffer, do @kbd{M-x
-gdb-use-inferior-io-buffer}. That takes effect when you next
+gdb-use-separate-io-buffer}. That takes effect when you next
restart the program you are debugging.
The history and replay commands from Shell mode are available here,
diff --git a/man/custom.texi b/man/custom.texi
index 5b6dcde70ee..db88f64f839 100644
--- a/man/custom.texi
+++ b/man/custom.texi
@@ -1045,14 +1045,13 @@ buffer, and sets them to the values specified in the file.
@menu
* Specifying File Variables:: Specifying file local variables.
-* Unsafe File Variables:: Handling local variables that may not
- be safe.
+* Safe File Variables:: Making sure file local variables are safe.
@end menu
@node Specifying File Variables
@subsubsection Specifying File Variables
- There are two ways to specify local variable values: in the first
+ There are two ways to specify file local variable values: in the first
line, or with a local variables list. Here's how to specify them in the
first line:
@@ -1098,7 +1097,7 @@ variables list and a @samp{-*-} line, Emacs processes @emph{everything}
in the @samp{-*-} line first, and @emph{everything} in the local
variables list afterward.
-Here is an example of a local variables list:
+ Here is an example of a local variables list:
@example
;;; Local Variables: ***
@@ -1179,49 +1178,52 @@ list need not take the time to search the whole file.
major mode of a buffer according to the file name and contents,
including the local variables list if any. @xref{Choosing Modes}.
-@node Unsafe File Variables
-@subsubsection Unsafe File Variables
-
- File variables create a certain amount of risk; when you visit
-someone else's file, its variables could affect your Emacs in
-arbitrary ways. A special risk is posed by the @code{eval}
-``variable,'' which can potentially execute arbitrary code, and
-certain actual variables such as @code{load-path}.
-
- Therefore, whenever Emacs encounters file variables that are not
-known to be safe, it displays the entire list of variables defined in
-that file, and asks you for confirmation before setting them. You can
-type @samp{y} or @samp{SPC} to apply the local variables list, or
-@samp{n} to ignore it.
-
- There is a set of file variables and values that are known to be
-safe. For instance, it is safe to give @code{comment-column} or
+@node Safe File Variables
+@subsubsection Safety of File Variables
+
+ File-local variables can be dangerous; when you visit someone else's
+file, there's no telling what its local variables list could do to
+your Emacs. Improper values of the @code{eval} ``variable,'' and
+other variables such as @code{load-path}, could execute Lisp code you
+didn't intend to run.
+
+ Therefore, whenever Emacs encounters file local variable values that
+are not known to be safe, it displays the file's entire local
+variables list, and asks you for confirmation before setting them.
+You can type @kbd{y} or @key{SPC} to put the local variables list into
+effect, or @kbd{n} to ignore it. When Emacs is run in batch mode
+(@pxref{Initial Options}), it can't really ask you, so it assumes the
+answer @samp{n}.
+
+ Emacs normally recognizes certain variables/value pairs as safe.
+For instance, it is safe to give @code{comment-column} or
@code{fill-column} any integer value. If a file specifies only safe
-variable-value pairs, Emacs will not ask for confirmation before
-setting them. You can also tell Emacs that a set of variable-value
-pairs is safe, by entering @samp{!} at the file variables confirmation
-prompt. In that case, Emacs will not ask for confirmation if it
-encounters these variable-value pairs in the future. You can directly
-edit the list of safe variable-value pairs by customizing
+variable/value pairs, Emacs does not ask for confirmation before
+setting them. Otherwise, you can tell Emacs to record that all the
+variable/value pairs in the file are safe, by typing @kbd{!} at the
+confirmation prompt. When Emacs encounters these variable/value pairs
+subsequently, in the same file or others, it will assume they are
+safe.
+
+@vindex safe-local-variable-values
+@cindex risky variable
+ Some variables, such as @code{load-path}, are considered
+particularly @dfn{risky}: there is seldom any reason to specify them
+as local variables, and changing them can be dangerous. Even if you
+enter @kbd{!} at the confirmation prompt, Emacs will not record any
+values as safe for these variables. If you really want to record safe
+values for these variables, do it directly by customizing
@samp{safe-local-variable-values} (@pxref{Easy Customization}).
- Some variables, such as @code{load-path}, are considered
-@dfn{risky}: there is seldom any reason to specify them as file
-variables, and changing them can be dangerous. Even if you enter
-@samp{!} at the confirmation prompt, Emacs will not save these values
-for the future. Therefore, you will be prompted each time the
-variable is encountered. If you really want to allow such a variable,
-you can avoid the prompt by editing @samp{safe-local-variable-values}.
-
-@findex enable-local-variables
+@vindex enable-local-variables
The variable @code{enable-local-variables} allows you to change the
way Emacs processes local variables. Its default value is @code{t},
-which means the behavior described above. If you set the value to
-@code{nil}, Emacs simply ignores local variables in files. Any other
-value says to query you about each file that has local variables, even
-if the variables are known to be safe.
+which specifies the behavior described above. If it is @code{nil},
+Emacs simply ignores all file local variables. Any other value says
+to query you about each file that has local variables, without trying
+to determine whether the values are known to be safe.
-@findex enable-local-eval
+@vindex enable-local-eval
The variable @code{enable-local-eval} controls whether Emacs
processes @code{eval} variables. The three possibilities for the
variable's value are @code{t}, @code{nil}, and anything else, just as
@@ -1229,7 +1231,7 @@ for @code{enable-local-variables}. The default is @code{maybe}, which
is neither @code{t} nor @code{nil}, so normally Emacs does ask for
confirmation about processes @code{eval} variables.
-@findex safe-local-eval-forms
+@vindex safe-local-eval-forms
The @code{safe-local-eval-forms} is a customizable list of eval
forms which are safe to eval, so Emacs should not ask for
confirmation to evaluate these forms.
diff --git a/man/maintaining.texi b/man/maintaining.texi
index b3ff4b8dce9..9836aae4e83 100644
--- a/man/maintaining.texi
+++ b/man/maintaining.texi
@@ -404,7 +404,8 @@ directory where the tags file was initially written. This way, you can
move an entire directory tree containing both the tags file and the
source files, and the tags file will still refer correctly to the source
files. If the tags file is in @file{/dev}, however, the file names are
-made relative to the current working directory.
+made relative to the current working directory. This is useful, for
+example, when writing the tags to @file{/dev/stdout}.
If you specify absolute file names as arguments to @code{etags}, then
the tags file will contain absolute file names. This way, the tags file
diff --git a/src/ChangeLog b/src/ChangeLog
index 12b0ff5b505..1276e2498ef 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,37 @@
+2006-02-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * frame.c (x_get_arg): Clear out PARAM in ALIST also on Mac.
+
+ * macfns.c (x_set_menu_bar_lines): Menu bar is always shown on Mac.
+
+ * macmenu.c (set_frame_menubar): Don't call DrawMenuBar.
+
+2006-02-14 Richard M. Stallman <rms@gnu.org>
+
+ * frame.c (x_get_arg): Clear out all occurrences of PARAM in ALIST.
+
+ * m/ibms390x.h: New file.
+
+2006-02-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_tool_bar_detach_callback): Set show-arrow to the
+ value of x-gtk-whole-detached-tool-bar.
+ (xg_tool_bar_attach_callback): Set show-arrow to TRUE.
+
+ * xfns.c (syms_of_xfns): New variable: x-gtk-whole-detached-tool-bar.
+
+2006-02-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_x_to_emacs_modifiers): Make non-static.
+
+ * xterm.h: Declare x_x_to_emacs_modifiers.
+
+ * gtkutil.c (xg_tool_bar_button_cb): New function.
+ (xg_tool_bar_callback): Call x_x_to_emacs_modifiers to
+ store modifiers in event.
+ (update_frame_tool_bar): Connect button-release-event to
+ xg_tool_bar_button_cb.
+
2006-02-13 Richard M. Stallman <rms@gnu.org>
* .gdbinit (xwindow): Update the code to show the window box.
diff --git a/src/frame.c b/src/frame.c
index b84eee01ae3..914bc5abf65 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -3524,9 +3524,15 @@ x_get_arg (dpyinfo, alist, param, attribute, class, type)
{
/* If we find this parm in ALIST, clear it out
so that it won't be "left over" at the end. */
-#ifdef HAVE_X_WINDOWS /* macfns.c and w32fns.c have not yet
- been changed to cope with this. */
+#ifndef WINDOWSNT /* w32fns.c has not yet been changed to cope with this. */
+ Lisp_Object tail;
XSETCAR (tem, Qnil);
+ /* In case the parameter appears more than once in the alist,
+ clear it out. */
+ for (tail = alist; CONSP (tail); tail = XCDR (tail))
+ if (CONSP (XCAR (tail))
+ && EQ (XCAR (XCAR (tail)), param))
+ XSETCAR (XCAR (tail), Qnil);
#endif
}
else
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 3efc96cfe5d..5b7a5166888 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -3242,11 +3242,28 @@ xg_set_toolkit_scroll_bar_thumb (bar, portion, position, whole)
the GtkImage with a new image. */
#define XG_TOOL_BAR_IMAGE_DATA "emacs-tool-bar-image"
+/* The key for storing the latest modifiers so the activate callback can
+ get them. */
+#define XG_TOOL_BAR_LAST_MODIFIER "emacs-tool-bar-modifier"
+
+
/* Callback function invoked when a tool bar item is pressed.
W is the button widget in the tool bar that got pressed,
CLIENT_DATA is an integer that is the index of the button in the
tool bar. 0 is the first button. */
+static gboolean
+xg_tool_bar_button_cb (widget, event, user_data)
+ GtkWidget *widget;
+ GdkEventButton *event;
+ gpointer user_data;
+{
+ g_object_set_data (G_OBJECT (user_data), XG_TOOL_BAR_LAST_MODIFIER,
+ (gpointer) event->state);
+ return FALSE;
+}
+
+
static void
xg_tool_bar_callback (w, client_data)
GtkWidget *w;
@@ -3254,6 +3271,8 @@ xg_tool_bar_callback (w, client_data)
{
/* The EMACS_INT cast avoids a warning. */
int idx = (int) (EMACS_INT) client_data;
+ int mod = (int) g_object_get_data (G_OBJECT (w), XG_TOOL_BAR_LAST_MODIFIER);
+
FRAME_PTR f = (FRAME_PTR) g_object_get_data (G_OBJECT (w), XG_FRAME_DATA);
Lisp_Object key, frame;
struct input_event event;
@@ -3274,7 +3293,10 @@ xg_tool_bar_callback (w, client_data)
event.kind = TOOL_BAR_EVENT;
event.frame_or_window = frame;
event.arg = key;
- event.modifiers = 0; /* These are not available. */
+ /* Convert between the modifier bits GDK uses and the modifier bits
+ Emacs uses. This assumes GDK an X masks are the same, which they are when
+ this is written. */
+ event.modifiers = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), mod);
kbd_buffer_store_event (&event);
}
@@ -3292,6 +3314,10 @@ xg_tool_bar_detach_callback (wbox, w, client_data)
gpointer client_data;
{
FRAME_PTR f = (FRAME_PTR) client_data;
+ extern int x_gtk_whole_detached_tool_bar;
+
+ g_object_set (G_OBJECT (w), "show-arrow", !x_gtk_whole_detached_tool_bar,
+ NULL);
if (f)
{
@@ -3322,6 +3348,7 @@ xg_tool_bar_attach_callback (wbox, w, client_data)
gpointer client_data;
{
FRAME_PTR f = (FRAME_PTR) client_data;
+ g_object_set (G_OBJECT (w), "show-arrow", TRUE, NULL);
if (f)
{
@@ -3629,6 +3656,13 @@ update_frame_tool_bar (f)
while (! GTK_IS_BUTTON (w))
w = gtk_widget_get_parent (w);
+ /* Callback to save modifyer mask (Shift/Control, etc). GTK makes
+ no distinction based on modifiers in the activate callback,
+ so we have to do it ourselves. */
+ g_signal_connect (w, "button-release-event",
+ GTK_SIGNAL_FUNC (xg_tool_bar_button_cb),
+ ti);
+
g_object_set_data (G_OBJECT (w), XG_FRAME_DATA, (gpointer)f);
/* Use enter/leave notify to show help. We use the events
diff --git a/src/m/ibms390x.h b/src/m/ibms390x.h
new file mode 100644
index 00000000000..0d3acd34d97
--- /dev/null
+++ b/src/m/ibms390x.h
@@ -0,0 +1,163 @@
+/* machine description file for IBM S390 in 64-bit mode
+ Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs; see the file COPYING. If not, write to
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA. */
+
+/* This file was made by copying the significant parts of amdx86-64.h
+ into ibms390.h. */
+
+
+/* The following line tells the configuration script what sort of
+ operating system this machine is likely to run.
+ USUAL-OPSYS="<name of system .h file here, without the s- or .h>"
+
+NOTE-START
+IBM s390 64 bits (-machine=ibms390x64)
+
+ The possibilities for -opsystem are: gnu-linux.
+
+NOTE-END */
+
+#define BITS_PER_LONG 64
+#define BITS_PER_EMACS_INT 64
+
+/* Define WORDS_BIG_ENDIAN iff lowest-numbered byte in a word
+ is the most significant byte. */
+
+#define WORDS_BIG_ENDIAN
+
+/* Define NO_ARG_ARRAY if you cannot take the address of the first of a
+ * group of arguments and treat it as an array of the arguments. */
+
+#define NO_ARG_ARRAY
+
+/* Define WORD_MACHINE if addresses and such have
+ * to be corrected before they can be used as byte counts. */
+
+#define WORD_MACHINE
+
+/* Now define a symbol for the cpu type, if your compiler
+ does not define it automatically:
+ Ones defined so far include vax, m68000, ns16000, pyramid,
+ orion, tahoe, APOLLO and many others */
+
+/* Use type int rather than a union, to represent Lisp_Object */
+/* This is desirable for most machines. */
+
+#define NO_UNION_TYPE
+
+/* Define the type to use. */
+#define EMACS_INT long
+#define EMACS_UINT unsigned long
+#define SPECIAL_EMACS_INT
+
+/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
+ the 24-bit bit field into an int. In other words, if bit fields
+ are always unsigned.
+
+ If you use NO_UNION_TYPE, this flag does not matter. */
+
+#undef EXPLICIT_SIGN_EXTEND
+
+/* Data type of load average, as read out of kmem. */
+
+#define LOAD_AVE_TYPE long
+
+/* Convert that into an integer that is 100 for a load average of 1.0 */
+
+#define LOAD_AVE_CVT(x) (int) (((double) (x)) * 100.0 / FSCALE)
+
+/* Define CANNOT_DUMP on machines where unexec does not work.
+ Then the function dump-emacs will not be defined
+ and temacs will do (load "loadup") automatically unless told otherwise. */
+
+#undef CANNOT_DUMP
+
+/* Define VIRT_ADDR_VARIES if the virtual addresses of
+ pure and impure space as loaded can vary, and even their
+ relative order cannot be relied on.
+
+ Otherwise Emacs assumes that text space precedes data space,
+ numerically. */
+
+#define VIRT_ADDR_VARIES
+
+/* Define C_ALLOCA if this machine does not support a true alloca
+ and the one written in C should be used instead.
+ Define HAVE_ALLOCA to say that the system provides a properly
+ working alloca function and it should be used.
+ Define neither one if an assembler-language alloca
+ in the file alloca.s should be used. */
+
+#undef C_ALLOCA
+#define HAVE_ALLOCA
+
+/* Define NO_REMAP if memory segmentation makes it not work well
+ to change the boundary between the text section and data section
+ when Emacs is dumped. If you define this, the preloaded Lisp
+ code will not be sharable; but that's better than failing completely. */
+
+#undef NO_REMAP
+
+/* Some really obscure 4.2-based systems (like Sequent DYNIX)
+ * do not support asynchronous I/O (using SIGIO) on sockets,
+ * even though it works fine on tty's. If you have one of
+ * these systems, define the following, and then use it in
+ * config.h (or elsewhere) to decide when (not) to use SIGIO.
+ *
+ * You'd think this would go in an operating-system description file,
+ * but since it only occurs on some, but not all, BSD systems, the
+ * reasonable place to select for it is in the machine description
+ * file.
+ */
+
+#undef NO_SOCK_SIGIO
+
+
+/* After adding support for a new system, modify the large case
+ statement in the `configure' script to recognize reasonable
+ configuration names, and add a description of the system to
+ `etc/MACHINES'.
+
+ If you've just fixed a problem in an existing configuration file,
+ you should also check `etc/MACHINES' to make sure its descriptions
+ of known problems in that configuration should be updated. */
+
+#define PNTR_COMPARISON_TYPE unsigned long
+
+/* On the 64 bit architecture, we can use 60 bits for addresses */
+
+#define VALBITS 60
+
+/* This definition of MARKBIT is necessary because of the comparison of
+ ARRAY_MARK_FLAG and MARKBIT in an #if in lisp.h, which cpp doesn't like. */
+
+#define MARKBIT 0x8000000000000000L
+
+#define LINKER $(CC) -nostdlib
+
+/* Define XINT and XUINT so that they can take arguments of type int */
+#define XINT(a) (((long) (a) << (BITS_PER_LONG - VALBITS)) >> (BITS_PER_LONG - VALBITS))
+#define XUINT(a) ((long) (a) & VALMASK)
+
+/* Define XPNTR to avoid or'ing with DATA_SEG_BITS */
+
+#define XPNTR(a) XUINT (a)
+
+/* arch-tag: 4b87653c-6add-4663-8691-7d9dc17b5519
+ (do not change this comment) */
diff --git a/src/macfns.c b/src/macfns.c
index 3f59a459010..92c8b28adce 100644
--- a/src/macfns.c
+++ b/src/macfns.c
@@ -1647,36 +1647,15 @@ x_set_menu_bar_lines (f, value, oldval)
struct frame *f;
Lisp_Object value, oldval;
{
- int nlines;
- int olines = FRAME_MENU_BAR_LINES (f);
-
- /* Right now, menu bars don't work properly in minibuf-only frames;
- most of the commands try to apply themselves to the minibuffer
- frame itself, and get an error because you can't switch buffers
- in or split the minibuffer window. */
- if (FRAME_MINIBUF_ONLY_P (f))
- return;
-
- if (INTEGERP (value))
- nlines = XINT (value);
- else
- nlines = 0;
+ /* Make sure we redisplay all windows in this frame. */
+ windows_or_buffers_changed++;
FRAME_MENU_BAR_LINES (f) = 0;
- if (nlines)
- FRAME_EXTERNAL_MENU_BAR (f) = 1;
- else
- {
- if (FRAME_EXTERNAL_MENU_BAR (f) == 1)
- free_frame_menubar (f);
- FRAME_EXTERNAL_MENU_BAR (f) = 0;
-
- /* Adjust the frame size so that the client (text) dimensions
- remain the same. This depends on FRAME_EXTERNAL_MENU_BAR being
- set correctly. */
- x_set_window_size (f, 0, FRAME_COLS (f), FRAME_LINES (f));
- do_pending_window_change (0);
- }
+ /* The menu bar is always shown. */
+ FRAME_EXTERNAL_MENU_BAR (f) = 1;
+ if (FRAME_MAC_P (f) && f->output_data.mac->menubar_widget == 0)
+ /* Make sure next redisplay shows the menu bar. */
+ XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = Qt;
adjust_glyphs (f);
}
diff --git a/src/macmenu.c b/src/macmenu.c
index 91cf28f7456..bd4ad6291cf 100644
--- a/src/macmenu.c
+++ b/src/macmenu.c
@@ -1701,8 +1701,6 @@ set_frame_menubar (f, first_time, deep_p)
fill_menubar (first_wv->contents);
- DrawMenuBar ();
-
/* Add event handler so we can detect C-g. */
install_menu_quit_handler (NULL);
free_menubar_widget_value_tree (first_wv);
diff --git a/src/xfns.c b/src/xfns.c
index 24dd26bd469..2577272c122 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -159,6 +159,10 @@ int x_use_old_gtk_file_dialog;
int x_gtk_show_hidden_files;
+/* If non-zero, don't collapse to tool bar when it is detached. */
+
+int x_gtk_whole_detached_tool_bar;
+
/* The background and shape of the mouse pointer, and shape when not
over text or in the modeline. */
@@ -5790,6 +5794,12 @@ Note that this is just the default, there is a toggle button on the file
chooser to show or not show hidden files on a case by case basis. */);
x_gtk_show_hidden_files = 0;
+ DEFVAR_BOOL ("x-gtk-whole-detached-tool-bar", &x_gtk_whole_detached_tool_bar,
+ doc: /* *If non-nil, a detached tool bar is shown in full.
+The default is to just show an arrow and pressing on that arrow shows
+the tool bar buttons. */);
+ x_gtk_whole_detached_tool_bar = 0;
+
Fprovide (intern ("x"), Qnil);
#ifdef USE_X_TOOLKIT
diff --git a/src/xterm.c b/src/xterm.c
index 1d67ab51f01..e2e3744ae62 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -323,8 +323,7 @@ static void x_set_window_size_1 P_ ((struct frame *, int, int, int));
static const XColor *x_color_cells P_ ((Display *, int *));
static void x_update_window_end P_ ((struct window *, int, int));
void x_delete_display P_ ((struct x_display_info *));
-static unsigned int x_x_to_emacs_modifiers P_ ((struct x_display_info *,
- unsigned));
+
static int x_io_error_quitter P_ ((Display *));
int x_catch_errors P_ ((Display *));
void x_uncatch_errors P_ ((Display *, int));
@@ -3470,7 +3469,7 @@ x_find_modifier_meanings (dpyinfo)
/* Convert between the modifier bits X uses and the modifier bits
Emacs uses. */
-static unsigned int
+unsigned int
x_x_to_emacs_modifiers (dpyinfo, state)
struct x_display_info *dpyinfo;
unsigned int state;
diff --git a/src/xterm.h b/src/xterm.h
index db8ae425a12..aeb408fd170 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -1006,6 +1006,8 @@ extern void x_clear_area P_ ((Display *, Window, int, int, int, int, int));
extern void set_vertical_scroll_bar P_ ((struct window *));
extern int x_dispatch_event P_ ((XEvent *, Display *));
+extern unsigned int x_x_to_emacs_modifiers P_ ((struct x_display_info *,
+ unsigned));
/* Defined in xselect.c */