;;; allout.el --- extensive outline mode for use alone and with other modes
-;; Copyright (C) 1992, 1993, 1994, 2001, 2002 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 93, 94, 2001, 02, 2004 Free Software Foundation, Inc.
-;; Author: Ken Manheimer <klm@python.org>
-;; Maintainer: Ken Manheimer <klm@python.org>
+;; Author: Ken Manheimer <klm@zope.com>
+;; Maintainer: Ken Manheimer <klm@zope.com>
;; Created: Dec 1991 - first release to usenet
-;; Version: $Id: allout.el,v 1.36 2002/12/16 00:26:22 rost Exp $||
;; Keywords: outlines mode wp languages
;; This file is part of GNU Emacs.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
;; exposure. It also provides for syntax-sensitive text like
;; programming languages. (For an example, see the allout code
;; itself, which is organized in ;; an outline framework.)
-;;
+;;
;; In addition to outline navigation and exposure, allout includes:
-;;
+;;
;; - topic-oriented repositioning, cut, and paste
;; - integral outline exposure-layout
;; - incremental search with dynamic exposure and reconcealment of hidden text
;; - automatic topic-number maintenance
;; - "Hot-spot" operation, for single-keystroke maneuvering and
;; exposure control. (See the `allout-mode' docstring.)
-;;
+;;
;; and many other features.
-;;
+;;
;; The outline menubar additions provide quick reference to many of
;; the features, and see the docstring of the function `allout-init'
-;; for instructions on priming your emacs session for automatic
+;; for instructions on priming your Emacs session for automatic
;; activation of `allout-mode'.
-;;
+;;
;; See the docstring of the variables `allout-layout' and
;; `allout-auto-activation' for details on automatic activation of
;; allout `allout-mode' as a minor mode. (It has changed since allout
;; Note - the lines beginning with `;;;_' are outline topic headers.
;; Just `ESC-x eval-current-buffer' to give it a whirl.
-;; Ken Manheimer klm@python.org
+;; Ken Manheimer klm@zope.com
;;; Code:
(defgroup allout nil
"Extensive outline mode for use alone and with other modes."
:prefix "allout-"
- :group 'editing)
+ :group 'editing
+ :version "22.1")
;;;_ + Layout, Mode, and Topic Header Configuration
variable `allout-layout' is non-nil, and whether or not the layout
dictated by `allout-layout' should be imposed on mode activation.
-With value `t', auto-mode-activation and auto-layout are enabled.
+With value t, auto-mode-activation and auto-layout are enabled.
\(This also depends on `allout-find-file-hook' being installed in
-`find-file-hooks', which is also done by `allout-init'.)
+`find-file-hook', which is also done by `allout-init'.)
With value `ask', auto-mode-activation is enabled, and endorsement for
performing auto-layout is asked of the user each time.
-With value `activate', only auto-mode-activation is enabled,
+With value `activate', only auto-mode-activation is enabled,
auto-layout is not.
-With value `nil', neither auto-mode-activation nor auto-layout are
+With value nil, neither auto-mode-activation nor auto-layout are
enabled.
See the docstring for `allout-init' for the proper interface to
var and the respective allout-*-bullets-string vars.
The value of an asterisk (`*') provides for backwards compatibility
-with the original emacs outline mode. See `allout-plain-bullets-string'
+with the original Emacs outline mode. See `allout-plain-bullets-string'
and `allout-distinctive-bullets-string' for the range of available
bullets."
:type 'string
These bullets are used to distinguish topics from the run-of-the-mill
ones. They are not used in the standard topic headers created by
-the topic-opening, shifting, and rebulleting \(eg, on topic shift,
+the topic-opening, shifting, and rebulleting \(eg, on topic shift,
topic paste, blanket rebulleting) routines, but are offered among the
choices for rebulleting. They are not altered by the above automatic
rebulleting, so they can be used to characterize topics, eg:
String values are used as they stand.
-Value `t' means to first check for assoc value in `allout-mode-leaders'
+Value t means to first check for assoc value in `allout-mode-leaders'
alist, then use comment-start string, if any, then use default \(`.').
\(See note about use of comment-start strings, below.)
Set to the symbol for either of `allout-mode-leaders' or
`comment-start' to use only one of them, respectively.
-Value `nil' means to always use the default \(`.').
+Value nil means to always use the default \(`.').
comment-start strings that do not end in spaces are tripled, and an
`_' underscore is tacked on the end, to distinguish them from regular
presumes that the space is for appearance, not comment syntax. You
can use `allout-mode-leaders' to override this behavior, when
incorrect.]"
- :type '(choice (const t) (const nil) string
+ :type '(choice (const t) (const nil) string
(const allout-mode-leaders)
(const comment-start))
:group 'allout)
Non-nil restricts the topic creation and modification
functions to asterix-padded prefixes, so they look exactly
-like the original emacs-outline style prefixes.
+like the original Emacs-outline style prefixes.
Whatever the setting of this variable, both old and new style prefixes
are always respected by the topic maneuvering functions."
their topic header are reindented to correspond with depth shifts of
the header.
-A value of `t' enables reindent in non-programming-code buffers, ie
+A value of t enables reindent in non-programming-code buffers, ie
those that do not have the variable `comment-start' set. A value of
`force' enables reindent whether or not `comment-start' is set."
:type '(choice (const nil) (const t) (const text) (const force))
(defcustom allout-inhibit-protection nil
"*Non-nil disables warnings and confirmation-checks for concealed-text edits.
-Outline mode uses emacs change-triggered functions to detect unruly
+Outline mode uses Emacs change-triggered functions to detect unruly
changes to concealed regions. Set this var non-nil to disable the
protection, potentially increasing text-entry responsiveness a bit.
;;;_ : Version
;;;_ = allout-version
(defvar allout-version
- (let ((rcs-rev "$Revision: 1.36 $"))
+ (let ((rcs-rev "$Revision$"))
(condition-case err
(save-match-data
(string-match "Revision: \\([0-9]+\\.[0-9]+\\)" rcs-rev)
(defvar allout-mode-map nil "Keybindings for (allout) outline minor mode.")
;;;_ > produce-allout-mode-map (keymap-alist &optional base-map)
(defun produce-allout-mode-map (keymap-list &optional base-map)
- "Produce keymap for use as allout-mode-map, from keymap-list.
+ "Produce keymap for use as allout-mode-map, from KEYMAP-LIST.
Built on top of optional BASE-MAP, or empty sparse map if none specified.
See doc string for allout-keybindings-list for format of binding list."
(car (cdr cell)))))))
keymap-list)
map))
-;;;_ = allout-prior-bindings - being deprecated.
-(defvar allout-prior-bindings nil
- "Variable for use in V18, with `allout-added-bindings', for
-resurrecting, on mode deactivation, bindings that existed before
-activation. Being deprecated.")
-;;;_ = allout-added-bindings - being deprecated
-(defvar allout-added-bindings nil
- "Variable for use in V18, with `allout-prior-bindings', for
-resurrecting, on mode deactivation, bindings that existed before
-activation. Being deprecated.")
+
;;;_ : Menu bar
+(defvar allout-mode-exposure-menu)
+(defvar allout-mode-editing-menu)
+(defvar allout-mode-navigation-menu)
+(defvar allout-mode-misc-menu)
(defun produce-allout-mode-menubar-entries ()
(require 'easymenu)
(easy-menu-define allout-mode-exposure-menu
"----"
["Duplicate Exposed" allout-copy-exposed-to-buffer t]
["Duplicate Exposed, numbered"
- allout-flatten-exposed-to-buffer t]
+ allout-flatten-exposed-to-buffer t]
["Duplicate Exposed, indented"
- allout-indented-exposed-to-buffer t]
+ allout-indented-exposed-to-buffer t]
"----"
["Set Header Lead" allout-reset-header-lead t]
["Set New Exposure" allout-expose-topic t])))
(make-variable-buffer-local 'allout-pre-was-isearching)
;;;_ = allout-isearch-prior-pos nil
(defvar allout-isearch-prior-pos nil
- "Cue for isearch-dynamic-exposure tracking, used by allout-isearch-expose.")
+ "Cue for isearch-dynamic-exposure tracking, used by `allout-isearch-expose'.")
(make-variable-buffer-local 'allout-isearch-prior-pos)
-;;;_ = allout-isearch-did-quit
-(defvar allout-isearch-did-quit nil
- "Distinguishes isearch conclusion and cancellation.
-
-Maintained by `allout-isearch-abort' \(which is wrapped around the real
-isearch-abort), and monitored by `allout-isearch-expose' for action.")
-(make-variable-buffer-local 'allout-isearch-did-quit)
;;;_ = allout-override-protect nil
(defvar allout-override-protect nil
"Used in `allout-mode' for regulate of concealed-text protection mechanism.
It's automatically reset to nil after every buffer modification.")
(make-variable-buffer-local 'allout-override-protect)
;;;_ > allout-unprotected (expr)
-(defmacro allout-unprotected (expr)
- "Evaluate EXPRESSION with `allout-override-protect' let-bound `t'."
+(defmacro allout-unprotected (expression)
+ "Evaluate EXPRESSION with `allout-override-protect' let-bound to t."
`(let ((allout-override-protect t))
- ,expr))
+ ,expression))
;;;_ = allout-undo-aggregation
(defvar allout-undo-aggregation 30
"Amount of successive self-insert actions to bunch together per undo.
This is purely a kludge variable, regulating the compensation for a bug in
-the way that before-change-functions and undo interact.")
+the way that `before-change-functions' and undo interact.")
(make-variable-buffer-local 'allout-undo-aggregation)
;;;_ = file-var-bug hack
(defvar allout-v18/19-file-var-hack nil
to track repeats.")
;;;_ > allout-write-file-hook ()
(defun allout-write-file-hook ()
- "In `allout-mode', run as a `local-write-file-hooks' activity.
+ "In `allout-mode', run as a `write-contents-functions' activity.
Currently just sets `allout-during-write-cue', so outline change-protection
knows to keep inactive during file write."
- anything else \(eg, t) for auto-activation and auto-layout, without
any confirmation check.
-Use this function to setup your emacs session for automatic activation
+Use this function to setup your Emacs session for automatic activation
of allout outline mode, contingent to the buffer-specific setting of
the `allout-layout' variable. (See `allout-layout' and
`allout-expose-topic' docstrings for more details on auto layout).
`allout-init' works by setting up (or removing)
-`allout-find-file-hook' in `find-file-hooks', and giving
+`allout-find-file-hook' in `find-file-hook', and giving
`allout-auto-activation' a suitable setting.
-To prime your emacs session for full auto-outline operation, include
-the following two lines in your emacs init file:
+To prime your Emacs session for full auto-outline operation, include
+the following two lines in your Emacs init file:
\(require 'allout)
\(allout-init t)"
- (interactive)
- (if (interactive-p)
- (progn
- (setq mode
- (completing-read
- (concat "Select outline auto setup mode "
- "(empty for report, ? for options) ")
- '(("nil")("full")("activate")("deactivate")
- ("ask") ("report") (""))
- nil
- t))
- (if (string= mode "")
- (setq mode 'report)
- (setq mode (intern-soft mode)))))
+ (interactive
+ (let ((m (completing-read
+ (concat "Select outline auto setup mode "
+ "(empty for report, ? for options) ")
+ '(("nil")("full")("activate")("deactivate")
+ ("ask") ("report") (""))
+ nil
+ t)))
+ (if (string= m "") 'report
+ (intern-soft m))))
(let
;; convenience aliases, for consistent ref to respective vars:
((hook 'allout-find-file-hook)
(curr-mode 'allout-auto-activation))
(cond ((not mode)
- (setq find-file-hooks (delq hook find-file-hooks))
+ (setq find-file-hook (delq hook find-file-hook))
(if (interactive-p)
(message "Allout outline mode auto-activation inhibited.")))
((eq mode 'report)
- (if (not (memq hook find-file-hooks))
- (allout-init nil)
- ;; Just punt and use the reports from each of the modes:
- (allout-init (symbol-value curr-mode))))
- (t (add-hook 'find-file-hooks hook)
+ (if (memq hook find-file-hook)
+ ;; Just punt and use the reports from each of the modes:
+ (allout-init (symbol-value curr-mode))
+ (allout-init nil)
+ (message "Allout outline mode auto-activation inhibited.")))
+ (t (add-hook 'find-file-hook hook)
(set curr-mode ; `set', not `setq'!
(cond ((eq mode 'activate)
(message
((message
"Outline mode auto-activation and -layout enabled.")
'full)))))))
-
+
;;;_ > allout-setup-menubar ()
(defun allout-setup-menubar ()
"Populate the current buffer's menubar with `allout-mode' stuff."
Below is a description of the bindings, and then explanation of
special `allout-mode' features and terminology. See also the outline
menubar additions for quick reference to many of the features, and see
-the docstring of the variable `allout-init' for instructions on
-priming your emacs session for automatic activation of `allout-mode'.
+the docstring of the function `allout-init' for instructions on
+priming your Emacs session for automatic activation of `allout-mode'.
The bindings are dictated by the `allout-keybindings-list' and
C-c<CR> allout-rebullet-topic Reconcile bullets of topic and its offspring
- distinctive bullets are not changed, others
alternated according to nesting depth.
-C-c b allout-rebullet-current-heading Prompt for alternate bullet for
+C-c * allout-rebullet-current-heading Prompt for alternate bullet for
current topic.
C-c # allout-number-siblings Number bullets of topic and siblings - the
offspring are not affected. With repeat
Like above 'copy-exposed', but convert topic
prefixes to section.subsection... numeric
format.
-ESC ESC (allout-init t) Setup emacs session for outline mode
+ESC ESC (allout-init t) Setup Emacs session for outline mode
auto-activation.
HOT-SPOT Operation
Topic hierarchy constituents - TOPICS and SUBTOPICS:
-TOPIC: A basic, coherent component of an emacs outline. It can
+TOPIC: A basic, coherent component of an Emacs outline. It can
contain other topics, and it can be subsumed by other topics,
CURRENT topic:
The visible topic most immediately containing the cursor.
HEADER: The first line of a topic, include the topic PREFIX and header
text.
-PREFIX: The leading text of a topic which which distinguishes it from
+PREFIX: The leading text of a topic which distinguishes it from
normal text. It has a strict form, which consists of a
prefix-lead string, padding, and a bullet. The bullet may be
followed by a number, indicating the ordinal number of the
; active state or *de*activation
; specifically requested:
(setq allout-explicitly-deactivated t)
- (if (string-match "^18\." emacs-version)
- ; Revoke those keys that remain
- ; as we set them:
- (let ((curr-loc (current-local-map)))
- (mapcar (function
- (lambda (cell)
- (if (eq (lookup-key curr-loc (car cell))
- (car (cdr cell)))
- (define-key curr-loc (car cell)
- (assq (car cell) allout-prior-bindings)))))
- allout-added-bindings)
- (allout-resumptions 'allout-added-bindings)
- (allout-resumptions 'allout-prior-bindings)))
(if allout-old-style-prefixes
(progn
(allout-resumptions 'selective-display)
(if (and (boundp 'before-change-functions) before-change-functions)
(allout-resumptions 'before-change-functions))
- (setq local-write-file-hooks
- (delq 'allout-write-file-hook
- local-write-file-hooks))
+ (setq write-contents-functions
+ (delq 'allout-write-file-hook
+ write-contents-functions))
(allout-resumptions 'paragraph-start)
(allout-resumptions 'paragraph-separate)
(allout-resumptions (if (string-match "^18" emacs-version)
(cons '(allout-mode . allout-mode-map)
minor-mode-map-alist))))
- ; V18 minor-mode key bindings:
- ; Stash record of added bindings
- ; for later revocation:
- (allout-resumptions 'allout-added-bindings
- (list allout-keybindings-list))
- (allout-resumptions 'allout-prior-bindings
- (list (current-local-map)))
; and add them:
(use-local-map (produce-allout-mode-map allout-keybindings-list
(current-local-map)))
)
; selective-display is the
- ; emacs conditional exposure
+ ; Emacs conditional exposure
; mechanism:
(allout-resumptions 'selective-display '(t))
(if allout-inhibit-protection
; Temporarily set by any outline
; functions that can be trusted to
; deal properly with concealed text.
- (add-hook 'local-write-file-hooks 'allout-write-file-hook)
+ (add-hook 'write-contents-functions 'allout-write-file-hook)
; Custom auto-fill func, to support
; respect for topic headline,
; hanging-indents, etc:
(if allout-layout
(setq do-layout t))
- (if (and allout-isearch-dynamic-expose
- (not (fboundp 'allout-real-isearch-abort)))
+ (if allout-isearch-dynamic-expose
(allout-enwrap-isearch))
(run-hooks 'allout-mode-hook)
"Buffer point last returned by `allout-end-of-current-subtree'.")
(make-variable-buffer-local 'allout-recent-end-of-subtree)
;;;_ > allout-prefix-data (beg end)
-(defmacro allout-prefix-data (beg end)
+(defmacro allout-prefix-data (beginning end)
"Register allout-prefix state data - BEGINNING and END of prefix.
For reference by `allout-recent' funcs. Returns BEGINNING."
`(setq allout-recent-prefix-end ,end
- allout-recent-prefix-beginning ,beg))
+ allout-recent-prefix-beginning ,beginning))
;;;_ > allout-recent-depth ()
(defmacro allout-recent-depth ()
"Return depth of last heading encountered by an outline maneuvering function.
(defun allout-sibling-index (&optional depth)
"Item number of this prospective topic among its siblings.
-If optional arg depth is greater than current depth, then we're
+If optional arg DEPTH is greater than current depth, then we're
opening a new level, and return 0.
If less than this depth, ascend to that depth and count..."
"Produce a location \"chart\" of subtopics of the containing topic.
Optional argument LEVELS specifies the depth \(relative to start
-depth) for the chart. Subsequent optional args are not for public
-use.
+depth) for the chart.
Charts are used to capture outline structure, so that outline altering
routines need assess the structure only once, and then use the chart
The chart for a topics' offspring precedes the entry for the topic
itself.
-The other function parameters are for internal recursion, and should
-not be specified by external callers. ORIG-DEPTH is depth of topic at
-starting point, and PREV-DEPTH is depth of prior topic."
+\(fn &optional LEVELS)"
+
+ ;; The other function parameters are for internal recursion, and should
+ ;; not be specified by external callers. ORIG-DEPTH is depth of topic at
+ ;; starting point, and PREV-DEPTH is depth of prior topic."
(let ((original (not orig-depth)) ; `orig-depth' set only in recursion.
chart curr-depth)
;; Loop over the current levels' siblings. Besides being more
;; efficient than tail-recursing over a level, it avoids exceeding
- ;; the typically quite constrained emacs max-lisp-eval-depth.
+ ;; the typically quite constrained Emacs max-lisp-eval-depth.
;;
;; Probably would speed things up to implement loop-based stack
;; operation rather than recursing for lower levels. Bah.
(setq chart (cdr chart))))
result))
;;;_ X allout-chart-spec (chart spec &optional exposing)
-(defun allout-chart-spec (chart spec &optional exposing)
- "Not yet \(if ever) implemented.
-
-Produce exposure directives given topic/subtree CHART and an exposure SPEC.
-
-Exposure spec indicates the locations to be exposed and the prescribed
-exposure status. Optional arg EXPOSING is an integer, with 0
-indicating pending concealment, anything higher indicating depth to
-which subtopic headers should be exposed, and negative numbers
-indicating (negative of) the depth to which subtopic headers and
-bodies should be exposed.
-
-The produced list can have two types of entries. Bare numbers
-indicate points in the buffer where topic headers that should be
-exposed reside.
-
- - bare negative numbers indicates that the topic starting at the
- point which is the negative of the number should be opened,
- including their entries.
- - bare positive values indicate that this topic header should be
- opened.
- - Lists signify the beginning and end points of regions that should
- be flagged, and the flag to employ. (For concealment: `\(\?r\)', and
- exposure:"
- (while spec
- (cond ((listp spec)
- )
- )
- (setq spec (cdr spec)))
- )
+;; (defun allout-chart-spec (chart spec &optional exposing)
+;; "Not yet \(if ever) implemented.
+
+;; Produce exposure directives given topic/subtree CHART and an exposure SPEC.
+
+;; Exposure spec indicates the locations to be exposed and the prescribed
+;; exposure status. Optional arg EXPOSING is an integer, with 0
+;; indicating pending concealment, anything higher indicating depth to
+;; which subtopic headers should be exposed, and negative numbers
+;; indicating (negative of) the depth to which subtopic headers and
+;; bodies should be exposed.
+
+;; The produced list can have two types of entries. Bare numbers
+;; indicate points in the buffer where topic headers that should be
+;; exposed reside.
+
+;; - bare negative numbers indicates that the topic starting at the
+;; point which is the negative of the number should be opened,
+;; including their entries.
+;; - bare positive values indicate that this topic header should be
+;; opened.
+;; - Lists signify the beginning and end points of regions that should
+;; be flagged, and the flag to employ. (For concealment: `\(\?r\)', and
+;; exposure:"
+;; (while spec
+;; (cond ((listp spec)
+;; )
+;; )
+;; (setq spec (cdr spec)))
+;; )
;;;_ - Within Topic
;;;_ > allout-goto-prefix ()
(if (= (allout-recent-depth) depth)
(progn (goto-char allout-recent-prefix-beginning)
depth)
- (goto-char last-good)
- nil))
- (if (interactive-p) (allout-end-of-prefix))))
+ (goto-char last-good)))))
;;;_ > allout-ascend ()
(defun allout-ascend ()
"Ascend one level, returning t if successful, nil if not."
- (prog1
- (if (allout-beginning-of-level)
- (allout-previous-heading))
- (if (interactive-p) (allout-end-of-prefix))))
+ (if (allout-beginning-of-level)
+ (allout-previous-heading)))
;;;_ > allout-descend-to-depth (depth)
(defun allout-descend-to-depth (depth)
"Descend to depth DEPTH within current topic.
nil))
)
;;;_ > allout-up-current-level (arg &optional dont-complain)
-(defun allout-up-current-level (arg &optional dont-complain)
+(defun allout-up-current-level (arg &optional dont-complain interactive)
"Move out ARG levels from current visible topic.
Positions on heading line of containing topic. Error if unable to
ascend that far, or nil if unable to ascend but optional arg
DONT-COMPLAIN is non-nil."
- (interactive "p")
+ (interactive "p\np")
(allout-back-to-current-heading)
(let ((present-level (allout-recent-depth))
(last-good (point))
(if (or failed
(> arg 0))
(progn (goto-char last-good)
- (if (interactive-p) (allout-end-of-prefix))
+ (if interactive (allout-end-of-prefix))
(if (not dont-complain)
(error "Can't ascend past outermost level")
- (if (interactive-p) (allout-end-of-prefix))
+ (if interactive (allout-end-of-prefix))
nil))
- (if (interactive-p) (allout-end-of-prefix))
+ (if interactive (allout-end-of-prefix))
allout-recent-prefix-beginning)))
;;;_ - Linear
)
;;;_ > allout-snug-back ()
(defun allout-snug-back ()
- "Position cursor at end of previous topic
+ "Position cursor at end of previous topic.
Presumes point is at the start of a topic prefix."
(if (or (bobp) (eobp))
(let ((depth (allout-depth)))
(while (allout-previous-sibling depth nil))
(prog1 (allout-recent-depth)
- (if (interactive-p) (allout-end-of-prefix)))))
+ (allout-end-of-prefix))))
;;;_ > allout-next-visible-heading (arg)
(defun allout-next-visible-heading (arg)
"Move to the next ARG'th visible heading line, backward if arg is negative.
(interactive "p")
(allout-next-visible-heading (- arg)))
;;;_ > allout-forward-current-level (arg)
-(defun allout-forward-current-level (arg)
+(defun allout-forward-current-level (arg &optional interactive)
"Position point at the next heading of the same level.
Takes optional repeat-count, goes backward if count is negative.
Returns resulting position, else nil if none found."
- (interactive "p")
+ (interactive "p\np")
(let ((start-depth (allout-current-depth))
(start-point (point))
(start-arg arg)
(= (allout-recent-depth) start-depth)))
allout-recent-prefix-beginning
(goto-char last-good)
- (if (not (interactive-p))
+ (if (not interactive)
nil
(allout-end-of-prefix)
(error "Hit %s level %d topic, traversed %d of %d requested"
(- (abs start-arg) arg)
(abs start-arg))))))
;;;_ > allout-backward-current-level (arg)
-(defun allout-backward-current-level (arg)
+(defun allout-backward-current-level (arg &optional interactive)
"Inverse of `allout-forward-current-level'."
- (interactive "p")
- (if (interactive-p)
+ (interactive "p\np")
+ (if interactive
(let ((current-prefix-arg (* -1 arg)))
(call-interactively 'allout-forward-current-level))
(allout-forward-current-level (* -1 arg))))
writes, like crypt and zip modes.)
Locally bound in outline buffers to `before-change-functions', which
-in emacs 19 is run before any change to the buffer.
+in Emacs 19 is run before any change to the buffer.
Any functions which set [`this-command' to `undo', or which set]
`allout-override-protect' non-nil (as does, eg, allout-flag-chars)
; Both beginning and end chars must
; be exposed:
(save-excursion (if (memq this-command '(newline open-line))
- ;; Compensate for stupid emacs {new,
+ ;; Compensate for stupid Emacs {new,
;; open-}line display optimization:
(setq beg (1+ beg)
end (1+ end)))
(save-match-data
(if (equal this-command 'undo)
;; Allow undo without inhibition.
- ;; - Undoing new and open-line hits stupid emacs redisplay
+ ;; - Undoing new and open-line hits stupid Emacs redisplay
;; optimization (em 19 cmds.c, ~ line 200).
;; - Presumably, undoing what was properly protected when
;; done.
(if rehide-place (goto-char rehide-place))
(allout-hide-current-entry-completely))
(allout-hide-current-entry))
- (error (concat
- "Change within concealed region prevented.")))))))
+ (error "Change within concealed region prevented"))))))
) ; if
) ; defun
;;;_ = allout-post-goto-bullet
- Implement (and clear) `allout-post-goto-bullet', for hot-spot
outline commands.
-- Massages buffer-undo-list so successive, standard character self-inserts are
- aggregated. This kludge compensates for lack of undo bunching when
+- Massages `buffer-undo-list' so successive, standard character self-inserts
+ are aggregated. This kludge compensates for lack of undo bunching when
`before-change-functions' is used."
; Apply any external change func:
;;;_ > allout-pre-command-business ()
(defun allout-pre-command-business ()
"Outline `pre-command-hook' function for outline buffers.
-Implements special behavior when cursor is on bullet char.
+Implements special behavior when cursor is on bullet character.
-Self-insert characters are reinterpreted control-character references
-into the `allout-mode-map'. The `allout-mode' `post-command-hook' will
-position a cursor that has moved as a result of such reinterpretation,
-on the destination topic's bullet, when the cursor wound up in the
+When the cursor is on the bullet character, self-insert characters are
+reinterpreted as the corresponding control-character in the
+`allout-mode-map'. The `allout-mode' `post-command-hook' insures that
+the cursor which has moved as a result of such reinterpretation is
+positioned on the bullet character of the destination topic.
The upshot is that you can get easy, single (ie, unmodified) key
outline maneuvering operations by positioning the cursor on the bullet
-char. You stay in this mode until you use some regular
-cursor-positioning command to relocate the cursor off of a bullet
-char."
-
+char. When in this mode you can use regular cursor-positioning
+command/keystrokes to relocate the cursor off of a bullet character to
+return to regular interpretation of self-insert characters."
(if (not (allout-mode-p))
;; Shouldn't be invoked if not in allout allout-mode, but just in case:
nil
(let* ((this-key-num (cond
((numberp last-command-char)
last-command-char)
- ;; XXX Only xemacs has characterp.
- ((and (fboundp 'characterp)
- (characterp last-command-char))
+ ((fboundp 'char-to-int)
(char-to-int last-command-char))
(t 0)))
mapped-binding)
Called as part of `allout-post-command-business'."
- (let ((isearching (and (boundp 'isearch-mode) isearch-mode)))
+ (let ((isearching isearch-mode))
(cond ((and isearching (not allout-pre-was-isearching))
(allout-isearch-expose 'start))
((and isearching allout-pre-was-isearching)
((and (not isearching) allout-pre-was-isearching)
(allout-isearch-expose 'final))
;; Not and wasn't isearching:
- (t (setq allout-isearch-prior-pos nil)
- (setq allout-isearch-did-quit nil)))))
+ (t (setq allout-isearch-prior-pos nil)))))
;;;_ = allout-isearch-was-font-lock
(defvar allout-isearch-was-font-lock
(and (boundp 'font-lock-mode) font-lock-mode))
;;;_ > allout-flag-region (from to flag)
(defmacro allout-flag-region (from to flag)
- "Hide or show lines from FROM to TO, via emacs selective-display FLAG char.
+ "Hide or show lines from FROM to TO, via Emacs `selective-display' FLAG char.
Ie, text following flag C-m \(carriage-return) is hidden until the
next C-j (newline) char.
;;;_ > allout-isearch-expose (mode)
(defun allout-isearch-expose (mode)
- "Mode is either 'clear, 'start, 'continue, or 'final."
+ "MODE is either 'clear, 'start, 'continue, or 'final."
;; allout-isearch-prior-pos encodes exposure status of prior pos:
;; (pos was-vis header-pos end-pos)
;; pos - point of concern
(setq allout-isearch-prior-pos nil)
(if (not (eq mode 'final))
(setq allout-isearch-prior-pos (cons (point) (allout-show-entry)))
- (if allout-isearch-did-quit
+ (if isearch-mode-end-hook-quit
nil
(setq allout-isearch-prior-pos nil)
- (allout-show-children))))
- (setq allout-isearch-did-quit nil))
+ (allout-show-children)))))
;;;_ > allout-enwrap-isearch ()
(defun allout-enwrap-isearch ()
- "Impose `allout-mode' isearch-abort wrapper for dynamic exposure in isearch.
+ "Impose `isearch-abort' wrapper for dynamic exposure in isearch.
The function checks to ensure that the rebinding is done only once."
-
- (add-hook 'isearch-mode-end-hook 'allout-isearch-rectification)
- (if (fboundp 'allout-real-isearch-abort)
- ;;
- nil
- ; Ensure load of isearch-mode:
- (if (or (and (fboundp 'isearch-mode)
- (fboundp 'isearch-abort))
- (condition-case error
- (load-library "isearch-mode")
- ('file-error (message
- "Skipping isearch-mode provisions - %s '%s'"
- (car (cdr error))
- (car (cdr (cdr error))))
- (sit-for 1)
- ;; Inhibit subsequent tries and return nil:
- (setq allout-isearch-dynamic-expose nil))))
- ;; Isearch-mode loaded, encapsulate specific entry points for
- ;; outline dynamic-exposure business:
- (progn
- ;; stash crucial isearch-mode funcs under known, private
- ;; names, then register wrapper functions under the old
- ;; names, in their stead:
- (fset 'allout-real-isearch-abort (symbol-function 'isearch-abort))
- (fset 'isearch-abort 'allout-isearch-abort)))))
-;;;_ > allout-isearch-abort ()
-(defun allout-isearch-abort ()
- "Wrapper for `allout-real-isearch-abort' \(which see), to register
-actual quits."
- (interactive)
- (setq allout-isearch-did-quit nil)
- (condition-case what
- (allout-real-isearch-abort)
- ('quit (setq allout-isearch-did-quit t)
- (signal 'quit nil))))
+ (add-hook 'isearch-mode-end-hook 'allout-isearch-rectification))
;;; Prevent unnecessary font-lock while isearching!
(defvar isearch-was-font-locking nil)
font-lock-mode nil)))
(add-hook 'isearch-mode-hook 'isearch-inhibit-font-lock)
(defun isearch-reenable-font-lock ()
- "Reenable font-lock after isearching - for use on isearch-mode-end-hook."
+ "Reenable font-lock after isearching - for use on `isearch-mode-end-hook'."
(if (and (boundp 'font-lock-mode) font-lock-mode)
(if (and (allout-mode-p) isearch-was-font-locking)
(setq isearch-was-font-locking nil
)
;;;_ > allout-distinctive-bullet (bullet)
(defun allout-distinctive-bullet (bullet)
- "True if bullet is one of those on `allout-distinctive-bullets-string'."
+ "True if BULLET is one of those on `allout-distinctive-bullets-string'."
(string-match (regexp-quote bullet) allout-distinctive-bullets-string))
;;;_ > allout-numbered-type-prefix (&optional prefix)
(defun allout-numbered-type-prefix (&optional prefix)
((allout-sibling-index))))))
)
)
-;;;_ > allout-open-topic (relative-depth &optional before use_sib_bullet)
-(defun allout-open-topic (relative-depth &optional before use_sib_bullet)
- "Open a new topic at depth DEPTH.
+;;;_ > allout-open-topic (relative-depth &optional before use-sib-bullet)
+(defun allout-open-topic (relative-depth &optional before use-sib-bullet)
+ "Open a new topic at depth RELATIVE-DEPTH.
New topic is situated after current one, unless optional flag BEFORE
is non-nil, or unless current line is complete empty (not even
whitespace), in which case open is done on current line.
-If USE_SIB_BULLET is true, use the bullet of the prior sibling.
+If USE-SIB-BULLET is true, use the bullet of the prior sibling.
Nuances:
;;(if doing-beginning (save-excursion (newline (if dbl-space 2 1))))
- (allout-rebullet-heading (and use_sib_bullet ref-bullet);;; solicit
+ (allout-rebullet-heading (and use-sib-bullet ref-bullet);;; solicit
depth ;;; depth
nil ;;; number-control
nil ;;; index
(do-auto-fill))))
;;;_ > allout-reindent-body (old-depth new-depth &optional number)
(defun allout-reindent-body (old-depth new-depth &optional number)
- "Reindent body lines which were indented at old-depth to new-depth.
+ "Reindent body lines which were indented at OLD-DEPTH to NEW-DEPTH.
Optional arg NUMBER indicates numbering is being added, and it must
be accommodated.
"Adjust bullet of current topic prefix.
-All args are optional.
-
If SOLICIT is non-nil, then the choice of bullet is solicited from
user. If it's a character, then that character is offered as the
default, otherwise the one suited to the context \(according to
distinction or depth) is offered. If non-nil, then the
context-specific bullet is just used.
-Second arg DEPTH forces the topic prefix to that depth, regardless
+Second arg NEW-DEPTH forces the topic prefix to that depth, regardless
of the topic's current depth.
Third arg NUMBER-CONTROL can force the prefix to or away from
numbered form. It has effect only if `allout-numbered-bullet' is
non-nil and soliciting was not explicitly invoked (via first arg).
Its effect, numbering or denumbering, then depends on the setting
-of the forth arg, INDEX.
+of the fourth arg, INDEX.
-If NUMBER-CONTROL is non-nil and forth arg INDEX is nil, then the
+If NUMBER-CONTROL is non-nil and fourth arg INDEX is nil, then the
prefix of the topic is forced to be non-numbered. Null index and
non-nil NUMBER-CONTROL forces denumbering. Non-nil INDEX (and
non-nil NUMBER-CONTROL) forces a numbered-prefix form. If non-nil
contained subtopics. See `allout-rebullet-heading' for rebulleting
behavior.
-All arguments are optional.
-
-First arg RELATIVE-DEPTH means to shift the depth of the entire
+Arg RELATIVE-DEPTH means to shift the depth of the entire
topic that amount.
-The rest of the args are for internal recursive use by the function
-itself. The are STARTING-DEPTH, STARTING-POINT, and INDEX."
+\(fn &optional RELATIVE-DEPTH)"
+
+ ;; All args except the first one are for internal recursive use by the
+ ;; function itself.
(let* ((relative-depth (or relative-depth 0))
(new-depth (allout-depth))
Numbering of yanked topics, and the successive siblings at the depth
into which they're being yanked, is adjusted.
-`allout-yank-pop' works with `allout-yank' just like normal yank-pop
-works with normal yank in non-outline buffers."
+`allout-yank-pop' works with `allout-yank' just like normal `yank-pop'
+works with normal `yank' in non-outline buffers."
(interactive "*P")
(setq this-command 'yank)
(interactive)
(if (not allout-file-xref-bullet)
(error
- "outline cross references disabled - no `allout-file-xref-bullet'")
+ "Outline cross references disabled - no `allout-file-xref-bullet'")
(if (not (string= (allout-current-bullet) allout-file-xref-bullet))
- (error "current heading lacks cross-reference bullet `%s'"
+ (error "Current heading lacks cross-reference bullet `%s'"
allout-file-xref-bullet)
(let (file-name)
(save-excursion
max-pos)))
;;;_ > allout-old-expose-topic (spec &rest followers)
(defun allout-old-expose-topic (spec &rest followers)
-
- "Deprecated. Use `allout-expose-topic' \(with different schema
-format) instead.
-
-Dictate wholesale exposure scheme for current topic, according to SPEC.
+ "Dictate wholesale exposure scheme for current topic, according to SPEC.
SPEC is either a number or a list. Optional successive args
dictate exposure for subsequent siblings of current topic.
elements of the list are nested SPECs, dictating the specific exposure
for the corresponding offspring of the topic.
-Optional FOLLOWER arguments dictate exposure for succeeding siblings."
+Optional FOLLOWERS arguments dictate exposure for succeeding siblings."
(interactive "xExposure spec: ")
(let ((depth (allout-current-depth))
(allout-old-expose-topic (car followers))
(setq followers (cdr followers)))
max-pos))
+(make-obsolete 'allout-old-expose-topic
+ "use `allout-expose-topic' (with different schema format) instead."
+ "19.23")
;;;_ > allout-new-exposure '()
(defmacro allout-new-exposure (&rest spec)
"Literal frontend for `allout-expose-topic', doesn't evaluate arguments.
Cursor is left at start position.
-Use this instead of obsolete `allout-exposure'.
-
Examples:
-\(allout-exposure (-1 () () () 1) 0)
+\(allout-new-exposure (-1 () () () 1) 0)
Close current topic at current level so only the immediate
subtopics are shown, except also show the children of the
third subtopic; and close the next topic at the current level.
-\(allout-exposure : -1 0)
+\(allout-new-exposure : -1 0)
Close all topics at current level to expose only their
immediate children, except for the last topic at the current
level, in which even its immediate children are hidden.
-\(allout-exposure -2 : -1 *)
+\(allout-new-exposure -2 : -1 *)
Expose children and grandchildren of first topic at current
level, and expose children of subsequent topics at current
level *except* for the last, which should be opened completely."
(allout-next-heading)))
(error "allout-new-exposure: Can't find any outline topics"))
(list 'allout-expose-topic (list 'quote spec))))
-;;;_ > allout-exposure '()
-(defmacro allout-exposure (&rest spec)
- "Being deprecated - use more recent `allout-new-exposure' instead.
-
-Literal frontend for `allout-old-expose-topic', doesn't evaluate arguments
-and retains start position."
- (list 'save-excursion
- '(if (not (or (allout-goto-prefix)
- (allout-next-heading)))
- (error "Can't find any outline topics"))
- (cons 'allout-old-expose-topic
- (mapcar (function (lambda (x) (list 'quote x))) spec))))
;;;_ #7 Systematic outline presentation - copying, printing, flattening
Optional arg CONTEXT indicates interior levels to include."
(let ((delim ".")
- result
+ result
numstr
(context-depth (or (and context 2) 1)))
;; Take care of the explicit context:
(defun allout-stringify-flat-index-indented (flat-index)
"Convert list representing section/subsection/... to document string."
(let ((delim ".")
- result
+ result
numstr)
;; Take care of the explicit context:
(setq numstr (int-to-string (car flat-index))
;;;_ > allout-process-exposed (&optional func from to frombuf
;;; tobuf format)
(defun allout-process-exposed (&optional func from to frombuf tobuf
- format &optional start-num)
+ format start-num)
"Map function on exposed parts of current topic; results to another buffer.
-All args are options; default values itemized below.
-
-Apply FUNCTION to exposed portions FROM position TO position in buffer
+Apply FUNC to exposed portions FROM position TO position in buffer
FROMBUF to buffer TOBUF. Sixth optional arg, FORMAT, designates an
alternate presentation form:
except for distinctive bullets.
Defaults:
- FUNCTION: `allout-insert-listified'
+ FUNC: `allout-insert-listified'
FROM: region start, if region active, else start of buffer
TO: region end, if region active, else end of buffer
FROMBUF: current buffer
(defun allout-insert-listified (listified)
"Insert contents of listified outline portion in current buffer.
-Listified is a list representing each topic header and body:
+LISTIFIED is a list representing each topic header and body:
\`(depth prefix text)'
-or \`(depth prefix text bullet-plus)'
+or
+
+ \`(depth prefix text bullet-plus)'
If `bullet-plus' is specified, it is inserted just after the entire prefix."
(setq listified (cdr listified))
(defun allout-flatten-exposed-to-buffer (&optional arg tobuf)
"Present numeric outline of outline's exposed portions in another buffer.
-The resulting outline is not compatable with outline mode - use
+The resulting outline is not compatible with outline mode - use
`allout-copy-exposed-to-buffer' if you want that.
Use `allout-indented-exposed-to-buffer' for indented presentation.
With repeat count, copy the exposed portions of only current topic.
-Other buffer has current buffers name with \" exposed\" appended to
+Other buffer has current buffer's name with \" exposed\" appended to
it, unless optional second arg TOBUF is specified, in which case it is
used verbatim."
(interactive "P")
(defun allout-indented-exposed-to-buffer (&optional arg tobuf)
"Present indented outline of outline's exposed portions in another buffer.
-The resulting outline is not compatable with outline mode - use
+The resulting outline is not compatible with outline mode - use
`allout-copy-exposed-to-buffer' if you want that.
Use `allout-flatten-exposed-to-buffer' for numeric sectional presentation.
With repeat count, copy the exposed portions of only current topic.
-Other buffer has current buffers name with \" exposed\" appended to
+Other buffer has current buffer's name with \" exposed\" appended to
it, unless optional second arg TOBUF is specified, in which case it is
used verbatim."
(interactive "P")
(allout-copy-exposed-to-buffer arg tobuf 'indent))
;;;_ - LaTeX formatting
-;;;_ > allout-latex-verb-quote (str &optional flow)
-(defun allout-latex-verb-quote (str &optional flow)
- "Return copy of STRING for literal reproduction across latex processing.
+;;;_ > allout-latex-verb-quote (string &optional flow)
+(defun allout-latex-verb-quote (string &optional flow)
+ "Return copy of STRING for literal reproduction across LaTeX processing.
Expresses the original characters \(including carriage returns) of the
-string across latex processing."
+string across LaTeX processing."
(mapconcat (function
(lambda (char)
(cond ((memq char '(?\\ ?$ ?% ?# ?& ?{ ?} ?_ ?^ ?- ?*))
(concat "\\char" (number-to-string char) "{}"))
((= char ?\n) "\\\\")
(t (char-to-string char)))))
- str
+ string
""))
;;;_ > allout-latex-verbatim-quote-curr-line ()
(defun allout-latex-verbatim-quote-curr-line ()
- "Express line for exact \(literal) representation across latex processing.
+ "Express line for exact \(literal) representation across LaTeX processing.
Adjust line contents so it is unaltered \(from the original line)
-across latex processing, within the context of a `verbatim'
+across LaTeX processing, within the context of a `verbatim'
environment. Leaves point at the end of the line."
(beginning-of-line)
(let ((beg (point))
(insert "\\")
(setq end (1+ end))
(goto-char (1+ (match-end 0))))))
-;;;_ > allout-insert-latex-header (buf)
-(defun allout-insert-latex-header (buf)
- "Insert initial latex commands at point in BUFFER."
+;;;_ > allout-insert-latex-header (buffer)
+(defun allout-insert-latex-header (buffer)
+ "Insert initial LaTeX commands at point in BUFFER."
;; Much of this is being derived from the stuff in appendix of E in
;; the TeXBook, pg 421.
- (set-buffer buf)
+ (set-buffer buffer)
(let ((doc-style (format "\n\\documentstyle{%s}\n"
"report"))
(page-numbering (if allout-number-pages
hoffset
vspace)
)))
-;;;_ > allout-insert-latex-trailer (buf)
-(defun allout-insert-latex-trailer (buf)
- "Insert concluding latex commands at point in BUFFER."
- (set-buffer buf)
+;;;_ > allout-insert-latex-trailer (buffer)
+(defun allout-insert-latex-trailer (buffer)
+ "Insert concluding LaTeX commands at point in BUFFER."
+ (set-buffer buffer)
(insert "\n\\end{document}\n"))
;;;_ > allout-latexify-one-item (depth prefix bullet text)
(defun allout-latexify-one-item (depth prefix bullet text)
(curr-line)
body-content bop)
; Do the head line:
- (insert (concat "\\OneHeadLine{\\verb\1 "
+ (insert (concat "\\OneHeadLine{\\verb\1 "
(allout-latex-verb-quote bullet)
"\1}{"
depth
)))
;;;_ > allout-latexify-exposed (arg &optional tobuf)
(defun allout-latexify-exposed (arg &optional tobuf)
- "Format current topics exposed portions to TOBUF for latex processing.
+ "Format current topics exposed portions to TOBUF for LaTeX processing.
TOBUF defaults to a buffer named the same as the current buffer, but
with \"*\" prepended and \" latex-formed*\" appended.
Representations of actual backslashes - '\\\\\\\\' - are left as a
single backslash.
-Optional arg SUCCESSIVE-BACKSLASHES is used internally for recursion."
+\(fn REGEXP)"
+;; Optional arg SUCCESSIVE-BACKSLASHES is used internally for recursion.
(if (string= regexp "")
""
(cons function (symbol-value hook)))))))
;;;_ : my-mark-marker to accommodate divergent emacsen:
(defun my-mark-marker (&optional force buffer)
- "Accommodate the different signature for mark-marker across emacsen.
+ "Accommodate the different signature for `mark-marker' across Emacsen.
-GNU XEmacs takes two optional args, while mainline GNU Emacs does not,
+XEmacs takes two optional args, while GNU Emacs does not,
so pass them along when appropriate."
- (if (string-match " XEmacs " emacs-version)
+ (if (featurep 'xemacs)
(mark-marker force buffer)
(mark-marker)))
;;;allout-layout: (0 : -1 -1 0)
;;;End:
+;;; arch-tag: cf38fbc3-c044-450f-8bff-afed8ba5681c
;;; allout.el ends here