Mercurial > emacs
comparison lisp/allout.el @ 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 | b42e98d06749 |
children | ec72ab6f5541 |
comparison
equal
deleted
inserted
replaced
72916:e4676aa6a290 | 72917:17942cb3949e |
---|---|
2440 (forward-char 1)) | 2440 (forward-char 1)) |
2441 | 2441 |
2442 (when (re-search-forward allout-line-boundary-regexp nil 0) | 2442 (when (re-search-forward allout-line-boundary-regexp nil 0) |
2443 (allout-prefix-data) | 2443 (allout-prefix-data) |
2444 (and (<= allout-recent-depth allout-doublecheck-at-and-shallower) | 2444 (and (<= allout-recent-depth allout-doublecheck-at-and-shallower) |
2445 ;; register non-aberrant or disqualifying offspring as allout-recent-* | 2445 ;; this will set allout-recent-* on the first non-aberrant topic, |
2446 ;; whether it's the current one or one that disqualifies it: | |
2446 (allout-aberrant-container-p)) | 2447 (allout-aberrant-container-p)) |
2447 (goto-char allout-recent-prefix-beginning))) | 2448 (goto-char allout-recent-prefix-beginning))) |
2448 ;;;_ > allout-this-or-next-heading | 2449 ;;;_ > allout-this-or-next-heading |
2449 (defun allout-this-or-next-heading () | 2450 (defun allout-this-or-next-heading () |
2450 "Position cursor on current or next heading." | 2451 "Position cursor on current or next heading." |
2451 ;; A throwaway non-macro that is defined after allout-next-heading | 2452 ;; A throwaway non-macro that is defined after allout-next-heading |
2452 ;; and usable by allout-mode. | 2453 ;; and usable by allout-mode. |
2453 (if (not (allout-goto-prefix-doublechecked)) (allout-next-heading))) | 2454 (if (not (allout-goto-prefix-doublechecked)) (allout-next-heading))) |
2454 ;;;_ > allout-previous-heading () | 2455 ;;;_ > allout-previous-heading () |
2455 (defsubst allout-previous-heading () | 2456 (defun allout-previous-heading () |
2456 "Move to the prior \(possibly invisible) heading line. | 2457 "Move to the prior \(possibly invisible) heading line. |
2457 | 2458 |
2458 Return the location of the beginning of the heading, or nil if not found. | 2459 Return the location of the beginning of the heading, or nil if not found. |
2459 | 2460 |
2460 We skip anomolous low-level topics, a la `allout-aberrant-container-p'." | 2461 We skip anomolous low-level topics, a la `allout-aberrant-container-p'." |
2468 (looking-at allout-bob-regexp)) | 2469 (looking-at allout-bob-regexp)) |
2469 (goto-char (allout-prefix-data)) | 2470 (goto-char (allout-prefix-data)) |
2470 (if (and (<= allout-recent-depth allout-doublecheck-at-and-shallower) | 2471 (if (and (<= allout-recent-depth allout-doublecheck-at-and-shallower) |
2471 (allout-aberrant-container-p)) | 2472 (allout-aberrant-container-p)) |
2472 (or (allout-previous-heading) | 2473 (or (allout-previous-heading) |
2473 (goto-char start-point) | 2474 (and (goto-char start-point) |
2474 ;; recalibrate allout-recent-*: | 2475 ;; recalibrate allout-recent-*: |
2475 (allout-depth))) | 2476 (allout-depth) |
2476 (point))))) | 2477 nil)) |
2478 (point)))))) | |
2477 ;;;_ > allout-get-invisibility-overlay () | 2479 ;;;_ > allout-get-invisibility-overlay () |
2478 (defun allout-get-invisibility-overlay () | 2480 (defun allout-get-invisibility-overlay () |
2479 "Return the overlay at point that dictates allout invisibility." | 2481 "Return the overlay at point that dictates allout invisibility." |
2480 (let ((overlays (overlays-at (point))) | 2482 (let ((overlays (overlays-at (point))) |
2481 got) | 2483 got) |
2719 (allout-current-depth))) | 2721 (allout-current-depth))) |
2720 ;;;_ > allout-current-bullet-pos () | 2722 ;;;_ > allout-current-bullet-pos () |
2721 (defun allout-current-bullet-pos () | 2723 (defun allout-current-bullet-pos () |
2722 "Return position of current \(visible) topic's bullet." | 2724 "Return position of current \(visible) topic's bullet." |
2723 | 2725 |
2724 (if (not (allout-current-depth)) | 2726 (if (not (allout-current-depth)) |
2725 nil | 2727 nil |
2726 (1- allout-recent-prefix-end))) | 2728 (1- allout-recent-prefix-end))) |
2727 ;;;_ > allout-back-to-current-heading () | 2729 ;;;_ > allout-back-to-current-heading () |
2728 (defun allout-back-to-current-heading () | 2730 (defun allout-back-to-current-heading () |
2729 "Move to heading line of current topic, or beginning if already on the line. | 2731 "Move to heading line of current topic, or beginning if already on the line. |
2730 | 2732 |
2731 Return value of point, unless we started outside of (before any) topics, | 2733 Return value of point, unless we started outside of (before any) topics, |
2750 (defun allout-pre-next-prefix () | 2752 (defun allout-pre-next-prefix () |
2751 "Skip forward to just before the next heading line. | 2753 "Skip forward to just before the next heading line. |
2752 | 2754 |
2753 Returns that character position." | 2755 Returns that character position." |
2754 | 2756 |
2755 (if (re-search-forward allout-line-boundary-regexp nil 'move) | 2757 (if (allout-next-heading) |
2756 (goto-char (1- (allout-prefix-data))))) | 2758 (goto-char (1- allout-recent-prefix-beginning)))) |
2757 ;;;_ > allout-end-of-subtree (&optional current include-trailing-blank) | 2759 ;;;_ > allout-end-of-subtree (&optional current include-trailing-blank) |
2758 (defun allout-end-of-subtree (&optional current include-trailing-blank) | 2760 (defun allout-end-of-subtree (&optional current include-trailing-blank) |
2759 "Put point at the end of the last leaf in the containing topic. | 2761 "Put point at the end of the last leaf in the containing topic. |
2760 | 2762 |
2761 Optional CURRENT means put point at the end of the containing | 2763 Optional CURRENT means put point at the end of the containing |
2861 ;;;_ > allout-ascend () | 2863 ;;;_ > allout-ascend () |
2862 (defun allout-ascend () | 2864 (defun allout-ascend () |
2863 "Ascend one level, returning t if successful, nil if not." | 2865 "Ascend one level, returning t if successful, nil if not." |
2864 (prog1 | 2866 (prog1 |
2865 (if (allout-beginning-of-level) | 2867 (if (allout-beginning-of-level) |
2866 (allout-previous-heading)) | 2868 (allout-previous-heading)) |
2867 (if (interactive-p) (allout-end-of-prefix)))) | 2869 (if (interactive-p) (allout-end-of-prefix)))) |
2868 ;;;_ > allout-descend-to-depth (depth) | 2870 ;;;_ > allout-descend-to-depth (depth) |
2869 (defun allout-descend-to-depth (depth) | 2871 (defun allout-descend-to-depth (depth) |
2870 "Descend to depth DEPTH within current topic. | 2872 "Descend to depth DEPTH within current topic. |
2871 | 2873 |
2885 ) | 2887 ) |
2886 ;;;_ > allout-up-current-level (arg) | 2888 ;;;_ > allout-up-current-level (arg) |
2887 (defun allout-up-current-level (arg) | 2889 (defun allout-up-current-level (arg) |
2888 "Move out ARG levels from current visible topic." | 2890 "Move out ARG levels from current visible topic." |
2889 (interactive "p") | 2891 (interactive "p") |
2890 (allout-back-to-current-heading) | 2892 (let ((start-point (point))) |
2891 (if (not (allout-ascend)) | 2893 (allout-back-to-current-heading) |
2892 (error "Can't ascend past outermost level") | 2894 (if (not (allout-ascend)) |
2893 (if (interactive-p) (allout-end-of-prefix)) | 2895 (progn (goto-char start-point) |
2894 allout-recent-prefix-beginning)) | 2896 (error "Can't ascend past outermost level")) |
2897 (if (interactive-p) (allout-end-of-prefix)) | |
2898 allout-recent-prefix-beginning))) | |
2895 | 2899 |
2896 ;;;_ - Linear | 2900 ;;;_ - Linear |
2897 ;;;_ > allout-next-sibling (&optional depth backward) | 2901 ;;;_ > allout-next-sibling (&optional depth backward) |
2898 (defun allout-next-sibling (&optional depth backward) | 2902 (defun allout-next-sibling (&optional depth backward) |
2899 "Like `allout-forward-current-level', but respects invisible topics. | 2903 "Like `allout-forward-current-level', but respects invisible topics. |
6529 ;;;_ > allout-flatten (list) | 6533 ;;;_ > allout-flatten (list) |
6530 (defun allout-flatten (list) | 6534 (defun allout-flatten (list) |
6531 "Return a list of all atoms in list." | 6535 "Return a list of all atoms in list." |
6532 ;; classic. | 6536 ;; classic. |
6533 (cond ((null list) nil) | 6537 (cond ((null list) nil) |
6534 ((atom (car list)) (cons (car list) (flatten (cdr list)))) | 6538 ((atom (car list)) (cons (car list) (allout-flatten (cdr list)))) |
6535 (t (append (flatten (car list)) (flatten (cdr list)))))) | 6539 (t (append (allout-flatten (car list)) (allout-flatten (cdr list)))))) |
6536 ;;;_ : Compatability: | 6540 ;;;_ : Compatability: |
6537 ;;;_ > allout-mark-marker to accommodate divergent emacsen: | 6541 ;;;_ > allout-mark-marker to accommodate divergent emacsen: |
6538 (defun allout-mark-marker (&optional force buffer) | 6542 (defun allout-mark-marker (&optional force buffer) |
6539 "Accommodate the different signature for `mark-marker' across Emacsen. | 6543 "Accommodate the different signature for `mark-marker' across Emacsen. |
6540 | 6544 |