Mercurial > emacs
view CONTRIBUTE @ 72917:17942cb3949e
(allout-regexp, allout-line-boundary-regexp)
(allout-bob-regexp): Correct grouping and boundaries to fix backwards traversal.
(allout-depth-specific-regexp, allout-depth-one-regexp): New versions that
exploit \\{M\\} regexp syntax, to avoid geometric or worse time in
allout-ascend.
(allout-doublecheck-at-and-shallower): Identify depth threshold below which
topics are checked for and disqualified by containment discontinuities.
(allout-hotspot-key-handler): Correctly handle multiple-key strokes. Remove
some unused variables.
(allout-mode-leaders): Clarify that mode-specific comment-start will be used
(set-allout-regexp): Correctly regexp-quote allout regexps to properly accept
alternative header-leads and primary bullets with regexp-specific characters
(eg, C "/*", mathematica "(*").
Include new regular expressions among those configured.
(allout-infer-header-lead-and-primary-bullet): Rename allout-infer-header-lead.
(allout-recent-depth): Manifest as a variable as well as a function.
(allout-prefix-data): Simplify into an inline instead of a macro, assuming
current match data rather than being explicitly passed it. Establish
allout-recent-depth value as well as allout-recent-prefix-beginning and
allout-recent-prefix-end.
(allout-aberrant-container-p): True when an item's immediate offspring
discontinuously contained. Useful for disqualifying unintended topic prefixes,
likely at low depths.
(allout-goto-prefix-doublechecked): Elaborated version of allout-goto-prefix
which disqualifies aberrant pseudo-items.
(allout-pre-next-prefix): Layer on top of lower-level routines, to get
disqualification of aberrant containers.
(allout-end-of-prefix, allout-end-of-subtree): Disqualify aberrant containers.
(allout-beginning-of-current-entry): Position at start of buffer when in
container (depth 0) entry.
(nullify-allout-prefix-data): Invalidate allout-recent-* prefix data.
(allout-current-bullet): Strip text properties.
(allout-get-prefix-bullet): Use right match groups.
(allout-beginning-of-line, allout-next-heading): Disqualify aberrant containers.
(allout-previous-heading): Disqualify aberrant containers, and change to
regular (rather than inline) function, to allow self-recursion.
(allout-get-invisibility-overlay): Increment so progress is made when the first
overlay is not the sought one.
(allout-end-of-prefix): Disqualify aberrant containers.
(allout-end-of-line): Cycle something like allout-beginning-of-line.
(allout-mode): Make allout-old-style-prefixes (ie, enabling use with outline.el
outlines) functional again. Change the primary bullet along with the
header-lead - level 1 new-style bullets now work.
Engage allout-before-change-handler in mainline emacs, not just xemacs, to do
undo handling.
(allout-before-change-handler): Expose undo changes occurring in hidden
regions. Use allout-get-invisibility-overlay instead of reimplementing it
inline.
(allout-chart-subtree): Use start rather than end of prefix in charts. Use
allout-recent-depth variable.
(allout-chart-siblings): Disqualify aberrant topics.
(allout-beginning-of-current-entry): Position correctly.
(allout-ascend): Use new allout-depth-specific-regexp and
allout-depth-one-regexp for linear instead of O(N^2) or worse behavior.
(allout-ascend-to-depth): Depend on allout-ascend, rather than reimplementing
an algorithm.
(allout-up-current-level): Depend on allout-ascend, rather than reimplementing
an algorithm. Return to start-point if we fail.
(allout-descend-to-depth): Use allout-recent-depth variable instead of function.
(allout-next-sibling): On traversal of numerous intervening topics, resort to
economical allout-next-sibling-leap.
(allout-next-sibling-leap): Specialized version of allout-next-sibling that
uses allout-ascend cleverly, to depend on a regexp search to leap large numbers
of contained topics, rather than arbitrarily many one-by-one traversals.
(allout-next-visible-heading): Disqualify aberrant topics.
(allout-previous-visible-heading): Position consistently when interactive.
(allout-forward-current-level): Base on allout-previous-sibling rather than
(differently) reimplmenting the algorithm. Remove some unused variables.
(allout-solicit-alternate-bullet): Present default choice stripped of text
properties.
(allout-rebullet-heading): Use bullet stripped of text properties.
Register changes using allout-exposure-change-hook. Disregard aberrant topics.
(allout-shift-in): With universal-argument, make topic a peer of it's former
offspring. Simplify the code by separating out allout-shift-out functionality.
(allout-shift-out): With universal-argument, make offspring peers of their
former container, and its siblings. Implement the functionality here, rather
than inappropriately muddling the implementation of allout-shift-in.
(allout-rebullet-topic): Respect additional argument for new parent-child
separation function.
(allout-yank-processing): Use allout-ascend directly.
(allout-show-entry): Disqualify aberrant topics.
(allout-show-children): Handle discontinuous children gracefully, extending the
depth being revealed to expose them and posting a message indicating the
situation.
(allout-show-to-offshoot): Remove obsolete and incorrect comment. Leave cursor
in correct position.
(allout-hide-current-subtree): Use allout-ascend directly. Disqualify aberrant
topics.
(allout-kill-line, allout-kill-topic): Preserve exposure layout in a way that
the yanks can restore it, as used to happen.
(allout-yank-processing): Restore exposure layout as recorded by allout-kill-*,
as used to happen.
(allout-annotate-hidden, allout-hide-by-annotation): New routines for preseving
and restoring exposure layout across kills.
(allout-toggle-subtree-encryption): Run allout-exposure-change-hook.
(allout-encrypt-string): Strip text properties. Rearranged order and
outline-headings for some of the miscellaneous functions.
(allout-resolve-xref): No need to quote the error name in the condition-case
handler section.
(allout-flatten): Classic recursive (and recursively intensive, without
tail-recursion) list-flattener, needed by allout-shift-out when confronted with
discontinuous children.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sat, 16 Sep 2006 10:24:24 +0000 |
parents | caa0a3ee1f41 |
children | 68cfc1db0d26 |
line wrap: on
line source
Contributing to Emacs Emacs is a collaborative project and we encourage contributions from anyone and everyone. If you want to contribute in the way that will help us most, we recommend (1) fixing reported bugs and (2) implementing the feature ideas in etc/TODO. However, if you think of new features to add, please suggest them too -- we might like your idea. Porting to new platforms is also useful, when there is a new platform, but that is not common nowadays. For documentation on how to develop Emacs changes, refer to the Emacs Manual and the Emacs Lisp Reference Manual (both included in the Emacs distribution). The web pages in http://www.gnu.org/software/emacs contain additional information. You may also want to submit your change so that can be considered for inclusion in a future version of Emacs (see below). If you don't feel up to hacking Emacs, there are many other ways to help. You can answer questions on the mailing lists, write documentation, find and report bugs, contribute to the Emacs web pages, or develop a package that works with Emacs. Here are some style and legal conventions for contributors to Emacs: * Coding Standards Contributed code should follow the GNU Coding Standard. If it doesn't, we'll need to find someone to fix the code before we can use it. Emacs has certain additional style and coding conventions. Ref: http://www.gnu.org/prep/standards_toc.html Ref: GNU Coding Standards Info Manual Ref: The "Tips" Appendix in the Emacs Lisp Reference. * Copyright Assignment We can accept small changes without legal papers, and for medium-size changes a copyright disclaimer is ok too. To accept substantial contributions from you, we need a copyright assignment form filled out and filed with the FSF. Contact us at emacs-devel@gnu.org to obtain the relevant forms. * Getting the Source Code The latest version of Emacs can be downloaded using CVS or Arch from the Savannah web site. It is important to write your patch based on this version; if you start from an older version, your patch may be outdated when you write it, and maintainers will have hard time applying it. After you have downloaded the CVS source, you should read the file INSTALL.CVS for build instructions (they differ to some extent from a normal build). Ref: http://savannah.gnu.org/projects/emacs * Submitting Patches Every patch must have several pieces of information before we can properly evaluate it. When you have all these pieces, bundle them up in a mail message and send it to emacs-pretest-bug@gnu.org or emacs-devel@gnu.org. All subsequent discussion should also be sent to the mailing list. ** Description For bug fixes, a description of the bug and how your patch fixes this bug. For new features, a description of the feature and your implementation. ** ChangeLog A ChangeLog entry as plaintext (separate from the patch). See the various ChangeLog files for format and content. Note that, unlike some other projects, we do require ChangeLogs also for documentation, i.e. Texinfo files. Ref: "Change Log Concepts" node of the GNU Coding Standards Info Manual, for how to write good log entries. ** The patch itself. Please use "Context Diff" format. If you are accessing the CVS repository use cvs update; cvs diff -cp else, use diff -cp OLD NEW If your version of diff does not support these options, then get the latest version of GNU Diff. ** Mail format. We prefer to get the patches as inline plain text. Please be aware of line wrapping which will make the patch unreadable and useless for us. To avoid that, you can use MIME attachments or, as a last resort, uuencoded gzipped text. ** Please reread your patch before submitting it. ** Do not mix changes. If you send several unrelated changes together, we will ask you to separate them so we can consider each of the changes by itself. * Coding style and conventions. ** Mandatory reading: The "Tips and Conventions" Appendix of the Emacs Lisp Reference. ** Avoid using `defadvice' or `eval-after-load' for Lisp code to be included in Emacs. ** Remove all trailing whitespace in all source and text files. ** Use ?\s instead of ? in Lisp code for a space character. * Supplemental information for Emacs Developers. ** Write access to Emacs' CVS repository. Once you become a frequent contributor to Emacs, we can consider giving you write access to the CVS repository. ** Emacs Mailing lists. Discussion about Emacs development takes place on emacs-devel@gnu.org. Bug reports for released versions are sent to bug-gnu-emacs@gnu.org. Bug reports for development versions are sent to emacs-pretest-bug@gnu.org. You can subscribe to the mailing lists at savannah.gnu.org/projects/emacs. You can find the mailing lists archives at lists.gnu.org or gmane.org. ** Document your changes. Think carefully about whether your change requires updating the documentation. If it does, you can either do this yourself or add an item to the NEWS file. If you document your change in NEWS, please mark the NEWS entry with the documentation status of the change: if you submit the changes for the manuals, mark it with "+++"; if it doesn't need to be documented, mark it with "---"; if it needs to be documented, but you didn't submit documentation changes, leave the NEWS entry unmarked. (These marks are checked by the Emacs maintainers to make sure every change was reflected in the manuals.) ** Understanding Emacs Internals. The best way to understand Emacs Internals is to read the code, but the nodes "Tips" and "GNU Emacs Internals" in the Appendix of the Emacs Lisp Reference Manual may also help. The file etc/DEBUG describes how to debug Emacs bugs. * How to Maintain Copyright Years for GNU Emacs ** Our lawyer says it is ok if we add, to each file that has been in Emacs since Emacs 21 came out in 2001, all the subsequent years. We don't need to check whether *that file* was changed in those years. It's sufficient that *Emacs* was changed in those years (and it was!). ** For those files that have been added since then, we should add the year it was added to Emacs, and all subsequent years. ** For the refcards under etc/, it's ok to simply use the latest year (typically in a `\def\year{YEAR}' expression) for the rendered copyright notice, while maintaining the full list of years in the copyright notice in the comments. Local variables: mode: outline paragraph-separate: "[ ]*$" end: