1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-28 07:45:00 +00:00
Patches applied:

 * emacs@sv.gnu.org/emacs--devo--0--patch-91
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-92
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-93
   Merge from gnus--rel--5.10

 * emacs@sv.gnu.org/emacs--devo--0--patch-94
   Merge from gnus--rel--5.10

 * emacs@sv.gnu.org/emacs--devo--0--patch-95
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-96
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-97
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-98
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-99
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-100
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-101
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-102
   Merge from erc--emacs--0

 * emacs@sv.gnu.org/emacs--devo--0--patch-103
   Update from CVS: src/regex.c (extend_range_table_work_area): Fix typo.

 * emacs@sv.gnu.org/emacs--devo--0--patch-104
   Update from CVS

 * emacs@sv.gnu.org/gnus--rel--5.10--patch-30
   Merge from emacs--devo--0

 * emacs@sv.gnu.org/gnus--rel--5.10--patch-31
   Update from CVS

 * emacs@sv.gnu.org/gnus--rel--5.10--patch-32
   Update from CVS

 * emacs@sv.gnu.org/gnus--rel--5.10--patch-33
   Update from CVS

 * emacs@sv.gnu.org/gnus--rel--5.10--patch-34
   Update from CVS

 * emacs@sv.gnu.org/gnus--rel--5.10--patch-35
   Merge from emacs--devo--0

 * emacs@sv.gnu.org/gnus--rel--5.10--patch-36
   Update from CVS

git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-514
This commit is contained in:
Karoly Lorentey 2006-02-20 16:30:15 +00:00
commit f2aa3ae43b
77 changed files with 3720 additions and 2671 deletions

View File

@ -43,6 +43,12 @@ a bitmap appearence.
* BUGS
** Reiner Steib's 23 Jan 2006 bug report that tool bar icons don't update.
** Ralf Angeli's 4 Jul 2005 bug report about scroll-preserve-screen-position.
** Martin Rudalics' 30 Jan 2006 bug report about overlays at end of buffer.
** TCP server processes do not work on Windows.
TCP/IP server processes created with `make-network-process' consume

View File

@ -1,3 +1,17 @@
2006-02-18 Bill Wohler <wohler@newt.com>
Release MH-E version 7.92.
* NEWS, MH-E-NEWS: Update for MH-E release 7.92.
2006-02-17 Kenichi Handa <handa@m17n.org>
* TUTORIAL.translators (TUTORIAL.cn): Update the maintainer.
2006-02-17 Sun Yijiang <sunyijiang@gmail.com>
* TUTORIAL.cn: Reworked.
2006-02-14 Chong Yidong <cyd@stupidchicken.com>
* NEWS: Changes in handling of file local variables.

View File

@ -1,6 +1,8 @@
ERC NEWS -*- outline -*-
* Changes in ERC 5.1.2 (unreleased)
* Changes in ERC 5.2 (unreleased)
* Changes in ERC 5.1.2
** Fix compiler errors in erc-autojoin.el and erc-dcc.el.

View File

@ -6,6 +6,14 @@ Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
* Changes in MH-E 7.92
Version 7.92, the third 8.0 beta release, removes the "sed -i" in the
Makefile (SF #1432060), tunes the setting of `mh-image-load-path',
works around systems that do not have face inheritance, fixes several
issues with searching on XEmacs, and creates the correct MIME type
when including OpenOffice documents.
* Changes in MH-E 7.91
Version 7.91 is the second 8.0 beta release and fixes several bugs

View File

@ -1870,24 +1870,32 @@ behavior in older versions of Emacs).
*** Topic cryptography added, enabling easy gpg topic encryption and
decryption. Per-topic basis enables interspersing encrypted-text and
clear-text within a single file to your hearts content, using symmetric
clear-text within a single file to your heart's content, using symmetric
and/or public key modes. Time-limited key caching, user-provided
symmetric key hinting and consistency verification, auto-encryption of
pending topics on save, and more, make it easy to use encryption in
powerful ways.
*** many substantial fixes and refinements, including:
*** Default command prefix changed to "\C-c " (control-c space), to avoid
intruding on user's keybinding space. Customize the
`allout-command-prefix' variable to your preference.
*** Allout now uses text overlay's `invisible' property (and others) for
concealed text, instead of selective-display. This simplifies the code, in
particularly avoiding the need for kludges for isearch dynamic-display,
discretionary handling of edits of concealed text, undo concerns, etc.
*** Many substantial fixes and refinements, including:
- repaired inhibition of inadvertent edits to concealed text
- repaired retention of topic body hanging indent upon topic depth shifts
- prevent "containment discontinuities" where a topic is shifted deeper
than the offspring-depth of its container
- easy to adopt the distinctive bullet of a topic in a topic created
relative to it, or select a new one, or use the common topic bullet
- plain bullets, by default, now alternate between only two characters
('.' and ','), yielding less cluttered outlines
- many internal fixes
- version number incremented to 2.1
- refuse to create "containment discontinuities", where a
topic is shifted deeper than the offspring-depth of its' container
- bulleting variation is simpler and more accommodating, both in the
default behavior and in ability to vary when creating new topics
- many internal fixes and refinements
- many module and function docstring clarifications
- version number incremented to 2.2
** The variable `woman-topic-at-point' was renamed
to `woman-use-topic-at-point' and behaves differently: if this
@ -2999,7 +3007,7 @@ See the file GNUS-NEWS or the node "Oort Gnus" in the Gnus manual for details.
---
** MH-E changes.
Upgraded to MH-E version 7.91. There have been major changes since
Upgraded to MH-E version 7.92. There have been major changes since
version 5.0.2; see MH-E-NEWS for details.
** Calendar changes:

File diff suppressed because it is too large Load Diff

View File

@ -6,8 +6,8 @@ Author: Ognyan Kulev <ogi@fmi.uni-sofia.bg>
Maintainer: Ognyan Kulev <ogi@fmi.uni-sofia.bg>
* TUTORIAL.cn:
Author: Chao-Hong Liu <chliu@gnu.org>
Maintainer: Chao-Hong Liu <chliu@gnu.org>
Author: Sun Yijiang <sunyijiang@gmail.com>
Maintainer: Sun Yijiang <sunyijiang@gmail.com>
* TUTORIAL.cs:
Author: Milan Zamazal <pdm@zamazal.org>

View File

@ -1,3 +1,349 @@
2006-02-20 Juanma Barranquero <lekktu@gmail.com>
* buff-menu.el (list-buffers-noselect): Turn also "\n" into a
strech spec so it doesn't display as "^J" on the header line
when `Buffer-menu-use-header-line' is t.
2006-02-20 Nick Roberts <nickrob@snap.net.nz>
* speedbar.el (speedbar-make-button): Keep text properties
of string arguments if desired.
* progmodes/gud.el (gud-speedbar-buttons): Fontify watch
expessions.
* progmodes/gdb-ui.el (gdb-speedbar-expand-node): Force update
of speedbar.
2006-02-19 Ryan Yeske <rcyeske@gmail.com>
* ffap.el (ffap-read-file-or-url): Bind `completion-ignore-case'
to value of `read-file-name-completion-ignore-case'.
2006-02-19 Chong Yidong <cyd@stupidchicken.com>
* custom.el (customize-mark-as-set): Push to `user' theme.
* cus-edit.el (custom-save-variables): Allow unthemed values.
(customize-set-variable): Push setting to `user' theme.
2006-02-19 Nick Roberts <nickrob@snap.net.nz>
* progmodes/gud.el: Don't require font-lock as it's now
automatically loaded.
(gud-speedbar-buttons): Replace gdb-var-changed with
gdb-force-update.
* progmodes/gdb-ui.el (gdb-force-update): Rename from
gdb-var-changed.
(gdb-post-prompt): Use it.
(gdb-var-create-handler, gdb-var-evaluate-expression-handler)
(gdb-var-update-handler, gdb-var-delete)
(gdb-speedbar-expand-node, gdb-var-list-children-handler-1)
(gdb-var-update-handler-1): Don't set gdb-var-changed, just set
gdb-force-update in gdb-post-prompt.
(gdb-reset): Clear watch expressions from speedbar when quitting.
2006-02-19 Michael Kifer <kifer@cs.stonybrook.edu>
* viper-cmd.el (viper-insert-state-post-command-sentinel)
(viper-change-state-to-vi, viper-change-state-to-emacs):
Make aware of cursor coloring in the Emacs state.
(viper-special-read-and-insert-char): Use read-char-exclusive.
(viper-minibuffer-trim-tail): Workaround for fields in minibuffer.
* viper-init.el (viper-emacs-state-cursor-color): New variable.
* viper-util.el (viper-save-cursor-color)
(viper-get-saved-cursor-color-in-replace-mode)
(viper-get-saved-cursor-color-in-insert-mode)
(viper-restore-cursor-color): Make aware of the cursor color in Emacs
state.
(viper-get-saved-cursor-color-in-emacs-mode): New function.
* ediff-diff.el (ediff-ignore-case, ediff-ignore-case-option)
(ediff-ignore-case-option3, ediff-actual-diff-options)
(ediff-actual-diff3-options): New variables to control case sensitivity.
(ediff-make-diff2-buffer, ediff-setup-fine-diff-regions)
(ediff-setup-diff-regions3): Make aware of case-sensitivity.
(ediff-toggle-ignore-case): New function.
(ediff-extract-diffs, ediff-extract-diffs3): Preserve point in buffers.
* ediff-help.el (ediff-long-help-message-narrow2)
(ediff-long-help-message-compare2, ediff-long-help-message-compare3)
(ediff-long-help-message-word-mode): Add ignore-case command.
(ediff-help-for-quick-help): Add ignore-case command.
* ediff-merg.el: Move provide to the end.
* ediff-ptch.el: Move provide to the end.
* ediff-wind.el: Move provide to the end.
* ediff-mult.el: Move provide to the end.
(ediff-set-meta-overlay): Enable follow-link.
* ediff.el: Move provide to the end.
Break recursive load cycle in eval-when-compile.
(ediff-patch-buffer): Better heuristics.
* ediff-util.el: Move provide to the end.
Break recursive load cycle in eval-when-compile.
(ediff-setup-keymap): Add binding for #c. Replace some defsubsts with
defuns.
(ediff-submit-report): Pass the values of ediff-diff3-program,
ediff-diff3-options.
2006-02-19 Juanma Barranquero <lekktu@gmail.com>
* help-fns.el (help-do-arg-highlight): Recognize also ARG- followed by
the opening bracket of the following bracketing pairs: {}, [], (), <>,
`' (for example, in the docstring of `windmove-default-keybindings').
2006-02-19 Nick Roberts <nickrob@snap.net.nz>
* progmodes/gud.el (gud-speedbar-buttons): Update properly for
shadow face. Don't provide binding to edit variable when it is
out of scope.
* progmodes/gdb-ui.el (gdb-var-evaluate-expression-handler)
(gdb-var-update-handler): Detect out of scope variables with pre
GDB 6.4 too.
(gdb-post-prompt): Revert changet 2006-02-17 (force update).
Reset status of variable objects to nil in update handlers.
(gdb-var-update-handler-1): Detect when a variable object comes
in scope. setcar on var changes gdb-var-list directly.
2006-02-17 Juri Linkov <juri@jurta.org>
* ffap.el (ffap) <defface>: Add explicit face declaration.
(ffap-highlight): Use face `ffap' directly instead of checking
for its existence.
* icomplete.el (icomplete-get-keys): Use `t' for the second arg
`visible-ok' of `other-buffer' to find the right original buffer.
* info.el (Info-search): Skip `Local Variables' node.
2006-02-17 Juri Linkov <juri@jurta.org>
* info.el (Info-find-file): Check for symbols `apropos', `history',
`toc' in the input filename, and return these symbols as is.
(Info-find-node-2): Set Info-current-file to symbols `apropos',
`history', `toc' instead of strings.
(Info-set-mode-line): For non-string Info-current-file use the
symbol's name inside **.
(Info-isearch-push-state): Add quote before Info-current-file and
Info-current-node.
(Info-isearch-pop-state): Use `equal' instead of `string='.
(Info-extract-pointer, Info-following-node-name): Use
`match-string-no-properties' instead of `match-string'.
(Info-up): Check `old-file' for `stringp'.
(Info-history): Use `equal' instead of `string-equal'.
Check `file' for `stringp'.
(Info-history): Use symbol `history' instead of string as first arg
of `Info-find-node'.
(Info-toc): Check `Info-current-file' for `stringp'. Use symbol
`toc' instead of string.
(Info-extract-menu-node-name): Use `buffer-substring-no-properties'
instead of `buffer-substring', and `match-string-no-properties'
instead of `match-string'.
(Info-index-nodes): Check for symbols `apropos', `history', `toc'
instead of strings.
(info-apropos): Use `Info-find-node' instead of `Info-goto-node'.
Use symbol `apropos' instead of string.
(Info-copy-current-node-name): Check `Info-current-file' for
`stringp' and construct a command with `Info-find-node' from it.
(Info-fontify-node): Use `match-string-no-properties' instead of
`match-string' and check file names for `stringp'.
(Info-desktop-buffer-misc-data): Check for symbols `apropos',
`history', `toc' instead of strings.
2006-02-17 Chong Yidong <cyd@stupidchicken.com>
* files.el: Rearrange functions and variables in the file local
variables section.
2006-02-17 Reiner Steib <Reiner.Steib@gmx.de>
* files.el: Add truncate-lines, ispell-check-comments and
ispell-local-dictionary as safe local variables.
2006-02-18 Nick Roberts <nickrob@snap.net.nz>
* progmodes/gud.el (gud-speedbar-buttons): Use shadow face for
out of scope variables.
(gud-speedbar-buttons): Use unless.
* progmodes/gdb-ui.el (gdb-var-list): Update doc string.
(gdb-init-1, gdb-var-changed): Set gdb-var-changed to t initially.
(gdb-show-changed-values): Also use for out of scope variables.
(gdb-var-update-handler-1): Note if variable goes out of scope.
2006-02-17 Ryan Yeske <rcyeske@gmail.com>
* net/rcirc.el (rcirc-connect): Make all arguments optional, and
default to global variable values for unsupplied args.
(rcirc-get-buffer-create): Fix bug with setting the target.
(rcirc-any-buffer): Rename from rcirc-get-any-buffer, and include
test for rcirc-always-use-server-buffer-flag here.
(rcirc-response-formats): Add %N, which is a facified nick. %n
uses the default face. Change the ACTION format string. If the
"nick" is the server, don't print anything for that field.
Comment fixes.
(rcirc-target-buffer): Don't test
rcirc-always-use-server-buffer-flag here.
(rcirc-print): Squeeze extra spaces out of the text before message.
(rcirc-put-nick-channel): Strip potential "@" char from nick
before adding them to nick table.
(rcirc-url-regexp): Improve to match address like "foo.com".
2006-02-17 Eli Zaretskii <eliz@gnu.org>
* allout.el (allout-hidden-p): Move this defsubst before
allout-overlay-interior-modification-handler, where it is first
used.
2006-02-17 Ken Manheimer <ken.manheimer@gmail.com>
* allout.el: Use allout invisible-text overlays instead of
selective display for concealed text. Also, lots of general
cleanup, and improved compatibility code.
(allout-version) Incremented, corrected, revised, and refined
module commentary.
(provide 'allout): Moved to the bottom, added a require of overlay.
(allout-encrypt-unencrypted-on-saves): Defaults to t instead of
`except-current'.
(allout-write-file-hook-handler): Minimize delay.
(count-trailing-whitespace-region): New function so
auto-encryption of current topic can resituate cursor exactly.
PGP/GPG encryption trims trailing whitespace from lines, which
must be accounted for across encryption then decryption.
(allout-command-prefix): Now defaults to "\C-c<space>" rather than
just plain "\C-c", to avoid intruding on user's keybinding space.
(allout-toggle-current-subtree-encryption): Pass along fetch-pass
parameter, so user request to provide a new password is done.
(allout-outside-normal-auto-fill-function, allout-auto-fill):
Refined mechanism for auto-filling behavior while in allout mode.
(allout-mode): Explicitly specify the mode map in the docstring.
Clarify provision for various write-file hook var names.
Adjusted for invisible-text overlays instead of selective-display.
(allout-depth): Really return 0 if not within any topic. This
rectifies `allout-beginning-of-level' and sequence numbering
errors that occur when cutting and pasting numbered topics.
Changed from a in-line subst to a regular function, as well.
(allout-pre-next-prefix): Renamed from allout-pre-next-preface.
(allout-end-of-subtree, allout-end-of-subtree)
(allout-end-of-entry, allout-end-of-current-heading)
(allout-next-visible-heading, allout-open-topic, allout-show-entry)
(allout-show-children, allout-show-to-offshoot)
(allout-hide-current-entry, allout-show-current-entry): Rectified
handling of trailing blank lines between items.
(allout-line-boundary-regexp, set-allout-regexp, allout-depth)
(allout-current-depth, allout-unprotected, allout-hidden-p)
(allout-on-current-heading-p, allout-listify-exposed)
(allout-chart-subtree, allout-goto-prefix)
(allout-back-to-current-heading, allout-get-body-text)
(allout-snug-back, allout-flag-current-subtree, allout-show-all)
(allout-hide-region-body, allout-toggle-subtree-encryption)
(allout-encrypt-string, allout-encrypted-key-info)
(allout-next-topic-pending-encryption, allout-encrypt-decrypted)
(allout-file-vars-section-data): Adjusted for use with
invisible-text overlays instead of selective-display.
(allout-kill-line, allout-kill-topic, allout-yank-processing):
Reworked for use with invisible text overlays.
(allout-current-topic-collapsed-p): New function.
(allout-hide-current-subtree): Use allout-current-topic-collapsed-p
to know when to close the containing topic.
(allout-pre-command-business, allout-post-command-business):
Simplify undo-batching and dynamic isearch exposure.
(allout-set-overlay-category): New for invisible-text overlays.
Sets properties of allout-overlay-category, used by
allout-flag-region to set invisible-text overlay properties.
(allout-get-invisibility-overlay): Get the first qualifying
invisibility overlay, so we can find the extent of it.
(allout-back-to-visible-text): Get to just before the beginnining
of the current invisibility overlay, if any.
(allout-overlay-insert-in-front-handler)
(allout-overlay-interior-modification-handler)
(allout-before-change-handler, allout-isearch-end-handler): New
functions to handle extraordinary actions affecting concealed
text.
(allout-flag-region): Use overlays instead of selective-display
for invisible text - by inheritence from the properties of
allout-overlay-category in mainline Emacs, and applied
property-by-property in XEmacs, some recent versions of which
don't inherit the properties from the category. Provisions to
respond to concealed-text edits simplified drastically.
(allout-isearch-rectification, allout-isearch-was-font-lock)
(allout-isearch-expose, allout-enwrap-isearch)
(allout-isearch-abort, allout-pre-was-isearching)
(allout-isearch-prior-pos, allout-isearch-did-quit)
(allout-isearch-dynamic-expose)
(allout-hide-current-entry-completely): Functions deleted.
(allout-undo-aggregation): Explicit undo aggregation no longer
necessary due to transition away from selective-display.
(set-allout-regexp, allout-up-current-level)
(allout-next-visible-heading, allout-forward-current-level)
(allout-open-topic, allout-reindent-body, allout-rebullet-topic)
(allout-kill-line, allout-yank-processing, allout-show-children)
(allout-expose-topic, allout-old-expose-topic)
(allout-listify-exposed, allout-insert-latex-header)
(allout-toggle-subtree-encryption, allout-encrypt-string)
(remove-from-invisibility-spec, allout-hide-current-subtree):
Ditched unused variables.
2006-02-17 Agustin Martin <agustin.martin@hispalinux.es>
* textmodes/ispell.el (ispell-change-dictionary): Call
ispell-buffer-local-dict instead of
ispell-accept-buffer-local-defs.
(ispell-local-dictionary-alist): Accept as valid any coding-system
supported by Emacs.
(ispell-dictionary-alist-3): Esperanto dictionary's coding system
changed to iso-8859-3.
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)

