(defvar outline-mode-hook nil
"*This hook is run when outline mode starts.")
+(defvar outline-blank-line nil
+ "*Non-nil means to leave unhidden blank line before heading.")
+
;;;###autoload
(define-derived-mode outline-mode text-mode "Outline"
"Set major mode for editing outlines with selective display.
(if (re-search-forward (concat "\n\\(?:" outline-regexp "\\)")
nil 'move)
(goto-char (match-beginning 0)))
- (if (and (bolp) (eobp) (not (bobp)))
+ (if (and (bolp) (or outline-blank-line (eobp)) (not (bobp)))
(forward-char -1)))
(defun outline-next-heading ()
(progn (outline-next-preface) (point)) nil)))
(defun hide-body ()
- "Hide all of buffer except headings."
+ "Hide all body lines in buffer, leaving all headings visible."
(interactive)
(hide-region-body (point-min) (point-max)))
(narrow-to-region start end)
(goto-char (point-min))
(if (outline-on-heading-p)
- (outline-end-of-heading))
+ (outline-end-of-heading)
+ (outline-next-preface))
(while (not (eobp))
(outline-flag-region (point)
(progn (outline-next-preface) (point)) t)
(defun outline-show-heading ()
"Show the current heading and move to its end."
- (outline-flag-region (- (point) (if (bobp) 0 1))
+ (outline-flag-region (- (point)
+ (if (bobp) 0
+ (if (and outline-blank-line
+ (eq (char-before (1- (point))) ?\n))
+ 2 1)))
(progn (outline-end-of-heading) (point))
nil))
(save-excursion
(outline-back-to-heading t)
(show-entry)
- (while (condition-case nil (progn (outline-up-heading 1) (not (bobp)))
+ (while (condition-case nil (progn (outline-up-heading 1 t) (not (bobp)))
(error nil))
(outline-flag-region (1- (point))
(save-excursion (forward-line 1) (point))
(if (bolp)
(progn
;; Go to end of line before heading
- (forward-char -1)))))
+ (forward-char -1)
+ (if (and outline-blank-line (bolp))
+ ;; leave blank line before heading
+ (forward-char -1))))))
\f
(defun show-branches ()
"Show all subheadings of this heading, but not their bodies."