mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-28 07:45:00 +00:00
Merged from emacs@sv.gnu.org
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:
commit
f2aa3ae43b
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
30
etc/NEWS
30
etc/NEWS
@ -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:
|
||||
|
1532
etc/TUTORIAL.cn
1532
etc/TUTORIAL.cn
File diff suppressed because it is too large
Load Diff
@ -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>
|
||||
|
346
lisp/ChangeLog
346
lisp/ChangeLog
@ -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)
|
||||
|
1634
lisp/allout.el
1634
lisp/allout.el
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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)))))
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -371,5 +371,6 @@
|
||||
|
||||
(provide 'ediff-hook)
|
||||
|
||||
|
||||
;;; arch-tag: 512f8656-8a4b-4789-af5d-5c6144498df3
|
||||
;;; ediff-hook.el ends here
|
||||
|
@ -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)
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)))))
|
||||
|
@ -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)
|
||||
|
@ -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)))
|
||||
)))
|
||||
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)))
|
||||
|
@ -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))
|
||||
|
12
lisp/ffap.el
12
lisp/ffap.el
@ -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'):
|
||||
|
235
lisp/files.el
235
lisp/files.el
@ -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.")
|
||||
|
@ -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.
|
||||
|
@ -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."
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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))
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
@ -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)))))
|
||||
|
@ -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
|
||||
|
174
lisp/info.el
174
lisp/info.el
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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: ")
|
||||
|
@ -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:
|
||||
|
@ -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.
|
||||
|
@ -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 ()
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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))
|
||||
|
@ -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))
|
||||
|
@ -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)))
|
||||
|
@ -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 "")
|
||||
|
114
lisp/wid-edit.el
114
lisp/wid-edit.el
@ -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))
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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),
|
||||
|
@ -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,
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
@ -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}.
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
|
@ -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));
|
||||
|
247
src/macmenu.c
247
src/macmenu.c
@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
|
20
src/regex.c
20
src/regex.c
@ -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;
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
10
src/window.c
10
src/window.c
@ -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;
|
||||
{
|
||||
|
22
src/xdisp.c
22
src/xdisp.c
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user