File diff suppressed because it is too large Load Diff

View File

@ -706,9 +706,9 @@ For more information, see the function `buffer-menu'."
list desired-point)
(when Buffer-menu-use-header-line
(let ((pos 0))
;; Turn spaces in the header into stretch specs so they work
;; regardless of the header-line face.
(while (string-match "[ \t]+" header pos)
;; Turn whitespace chars in the header into stretch specs so
;; they work regardless of the header-line face.
(while (string-match "[ \t\n]+" header pos)
(setq pos (match-end 0))
(put-text-property (match-beginning 0) pos 'display
;; Assume fixed-size chars in the buffer.
@ -726,6 +726,7 @@ For more information, see the function `buffer-menu'."
(erase-buffer)
(setq standard-output (current-buffer))
(unless Buffer-menu-use-header-line
;; Use U+2014 (EM DASH) to underline if possible, else U+002D (HYPHEN-MINUS)
(let ((underline (if (char-displayable-p ?—) ?— ?-)))
(insert header
(apply 'string

View File

@ -705,7 +705,7 @@ would be \"pm\"."
"Export diary file to iCalendar format.
All diary entries in the file DIARY-FILENAME are converted to iCalendar
format. The result is appended to the file ICAL-FILENAME."
(interactive "FExport diary data from file:
(interactive "FExport diary data from file:
Finto iCalendar file: ")
(save-current-buffer
(set-buffer (find-file diary-filename))
@ -1449,8 +1449,8 @@ Argument ICAL-FILENAME output iCalendar file.
Argument DIARY-FILENAME input `diary-file'.
Optional argument NON-MARKING determines whether events are created as
non-marking or not."
(interactive "fImport iCalendar data from file:
Finto diary file:
(interactive "fImport iCalendar data from file:
Finto diary file:
p")
;; clean up the diary file
(save-current-buffer

View File

@ -932,6 +932,7 @@ If given a prefix (or a COMMENT argument), also prompt for a comment."
"Set customized value for %s to: "
current-prefix-arg))
(custom-load-symbol variable)
(custom-push-theme 'theme-value variable 'user 'set (custom-quote value))
(funcall (or (get variable 'custom-set) 'set-default) variable value)
(put variable 'customized-value (list (custom-quote value)))
(cond ((string= comment "")
@ -4166,7 +4167,9 @@ This function does not save the buffer."
(mapatoms
(lambda (symbol)
(if (and (get symbol 'saved-value)
(eq 'user (car (car-safe (get symbol 'theme-value)))))
;; ignore theme values
(or (null (get symbol 'theme-value))
(eq 'user (caar (get symbol 'theme-value)))))
(nconc saved-list (list symbol)))))
(setq saved-list (sort (cdr saved-list) 'string<))
(unless (bolp)

View File

@ -690,7 +690,9 @@ Return non-nil iff the `customized-value' property actually changed."
(not (equal value (condition-case nil
(eval (car old))
(error nil)))))
(put symbol 'customized-value (list (custom-quote value)))
(progn (put symbol 'customized-value (list (custom-quote value)))
(custom-push-theme 'theme-value symbol 'user 'set
(custom-quote value)))
(put symbol 'customized-value nil))
;; Changed?
(not (equal customized (get symbol 'customized-value)))))

View File

@ -26,7 +26,6 @@
;;; Code:
(provide 'ediff-diff)
;; compiler pacifier
(defvar ediff-default-variant)
@ -129,13 +128,33 @@ are `-I REGEXP', to ignore changes whose lines match the REGEXP."
(defcustom ediff-diff-options ""
"*Options to pass to `ediff-diff-program'.
If Unix diff is used as `ediff-diff-program', then the most useful options are
If Unix diff is used as `ediff-diff-program', then a useful option is
`-w', to ignore space, and `-i', to ignore case of letters.
At present, the option `-c' is not allowed."
Options `-c' and `-i' are not allowed. Case sensitivity can be toggled
interactively using [ediff-toggle-ignore-case]"
:set 'ediff-reset-diff-options
:type 'string
:group 'ediff-diff)
(ediff-defvar-local ediff-ignore-case nil
"*If t, skip over difference regions that differ only in letter case.
This variable can be set either in .emacs or toggled interactively.
Use `setq-default' if setting it in .emacs")
(defcustom ediff-ignore-case-option "-i"
"*Option that causes the diff program to ignore case of letters."
:type 'string
:group 'ediff-diff)
(defcustom ediff-ignore-case-option3 ""
"*Option that causes the diff3 program to ignore case of letters.
GNU diff3 doesn't have such an option."
:type 'string
:group 'ediff-diff)
;; the actual options used in comparison
(ediff-defvar-local ediff-actual-diff-options "" "")
(defcustom ediff-custom-diff-program ediff-diff-program
"*Program to use for generating custom diff output for saving it in a file.
This output is not used by Ediff internally."
@ -155,6 +174,10 @@ This output is not used by Ediff internally."
:set 'ediff-reset-diff-options
:type 'string
:group 'ediff-diff)
;; the actual options used in comparison
(ediff-defvar-local ediff-actual-diff3-options "" "")
(defcustom ediff-diff3-ok-lines-regexp
"^\\([1-3]:\\|====\\| \\|.*Warning *:\\|.*No newline\\|.*missing newline\\|^\C-m$\\)"
"*Regexp that matches normal output lines from `ediff-diff3-program'.
@ -182,7 +205,7 @@ Use `setq-default' if setting it in .emacs")
This variable can be set either in .emacs or toggled interactively.
Use `setq-default' if setting it in .emacs")
(ediff-defvar-local ediff-auto-refine-limit 1400
(ediff-defvar-local ediff-auto-refine-limit 14000
"*Auto-refine only the regions of this size \(in bytes\) or less.")
;;; General
@ -227,9 +250,9 @@ one optional arguments, diff-number to refine.")
;; ediff-setup-diff-regions-function, which can also have the value
;; ediff-setup-diff-regions3, which takes 4 arguments.
(defun ediff-setup-diff-regions (file-A file-B file-C)
;; looking either for '-c' or a 'c' in a set of clustered non-long options
(if (string-match "^-c\\| -c\\|-[^- ]+c" ediff-diff-options)
(error "Option `-c' is not allowed in `ediff-diff-options'"))
;; looking for '-c', '-i', or a 'c', 'i' among clustered non-long options
(if (string-match "^-[ci]\\| -[ci]\\|-[^- ]+[ci]" ediff-diff-options)
(error "Options `-c' and `-i' are not allowed in `ediff-diff-options'"))
;; create, if it doesn't exist
(or (ediff-buffer-live-p ediff-diff-buffer)
@ -266,7 +289,7 @@ one optional arguments, diff-number to refine.")
(ediff-exec-process ediff-diff-program
diff-buffer
'synchronize
ediff-diff-options file1 file2)
ediff-actual-diff-options file1 file2)
(message "")
(ediff-with-current-buffer diff-buffer
(buffer-size))))))
@ -284,7 +307,9 @@ one optional arguments, diff-number to refine.")
(let (diff3-job diff-program diff-options ok-regexp diff-list)
(setq diff3-job ediff-3way-job
diff-program (if diff3-job ediff-diff3-program ediff-diff-program)
diff-options (if diff3-job ediff-diff3-options ediff-diff-options)
diff-options (if diff3-job
ediff-actual-diff3-options
ediff-actual-diff-options)
ok-regexp (if diff3-job
ediff-diff3-ok-lines-regexp
ediff-diff-ok-lines-regexp))
@ -366,11 +391,14 @@ one optional arguments, diff-number to refine.")
(B-buffer ediff-buffer-B)
(C-buffer ediff-buffer-C)
(a-prev 1) ; this is needed to set the first diff line correctly
(a-prev-pt nil)
(b-prev 1)
(b-prev-pt nil)
(c-prev 1)
(c-prev-pt nil)
diff-list shift-A shift-B
)
;; diff list contains word numbers, unless changed later
(setq diff-list (cons (if word-mode 'words 'points)
diff-list))
@ -382,7 +410,7 @@ one optional arguments, diff-number to refine.")
shift-B
(ediff-overlay-start
(ediff-get-value-according-to-buffer-type 'B bounds))))
;; reset point in buffers A/B/C
(ediff-with-current-buffer A-buffer
(goto-char (if shift-A shift-A (point-min))))
@ -466,11 +494,13 @@ one optional arguments, diff-number to refine.")
;; we must disable and then restore longlines-mode
(if (eq longlines-mode-val 1)
(longlines-mode 0))
(goto-char (or a-prev-pt shift-A (point-min)))
(forward-line (- a-begin a-prev))
(setq a-begin-pt (point))
(forward-line (- a-end a-begin))
(setq a-end-pt (point)
a-prev a-end)
a-prev a-end
a-prev-pt a-end-pt)
(if (eq longlines-mode-val 1)
(longlines-mode longlines-mode-val))
))
@ -479,11 +509,13 @@ one optional arguments, diff-number to refine.")
(if (and (boundp 'longlines-mode) longlines-mode) 1 0)))
(if (eq longlines-mode-val 1)
(longlines-mode 0))
(goto-char (or b-prev-pt shift-B (point-min)))
(forward-line (- b-begin b-prev))
(setq b-begin-pt (point))
(forward-line (- b-end b-begin))
(setq b-end-pt (point)
b-prev b-end)
b-prev b-end
b-prev-pt b-end-pt)
(if (eq longlines-mode-val 1)
(longlines-mode longlines-mode-val))
))
@ -493,11 +525,13 @@ one optional arguments, diff-number to refine.")
(if (and (boundp 'longlines-mode) longlines-mode) 1 0)))
(if (eq longlines-mode-val 1)
(longlines-mode 0))
(goto-char (or c-prev-pt (point-min)))
(forward-line (- c-begin c-prev))
(setq c-begin-pt (point))
(forward-line (- c-end c-begin))
(setq c-end-pt (point)
c-prev c-end)
c-prev c-end
c-prev-pt c-end-pt)
(if (eq longlines-mode-val 1)
(longlines-mode longlines-mode-val))
)))
@ -987,8 +1021,11 @@ delimiter regions"))
(C-buffer ediff-buffer-C)
(anc-buffer ediff-ancestor-buffer)
(a-prev 1) ; needed to set the first diff line correctly
(a-prev-pt nil)
(b-prev 1)
(b-prev-pt nil)
(c-prev 1)
(c-prev-pt nil)
(anc-prev 1)
diff-list shift-A shift-B shift-C
)
@ -1089,11 +1126,13 @@ delimiter regions"))
;; we must disable and then restore longlines-mode
(if (eq longlines-mode-val 1)
(longlines-mode 0))
(goto-char (or a-prev-pt shift-A (point-min)))
(forward-line (- a-begin a-prev))
(setq a-begin-pt (point))
(forward-line (- a-end a-begin))
(setq a-end-pt (point)
a-prev a-end)
a-prev a-end
a-prev-pt a-end-pt)
(if (eq longlines-mode-val 1)
(longlines-mode longlines-mode-val))
))
@ -1102,11 +1141,13 @@ delimiter regions"))
(if (and (boundp 'longlines-mode) longlines-mode) 1 0)))
(if (eq longlines-mode-val 1)
(longlines-mode 0))
(goto-char (or b-prev-pt shift-B (point-min)))
(forward-line (- b-begin b-prev))
(setq b-begin-pt (point))
(forward-line (- b-end b-begin))
(setq b-end-pt (point)
b-prev b-end)
b-prev b-end
b-prev-pt b-end-pt)
(if (eq longlines-mode-val 1)
(longlines-mode longlines-mode-val))
))
@ -1115,11 +1156,13 @@ delimiter regions"))
(if (and (boundp 'longlines-mode) longlines-mode) 1 0)))
(if (eq longlines-mode-val 1)
(longlines-mode 0))
(goto-char (or c-prev-pt shift-C (point-min)))
(forward-line (- c-begin c-prev))
(setq c-begin-pt (point))
(forward-line (- c-end c-begin))
(setq c-end-pt (point)
c-prev c-end)
c-prev c-end
c-prev-pt c-end-pt)
(if (eq longlines-mode-val 1)
(longlines-mode longlines-mode-val))
))
@ -1171,13 +1214,17 @@ delimiter regions"))
;; File-C is either the third file to compare (in case of 3-way comparison)
;; or it is the ancestor file.
(defun ediff-setup-diff-regions3 (file-A file-B file-C)
;; looking for '-i' or a 'i' among clustered non-long options
(if (string-match "^-i\\| -i\\|-[^- ]+i" ediff-diff-options)
(error "Option `-i' is not allowed in `ediff-diff3-options'"))
(or (ediff-buffer-live-p ediff-diff-buffer)
(setq ediff-diff-buffer
(get-buffer-create (ediff-unique-buffer-name "*ediff-diff" "*"))))
(message "Computing differences ...")
(ediff-exec-process ediff-diff3-program ediff-diff-buffer 'synchronize
ediff-diff3-options file-A file-B file-C)
ediff-actual-diff3-options file-A file-B file-C)
(ediff-prepare-error-list ediff-diff3-ok-lines-regexp ediff-diff-buffer)
;;(message "Computing differences ... done")
@ -1471,6 +1518,35 @@ affects only files whose names match the expression."
(setq file-list-list (cdr file-list-list)))
(reverse result)))
;; Ignore case handling - some ideas from drew.adams@@oracle.com
(defun ediff-toggle-ignore-case ()
(interactive)
(ediff-barf-if-not-control-buffer)
(setq ediff-ignore-case (not ediff-ignore-case))
(cond (ediff-ignore-case
(setq ediff-actual-diff-options
(concat ediff-diff-options " " ediff-ignore-case-option)
ediff-actual-diff3-options
(concat ediff-diff3-options " " ediff-ignore-case-option3))
(message "Ignoring regions that differ only in case"))
(t
(setq ediff-actual-diff-options ediff-diff-options
ediff-actual-diff3-options ediff-diff3-options)
(message "Ignoring case differences turned OFF")))
(cond (ediff-merge-job
(message "Ignoring letter case is too dangerous in merge jobs"))
((and ediff-diff3-job (string= ediff-ignore-case-option3 ""))
(message "Ignoring letter case is not supported by this diff3 program"))
((and (not ediff-3way-job) (string= ediff-ignore-case-option ""))
(message "Ignoring letter case is not supported by this diff program"))
(t
(sit-for 1)
(ediff-update-diffs)))
)
(provide 'ediff-diff)
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)

View File

@ -26,7 +26,6 @@
;;; Code:
(provide 'ediff-help)
;; Compiler pacifier start
(defvar ediff-multiframe)
@ -61,8 +60,8 @@ For help on a specific command: Click Button 2 over it; or
p,DEL -previous diff | | -vert/horiz split | xy -copy buf X's region to Y
n,SPC -next diff | h -hilighting | rx -restore buf X's old diff
j -jump to diff | @ -auto-refinement | * -refine current region
gx -goto X's point| | ! -update diff regions
C-l -recenter | ## -ignore whitespace |
gx -goto X's point| ## -ignore whitespace | ! -update diff regions
C-l -recenter | #c -ignore case |
v/V -scroll up/dn | #f/#h -focus/hide regions | wx -save buf X
</> -scroll lt/rt | X -read-only in buf X | wd -save diff output
~ -rotate buffers| m -wide display |
@ -75,8 +74,8 @@ Normally, not a user option. See `ediff-help-message' for details.")
p,DEL -previous diff | | -vert/horiz split |a/b -copy A/B's region to B/A
n,SPC -next diff | h -hilighting | rx -restore buf X's old diff
j -jump to diff | @ -auto-refinement | * -refine current region
gx -goto X's point| | ! -update diff regions
C-l -recenter | ## -ignore whitespace |
gx -goto X's point| ## -ignore whitespace | ! -update diff regions
C-l -recenter | #c -ignore case |
v/V -scroll up/dn | #f/#h -focus/hide regions | wx -save buf X
</> -scroll lt/rt | X -read-only in buf X | wd -save diff output
~ -swap variants | m -wide display |
@ -89,8 +88,8 @@ Normally, not a user option. See `ediff-help-message' for details.")
p,DEL -previous diff | | -vert/horiz split |a/b -copy A/B's region to B/A
n,SPC -next diff | h -hilighting | rx -restore buf X's old diff
j -jump to diff | @ -auto-refinement | * -refine current region
gx -goto X's point| % -narrow/widen buffs | ! -update diff regions
C-l -recenter | ## -ignore whitespace |
gx -goto X's point| ## -ignore whitespace | ! -update diff regions
C-l -recenter | #c -ignore case | % -narrow/widen buffs
v/V -scroll up/dn | #f/#h -focus/hide regions | wx -save buf X
</> -scroll lt/rt | X -read-only in buf X | wd -save diff output
~ -swap variants | m -wide display |
@ -103,8 +102,8 @@ Normally, not a user option. See `ediff-help-message' for details.")
p,DEL -previous diff | | -vert/horiz split | xy -copy buf X's region to Y
n,SPC -next diff | h -hilighting | rx -restore buf X's old diff
j -jump to diff | |
gx -goto X's point| % -narrow/widen buffs | ! -recompute diffs
C-l -recenter | |
gx -goto X's point| % -narrow/widen buffs | ! -recompute diffs
C-l -recenter | #c -ignore case |
v/V -scroll up/dn | #f/#h -focus/hide regions | wx -save buf X
</> -scroll lt/rt | X -read-only in buf X | wd -save diff output
~ -swap variants | m -wide display |
@ -228,6 +227,7 @@ the value of this variable and the variables `ediff-help-message-*' in
((string= cmd "r") (re-search-forward "^`r'"))
((string= cmd "rx") (re-search-forward "^`ra'"))
((string= cmd "##") (re-search-forward "^`##'"))
((string= cmd "#c") (re-search-forward "^`#c'"))
((string= cmd "#f/#h") (re-search-forward "^`#f'"))
((string= cmd "X") (re-search-forward "^`A'"))
((string= cmd "v/V") (re-search-forward "^`v'"))
@ -325,5 +325,8 @@ the value of this variable and the variables `ediff-help-message-*' in
(customize-group "ediff"))
(provide 'ediff-help)
;;; arch-tag: 05659813-7fcf-4274-964f-d2f577431a9d
;;; ediff-help.el ends here

View File

@ -371,5 +371,6 @@
(provide 'ediff-hook)
;;; arch-tag: 512f8656-8a4b-4789-af5d-5c6144498df3
;;; ediff-hook.el ends here

View File

@ -1867,6 +1867,7 @@ Unless optional argument INPLACE is non-nil, return a new string."
(set-buffer ,old-buffer)
(set-syntax-table ,old-table)))))))
(provide 'ediff-init)

View File

@ -26,7 +26,6 @@
;;; Code:
(provide 'ediff-merg)
;; compiler pacifier
(defvar ediff-window-A)
@ -390,6 +389,9 @@ Combining is done according to the specifications in variable
)))
(provide 'ediff-merg)
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)

View File

@ -104,7 +104,6 @@
;;; Code:
(provide 'ediff-mult)
(defgroup ediff-mult nil
"Multi-file and multi-buffer processing in Ediff."
@ -123,7 +122,6 @@
;; end pacifier
(require 'ediff-init)
(require 'ediff-util)
;; meta-buffer
(ediff-defvar-local ediff-meta-buffer nil "")
@ -1473,6 +1471,7 @@ Useful commands:
(ediff-overlay-put overl 'highlight t))
(ediff-overlay-put overl 'ediff-meta-info prop)
(ediff-overlay-put overl 'invisible hidden)
(ediff-overlay-put overl 'follow-link t)
(if (numberp session-number)
(ediff-overlay-put overl 'ediff-meta-session-number session-number))))
@ -2384,6 +2383,8 @@ for operation, or simply indicate which are equal files. If it is nil, then
))
(provide 'ediff-mult)
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)

View File

@ -26,7 +26,6 @@
;;; Code:
(provide 'ediff-ptch)
(defgroup ediff-ptch nil
"Ediff patch support."
@ -844,6 +843,8 @@ you can still examine the changes via M-x ediff-files"
(provide 'ediff-ptch)
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)

View File

@ -26,7 +26,6 @@
;;; Code:
(provide 'ediff-util)
;; Compiler pacifier
(defvar ediff-patch-diagnostics)
@ -49,6 +48,7 @@
(eval-when-compile
(let ((load-path (cons (expand-file-name ".") load-path)))
(provide 'ediff-util) ; to break recursive load cycle
(or (featurep 'ediff-init)
(load "ediff-init.el" nil nil 'nosuffix))
(or (featurep 'ediff-help)
@ -234,6 +234,7 @@ to invocation.")
(define-key ediff-mode-map "#" nil)
(define-key ediff-mode-map "#h" 'ediff-toggle-regexp-match)
(define-key ediff-mode-map "#f" 'ediff-toggle-regexp-match)
(define-key ediff-mode-map "#c" 'ediff-toggle-ignore-case)
(or ediff-word-mode
(define-key ediff-mode-map "##" 'ediff-toggle-skip-similar))
(define-key ediff-mode-map "o" nil)
@ -1133,7 +1134,7 @@ of the current buffer."
;; ))
(defsubst ediff-file-checked-out-p (file)
(defun ediff-file-checked-out-p (file)
(or (not (featurep 'vc-hooks))
(and (vc-backend file)
(if (fboundp 'vc-state)
@ -1143,7 +1144,7 @@ of the current buffer."
(vc-locking-user file))
)))
(defsubst ediff-file-checked-in-p (file)
(defun ediff-file-checked-in-p (file)
(and (featurep 'vc-hooks)
;; CVS files are considered not checked in
(not (memq (vc-backend file) '(nil CVS)))
@ -3079,7 +3080,7 @@ Hit \\[ediff-recenter] to reset the windows afterward."
)))
(defsubst ediff-highlight-diff (n)
(defun ediff-highlight-diff (n)
"Put face on diff N. Invoked for X displays only."
(ediff-highlight-diff-in-one-buffer n 'A)
(ediff-highlight-diff-in-one-buffer n 'B)
@ -3088,7 +3089,7 @@ Hit \\[ediff-recenter] to reset the windows afterward."
)
(defsubst ediff-unhighlight-diff ()
(defun ediff-unhighlight-diff ()
"Remove overlays from buffers A, B, and C."
(ediff-unhighlight-diff-in-one-buffer 'A)
(ediff-unhighlight-diff-in-one-buffer 'B)
@ -3097,7 +3098,7 @@ Hit \\[ediff-recenter] to reset the windows afterward."
)
;; delete highlighting overlays, restore faces to their original form
(defsubst ediff-unhighlight-diffs-totally ()
(defun ediff-unhighlight-diffs-totally ()
(ediff-unhighlight-diffs-totally-in-one-buffer 'A)
(ediff-unhighlight-diffs-totally-in-one-buffer 'B)
(ediff-unhighlight-diffs-totally-in-one-buffer 'C)
@ -3686,7 +3687,7 @@ Ediff Control Panel to restore highlighting."
(>= (point) end))))))
(defsubst ediff-get-region-contents (n buf-type ctrl-buf &optional start end)
(defun ediff-get-region-contents (n buf-type ctrl-buf &optional start end)
(ediff-with-current-buffer
(ediff-with-current-buffer ctrl-buf (ediff-get-buffer buf-type))
(buffer-substring
@ -3945,6 +3946,7 @@ Ediff Control Panel to restore highlighting."
(ediff-device-type (ediff-device-type))
varlist salutation buffer-name)
(setq varlist '(ediff-diff-program ediff-diff-options
ediff-diff3-program ediff-diff3-options
ediff-patch-program ediff-patch-options
ediff-shell
ediff-use-faces
@ -4300,6 +4302,8 @@ Mail anyway? (y or n) ")
(run-hooks 'ediff-load-hook)
(provide 'ediff-util)
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)

View File

@ -311,6 +311,7 @@
(provide 'ediff-vers)
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)

View File

@ -26,7 +26,6 @@
;;; Code:
(provide 'ediff-wind)
;; Compiler pacifier
(defvar icon-title-format)
@ -1314,6 +1313,9 @@ It assumes that it is called from within the control buffer."
ediff-wide-display-p)))))))
(provide 'ediff-wind)
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)

View File

@ -7,8 +7,8 @@
;; Created: February 2, 1994
;; Keywords: comparing, merging, patching, tools, unix
(defconst ediff-version "2.80.1" "The current version of Ediff")
(defconst ediff-date "November 25, 2005" "Date of last update")
(defconst ediff-version "2.81" "The current version of Ediff")
(defconst ediff-date "February 18, 2006" "Date of last update")
;; This file is part of GNU Emacs.
@ -107,7 +107,6 @@
;;; Code:
(provide 'ediff)
;; Compiler pacifier
(defvar cvs-cookie-handle)
@ -121,6 +120,7 @@
(load "pcl-cvs" 'noerror)))
(eval-when-compile
(let ((load-path (cons (expand-file-name ".") load-path)))
(provide 'ediff) ; to break recursive load cycle
(or (featurep 'ediff-init)
(load "ediff-init.el" nil nil 'nosuffix))
(or (featurep 'ediff-mult)
@ -1374,7 +1374,7 @@ patch. If not given, the user is prompted according to the prefix argument."
patch-buf
(read-buffer
"Which buffer to patch? "
(current-buffer))))
(ediff-other-buffer patch-buf))))
;;;###autoload
@ -1533,6 +1533,9 @@ With optional NODE, goes to that node."
(run-hooks 'ediff-load-hook)
(provide 'ediff)
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)

View File

@ -196,6 +196,15 @@
(viper-save-cursor-color 'before-insert-mode))
;; set insert mode cursor color
(viper-change-cursor-color viper-insert-state-cursor-color)))
(if (eq viper-current-state 'emacs-state)
(let ((has-saved-cursor-color-in-emacs-mode
(stringp (viper-get-saved-cursor-color-in-emacs-mode))))
(or has-saved-cursor-color-in-emacs-mode
(string= (viper-get-cursor-color) viper-emacs-state-cursor-color)
;; save current color, if not already saved
(viper-save-cursor-color 'before-emacs-mode))
;; set emacs mode cursor color
(viper-change-cursor-color viper-emacs-state-cursor-color)))
(if (and (memq this-command '(dabbrev-expand hippie-expand))
(integerp viper-pre-command-point)
@ -643,9 +652,12 @@
(indent-to-left-margin))
(viper-add-newline-at-eob-if-necessary)
(viper-adjust-undo)
(viper-change-state 'vi-state)
(viper-restore-cursor-color 'after-insert-mode)
(if (eq viper-current-state 'emacs-state)
(viper-restore-cursor-color 'after-emacs-mode)
(viper-restore-cursor-color 'after-insert-mode))
(viper-change-state 'vi-state)
;; Protect against user errors in hooks
(condition-case conds
@ -709,9 +721,17 @@
(or (viper-overlay-p viper-replace-overlay)
(viper-set-replace-overlay (point-min) (point-min)))
(viper-hide-replace-overlay)
(let ((has-saved-cursor-color-in-emacs-mode
(stringp (viper-get-saved-cursor-color-in-emacs-mode))))
(or has-saved-cursor-color-in-emacs-mode
(string= (viper-get-cursor-color) viper-emacs-state-cursor-color)
(viper-save-cursor-color 'before-emacs-mode))
(viper-change-cursor-color viper-emacs-state-cursor-color))
(viper-change-state 'emacs-state)
;; Protect agains user errors in hooks
;; Protect against user errors in hooks
(condition-case conds
(run-hooks 'viper-emacs-state-hook)
(error
@ -820,12 +840,12 @@ Vi's prefix argument will be used. Otherwise, the prefix argument passed to
;; The next cmd and viper-set-unread-command-events
;; are intended to prevent the input method
;; from swallowing ^M, ^Q and other special characters
(setq ch (read-char))
(setq ch (read-char-exclusive))
;; replace ^M with the newline
(if (eq ch ?\C-m) (setq ch ?\n))
;; Make sure ^V and ^Q work as quotation chars
(if (memq ch '(?\C-v ?\C-q))
(setq ch (read-char)))
(setq ch (read-char-exclusive)))
(viper-set-unread-command-events ch)
(quail-input-method nil)
@ -842,12 +862,12 @@ Vi's prefix argument will be used. Otherwise, the prefix argument passed to
;; same as above but for XEmacs, which doesn't have
;; quail-input-method
(let (unread-command-events)
(setq ch (read-char))
(setq ch (read-char-exclusive))
;; replace ^M with the newline
(if (eq ch ?\C-m) (setq ch ?\n))
;; Make sure ^V and ^Q work as quotation chars
(if (memq ch '(?\C-v ?\C-q))
(setq ch (read-char)))
(setq ch (read-char-exclusive)))
(viper-set-unread-command-events ch)
(quail-start-translation nil)
@ -867,12 +887,12 @@ Vi's prefix argument will be used. Otherwise, the prefix argument passed to
(setq ch (aref (read-key-sequence nil) 0)))
(insert ch))
(t
(setq ch (read-char))
(setq ch (read-char-exclusive))
;; replace ^M with the newline
(if (eq ch ?\C-m) (setq ch ?\n))
;; Make sure ^V and ^Q work as quotation chars
(if (memq ch '(?\C-v ?\C-q))
(setq ch (read-char)))
(setq ch (read-char-exclusive)))
(insert ch))
)
(setq last-command-event
@ -2131,7 +2151,7 @@ To turn this feature off, set this variable to nil."
Remove this function from `viper-minibuffer-exit-hook', if this causes
problems."
(if (viper-is-in-minibuffer)
(progn
(let ((inhibit-field-text-motion t))
(goto-char (viper-minibuffer-real-start))
(end-of-line)
(delete-region (point) (point-max)))))

View File

@ -434,6 +434,13 @@ delete the text being replaced, as in standard Vi."
(if (fboundp 'make-variable-frame-local)
(make-variable-frame-local 'viper-insert-state-cursor-color))
(defcustom viper-emacs-state-cursor-color "Magenta"
"Cursor color when Viper is in emacs state."
:type 'string
:group 'viper)
(if (fboundp 'make-variable-frame-local)
(make-variable-frame-local 'viper-emacs-state-cursor-color))
;; internal var, used to remember the default cursor color of emacs frames
(defvar viper-vi-state-cursor-color nil)
(if (fboundp 'make-variable-frame-local)

View File

@ -175,9 +175,12 @@
(selected-frame)
(list
(cons
(if (eq before-which-mode 'before-replace-mode)
'viper-saved-cursor-color-in-replace-mode
'viper-saved-cursor-color-in-insert-mode)
(cond ((eq before-which-mode 'before-replace-mode)
'viper-saved-cursor-color-in-replace-mode)
((eq before-which-mode 'before-emacs-mode)
'viper-saved-cursor-color-in-emacs-mode)
(t
'viper-saved-cursor-color-in-insert-mode))
color)))
))))
@ -188,7 +191,9 @@
(if viper-emacs-p 'frame-parameter 'frame-property)
(selected-frame)
'viper-saved-cursor-color-in-replace-mode)
viper-vi-state-cursor-color))
(if (eq viper-current-state 'emacs-mode)
viper-emacs-state-cursor-color
viper-vi-state-cursor-color)))
(defsubst viper-get-saved-cursor-color-in-insert-mode ()
(or
@ -196,15 +201,27 @@
(if viper-emacs-p 'frame-parameter 'frame-property)
(selected-frame)
'viper-saved-cursor-color-in-insert-mode)
(if (eq viper-current-state 'emacs-mode)
viper-emacs-state-cursor-color
viper-vi-state-cursor-color)))
(defsubst viper-get-saved-cursor-color-in-emacs-mode ()
(or
(funcall
(if viper-emacs-p 'frame-parameter 'frame-property)
(selected-frame)
'viper-saved-cursor-color-in-emacs-mode)
viper-vi-state-cursor-color))
;; restore cursor color from replace overlay
(defun viper-restore-cursor-color(after-which-mode)
(if (viper-overlay-p viper-replace-overlay)
(viper-change-cursor-color
(if (eq after-which-mode 'after-replace-mode)
(viper-get-saved-cursor-color-in-replace-mode)
(viper-get-saved-cursor-color-in-insert-mode))
(cond ((eq after-which-mode 'after-replace-mode)
(viper-get-saved-cursor-color-in-replace-mode))
((eq after-which-mode 'after-emacs-mode)
(viper-get-saved-cursor-color-in-emacs-mode))
(t (viper-get-saved-cursor-color-in-insert-mode)))
)))

View File

@ -9,7 +9,7 @@
;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
;; Keywords: emulations
(defconst viper-version "3.11.5 of November 25, 2005"
(defconst viper-version "3.12 of February 18, 2006"
"The current version of Viper")
;; This file is part of GNU Emacs.

View File

@ -1,5 +1,21 @@
2006-02-19 Michael Olson <mwolson@gnu.org>
* erc-capab.el (erc-capab-send-identify-messages): Make sure some
parameters are strings before using them. Thanks to Alejandro
Benitez for the report.
* erc.el (erc-version-string): Release ERC 5.1.2.
2006-02-19 Diane Murray <disumu@x3y2z1.net>
* erc-button.el (erc-button-keymap): Bind `erc-button-previous' to
<C-tab>.
(erc-button-previous): New function.
2006-02-15 Michael Olson <mwolson@gnu.org>
* NEWS: Add category for ERC 5.2.
* 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.
@ -150,7 +166,7 @@
* erc-stamp.el: Use new arch tagline, since the other one wasn't
being treated properly.
* erc.el (erc-version-string): Release ERC 5.1.1
* erc.el (erc-version-string): Release ERC 5.1.1.
2006-02-03 Zhang Wei <id.brep@gmail.com> (tiny change)

View File

@ -216,6 +216,7 @@ PAR is a number of a regexp grouping whose text will be passed to
(define-key map (kbd "<button2>") 'erc-button-click-button)
(define-key map (kbd "<mouse-2>") 'erc-button-click-button))
(define-key map (kbd "TAB") 'erc-button-next)
(define-key map (kbd "<C-tab>") 'erc-button-previous)
(set-keymap-parent map erc-mode-map)
map)
"Local keymap for ERC buttons.")
@ -427,6 +428,22 @@ call it with the value of the `erc-data' text property."
(error "No next button"))
t)))
(defun erc-button-previous ()
"Go to the previous button in this buffer."
(interactive)
(let ((here (point)))
(when (< here (erc-beg-of-input-line))
(while (and (get-text-property here 'erc-callback)
(not (= here (point-min))))
(setq here (1- here)))
(while (and (not (get-text-property here 'erc-callback))
(not (= here (point-min))))
(setq here (1- here)))
(if (> here (point-min))
(goto-char here)
(error "No previous button"))
t)))
(defun erc-browse-emacswiki (thing)
"Browse to thing in the emacs-wiki."
(browse-url (concat erc-emacswiki-url thing)))

View File

@ -66,7 +66,7 @@
;;; Code:
(defconst erc-version-string "Version 5.1.1"
(defconst erc-version-string "Version 5.1.2"
"ERC version. This is used by function `erc-version'.")
(eval-when-compile (require 'cl))

View File

@ -1255,7 +1255,8 @@ which may actually result in an url rather than a filename."
(abbreviate-file-name (expand-file-name guess))
))
(setq dir (file-name-directory guess))))
(let ((minibuffer-completing-file-name t))
(let ((minibuffer-completing-file-name t)
(completion-ignore-case read-file-name-completion-ignore-case))
(setq guess
(completing-read
prompt
@ -1321,6 +1322,12 @@ which may actually result in an url rather than a filename."
(defvar ffap-highlight t
"If non-nil, ffap highlights the current buffer substring.")
(defface ffap
'((t :inherit highlight))
"Face used to highlight the current buffer substring."
:group 'ffap
:version "22.1")
(defvar ffap-highlight-overlay nil
"Overlay used by `ffap-highlight'.")
@ -1344,8 +1351,7 @@ Uses the face `ffap' if it is defined, or else `highlight'."
(t
(setq ffap-highlight-overlay
(apply 'make-overlay ffap-string-at-point-region))
(overlay-put ffap-highlight-overlay 'face
(if (facep 'ffap) 'ffap 'highlight)))))
(overlay-put ffap-highlight-overlay 'face 'ffap))))
;;; Main Entrance (`find-file-at-point' == `ffap'):

View File

@ -2218,6 +2218,130 @@ Otherwise, return nil; point may be changed."
(setq end (point))
(goto-char beg)
end))))
;;; Handling file local variables
(defvar ignored-local-variables
'(ignored-local-variables safe-local-variable-values)
"Variables to be ignored in a file's local variable spec.")
(defvar hack-local-variables-hook nil
"Normal hook run after processing a file's local variables specs.
Major modes can use this to examine user-specified local variables
in order to initialize other data structure based on them.")
(defcustom safe-local-variable-values nil
"List variable-value pairs that are considered safe.
Each element is a cons cell (VAR . VAL), where VAR is a variable
symbol and VAL is a value that is considered safe."
:group 'find-file
:type 'alist)
(defcustom safe-local-eval-forms nil
"*Expressions that are considered safe in an `eval:' local variable.
Add expressions to this list if you want Emacs to evaluate them, when
they appear in an `eval' local variable specification, without first
asking you for confirmation."
:group 'find-file
:version "22.1"
:type '(repeat sexp))
;; Risky local variables:
(mapc (lambda (var) (put var 'risky-local-variable t))
'(after-load-alist
auto-mode-alist
buffer-auto-save-file-name
buffer-file-name
buffer-file-truename
buffer-undo-list
dabbrev-case-fold-search
dabbrev-case-replace
debugger
default-text-properties
display-time-string
enable-local-eval
eval
exec-directory
exec-path
file-name-handler-alist
font-lock-defaults
format-alist
frame-title-format
global-mode-string
header-line-format
icon-title-format
ignored-local-variables
imenu--index-alist
imenu-generic-expression
inhibit-quit
input-method-alist
load-path
max-lisp-eval-depth
max-specpdl-size
minor-mode-alist
minor-mode-map-alist
minor-mode-overriding-map-alist
mode-line-buffer-identification
mode-line-format
mode-line-client
mode-line-modes
mode-line-modified
mode-line-mule-info
mode-line-position
mode-line-process
mode-name
outline-level
overriding-local-map
overriding-terminal-local-map
parse-time-rules
process-environment
rmail-output-file-alist
save-some-buffers-action-alist
special-display-buffer-names
standard-input
standard-output
unread-command-events
vc-mode))
;; Safe local variables:
;;
;; For variables defined by minor modes, put the safety declarations
;; here, not in the file defining the minor mode (when Emacs visits a
;; file specifying that local variable, the minor mode file may not be
;; loaded yet). For variables defined by major modes, the safety
;; declarations can go into the major mode's file, since that will be
;; loaded before file variables are processed.
(let ((string-or-null (lambda (a) (or (stringp a) (null a)))))
(eval
`(mapc (lambda (pair)
(put (car pair) 'safe-local-variable (cdr pair)))
'((byte-compile-dynamic . t)
(c-basic-offset . integerp)
(c-file-style . stringp)
(c-indent-level . integerp)
(comment-column . integerp)
(compile-command . ,string-or-null)
(fill-column . integerp)
(fill-prefix . ,string-or-null)
(indent-tabs-mode . t)
(ispell-check-comments . (lambda (a)
(memq a '(nil t exclusive))))
(ispell-local-dictionary . ,string-or-null)
(kept-new-versions . integerp)
(no-byte-compile . t)
(no-update-autoloads . t)
(outline-regexp . ,string-or-null)
(page-delimiter . ,string-or-null)
(paragraph-start . ,string-or-null)
(paragraph-separate . ,string-or-null)
(sentence-end . ,string-or-null)
(sentence-end-double-space . t)
(tab-width . integerp)
(truncate-lines . t)
(version-control . t)))))
(put 'c-set-style 'safe-local-eval-function t)
(defun hack-local-variables-confirm (vars unsafe-vars risky-vars)
(if noninteractive
@ -2346,18 +2470,6 @@ and VAL is the specified value."
mode-specified
result))))
(defvar hack-local-variables-hook nil
"Normal hook run after processing a file's local variables specs.
Major modes can use this to examine user-specified local variables
in order to initialize other data structure based on them.")
(defcustom safe-local-variable-values nil
"List variable-value pairs that are considered safe.
Each element is a cons cell (VAR . VAL), where VAR is a variable
symbol and VAL is a value that is considered safe."
:group 'find-file
:type 'alist)
(defun hack-local-variables (&optional mode-only)
"Parse and put into effect this buffer's local variables spec.
If MODE-ONLY is non-nil, all we do is check whether the major mode
@ -2479,93 +2591,6 @@ is specified, returning t if it is specified."
(hack-one-local-variable (car elt) (cdr elt)))))
(run-hooks 'hack-local-variables-hook))))))
(defvar ignored-local-variables
'(ignored-local-variables safe-local-variable-values)
"Variables to be ignored in a file's local variable spec.")
;; Get confirmation before setting these variables as locals in a file.
(put 'debugger 'risky-local-variable t)
(put 'enable-local-eval 'risky-local-variable t)
(put 'ignored-local-variables 'risky-local-variable t)
(put 'ignored-local-variables 'safe-local-variable-values t)
(put 'eval 'risky-local-variable t)
(put 'file-name-handler-alist 'risky-local-variable t)
(put 'inhibit-quit 'risky-local-variable t)
(put 'minor-mode-alist 'risky-local-variable t)
(put 'minor-mode-map-alist 'risky-local-variable t)
(put 'minor-mode-overriding-map-alist 'risky-local-variable t)
(put 'overriding-local-map 'risky-local-variable t)
(put 'overriding-terminal-local-map 'risky-local-variable t)
(put 'auto-mode-alist 'risky-local-variable t)
(put 'after-load-alist 'risky-local-variable t)
(put 'buffer-file-name 'risky-local-variable t)
(put 'buffer-undo-list 'risky-local-variable t)
(put 'buffer-auto-save-file-name 'risky-local-variable t)
(put 'buffer-file-truename 'risky-local-variable t)
(put 'default-text-properties 'risky-local-variable t)
(put 'exec-path 'risky-local-variable t)
(put 'load-path 'risky-local-variable t)
(put 'exec-directory 'risky-local-variable t)
(put 'process-environment 'risky-local-variable t)
(put 'dabbrev-case-fold-search 'risky-local-variable t)
(put 'dabbrev-case-replace 'risky-local-variable t)
;; Don't wait for outline.el to be loaded, for the sake of outline-minor-mode.
(put 'outline-level 'risky-local-variable t)
(put 'rmail-output-file-alist 'risky-local-variable t)
(put 'font-lock-defaults 'risky-local-variable t)
(put 'special-display-buffer-names 'risky-local-variable t)
(put 'frame-title-format 'risky-local-variable t)
(put 'global-mode-string 'risky-local-variable t)
(put 'header-line-format 'risky-local-variable t)
(put 'icon-title-format 'risky-local-variable t)
(put 'input-method-alist 'risky-local-variable t)
(put 'format-alist 'risky-local-variable t)
(put 'vc-mode 'risky-local-variable t)
(put 'imenu-generic-expression 'risky-local-variable t)
(put 'imenu--index-alist 'risky-local-variable t)
(put 'standard-input 'risky-local-variable t)
(put 'standard-output 'risky-local-variable t)
(put 'unread-command-events 'risky-local-variable t)
(put 'max-lisp-eval-depth 'risky-local-variable t)
(put 'max-specpdl-size 'risky-local-variable t)
(put 'mode-line-format 'risky-local-variable t)
(put 'mode-line-modified 'risky-local-variable t)
(put 'mode-line-mule-info 'risky-local-variable t)
(put 'mode-line-client 'risky-local-variable t)
(put 'mode-line-buffer-identification 'risky-local-variable t)
(put 'mode-line-modes 'risky-local-variable t)
(put 'mode-line-position 'risky-local-variable t)
(put 'mode-line-process 'risky-local-variable t)
(put 'mode-name 'risky-local-variable t)
(put 'display-time-string 'risky-local-variable t)
(put 'parse-time-rules 'risky-local-variable t)
;; Commonly-encountered local variables that are safe:
(let ((string-or-null (lambda (a) (or (stringp a) (null a)))))
(eval
`(mapc (lambda (pair)
(put (car pair) 'safe-local-variable (cdr pair)))
'((byte-compile-dynamic . t)
(c-basic-offset . integerp)
(c-file-style . stringp)
(c-indent-level . integerp)
(comment-column . integerp)
(compile-command . ,string-or-null)
(fill-column . integerp)
(fill-prefix . ,string-or-null)
(indent-tabs-mode . t)
(kept-new-versions . integerp)
(no-byte-compile . t)
(no-update-autoloads . t)
(outline-regexp . ,string-or-null)
(page-delimiter . ,string-or-null)
(paragraph-start . ,string-or-null)
(paragraph-separate . ,string-or-null)
(sentence-end . ,string-or-null)
(sentence-end-double-space . t)
(tab-width . integerp)
(version-control . t)))))
(defun safe-local-variable-p (sym val)
"Non-nil if SYM is safe as a file-local variable with value VAL.
It is safe if any of these conditions are met:
@ -2603,17 +2628,6 @@ It is dangerous if either of these conditions are met:
-[0-9]+$\\|font-lock-syntactic-keywords$\\|-frame-alist$\\|-mode-alist$\\|\
-map$\\|-map-alist$" (symbol-name sym))))
(defcustom safe-local-eval-forms nil
"*Expressions that are considered \"safe\" in an `eval:' local variable.
Add expressions to this list if you want Emacs to evaluate them, when
they appear in an `eval' local variable specification, without first
asking you for confirmation."
:group 'find-file
:version "22.1"
:type '(repeat sexp))
(put 'c-set-style 'safe-local-eval-function t)
(defun hack-one-local-variable-quotep (exp)
(and (consp exp) (eq (car exp) 'quote) (consp (cdr exp))))
@ -3631,7 +3645,6 @@ This requires the external program `diff' to be in your `exec-path'."
(?d diff-buffer-with-file
"view changes in file"))
"ACTION-ALIST argument used in call to `map-y-or-n-p'.")
(put 'save-some-buffers-action-alist 'risky-local-variable t)
(defvar buffer-save-without-query nil
"Non-nil means `save-some-buffers' should save this buffer without asking.")

View File

@ -7,6 +7,44 @@
* 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.

View File

@ -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."

View File

@ -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

View File

@ -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)

View File

@ -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))))
@ -971,6 +961,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))

View File

@ -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)

View File

@ -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.

View File

@ -252,6 +252,7 @@ face (according to `face-differs-from-default-p')."
"\\)"
"\\(?:es\\|s\\|th\\)?" ; for ARGth, ARGs
"\\(?:-[a-z0-9-]+\\)?" ; for ARG-xxx, ARG-n
"\\(?:-[{([<`\"].*?\\)?"; for ARG-{x}, (x), <x>, [x], `x'
"\\>") ; end of word
(help-default-arg-highlight arg)
doc t t 1)))))

View File

@ -146,7 +146,7 @@ is minibuffer."
(if (commandp func-name)
(save-excursion
(let* ((sym (intern func-name))
(buf (other-buffer))
(buf (other-buffer nil t))
(map (save-excursion (set-buffer buf) (current-local-map)))
(keys (where-is-internal sym map)))
(if keys

View File

@ -622,12 +622,6 @@ just return nil (no error)."
(cond
((string= (downcase filename) "dir")
(setq found t))
((string= filename "apropos")
(setq found 'apropos))
((string= filename "history")
(setq found 'history))
((string= filename "toc")
(setq found 'toc))
(t
(let ((dirs (if (string-match "^\\./" filename)
;; If specified name starts with `./'
@ -673,7 +667,8 @@ just return nil (no error)."
(if noerror
(setq filename nil)
(error "Info file %s does not exist" filename)))
filename)))
filename)
(and (member filename '(apropos history toc)) filename)))
(defun Info-find-node (filename nodename &optional no-going-back)
"Go to an Info node specified as separate FILENAME and NODENAME.
@ -891,9 +886,6 @@ a case-insensitive match is tried."
(setq Info-current-file
(cond
((eq filename t) "dir")
((eq filename 'apropos) "apropos")
((eq filename 'history) "history")
((eq filename 'toc) "toc")
(t filename)))
))
;; Use string-equal, not equal, to ignore text props.
@ -1409,7 +1401,7 @@ any double quotes or backslashes must be escaped (\\\",\\\\)."
(if (stringp Info-current-file)
(replace-regexp-in-string
"%" "%%" (file-name-nondirectory Info-current-file))
"")
(format "*%S*" Info-current-file))
") "
(if Info-current-node
(propertize (replace-regexp-in-string
@ -1648,7 +1640,8 @@ If DIRECTION is `backward', search in the reverse direction."
;; Skip Tag Table node
(save-excursion
(and (search-backward "\^_" nil t)
(looking-at "\^_\nTag Table"))))))
(looking-at
"\^_\n\\(Tag Table\\|Local Variables\\)"))))))
(let ((search-spaces-regexp Info-search-whitespace-regexp))
(if (if backward
(re-search-backward regexp bound t)
@ -1736,7 +1729,8 @@ If DIRECTION is `backward', search in the reverse direction."
;; Skip Tag Table node
(save-excursion
(and (search-backward "\^_" nil t)
(looking-at "\^_\nTag Table"))))))
(looking-at
"\^_\n\\(Tag Table\\|Local Variables\\)"))))))
(let ((search-spaces-regexp Info-search-whitespace-regexp))
(if (if backward
(re-search-backward regexp nil t)
@ -1831,11 +1825,11 @@ If DIRECTION is `backward', search in the reverse direction."
(defun Info-isearch-push-state ()
`(lambda (cmd)
(Info-isearch-pop-state cmd ,Info-current-file ,Info-current-node)))
(Info-isearch-pop-state cmd ',Info-current-file ',Info-current-node)))
(defun Info-isearch-pop-state (cmd file node)
(or (and (string= Info-current-file file)
(string= Info-current-node node))
(or (and (equal Info-current-file file)
(equal Info-current-node node))
(progn (Info-find-node file node) (sit-for 0))))
(defun Info-isearch-start ()
@ -1853,7 +1847,7 @@ if ERRORNAME is nil, just return nil."
(forward-line 1)
(cond ((re-search-backward
(concat name ":" (Info-following-node-name-re)) bound t)
(match-string 1))
(match-string-no-properties 1))
((not (eq errorname t))
(error "Node has no %s"
(capitalize (or errorname name)))))))))
@ -1875,7 +1869,7 @@ End of submatch 0, 1, and 3 are the same, so you can safely concat."
;;; For compatibility; other files have used this name.
(defun Info-following-node-name ()
(and (looking-at (Info-following-node-name-re))
(match-string 1)))
(match-string-no-properties 1)))
(defun Info-next ()
"Go to the next node of this node."
@ -1909,7 +1903,8 @@ If SAME-FILE is non-nil, do not move to a different Info file."
(Info-goto-node node)
(setq p (point))
(goto-char (point-min))
(if (and (search-forward "\n* Menu:" nil t)
(if (and (stringp old-file)
(search-forward "\n* Menu:" nil t)
(re-search-forward
(if (string-equal old-node "Top")
(concat "\n\\*[^:]+: +(" (file-name-nondirectory old-file) ")")
@ -1977,51 +1972,53 @@ If SAME-FILE is non-nil, do not move to a different Info file."
(while hl
(let ((file (nth 0 (car hl)))
(node (nth 1 (car hl))))
(if (and (string-equal file curr-file)
(string-equal node curr-node))
(if (and (equal file curr-file)
(equal node curr-node))
(setq p (point)))
(insert "* " node ": ("
(propertize (or (file-name-directory file) "") 'invisible t)
(file-name-nondirectory file)
")" node ".\n"))
(if (stringp file)
(insert "* " node ": ("
(propertize (or (file-name-directory file) "") 'invisible t)
(file-name-nondirectory file)
")" node ".\n")))
(setq hl (cdr hl))))))
(Info-find-node "history" "Top")
(Info-find-node 'history "Top")
(goto-char (or p (point-min)))))
(defun Info-toc ()
"Go to a node with table of contents of the current Info file.
Table of contents is created from the tree structure of menus."
(interactive)
(let ((curr-file (substring-no-properties Info-current-file))
(curr-node (substring-no-properties Info-current-node))
p)
(with-current-buffer (get-buffer-create " *info-toc*")
(let ((inhibit-read-only t)
(node-list (Info-build-toc curr-file)))
(erase-buffer)
(goto-char (point-min))
(insert "\n\^_\nFile: toc, Node: Top, Up: (dir)\n\n")
(insert "Table of Contents\n*****************\n\n")
(insert "*Note Top: (" curr-file ")Top.\n")
(Info-insert-toc
(nth 2 (assoc "Top" node-list)) ; get Top nodes
node-list 0 curr-file))
(if (not (bobp))
(let ((Info-hide-note-references 'hide)
(Info-fontify-visited-nodes nil))
(Info-mode)
(setq Info-current-file "toc" Info-current-node "Top")
(goto-char (point-min))
(narrow-to-region (or (re-search-forward "\n[\^_\f]\n" nil t)
(point-min))
(point-max))
(Info-fontify-node)
(widen)))
(goto-char (point-min))
(if (setq p (search-forward (concat "*Note " curr-node ":") nil t))
(setq p (- p (length curr-node) 2))))
(Info-find-node "toc" "Top")
(goto-char (or p (point-min)))))
(if (stringp Info-current-file)
(let ((curr-file (substring-no-properties Info-current-file))
(curr-node (substring-no-properties Info-current-node))
p)
(with-current-buffer (get-buffer-create " *info-toc*")
(let ((inhibit-read-only t)
(node-list (Info-build-toc curr-file)))
(erase-buffer)
(goto-char (point-min))
(insert "\n\^_\nFile: toc, Node: Top, Up: (dir)\n\n")
(insert "Table of Contents\n*****************\n\n")
(insert "*Note Top: (" curr-file ")Top.\n")
(Info-insert-toc
(nth 2 (assoc "Top" node-list)) ; get Top nodes
node-list 0 curr-file))
(if (not (bobp))
(let ((Info-hide-note-references 'hide)
(Info-fontify-visited-nodes nil))
(Info-mode)
(setq Info-current-file 'toc Info-current-node "Top")
(goto-char (point-min))
(narrow-to-region (or (re-search-forward "\n[\^_\f]\n" nil t)
(point-min))
(point-max))
(Info-fontify-node)
(widen)))
(goto-char (point-min))
(if (setq p (search-forward (concat "*Note " curr-node ":") nil t))
(setq p (- p (length curr-node) 2))))
(Info-find-node 'toc "Top")
(goto-char (or p (point-min))))))
(defun Info-insert-toc (nodes node-list level curr-file)
"Insert table of contents with references to nodes."
@ -2221,16 +2218,18 @@ Because of ambiguities, this should be concatenated with something like
(setq Info-point-loc
(if (match-beginning 5)
(string-to-number (match-string 5))
(buffer-substring (match-beginning 0) (1- (match-beginning 1)))))
(buffer-substring-no-properties
(match-beginning 0) (1- (match-beginning 1)))))
;;; Uncomment next line to use names of cross-references in non-index nodes:
;;; (setq Info-point-loc
;;; (buffer-substring (match-beginning 0) (1- (match-beginning 1))))
)
(replace-regexp-in-string
"[ \n]+" " "
(or (match-string 2)
(or (match-string-no-properties 2)
;; If the node name is the menu entry name (using `entry::').
(buffer-substring (match-beginning 0) (1- (match-beginning 1)))))))
(buffer-substring-no-properties
(match-beginning 0) (1- (match-beginning 1)))))))
;; No one calls this.
;;(defun Info-menu-item-sequence (list)
@ -2684,7 +2683,7 @@ following nodes whose names also contain the word \"Index\"."
(or file (setq file Info-current-file))
(or (assoc file Info-index-nodes)
;; Skip virtual Info files
(and (member file '("dir" "history" "toc" "apropos"))
(and (member file '("dir" apropos history toc))
(setq Info-index-nodes (cons (cons file nil) Info-index-nodes)))
(not (stringp file))
(if Info-file-supports-index-cookies
@ -2926,7 +2925,7 @@ Build a menu of the possible matches."
(message "%s" (if (eq (car-safe err) 'error)
(nth 1 err) err))
(sit-for 1 t)))))
(Info-goto-node (concat "(" current-file ")" current-node))
(Info-find-node current-file current-node)
(setq Info-history ohist
Info-history-list ohist-list)
(message "Searching indices...done")
@ -2945,7 +2944,7 @@ Build a menu of the possible matches."
(if (nth 3 entry)
(concat " (line " (nth 3 entry) ")")
"")))))
(Info-find-node "apropos" "Index")
(Info-find-node 'apropos "Index")
(setq Info-complete-cache nil)))))
(defun Info-undefined ()
@ -3287,10 +3286,14 @@ With a zero prefix arg, put the name inside a function call to `info'."
(interactive "P")
(unless Info-current-node
(error "No current Info node"))
(let ((node (concat "(" (file-name-nondirectory Info-current-file) ")"
Info-current-node)))
(let ((node (if (stringp Info-current-file)
(concat "(" (file-name-nondirectory Info-current-file) ")"
Info-current-node))))
(if (zerop (prefix-numeric-value arg))
(setq node (concat "(info \"" node "\")")))
(unless (stringp Info-current-file)
(setq node (format "(Info-find-node '%S '%S)"
Info-current-file Info-current-node)))
(kill-new node)
(message "%s" node)))
@ -3817,29 +3820,30 @@ the variable `Info-file-list-for-emacs'."
"^[ \t]+" ""
(replace-regexp-in-string
"[ \t\n]+" " "
(or (match-string 5)
(or (match-string-no-properties 5)
(and (not (equal (match-string 4) ""))
(match-string 4))
(match-string 2)))))
(match-string-no-properties 4))
(match-string-no-properties 2)))))
(external-link-p
(string-match "(\\([^)]+\\))\\([^)]*\\)" node))
(file (if external-link-p
(file-name-nondirectory
(match-string 1 node))
(match-string-no-properties 1 node))
Info-current-file))
(hl Info-history-list)
res)
(if external-link-p
(setq node (if (equal (match-string 2 node) "")
"Top"
(match-string 2 node))))
(match-string-no-properties 2 node))))
(while hl
(if (and (string-equal node (nth 1 (car hl)))
(string-equal
file (if external-link-p
(file-name-nondirectory
(caar hl))
(caar hl))))
(equal file
(if (and external-link-p
(stringp (caar hl)))
(file-name-nondirectory
(caar hl))
(caar hl))))
(setq res (car hl) hl nil)
(setq hl (cdr hl))))
res))) 'info-xref-visited 'info-xref))
@ -3932,26 +3936,28 @@ the variable `Info-file-list-for-emacs'."
(if (and Info-fontify-visited-nodes
(save-match-data
(let* ((node (if (equal (match-string 3) "")
(match-string 1)
(match-string 3)))
(match-string-no-properties 1)
(match-string-no-properties 3)))
(external-link-p
(string-match "(\\([^)]+\\))\\([^)]*\\)" node))
(file (if external-link-p
(file-name-nondirectory
(match-string 1 node))
(match-string-no-properties 1 node))
Info-current-file))
(hl Info-history-list)
res)
(if external-link-p
(setq node (if (equal (match-string 2 node) "")
"Top"
(match-string 2 node))))
(match-string-no-properties 2 node))))
(while hl
(if (and (string-equal node (nth 1 (car hl)))
(string-equal
file (if external-link-p
(file-name-nondirectory (caar hl))
(caar hl))))
(equal file
(if (and external-link-p
(stringp (caar hl)))
(file-name-nondirectory
(caar hl))
(caar hl))))
(setq res (car hl) hl nil)
(setq hl (cdr hl))))
res))) 'info-xref-visited 'info-xref)))
@ -4210,8 +4216,8 @@ BUFFER is the buffer speedbar is requesting buttons for."
(defun Info-desktop-buffer-misc-data (desktop-dirname)
"Auxiliary information to be saved in desktop file."
(if (not (member Info-current-file '("apropos" "history" "toc")))
(list Info-current-file Info-current-node)))
(unless (member Info-current-file '(apropos history toc nil))
(list Info-current-file Info-current-node)))
(defun Info-restore-desktop-buffer (desktop-buffer-file-name
desktop-buffer-name

View File

@ -1,3 +1,68 @@
2006-02-19 Bill Wohler <wohler@newt.com>
* mh-alias.el (mh-address-mail-regexp)
(mh-goto-address-find-address-at-point): Delete copies from
goto-addr.el.
(mh-alias-suggest-alias): Use goto-address-mail-regexp instead of
mh-address-mail-regexp.
(mh-alias-add-address-under-point): Use
goto-address-find-address-at-point instead of
mh-goto-address-find-address-at-point.
* mh-e.el (mh-show-use-goto-addr-flag): Delete.
* mh-show.el (mh-show-mode): Mention goto-address-highlight-p in
docstring.
(mh-show-addr): Call goto-address unconditionally. User should use
goto-address-highlight-p instead of mh-show-use-goto-addr-flag.
2006-02-18 Bill Wohler <wohler@newt.com>
* mh-e.el (Version, mh-version): Add +cvs to version.
2006-02-18 Bill Wohler <wohler@newt.com>
Release MH-E version 7.92.
* mh-e.el (Version, mh-version): Update for release 7.92.
2006-02-17 Bill Wohler <wohler@newt.com>
* mh-e.el (mh-folder-msg-number): Use purple on low-color, light
backgrounds per Mark's suggestion.
* mh-utils.el (mh-image-load-path): Fix problem that images on
load-path or image-load-path would win over relative paths (newer
MH-E or Emacs distribution).
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.

View File

@ -35,6 +35,8 @@
(mh-require-cl)
(require 'goto-addr)
(defvar mh-alias-alist 'not-read
"Alist of MH aliases.")
(defvar mh-alias-blind-alist nil
@ -62,11 +64,6 @@ alias files listed in your \"Aliasfile:\" MH profile component are
automatically included. You can update the alias list manually using
\\[mh-alias-reload].")
;; Copy of `goto-address-mail-regexp'.
(defvar mh-address-mail-regexp
"[-a-zA-Z0-9._]+@\\([-a-zA-z0-9_]+\\.\\)+[a-zA-Z0-9]+"
"A regular expression probably matching an e-mail address.")
;;; Alias Loading
@ -343,7 +340,7 @@ NO-COMMA-SWAP is non-nil."
((string-match "^\\(.*\\) +<.*>$" string)
;; Some name <somename@foo.bar> -> recurse -> Some name
(mh-alias-suggest-alias (match-string 1 string) no-comma-swap))
((string-match (concat mh-address-mail-regexp " +(\\(.*\\))$") string)
((string-match (concat goto-address-mail-regexp " +(\\(.*\\))$") string)
;; somename@foo.bar (Some name) -> recurse -> Some name
(mh-alias-suggest-alias (match-string 1 string) no-comma-swap))
((string-match "^\\(Dr\\|Prof\\)\\.? +\\(.*\\)" string)
@ -595,24 +592,11 @@ filing messages."
(defun mh-alias-add-address-under-point ()
"Insert an alias for address under point."
(interactive)
(let ((address (mh-goto-address-find-address-at-point)))
(let ((address (goto-address-find-address-at-point)))
(if address
(mh-alias-add-alias nil address)
(message "No email address found under point"))))
;; From goto-addr.el, which we don't want to force-load on users.
(defun mh-goto-address-find-address-at-point ()
"Find e-mail address around or before point.
Then search backwards to beginning of line for the start of an
e-mail address. If no e-mail address found, return nil."
(re-search-backward "[^-_A-z0-9.@]" (mh-line-beginning-position) 'lim)
(if (or (looking-at mh-address-mail-regexp) ; already at start
(and (re-search-forward mh-address-mail-regexp
(mh-line-end-position) 'lim)
(goto-char (match-beginning 0))))
(mh-match-string-no-properties 0)))
(defun mh-alias-apropos (regexp)
"Show all aliases or addresses that match a regular expression REGEXP."
(interactive "sAlias regexp: ")

View File

@ -6,7 +6,7 @@
;; Author: Bill Wohler <wohler@newt.com>
;; Maintainer: Bill Wohler <wohler@newt.com>
;; Version: 7.91+cvs
;; Version: 7.92+cvs
;; Keywords: mail
;; This file is part of GNU Emacs.
@ -121,7 +121,7 @@
;; Try to keep variables local to a single file. Provide accessors if
;; variables are shared. Use this section as a last resort.
(defconst mh-version "7.91+cvs" "Version number of MH-E.")
(defconst mh-version "7.92+cvs" "Version number of MH-E.")
;; Variants
@ -2615,22 +2615,6 @@ message are shown regardless of size."
:type 'integer
:group 'mh-show)
(defcustom mh-show-use-goto-addr-flag (and (boundp 'goto-address-highlight-p)
goto-address-highlight-p)
"*Non-nil means highlight URLs and email addresses\\<goto-address-highlight-keymap>.
To send a message using the highlighted email address or to view
the web page for the highlighted URL, use the middle mouse button
or \\[goto-address-at-point].
See Info node `(mh-e)Sending Mail' to see how to configure Emacs
to send the message using MH-E.
The default value of this option comes from the value of
`goto-address-highlight-p'."
:type 'boolean
:group 'mh-show)
(defcustom mh-show-use-xface-flag (>= emacs-major-version 21)
"*Non-nil means display face images in MH-show buffers.
@ -2968,6 +2952,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 +2985,219 @@ 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) (background light))
(:foreground "purple"))
(((class color) (background dark))
(: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 light))
(:background "#dddf7e"))
(((class color) (background dark))
(: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 +3205,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 +3214,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:

View File

@ -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.

View File

@ -36,13 +36,13 @@
(require 'mh-e)
(require 'mh-scan)
(require 'font-lock)
(require 'gnus-cite)
(require 'gnus-util)
(require 'goto-addr)
(autoload 'mh-make-buffer-data "mh-mime") ;can't be automatically generated
(require 'font-lock)
;;; MH-Folder Commands
@ -818,6 +818,13 @@ operation."
(define-derived-mode mh-show-mode text-mode "MH-Show"
"Major mode for showing messages in MH-E.\\<mh-show-mode-map>
Email addresses and URLs in the message are highlighted if the
option `goto-address-highlight-p' is on, which it is by default.
To view the web page for a highlighted URL or to send a message
using a highlighted email address, use the middle mouse button or
\\[goto-address-at-point]. See Info node `(mh-e)Sending Mail' to
see how to configure Emacs to send the message using MH-E.
The hook `mh-show-mode-hook' is called upon entry to this mode.
See also `mh-folder-mode'.
@ -877,10 +884,7 @@ See also `mh-folder-mode'.
;;;###mh-autoload
(defun mh-show-addr ()
"Use `goto-address'."
(when mh-show-use-goto-addr-flag
(mh-require 'goto-addr nil t)
(if (fboundp 'goto-address)
(goto-address))))
(goto-address))
;;;###mh-autoload
(defun mh-gnus-article-highlight-citation ()

View File

@ -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
@ -110,40 +111,38 @@ already there.
See also variable `mh-image-load-path-called-flag'."
(unless mh-image-load-path-called-flag
(cond
((and mh-image-load-path
(file-exists-p (expand-file-name "mh-logo.xpm"
mh-image-load-path))))
;; User setting exists. We're done.
((and mh-image-load-path
(not (file-exists-p (expand-file-name "mh-logo.xpm"
mh-image-load-path))))
;; User setting does not exist.
(message "Variable mh-image-load-path %s does not contain MH-E images"
mh-image-load-path))
((mh-image-search-load-path "mh-logo.xpm")
;; Emacs 22 already knows where the images are.
(setq mh-image-load-path
(file-name-directory (mh-image-search-load-path "mh-logo.xpm"))))
((locate-library "mh-logo.xpm")
;; Other Emacs already knows where the images are...
(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)
(mh-image-load-path) ; user setting exists
((let (mh-library-name) ; try relative setting
;; 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))
(if (boundp 'image-load-path)
(add-to-list 'image-load-path mh-image-load-path)
(add-to-list 'load-path mh-image-load-path))))
"../../etc/images")))
(file-exists-p (expand-file-name "mh-logo.xpm" mh-image-load-path))))
((mh-image-search-load-path "mh-logo.xpm")
;; Images 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 in load-path.
(setq mh-image-load-path
(file-name-directory (locate-library "mh-logo.xpm")))))
(if (not (file-exists-p 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

View File

@ -49,7 +49,7 @@
(defgroup rcirc nil
"Simple IRC client."
:version "22.1"
:prefix "rcirc"
:prefix "rcirc-"
:group 'applications)
(defcustom rcirc-server "irc.freenode.net"
@ -295,16 +295,23 @@ If ARG is non-nil, prompt for a server to connect to."
(defvar rcirc-topic nil)
(defvar rcirc-keepalive-timer nil)
(defvar rcirc-last-server-message-time nil)
(defun rcirc-connect (server port nick user-name full-name startup-channels)
(defun rcirc-connect (&optional server port nick user-name full-name startup-channels)
(add-hook 'window-configuration-change-hook
'rcirc-window-configuration-change)
(save-excursion
(message "Connecting to %s..." server)
(let* ((inhibit-eol-conversion)
(port-number (if (stringp port)
(string-to-number port)
port))
(port-number (if port
(if (stringp port)
(string-to-number port)
port)
rcirc-port))
(server (or server rcirc-server))
(nick (or nick rcirc-nick))
(user-name (or user-name rcirc-user-name))
(full-name (or full-name rcirc-user-full-name))
(startup-channels (or startup-channels (rcirc-startup-channels server)))
(process (open-network-stream server nil server port-number)))
;; set up process
(set-process-coding-system process 'raw-text 'raw-text)
@ -758,9 +765,9 @@ if there is no existing buffer for TARGET, otherwise return nil."
Create the buffer if it doesn't exist."
(let ((buffer (rcirc-get-buffer process target)))
(if buffer
(progn
(with-current-buffer buffer
(when (not rcirc-target)
(setq rcirc-target target))
(setq rcirc-target target))
buffer)
;; create the buffer
(with-rcirc-process-buffer process
@ -896,20 +903,22 @@ Create the buffer if it doesn't exist."
(kill-buffer (current-buffer))
(set-window-configuration rcirc-window-configuration))
(defun rcirc-get-any-buffer (process)
(defun rcirc-any-buffer (process)
"Return a buffer for PROCESS, either the one selected or the process buffer."
(let ((buffer (window-buffer (selected-window))))
(if (and buffer
(with-current-buffer buffer
(and (eq major-mode 'rcirc-mode)
(eq rcirc-process process))))
buffer
(process-buffer process))))
(if rcirc-always-use-server-buffer-flag
(process-buffer process)
(let ((buffer (window-buffer (selected-window))))
(if (and buffer
(with-current-buffer buffer
(and (eq major-mode 'rcirc-mode)
(eq rcirc-process process))))
buffer
(process-buffer process)))))
(defcustom rcirc-response-formats
'(("PRIVMSG" . "%T<%n> %m")
("NOTICE" . "%T-%n- %m")
("ACTION" . "%T[%n] %m")
'(("PRIVMSG" . "%T<%N> %m")
("NOTICE" . "%T-%N- %m")
("ACTION" . "%T[%N %m]")
("COMMAND" . "%T%m")
("ERROR" . "%T%fw!!! %m")
(t . "%T%fp*** %fs%n %r %m"))
@ -921,7 +930,8 @@ The entry's value part should be a string, which is inserted with
the of the following escape sequences replaced by the described values:
%m The message text
%n The sender's nick (with face `rcirc-my-nick' or `rcirc-other-nick')
%n The sender's nick
%N The sender's nick (with face `rcirc-my-nick' or `rcirc-other-nick')
%r The response-type
%T The timestamp (with face `rcirc-timestamp')
%t The target
@ -959,13 +969,20 @@ is found by looking up RESPONSE in `rcirc-response-formats'."
(cond ((eq key ?%)
;; %% -- literal % character
"%")
((eq key ?n)
;; %n -- nick
(rcirc-facify (concat (rcirc-abbrev-nick sender)
(and target (concat "," target)))
(if (string= sender (rcirc-nick process))
'rcirc-my-nick
'rcirc-other-nick)))
((or (eq key ?n) (eq key ?N))
;; %n/%N -- nick
(let ((nick (concat (if (string= (with-rcirc-process-buffer
process rcirc-server)
sender)
""
(rcirc-abbrev-nick sender))
(and target (concat "," target)))))
(rcirc-facify nick
(if (eq key ?n)
face
(if (string= sender (rcirc-nick process))
'rcirc-my-nick
'rcirc-other-nick)))))
((eq key ?T)
;; %T -- timestamp
(rcirc-facify
@ -1015,9 +1032,7 @@ is found by looking up RESPONSE in `rcirc-response-formats'."
(assert (not (bufferp target)))
(with-rcirc-process-buffer process
(cond ((not target)
(if rcirc-always-use-server-buffer-flag
(process-buffer process)
(rcirc-get-any-buffer process)))
(rcirc-any-buffer process))
((not (rcirc-channel-p target))
;; message from another user
(if (string= response "PRIVMSG")
@ -1026,7 +1041,7 @@ is found by looking up RESPONSE in `rcirc-response-formats'."
sender))
(rcirc-get-buffer process target t)))
((or (rcirc-get-buffer process target)
(rcirc-get-any-buffer process))))))
(rcirc-any-buffer process))))))
(defvar rcirc-activity-type nil)
(make-variable-buffer-local 'rcirc-activity-type)
@ -1069,22 +1084,26 @@ record activity."
(set-marker-insertion-type rcirc-prompt-start-marker nil)
(set-marker-insertion-type rcirc-prompt-end-marker nil)
;; fill the text we just inserted, maybe
(when (and rcirc-fill-flag
(not (string= response "372"))) ;/motd
(let ((fill-prefix
(or rcirc-fill-prefix
(make-string
(or (next-single-property-change 0 'rcirc-text
fmted-text)
8)
?\s)))
(fill-column (cond ((eq rcirc-fill-column 'frame-width)
(1- (frame-width)))
(rcirc-fill-column
rcirc-fill-column)
(t fill-column))))
(fill-region fill-start rcirc-prompt-start-marker 'left t))))
(let ((text-start (make-marker)))
(set-marker text-start
(or (next-single-property-change fill-start
'rcirc-text)
(point-max)))
;; squeeze spaces out of text before rcirc-text
(fill-region fill-start (1- text-start))
;; fill the text we just inserted, maybe
(when (and rcirc-fill-flag
(not (string= response "372"))) ;/motd
(let ((fill-prefix
(or rcirc-fill-prefix
(make-string (- text-start fill-start) ?\s)))
(fill-column (cond ((eq rcirc-fill-column 'frame-width)
(1- (frame-width)))
(rcirc-fill-column
rcirc-fill-column)
(t fill-column))))
(fill-region fill-start rcirc-prompt-start-marker 'left t)))))
;; set inserted text to be read-only
(when rcirc-read-only-flag
@ -1175,14 +1194,15 @@ record activity."
(defun rcirc-put-nick-channel (process nick channel)
"Add CHANNEL to list associated with NICK."
(with-rcirc-process-buffer process
(let* ((chans (gethash nick rcirc-nick-table))
(record (assoc-string channel chans t)))
(if record
(setcdr record (current-time))
(puthash nick (cons (cons channel (current-time))
chans)
rcirc-nick-table)))))
(let ((nick (rcirc-user-nick nick)))
(with-rcirc-process-buffer process
(let* ((chans (gethash nick rcirc-nick-table))
(record (assoc-string channel chans t)))
(if record
(setcdr record (current-time))
(puthash nick (cons (cons channel (current-time))
chans)
rcirc-nick-table))))))
(defun rcirc-nick-remove (process nick)
"Remove NICK from table."
@ -1613,15 +1633,21 @@ ones added to the list automatically are marked with an asterisk."
(propertize (or string "") 'face face 'rear-nonsticky t))
(defvar rcirc-url-regexp
(rx word-boundary
(or "www."
(and (or "http" "https" "ftp" "file" "gopher" "news" "telnet" "wais"
"mailto")
"://"
(1+ (char "a-zA-Z0-9_."))
(optional ":" (1+ (char "0-9")))))
(1+ (char "-a-zA-Z0-9_=!?#$\@~`%&*+|\\/:;.,{}[]"))
(char "-a-zA-Z0-9_=#$\@~`%&*+|\\/:;{}[]"))
(rx-to-string
`(and word-boundary
(or "www."
(and (or "http" "https" "ftp" "file" "gopher" "news" "telnet"
"wais" "mailto")
"://"
(1+ (char "-a-zA-Z0-9_."))
(optional ":" (1+ (char "0-9"))))
(and (1+ (char "-a-zA-Z0-9_."))
(or ".com" ".net" ".org")
word-boundary))
(optional
(and "/"
(1+ (char "-a-zA-Z0-9_=!?#$\@~`%&*+|\\/:;.,{}[]"))
(char "-a-zA-Z0-9_=#$\@~`%&*+|\\/:;{}[]")))))
"Regexp matching URLs. Set to nil to disable URL features in rcirc.")
(defun rcirc-browse-url (&optional arg)

View File

@ -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,8 +105,12 @@
(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-changed nil "Non-nil means that `gdb-var-list' has changed.")
(defvar gdb-var-list nil
"List of variables in watch window.
Each element has the form (EXPRESSION VARNUM NUMCHILD TYPE VALUE STATUS) where
STATUS is nil (unchanged), `changed' or `out-of-scope'.")
(defvar gdb-force-update t
"Non-nil means that view of watch expressions will be updated in the speedbar.")
(defvar gdb-main-file nil "Source file from which program execution begins.")
(defvar gdb-overlay-arrow-position nil)
(defvar gdb-server-prefix nil)
@ -203,8 +215,8 @@ 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-separate-io-buffer' is nil when the source buffer
occupies the full width of the frame. Keybindings are given in
relevant buffer.
occupies the full width of the frame. Keybindings are shown in
some of the buffers.
Watch expressions appear in the speedbar/slowbar.
@ -217,28 +229,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)))
;;
@ -444,7 +456,7 @@ With arg, use separate IO iff arg is positive."
gdb-current-language nil
gdb-frame-number nil
gdb-var-list nil
gdb-var-changed nil
gdb-force-update t
gdb-first-post-prompt t
gdb-prompting nil
gdb-input-queue nil
@ -598,8 +610,7 @@ With arg, automatically raise speedbar iff arg is positive."
(nth 1 var) "\"\n")
(concat "-var-evaluate-expression " (nth 1 var) "\n"))
`(lambda () (gdb-var-evaluate-expression-handler
,(nth 1 var) nil))))
(setq gdb-var-changed t))
,(nth 1 var) nil)))))
(if (search-forward "Undefined command" nil t)
(message-box "Watching expressions requires gdb 6.0 onwards")
(message "No symbol \"%s\" in current context." expr))))
@ -608,16 +619,11 @@ With arg, automatically raise speedbar iff arg is positive."
(goto-char (point-min))
(re-search-forward ".*value=\\(\".*\"\\)" nil t)
(catch 'var-found
(let ((num 0))
(dolist (var gdb-var-list)
(if (string-equal varnum (cadr var))
(progn
(if changed (setcar (nthcdr 5 var) t))
(setcar (nthcdr 4 var) (read (match-string 1)))
(setcar (nthcdr num gdb-var-list) var)
(throw 'var-found nil)))
(setq num (+ num 1)))))
(setq gdb-var-changed t))
(dolist (var gdb-var-list)
(when (string-equal varnum (cadr var))
(if changed (setcar (nthcdr 5 var) 'changed))
(setcar (nthcdr 4 var) (read (match-string 1)))
(throw 'var-found nil)))))
(defun gdb-var-list-children (varnum)
(gdb-enqueue-input
@ -663,20 +669,25 @@ 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 ()
(dolist (var gdb-var-list)
(setcar (nthcdr 5 var) nil))
(goto-char (point-min))
(while (re-search-forward gdb-var-update-regexp nil t)
(catch 'var-found-1
(let ((varnum (match-string 1)))
(dolist (var gdb-var-list)
(gdb-enqueue-input
(list
(concat "server interpreter mi \"-var-evaluate-expression "
varnum "\"\n")
`(lambda () (gdb-var-evaluate-expression-handler ,varnum t))))
(throw 'var-found-1 nil)))))
(let ((varnum (match-string 1)))
(if (string-equal (match-string 2) "false")
(catch 'var-found
(dolist (var gdb-var-list)
(when (string-equal varnum (cadr var))
(setcar (nthcdr 5 var) 'out-of-scope)
(throw 'var-found nil))))
(gdb-enqueue-input
(list
(concat "server interpreter mi \"-var-evaluate-expression "
varnum "\"\n")
`(lambda () (gdb-var-evaluate-expression-handler ,varnum t)))))))
(setq gdb-pending-triggers
(delq 'gdb-var-update gdb-pending-triggers))
(when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))
@ -712,8 +723,7 @@ type=\"\\(.*?\\)\"")
(setq gdb-var-list (delq var gdb-var-list))
(dolist (varchild gdb-var-list)
(if (string-match (concat (nth 1 var) "\\.") (nth 1 varchild))
(setq gdb-var-list (delq varchild gdb-var-list))))
(setq gdb-var-changed t))))))
(setq gdb-var-list (delq varchild gdb-var-list)))))))))
(defun gdb-edit-value (text token indent)
"Assign a value to a variable displayed in the speedbar."
@ -729,8 +739,9 @@ type=\"\\(.*?\\)\"")
'ignore))))
(defcustom gdb-show-changed-values t
"If non-nil highlight values that have recently changed in the speedbar.
The highlighting is done with `font-lock-warning-face'."
"If non-nil change the face of out of scope variables and changed values.
Out of scope variables are suppressed with `shadow' face.
Changed values are highlighted with the face `font-lock-warning-face'."
:type 'boolean
:group 'gud
:version "22.1")
@ -750,7 +761,7 @@ INDENT is the current indentation depth."
(dolist (var gdb-var-list)
(if (string-match (concat token "\\.") (nth 1 var))
(setq gdb-var-list (delq var gdb-var-list))))
(setq gdb-var-changed t)
(setq gdb-force-update t)
(with-current-buffer gud-comint-buffer
(speedbar-timer-fn)))))
@ -1204,9 +1215,7 @@ 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))
(setq gdb-force-update t)
(if (string-equal gdb-version "pre-6.4")
(gdb-var-update)
(gdb-var-update-1)))))
@ -2461,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 [memory] '("Memory" . gdb-display-memory-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-separate-io-buffer
:enable gdb-use-separate-io-buffer))
(define-key menu [locals] '("Locals" . gdb-display-locals-buffer))
(define-key menu [frames] '("Stack" . gdb-display-stack-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 [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]
@ -2480,15 +2489,15 @@ 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-separate-io-buffer
:enable gdb-use-separate-io-buffer))
(define-key menu [locals] '("Locals" . gdb-frame-locals-buffer))
(define-key menu [frames] '("Stack" . gdb-frame-stack-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]
@ -2617,6 +2626,8 @@ Kills the gdb buffers and resets the source buffers."
(setq gdb-overlay-arrow-position nil))
(setq overlay-arrow-variable-list
(delq 'gdb-overlay-arrow-position overlay-arrow-variable-list))
(if (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))
(speedbar-refresh))
(setq gud-running nil)
(setq gdb-active-process nil)
(setq gdb-var-list nil)
@ -3013,7 +3024,6 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
(throw 'child-already-watched nil)))
(push varchild var-list))))
(push var var-list)))
(setq gdb-var-changed t)
(setq gdb-var-list (nreverse var-list)))))
; Uses "-var-update --all-values". Needs GDB 6.4 onwards.
@ -3028,23 +3038,24 @@ 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 ()
(dolist (var gdb-var-list)
(setcar (nthcdr 5 var) nil))
(goto-char (point-min))
(while (re-search-forward gdb-var-update-regexp-1 nil t)
(let ((varnum (match-string 1)))
(catch 'var-found1
(let ((num 0))
(dolist (var gdb-var-list)
(if (string-equal varnum (cadr var))
(progn
(setcar (nthcdr 5 var) t)
(setcar (nthcdr 4 var) (read (match-string 2)))
(setcar (nthcdr num gdb-var-list) var)
(throw 'var-found1 nil)))
(setq num (+ num 1))))))
(setq gdb-var-changed t))
(catch 'var-found
(dolist (var gdb-var-list)
(when (string-equal varnum (cadr var))
(if (string-equal (match-string 3) "false")
(setcar (nthcdr 5 var) 'out-of-scope)
(setcar (nthcdr 5 var) 'changed)
(setcar (nthcdr 4 var)
(read (match-string 2))))
(throw 'var-found nil))))))
(setq gdb-pending-triggers
(delq 'gdb-var-update gdb-pending-triggers))
(when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))

View File

@ -43,14 +43,13 @@
(eval-when-compile (require 'cl)) ; for case macro
(require 'comint)
(require 'font-lock)
(defvar gdb-active-process)
(defvar gdb-define-alist)
(defvar gdb-macro-info)
(defvar gdb-server-prefix)
(defvar gdb-show-changed-values)
(defvar gdb-var-changed)
(defvar gdb-force-update)
(defvar gdb-var-list)
(defvar gdb-speedbar-auto-raise)
(defvar tool-bar-map)
@ -444,7 +443,7 @@ required by the caller."
(p (window-point window)))
(cond
((memq minor-mode '(gdbmi gdba))
(when (or gdb-var-changed
(when (or gdb-force-update
(not (save-excursion
(goto-char (point-min))
(let ((case-fold-search t))
@ -453,51 +452,67 @@ required by the caller."
(insert "Watch Expressions:\n")
(if gdb-speedbar-auto-raise
(raise-frame speedbar-frame))
(let ((var-list gdb-var-list))
(let ((var-list gdb-var-list) parent)
(while var-list
(let* (char (depth 0) (start 0)
(var (car var-list)) (varnum (nth 1 var)))
(let* (char (depth 0) (start 0) (var (car var-list))
(expr (car var)) (varnum (nth 1 var))
(type (nth 3 var)) (status (nth 5 var)))
(put-text-property
0 (length expr) 'face font-lock-variable-name-face expr)
(put-text-property
0 (length type) 'face font-lock-type-face type)
(while (string-match "\\." varnum start)
(setq depth (1+ depth)
start (1+ (match-beginning 0))))
(if (eq depth 0) (setq parent nil))
(if (or (equal (nth 2 var) "0")
(and (equal (nth 2 var) "1")
(string-match "char \\*$" (nth 3 var))))
(speedbar-make-tag-line 'bracket ?? nil nil
(concat (car var) "\t" (nth 4 var))
'gdb-edit-value
nil
(if (and (nth 5 var)
gdb-show-changed-values)
'font-lock-warning-face
nil) depth)
(string-match "char \\*$" type)))
(speedbar-make-tag-line
'bracket ?? nil nil
(concat expr "\t" (nth 4 var))
(if (or parent (eq status 'out-of-scope))
nil 'gdb-edit-value)
nil
(if gdb-show-changed-values
(or parent (case status
(changed 'font-lock-warning-face)
(out-of-scope 'shadow)
(t t)))
t)
depth)
(if (eq status 'out-of-scope) (setq parent 'shadow))
(if (and (cadr var-list)
(string-match (concat varnum "\\.")
(cadr (cadr var-list))))
(setq char ?-)
(setq char ?+))
(if (string-match "\\*$" (nth 3 var))
(speedbar-make-tag-line 'bracket char
'gdb-speedbar-expand-node varnum
(concat (car var) "\t"
(nth 3 var)"\t"
(nth 4 var))
'gdb-edit-value nil
(if (and (nth 5 var)
gdb-show-changed-values)
'font-lock-warning-face
nil) depth)
(speedbar-make-tag-line 'bracket char
'gdb-speedbar-expand-node varnum
(concat (car var) "\t" (nth 3 var))
nil nil nil depth))))
(if (string-match "\\*$" type)
(speedbar-make-tag-line
'bracket char
'gdb-speedbar-expand-node varnum
(concat expr "\t"
type "\t"
(nth 4 var))
(if (or parent status 'out-of-scope)
nil 'gdb-edit-value)
nil
(if (and status gdb-show-changed-values)
'shadow t)
depth)
(speedbar-make-tag-line
'bracket char
'gdb-speedbar-expand-node varnum
(concat expr "\t" type)
nil nil
(if (and status gdb-show-changed-values) 'shadow t)
depth))))
(setq var-list (cdr var-list))))
(setq gdb-var-changed nil)))
(t (if (and (save-excursion
(goto-char (point-min))
(looking-at "Current Stack:"))
(equal gud-last-last-frame gud-last-speedbar-stackframe))
nil
(setq gdb-force-update nil)))
(t (unless (and (save-excursion
(goto-char (point-min))
(looking-at "Current Stack:"))
(equal gud-last-last-frame gud-last-speedbar-stackframe))
(let ((gud-frame-list
(cond ((eq minor-mode 'gdb)
(gud-gdb-get-stackframe buffer))

View File

@ -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.
@ -1708,9 +1708,13 @@ Separators are not active, have no labels, depth, or actions."
(defun speedbar-make-button (start end face mouse function &optional token)
"Create a button from START to END, with FACE as the display face.
MOUSE is the mouse face. When this button is clicked on FUNCTION
will be run with the TOKEN parameter (any Lisp object)"
will be run with the TOKEN parameter (any Lisp object). If FACE
is t use the text properties of the string that is passed as an
argument."
(unless (eq face t)
(put-text-property start end 'face face))
(add-text-properties
start end `(face ,face mouse-face ,mouse invisible nil
start end `(mouse-face ,mouse invisible nil
speedbar-text ,(buffer-substring-no-properties start end)))
(if speedbar-use-tool-tips-flag
(put-text-property start end 'help-echo #'dframe-help-echo))
@ -2123,7 +2127,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 +2427,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 +2466,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 +2577,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 +2618,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)))

View File

@ -508,11 +508,7 @@ re-start emacs."
(const "~nroff") (const "~list")
(const "~latin1") (const "~latin3")
(const :tag "default" nil))
(choice :tag "Coding system"
(const iso-8859-1)
(const iso-8859-2)
(const koi8-r)
(const windows-1251))))
(coding-system :tag "Coding System")))
:group 'ispell)
@ -570,10 +566,10 @@ re-start emacs."
'(("esperanto"
"[A-Za-z\246\254\266\274\306\330\335\336\346\370\375\376]"
"[^A-Za-z\246\254\266\274\306\330\335\336\346\370\375\376]"
"[-']" t ("-C") "~latin3" iso-8859-1)
"[-']" t ("-C") "~latin3" iso-8859-3)
("esperanto-tex"
"[A-Za-z^\\]" "[^A-Za-z^\\]"
"[-'`\"]" t ("-C" "-d" "esperanto") "~tex" iso-8859-1)
"[-'`\"]" t ("-C" "-d" "esperanto") "~tex" iso-8859-3)
("francais7"
"[A-Za-z]" "[^A-Za-z]" "[`'^---]" t nil nil iso-8859-1)
("francais" ; Francais.aff
@ -2604,7 +2600,7 @@ By just answering RET you can find out what the current dictionary is."
(mapcar 'list (ispell-valid-dictionary-list)))
nil t)
current-prefix-arg))
(unless arg (ispell-accept-buffer-local-defs))
(unless arg (ispell-buffer-local-dict))
(if (equal dict "default") (setq dict nil))
;; This relies on completing-read's bug of returning "" for no match
(cond ((equal dict "")

View File

@ -916,67 +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))
(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
;; 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 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)
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 (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))))
(unless (pos-visible-in-window-p (widget-event-point event))
(mouse-set-point event)
(beginning-of-line)
(recenter))
)
;; 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))

View File

@ -1,3 +1,26 @@
2006-02-20 Juanma Barranquero <lekktu@gmail.com>
* commands.texi (Using Interactive): Fix reference to node
"Minibuffers".
2006-02-19 Richard M. Stallman <rms@gnu.org>
* minibuf.texi (High-Level Completion):
Add xref to read-input-method-name.
* files.texi (Relative File Names): Move file-relative-name here.
(File Name Expansion): From here. Minor clarifications.
* commands.texi (Using Interactive): Add xrefs about reading input.
Clarify remarks about that moving point and mark.
Put string case before list case.
2006-02-16 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
* 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.

View File

@ -150,37 +150,6 @@ It may be omitted or @code{nil}; then the command is called with no
arguments. This leads quickly to an error if the command requires one
or more arguments.
@item
It may be a Lisp expression that is not a string; then it should be a
form that is evaluated to get a list of arguments to pass to the
command.
@cindex argument evaluation form
If this expression reads keyboard input (this includes using the
minibuffer), keep in mind that the integer value of point or the mark
before reading input may be incorrect after reading input. This is
because the current buffer may be receiving subprocess output;
if subprocess output arrives while the command is waiting for input,
it could relocate point and the mark.
Here's an example of what @emph{not} to do:
@smallexample
(interactive
(list (region-beginning) (region-end)
(read-string "Foo: " nil 'my-history)))
@end smallexample
@noindent
Here's how to avoid the problem, by examining point and the mark only
after reading the keyboard input:
@smallexample
(interactive
(let ((string (read-string "Foo: " nil 'my-history)))
(list (region-beginning) (region-end) string)))
@end smallexample
@item
@cindex argument prompt
It may be a string; then its contents should consist of a code character
@ -231,6 +200,39 @@ You can use @samp{*} and @samp{@@} together; the order does not matter.
Actual reading of arguments is controlled by the rest of the prompt
string (starting with the first character that is not @samp{*} or
@samp{@@}).
@item
It may be a Lisp expression that is not a string; then it should be a
form that is evaluated to get a list of arguments to pass to the
command. Usually this form will call various functions to read input
from the user, most often through the minibuffer (@pxref{Minibuffers})
or directly from the keyboard (@pxref{Reading Input}).
@cindex argument evaluation form
Providing point or the mark as an argument value is also common, but
if you do this @emph{and} read input (whether using the minibuffer or
not), be sure to get the integer values of point or the mark after
reading. The current buffer may be receiving subprocess output; if
subprocess output arrives while the command is waiting for input, it
could relocate point and the mark.
Here's an example of what @emph{not} to do:
@smallexample
(interactive
(list (region-beginning) (region-end)
(read-string "Foo: " nil 'my-history)))
@end smallexample
@noindent
Here's how to avoid the problem, by examining point and the mark after
reading the keyboard input:
@smallexample
(interactive
(let ((string (read-string "Foo: " nil 'my-history)))
(list (region-beginning) (region-end) string)))
@end smallexample
@end itemize
@cindex examining the @code{interactive} form

View File

@ -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}

View File

@ -1768,6 +1768,32 @@ Unix syntax and VMS syntax.
@result{} t
@end group
@end example
@end defun
Given a possibly relative file name, you can convert it to an
absolute name using @code{expand-file-name} (@pxref{File Name
Expansion}). This function converts absolute file names to relative
names:
@defun file-relative-name filename &optional directory
This function tries to return a relative name that is equivalent to
@var{filename}, assuming the result will be interpreted relative to
@var{directory} (an absolute directory name or directory file name).
If @var{directory} is omitted or @code{nil}, it defaults to the
current buffer's default directory.
On some operating systems, an absolute file name begins with a device
name. On such systems, @var{filename} has no relative equivalent based
on @var{directory} if they start with two different device names. In
this case, @code{file-relative-name} returns @var{filename} in absolute
form.
@example
(file-relative-name "/foo/bar" "/foo/")
@result{} "bar"
(file-relative-name "/foo/bar" "/hack/")
@result{} "../foo/bar"
@end example
@end defun
@node Directory Names
@ -1910,16 +1936,13 @@ you must specify the default directory name as well as the file name to
be expanded. Expansion also simplifies file names by eliminating
redundancies such as @file{./} and @file{@var{name}/../}.
In the next two functions, the @var{directory} argument can be either
a directory name or a directory file name. @xref{Directory Names}.
@defun expand-file-name filename &optional directory
This function converts @var{filename} to an absolute file name. If
@var{directory} is supplied, it is the default directory to start with
if @var{filename} is relative. (The value of @var{directory} should
itself be an absolute directory name; it may start with @samp{~}.)
Otherwise, the current buffer's value of @code{default-directory} is
used. For example:
itself be an absolute directory name or directory file name; it may
start with @samp{~}.) Otherwise, the current buffer's value of
@code{default-directory} is used. For example:
@example
@group
@ -1981,27 +2004,6 @@ should make sure to call @code{file-truename} without prior direct or
indirect calls to @code{expand-file-name}. @xref{Truenames}.
@end defun
@c Emacs 19 feature
@defun file-relative-name filename &optional directory
This function does the inverse of expansion---it tries to return a
relative name that is equivalent to @var{filename} when interpreted
relative to @var{directory}. If @var{directory} is omitted or
@code{nil}, it defaults to the current buffer's default directory.
On some operating systems, an absolute file name begins with a device
name. On such systems, @var{filename} has no relative equivalent based
on @var{directory} if they start with two different device names. In
this case, @code{file-relative-name} returns @var{filename} in absolute
form.
@example
(file-relative-name "/foo/bar" "/foo/")
@result{} "bar"
(file-relative-name "/foo/bar" "/hack/")
@result{} "../foo/bar"
@end example
@end defun
@defvar default-directory
The value of this buffer-local variable is the default directory for the
current buffer. It should be an absolute directory name; it may start

View File

@ -1194,7 +1194,8 @@ predicate @code{user-variable-p} instead of @code{commandp}:
@end defun
See also the functions @code{read-coding-system} and
@code{read-non-nil-coding-system}, in @ref{User-Chosen Coding Systems}.
@code{read-non-nil-coding-system}, in @ref{User-Chosen Coding Systems},
and @code{read-input-method-name}, in @ref{Input Methods}.
@node Reading File Names
@subsection Reading File Names

View File

@ -1,3 +1,19 @@
2006-02-19 Richard M. Stallman <rms@gnu.org>
* emacs.texi: Use @smallbook.
(Top): Update ref to Emacs paper, delete ref to Cookbook.
Update subnode menu.
* building.texi (Lisp Interaction): Minor addition.
2006-02-18 Nick Roberts <nickrob@snap.net.nz>
* building.texi (Watch Expressions): Update and be more precise.
2006-02-17 Eli Zaretskii <eliz@gnu.org>
* faq.texi: Remove the coding cookie, it's not needed anymore.
2006-02-15 Francesco Potort,Al(B <pot@gnu.org>
* maintaining.texi (Create Tags Table): Explain why the

View File

@ -936,9 +936,9 @@ in the tool bar (@code{gud-watch}).
Each watch expression is displayed in the speedbar. Complex data
types, such as arrays, structures and unions are represented in a tree
format. Leaves and simple data types show the name of the expression
and its value, and display the type as a tooltip. Higher levels show
the name, type and address value for pointers and just the name and
type otherwise.
and its value and, when the speedbar frame is selected, display the
type as a tooltip. Higher levels show the name, type and address
value for pointers and just the name and type otherwise.
To expand or contract a complex data type, click @kbd{Mouse-2}
on the tag to the left of the expression.
@ -958,7 +958,8 @@ edit it. Either way, this reads the new value using the minibuffer.
If you set the variable @code{gdb-show-changed-values} to
non-@code{nil} (the default value), Emacs uses
@code{font-lock-warning-face} to highlight values that have recently
changed.
changed and @code{shadow} face to make variables which have gone out of
scope less noticeable.
@vindex gdb-use-colon-colon-notation
If the variable @code{gdb-use-colon-colon-notation} is
@ -1277,7 +1278,8 @@ buffer in Lisp Interaction mode.
is to use Inferior Emacs-Lisp mode, which provides an interface rather
like Shell mode (@pxref{Shell Mode}) for evaluating Emacs Lisp
expressions. Type @kbd{M-x ielm} to create an @samp{*ielm*} buffer
which uses this mode.
which uses this mode. For more information see that command's
documentation.
@node External Lisp
@section Running an External Lisp

View File

@ -686,6 +686,16 @@ Even though such regions will be skipped over, you can still jump to any
one of them by typing the region number and then `j'. Typing @kbd{##}
again puts Ediff back in the original state.
@item #c
@kindex #c
@vindex ediff-ignore-case-option
@vindex ediff-ignore-case-option3
@vindex ediff-ignore-case
Toggle case sensitivity in the diff program. All diffs are recomputed.
Case sensitivity is controlled by the variables
@code{ediff-ignore-case-option}, @code{ediff-ignore-case-option3},
and @code{ediff-ignore-case}, which are explained elsewhere.
@item #h
@itemx #f
@kindex #f
@ -1584,6 +1594,28 @@ Ediff may take a long time to skip over them because it has to compute fine
differences of all intermediate regions. This delay does not indicate any
problem.
@vindex ediff-ignore-case-option
@vindex ediff-ignore-case-option3
@vindex ediff-ignore-case
Finally, Ediff can be told to ignore the case of the letters. This behavior
can be toggled with @kbd{#c} and it is controlled with three variables:
Toggle case sensitivity in the diff program. All diffs are recomputed.
Case sensitivity is controlled by the variables
@code{ediff-ignore-case-option}, @code{ediff-ignore-case-option3}, and
@code{ediff-ignore-case}.
The variable @code{ediff-ignore-case-option} specifies the option to pass
to the diff program for comparing two files or buffers. For GNU
@code{diff}, this option is @code{"-i"}. The variable
@code{ediff-ignore-case-option3} specifies the option to pass to the
@code{diff3} program in order to make it case-insensitive. GNU @code{diff3}
does not have such an option, so when merging or comparing three files with
this program, ignoring the letter case is not supported.
The variable @code{ediff-ignore-case} controls whether Ediff starts out by
ignoring letter case or not. It can be set in @file{.emacs} using
@code{setq-default}.
@node Highlighting Difference Regions, Narrowing, Selective Browsing, Customization
@section Highlighting Difference Regions
@ -2388,6 +2420,7 @@ Here is a hopefully full list of contributors:
@example
Adrian Aichner (aichner@@ecf.teradyne.com),
Drew Adams (drew.adams@@oracle.com),
Steve Baur (steve@@xemacs.org),
Neal Becker (neal@@ctd.comsat.com),
E.@: Jay Berkenbilt (ejb@@ql.org),

View File

@ -39,7 +39,7 @@ Software Foundation raise funds for GNU development.''
@c copy of this manual that will be published. the manual should go
@c onto the distribution in the full, 8.5 x 11" size.
@c @smallbook
@smallbook
@setchapternewpage odd
@defcodeindex op
@ -609,7 +609,7 @@ Running Debuggers Under Emacs
implement a graphical debugging environment through
Emacs.
Maintaining Programs
Maintaining Large Programs
* Change Log:: Maintaining a change history for your program.
* Format of ChangeLog:: What the change log file looks like.
@ -950,15 +950,12 @@ with GNU Emacs. The Info file and the printed book contain
substantially the same text and are generated from the same source
files, which are also distributed along with GNU Emacs.
GNU Emacs is a member of the Emacs editor family. There are many Emacs
editors, all sharing common principles of organization. For information on
the underlying philosophy of Emacs and the lessons learned from its
development, write for a copy of AI memo 519a, @cite{Emacs, the Extensible,
Customizable Self-Documenting Display Editor}, is available from
GNU Emacs is a member of the Emacs editor family. There are many
Emacs editors, all sharing common principles of organization. For
information on the underlying philosophy of Emacs and the lessons
learned from its development, see @cite{Emacs, the Extensible,
Customizable Self-Documenting Display Editor}, available from
@url{ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-519A.pdf}.
Another useful publication is LCS TM-165, @cite{A Cookbook for an
Emacs}, by Craig Finseth, is available from the MIT libraries in some
fashion.
This edition of the manual is intended for use with GNU Emacs
installed on GNU and Unix systems. GNU Emacs can also be used on VMS,

View File

@ -12,7 +12,7 @@
@syncodeindex fn cp
@copying
This manual is for ERC version 5.1.1.
This manual is for ERC version 5.1.2.
Copyright @copyright{} 2005, 2006 Free Software Foundation, Inc.

View File

@ -1,4 +1,4 @@
\input texinfo @c -*- coding: latin-1; mode: texinfo; -*-
\input texinfo @c -*- mode: texinfo; -*-
@c %**start of header
@setfilename ../info/efaq
@settitle GNU Emacs FAQ

View File

@ -1870,6 +1870,10 @@ application.
@vindex @code{viper-insert-state-cursor-color}
If set to a valid color, this will be the cursor color when Viper is in
insert state.
@item viper-emacs-state-cursor-color nil
@vindex @code{viper-emacs-state-cursor-color}
If set to a valid color, this will be the cursor color when Viper is in
emacs state.
@item viper-replace-region-end-delimiter "$"
A string used to mark the end of replacement regions. It is used only on
TTYs or if @code{viper-use-replace-region-delimiters} is non-@code{nil}.

View File

@ -1,3 +1,66 @@
2006-02-19 Luc Teirlinck <teirllm@auburn.edu>
* regex.c (extend_range_table_work_area): Fix typo.
2006-02-19 Richard M. Stallman <rms@gnu.org>
* xterm.c (x_catch_errors): Use xmalloc.
* regex.c (extend_range_table_work_area): Call xmalloc and xrealloc.
(regex_compile): Likewise.
(regcomp): Use xmalloc.
* gtkutil.c (malloc_widget_value): Use xmalloc.
* vm-limit.c [HAVE_GETRLIMIT]: Include sys/resource.h.
(check_memory_limits) [HAVE_GETRLIMIT]: Use getrlimit.
* xmenu.c (digest_single_submenu): When pane_string is empty,
do initialize save_wv.
2006-02-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* xdisp.c (update_menu_bar) [MAC_OS]: Don't set
w->update_mode_line if arg F is not the selected frame.
* macmenu.c (popup_activated_flag, submenu_id)
(next_menubar_widget_id): Remove variables.
(initialize_frame_menubar): Remove function.
(pop_down_menu, mac_menu_show): Simplify save value.
(dispose_menus): New function.
(pop_down_menu, fill_menubar): Use it.
(fill_submenu): Remove function. All uses changed to fill_menu.
(add_menu_item): Remove args SUBMENU and FORCE_DISABLE. New arg
POS. Don't call SetMenuItemHierarchicalID here.
(fill_menu): Add arg SUBMENU_ID. Return submenu_id that is to be
used next. Call SetMenuItemHierarchicalID here.
(fill_menubar): Add arg DEEP_P. All uses changed. Clean up menu
objects if needed. Reuse existing menu bar titles if possible.
(set_frame_menubar): Don't clean up menu objects here.
2006-02-18 Chong Yidong <cyd@stupidchicken.com>
* window.c (window_min_size_1): Ensure room for the scroll bar and
fringes.
2006-02-17 Romain Francoise <romain@orebokech.com>
* puresize.h (BASE_PURESIZE): Increment to 1200000.
2006-02-17 Stefan Monnier <monnier@iro.umontreal.ca>
* alloc.c (Fmake_symbol): Comment-out left-over assert from before the
addition of the BLOCK_INPUTs.
2006-02-17 Juanma Barranquero <lekktu@gmail.com>
* window.c (Fset_window_scroll_bars): Doc fix.
2006-02-17 Kenichi Handa <handa@m17n.org>
* xdisp.c (display_mode_element): Call display_string with correct
PREC arg (which must be a number of characters, not column width).
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.

View File

@ -3211,7 +3211,7 @@ Its value and function definition are void, and its property list is nil. */)
CHECK_STRING (name);
eassert (!handling_signal);
/* eassert (!handling_signal); */
#ifndef SYNC_INPUT
BLOCK_INPUT;

View File

@ -199,7 +199,7 @@ malloc_widget_value ()
}
else
{
wv = (widget_value *) malloc (sizeof (widget_value));
wv = (widget_value *) xmalloc (sizeof (widget_value));
malloc_cpt++;
}
memset (wv, 0, sizeof (widget_value));

View File

@ -189,8 +189,9 @@ static void single_keymap_panes P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
static void list_of_panes P_ ((Lisp_Object));
static void list_of_items P_ ((Lisp_Object));
static void fill_submenu (MenuHandle, widget_value *);
static void fill_menubar (widget_value *);
static int fill_menu P_ ((MenuHandle, widget_value *, int));
static void fill_menubar P_ ((widget_value *, int));
static void dispose_menus P_ ((int));
/* This holds a Lisp vector that holds the results of decoding
@ -247,15 +248,6 @@ static int menu_items_n_panes;
/* Current depth within submenus. */
static int menu_items_submenu_depth;
/* Flag which when set indicates a dialog or menu has been posted by
Xt on behalf of one of the widget sets. */
static int popup_activated_flag;
/* Index of the next submenu */
static int submenu_id;
static int next_menubar_widget_id;
/* This is set nonzero after the user activates the menu bar, and set
to zero again after the menu bars are redisplayed by prepare_menu_bar.
While it is nonzero, all calls to set_frame_menubar go deep.
@ -1440,7 +1432,7 @@ install_menu_quit_handler (MenuHandle menu_handle)
menu = GetMenuHandle (++i);
}
i = menu_handle ? MIN_POPUP_SUBMENU_ID : MIN_SUBMENU_ID;
i = menu_handle ? MIN_POPUP_SUBMENU_ID : MIN_SUBMENU_ID;
menu = GetMenuHandle (i);
while (menu != NULL)
{
@ -1679,27 +1671,7 @@ set_frame_menubar (f, first_time, deep_p)
/* Non-null value to indicate menubar has already been "created". */
f->output_data.mac->menubar_widget = 1;
{
int i = MIN_MENU_ID;
MenuHandle menu = GetMenuHandle (i);
while (menu != NULL)
{
DeleteMenu (i);
DisposeMenu (menu);
menu = GetMenuHandle (++i);
}
i = MIN_SUBMENU_ID;
menu = GetMenuHandle (i);
while (menu != NULL)
{
DeleteMenu (i);
DisposeMenu (menu);
menu = GetMenuHandle (++i);
}
}
fill_menubar (first_wv->contents);
fill_menubar (first_wv->contents, deep_p);
/* Add event handler so we can detect C-g. */
install_menu_quit_handler (NULL);
@ -1708,22 +1680,6 @@ set_frame_menubar (f, first_time, deep_p)
UNBLOCK_INPUT;
}
/* Called from Fx_create_frame to create the initial menubar of a frame
before it is mapped, so that the window is mapped with the menubar already
there instead of us tacking it on later and thrashing the window after it
is visible. */
void
initialize_frame_menubar (f)
FRAME_PTR f;
{
/* This function is called before the first chance to redisplay
the frame. It has to be, so the frame will have the right size. */
FRAME_MENU_BAR_ITEMS (f) = menu_bar_items (FRAME_MENU_BAR_ITEMS (f));
set_frame_menubar (f, 1, 1);
}
/* Get rid of the menu bar of frame F, and free its storage.
This is used when deleting a frame, and when turning off the menu bar. */
@ -1739,11 +1695,9 @@ static Lisp_Object
pop_down_menu (arg)
Lisp_Object arg;
{
struct Lisp_Save_Value *p1 = XSAVE_VALUE (Fcar (arg));
struct Lisp_Save_Value *p2 = XSAVE_VALUE (Fcdr (arg));
FRAME_PTR f = p1->pointer;
MenuHandle *menu = p2->pointer;
struct Lisp_Save_Value *p = XSAVE_VALUE (arg);
FRAME_PTR f = p->pointer;
MenuHandle menu = GetMenuHandle (POPUP_SUBMENU_ID);
BLOCK_INPUT;
@ -1752,19 +1706,9 @@ pop_down_menu (arg)
FRAME_MAC_DISPLAY_INFO (f)->grabbed = 0;
/* delete all menus */
{
int i = MIN_POPUP_SUBMENU_ID;
MenuHandle submenu = GetMenuHandle (i);
while (submenu != NULL)
{
DeleteMenu (i);
DisposeMenu (submenu);
submenu = GetMenuHandle (++i);
}
}
dispose_menus (MIN_POPUP_SUBMENU_ID);
DeleteMenu (POPUP_SUBMENU_ID);
DisposeMenu (*menu);
DisposeMenu (menu);
UNBLOCK_INPUT;
@ -1998,8 +1942,8 @@ mac_menu_show (f, x, y, for_click, keymaps, title, error)
/* Actually create the menu. */
menu = NewMenu (POPUP_SUBMENU_ID, "\p");
submenu_id = MIN_POPUP_SUBMENU_ID;
fill_submenu (menu, first_wv->contents);
InsertMenu (menu, -1);
fill_menu (menu, first_wv->contents, MIN_POPUP_SUBMENU_ID);
/* Free the widget_value objects we used to specify the
contents. */
@ -2016,11 +1960,7 @@ mac_menu_show (f, x, y, for_click, keymaps, title, error)
menu_item_choice = 0;
menu_item_selection = 0;
InsertMenu (menu, -1);
record_unwind_protect (pop_down_menu,
Fcons (make_save_value (f, 0),
make_save_value (&menu, 0)));
record_unwind_protect (pop_down_menu, make_save_value (f, 0));
/* Add event handler so we can detect C-g. */
install_menu_quit_handler (menu);
@ -2421,15 +2361,16 @@ name_is_separator (name)
}
static void
add_menu_item (MenuHandle menu, widget_value *wv, int submenu,
int force_disable)
add_menu_item (menu, pos, wv)
MenuHandle menu;
int pos;
widget_value *wv;
{
#if TARGET_API_MAC_CARBON
CFStringRef item_name;
#else
Str255 item_name;
#endif
int pos;
if (name_is_separator (wv->name))
AppendMenu (menu, "\p-");
@ -2438,8 +2379,6 @@ add_menu_item (MenuHandle menu, widget_value *wv, int submenu,
AppendMenu (menu, "\pX");
#if TARGET_API_MAC_CARBON
pos = CountMenuItems (menu);
item_name = cfstring_create_with_utf8_cstring (wv->name);
if (wv->key != NULL)
@ -2457,13 +2396,11 @@ add_menu_item (MenuHandle menu, widget_value *wv, int submenu,
SetMenuItemTextWithCFString (menu, pos, item_name);
CFRelease (item_name);
if (wv->enabled && !force_disable)
if (wv->enabled)
EnableMenuItem (menu, pos);
else
DisableMenuItem (menu, pos);
#else /* ! TARGET_API_MAC_CARBON */
pos = CountMItems (menu);
item_name[sizeof (item_name) - 1] = '\0';
strncpy (item_name, wv->name, sizeof (item_name) - 1);
if (wv->key != NULL)
@ -2477,88 +2414,140 @@ add_menu_item (MenuHandle menu, widget_value *wv, int submenu,
c2pstr (item_name);
SetMenuItemText (menu, pos, item_name);
if (wv->enabled && !force_disable)
if (wv->enabled)
EnableItem (menu, pos);
else
DisableItem (menu, pos);
#endif /* ! TARGET_API_MAC_CARBON */
/* Draw radio buttons and tickboxes. */
{
if (wv->selected && (wv->button_type == BUTTON_TYPE_TOGGLE ||
wv->button_type == BUTTON_TYPE_RADIO))
SetItemMark (menu, pos, checkMark);
else
SetItemMark (menu, pos, noMark);
}
SetMenuItemRefCon (menu, pos, (UInt32) wv->call_data);
}
if (submenu != 0)
SetMenuItemHierarchicalID (menu, pos, submenu);
}
/* Construct native Mac OS menubar based on widget_value tree. */
static void
fill_submenu (MenuHandle menu, widget_value *wv)
{
for ( ; wv != NULL; wv = wv->next)
if (wv->contents)
{
int cur_submenu = submenu_id++;
MenuHandle submenu = NewMenu (cur_submenu, "\pX");
fill_submenu (submenu, wv->contents);
InsertMenu (submenu, -1);
add_menu_item (menu, wv, cur_submenu, 0);
}
else
add_menu_item (menu, wv, 0, 0);
}
/* Construct native Mac OS menu based on widget_value tree. */
static void
fill_menu (MenuHandle menu, widget_value *wv)
static int
fill_menu (menu, wv, submenu_id)
MenuHandle menu;
widget_value *wv;
int submenu_id;
{
for ( ; wv != NULL; wv = wv->next)
if (wv->contents)
{
int cur_submenu = submenu_id++;
MenuHandle submenu = NewMenu (cur_submenu, "\pX");
fill_submenu (submenu, wv->contents);
InsertMenu (submenu, -1);
add_menu_item (menu, wv, cur_submenu, 0);
}
else
add_menu_item (menu, wv, 0, 0);
int pos;
for (pos = 1; wv != NULL; wv = wv->next, pos++)
{
add_menu_item (menu, pos, wv);
if (wv->contents)
{
MenuHandle submenu = NewMenu (submenu_id, "\pX");
InsertMenu (submenu, -1);
SetMenuItemHierarchicalID (menu, pos, submenu_id);
submenu_id = fill_menu (submenu, wv->contents, submenu_id + 1);
}
}
return submenu_id;
}
/* Construct native Mac OS menubar based on widget_value tree. */
static void
fill_menubar (widget_value *wv)
fill_menubar (wv, deep_p)
widget_value *wv;
int deep_p;
{
int id;
int id, submenu_id;
MenuHandle menu;
Str255 title;
#if !TARGET_API_MAC_CARBON
int title_changed_p = 0;
#endif
submenu_id = MIN_SUBMENU_ID;
/* Clean up the menu bar when filled by the entire menu trees. */
if (deep_p)
{
dispose_menus (MIN_MENU_ID);
dispose_menus (MIN_SUBMENU_ID);
#if !TARGET_API_MAC_CARBON
title_changed_p = 1;
#endif
}
/* Fill menu bar titles and submenus. Reuse the existing menu bar
titles as much as possible to minimize redraw (if !deep_p). */
submenu_id = MIN_SUBMENU_ID;
for (id = MIN_MENU_ID; wv != NULL; wv = wv->next, id++)
{
MenuHandle menu;
Str255 title;
strncpy (title, wv->name, 255);
title[255] = 0;
title[255] = '\0';
c2pstr (title);
menu = NewMenu (id, title);
menu = GetMenuHandle (id);
if (menu)
{
#if TARGET_API_MAC_CARBON
Str255 old_title;
GetMenuTitle (menu, old_title);
if (!EqualString (title, old_title, false, false))
SetMenuTitle (menu, title);
#else /* !TARGET_API_MAC_CARBON */
if (!EqualString (title, (*menu)->menuData, false, false))
{
DeleteMenu (id);
DisposeMenu (menu);
menu = NewMenu (id, title);
InsertMenu (menu, GetMenuHandle (id + 1) ? id + 1 : 0);
title_changed_p = 1;
}
#endif /* !TARGET_API_MAC_CARBON */
}
else
{
menu = NewMenu (id, title);
InsertMenu (menu, 0);
#if !TARGET_API_MAC_CARBON
title_changed_p = 1;
#endif
}
if (wv->contents)
fill_menu (menu, wv->contents);
submenu_id = fill_menu (menu, wv->contents, submenu_id);
}
InsertMenu (menu, 0);
if (GetMenuHandle (id))
{
dispose_menus (id);
#if !TARGET_API_MAC_CARBON
title_changed_p = 1;
#endif
}
#if !TARGET_API_MAC_CARBON
if (title_changed_p)
InvalMenuBar ();
#endif
}
static void
dispose_menus (id)
int id;
{
MenuHandle menu;
while ((menu = GetMenuHandle (id)) != NULL)
{
DeleteMenu (id);
DisposeMenu (menu);
id++;
}
}

View File

@ -2067,10 +2067,10 @@ extend_range_table_work_area (work_area)
work_area->allocated += 16 * sizeof (int);
if (work_area->table)
work_area->table
= (int *) realloc (work_area->table, work_area->allocated);
= (int *) xrealloc (work_area->table, work_area->allocated);
else
work_area->table
= (int *) malloc (work_area->allocated);
= (int *) xmalloc (work_area->allocated);
}
#ifdef emacs
@ -3608,13 +3608,13 @@ regex_compile (pattern, size, syntax, bufp)
if (! fail_stack.stack)
fail_stack.stack
= (fail_stack_elt_t *) malloc (fail_stack.size
* sizeof (fail_stack_elt_t));
= (fail_stack_elt_t *) xmalloc (fail_stack.size
* sizeof (fail_stack_elt_t));
else
fail_stack.stack
= (fail_stack_elt_t *) realloc (fail_stack.stack,
(fail_stack.size
* sizeof (fail_stack_elt_t)));
= (fail_stack_elt_t *) xrealloc (fail_stack.stack,
(fail_stack.size
* sizeof (fail_stack_elt_t)));
}
regex_grow_registers (num_regs);
@ -6292,15 +6292,15 @@ regcomp (preg, pattern, cflags)
preg->used = 0;
/* Try to allocate space for the fastmap. */
preg->fastmap = (char *) malloc (1 << BYTEWIDTH);
preg->fastmap = (char *) xmalloc (1 << BYTEWIDTH);
if (cflags & REG_ICASE)
{
unsigned i;
preg->translate
= (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE
* sizeof (*(RE_TRANSLATE_TYPE)0));
= (RE_TRANSLATE_TYPE) xmalloc (CHAR_SET_SIZE
* sizeof (*(RE_TRANSLATE_TYPE)0));
if (preg->translate == NULL)
return (int) REG_ESPACE;

View File

@ -33,6 +33,10 @@ typedef void *POINTER;
#include "mem-limits.h"
#ifdef HAVE_GETRLIMIT
#include <sys/resource.h>
#endif
/*
Level number of warnings already issued.
0 -- no warnings issued.
@ -61,6 +65,19 @@ check_memory_limits ()
unsigned long five_percent;
unsigned long data_size;
#ifdef HAVE_GETRLIMIT
struct rlimit {
rlim_t rlim_cur;
rlim_t rlim_max;
} rlimit;
getrlimit (RLIMIT_DATA, &rlimit);
five_percent = rlimit.rlim_max / 20;
data_size = rlimit.rlim_cur;
#else /* not HAVE_GETRLIMIT */
if (lim_data == 0)
get_lim_data ();
five_percent = lim_data / 20;
@ -74,6 +91,8 @@ check_memory_limits ()
cp = (char *) (*__morecore) (0);
data_size = (char *) cp - (char *) data_space_start;
#endif /* not HAVE_GETRLIMIT */
if (warn_function)
switch (warnlevel)
{

View File

@ -2570,7 +2570,10 @@ window_min_size_1 (w, width_p)
else
{
if (width_p)
size = window_min_width;
size = max (window_min_width,
(MIN_SAFE_WINDOW_WIDTH
+ WINDOW_FRINGE_COLS (w)
+ WINDOW_SCROLL_BAR_COLS (w)));
else
{
if (MINI_WINDOW_P (w)
@ -4288,7 +4291,7 @@ adjust_window_trailing_edge (window, delta, horiz_flag)
{
/* This may happen for the minibuffer. In that case
the window_deletion_count check below does not work. */
if (XINT (CURSIZE (p->next)) - delta <= 0)
if (XINT (CURSIZE (p->next)) - delta <= 0)
{
Fset_window_configuration (old_config);
error ("Cannot adjust window size as specified");
@ -6602,7 +6605,8 @@ this is automatically adjusted to a multiple of the frame column width.
Third parameter VERTICAL-TYPE specifies the type of the vertical scroll
bar: left, right, or nil.
If WIDTH is nil, use the frame's scroll-bar width.
If TYPE is t, use the frame's scroll-bar type. */)
If VERTICAL-TYPE is t, use the frame's scroll-bar type.
Fourth parameter HORIZONTAL-TYPE is currently unused. */)
(window, width, vertical_type, horizontal_type)
Lisp_Object window, width, vertical_type, horizontal_type;
{

View File

@ -9057,14 +9057,15 @@ update_menu_bar (f, save_match_data)
/* Redisplay the menu bar in case we changed it. */
#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) || defined (MAC_OS) \
|| defined (USE_GTK)
if (FRAME_WINDOW_P (f)
#if defined (MAC_OS)
/* All frames on Mac OS share the same menubar. So only the
selected frame should be allowed to set it. */
&& f == SELECTED_FRAME ()
if (FRAME_WINDOW_P (f))
{
#ifdef MAC_OS
/* All frames on Mac OS share the same menubar. So only
the selected frame should be allowed to set it. */
if (f == SELECTED_FRAME ())
#endif
)
set_frame_menubar (f, 0, 0);
set_frame_menubar (f, 0, 0);
}
else
/* On a terminal screen, the menu bar is an ordinary screen
line, and this makes it get updated. */
@ -16492,8 +16493,11 @@ display_mode_element (it, depth, field_width, precision, elt, props, risky)
{
int bytepos = last_offset;
int charpos = string_byte_to_char (elt, bytepos);
if (precision <= 0)
nchars = string_byte_to_char (elt, offset) - charpos;
n += display_string (NULL, elt, Qnil, 0, charpos,
it, 0, prec, 0,
it, 0, nchars, 0,
STRING_MULTIBYTE (elt));
}
break;
@ -17742,7 +17746,7 @@ display_count_lines (start, start_byte, limit_byte, count, byte_pos_ptr)
display them, and < 0 means obey the current buffer's value of
enable_multibyte_characters.
Value is the number of glyphs produced. */
Value is the number of columns displayed. */
static int
display_string (string, lisp_string, face_string, face_string_pos,

View File

@ -1819,8 +1819,11 @@ digest_single_submenu (start, end, top_level_items)
wv->enabled = 1;
wv->button_type = BUTTON_TYPE_NONE;
wv->help = Qnil;
save_wv = wv;
}
save_wv = wv;
else
save_wv = first_wv;
prev_wv = 0;
i += MENU_ITEMS_PANE_LENGTH;
}

View File

@ -7527,7 +7527,7 @@ x_catch_errors (dpy)
Display *dpy;
{
int count = SPECPDL_INDEX ();
struct x_error_message_stack *data = malloc (sizeof (*data));
struct x_error_message_stack *data = xmalloc (sizeof (*data));
Lisp_Object dummy;
#ifdef ENABLE_CHECKING
dummy = make_number ((EMACS_INT)dpy + (EMACS_INT)x_error_message);