]> code.delx.au - gnu-emacs/blobdiff - lisp/outline.el
* lisp/simple.el (end-of-buffer): Don't touch unrelated windows.
[gnu-emacs] / lisp / outline.el
index e350cbd55ae7106f20801c79e799fb7609f846b3..24f25fd2fb7d18913fac8c554e44dc7ac8a4b665 100644 (file)
@@ -1,7 +1,7 @@
 ;;; outline.el --- outline mode commands for Emacs
 
-;; Copyright (C) 1986, 1993, 1994, 1995, 1997, 2000, 2001, 2002,
-;;   2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 1993-1995, 1997, 2000-2013 Free Software
+;; Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: outlines
@@ -41,7 +41,7 @@
 (defgroup outlines nil
   "Support for hierarchical outlining."
   :prefix "outline-"
-  :group 'editing)
+  :group 'wp)
 
 (defcustom outline-regexp "[*\^L]+"
   "Regular expression to match the beginning of a heading.
@@ -50,9 +50,9 @@ Note that Outline mode only checks this regexp at the start of a line,
 so the regexp need not (and usually does not) start with `^'.
 The recommended way to set this is with a Local Variables: list
 in the file it applies to.  See also `outline-heading-end-regexp'."
-  :type '(choice regexp (const nil))
+  :type 'regexp
   :group 'outlines)
-;;;###autoload(put 'outline-regexp 'safe-local-variable 'string-or-null-p)
+;;;###autoload(put 'outline-regexp 'safe-local-variable 'stringp)
 
 (defcustom outline-heading-end-regexp "\n"
   "Regular expression to match the end of a heading line.
@@ -62,6 +62,7 @@ The recommended way to set this is with a `Local Variables:' list
 in the file it applies to."
   :type 'regexp
   :group 'outlines)
+;;;###autoload(put 'outline-heading-end-regexp 'safe-local-variable 'stringp)
 
 (defvar outline-mode-prefix-map
   (let ((map (make-sparse-keymap)))
@@ -136,24 +137,23 @@ in the file it applies to."
       (cons "Headings" (make-sparse-keymap "Headings")))
 
     (define-key map [headings demote-subtree]
-      '(menu-item "Demote subtree" outline-demote
+      '(menu-item "Demote Subtree" outline-demote
                  :help "Demote headings lower down the tree"))
     (define-key map [headings promote-subtree]
-      '(menu-item "Promote subtree" outline-promote
+      '(menu-item "Promote Subtree" outline-promote
                  :help "Promote headings higher up the tree"))
     (define-key map [headings move-subtree-down]
-      '(menu-item "Move subtree down" outline-move-subtree-down
-                 :help "Move the currrent subtree down past arg headlines of the same level"))
+      '(menu-item "Move Subtree Down" outline-move-subtree-down
+                 :help "Move the current subtree down past arg headlines of the same level"))
     (define-key map [headings move-subtree-up]
-      '(menu-item "Move subtree up" outline-move-subtree-up
-                 :help "Move the currrent subtree up past arg headlines of the same level"))
+      '(menu-item "Move Subtree Up" outline-move-subtree-up
+                 :help "Move the current subtree up past arg headlines of the same level"))
     (define-key map [headings copy]
-      '(menu-item "Copy to kill ring" outline-headers-as-kill
+      '(menu-item "Copy to Kill Ring" outline-headers-as-kill
                  :enable mark-active
                  :help "Save the visible outline headers in region at the start of the kill ring"))
     (define-key map [headings outline-insert-heading]
-
-      '(menu-item "New heading" outline-insert-heading
+      '(menu-item "New Heading" outline-insert-heading
                  :help "Insert a new heading at same depth at point"))
     (define-key map [headings outline-backward-same-level]
 
@@ -284,10 +284,10 @@ in the file it applies to."
   "Normal hook to be run after outline visibility changes.")
 
 (defvar outline-mode-hook nil
-  "*This hook is run when outline mode starts.")
+  "This hook is run when outline mode starts.")
 
 (defvar outline-blank-line nil
-  "*Non-nil means to leave unhidden blank line before heading.")
+  "Non-nil means to leave unhidden blank line before heading.")
 
 ;;;###autoload
 (define-derived-mode outline-mode text-mode "Outline"
@@ -347,7 +347,7 @@ Turning on outline mode calls the value of `text-mode-hook' and then of
   (add-hook 'change-major-mode-hook 'show-all nil t))
 
 (defcustom outline-minor-mode-prefix "\C-c@"
-  "*Prefix key to use for Outline commands in Outline minor mode.
+  "Prefix key to use for Outline commands in Outline minor mode.
 The value of this variable is checked as part of loading Outline mode.
 After that, changing the prefix key requires manipulating keymaps."
   :type 'string
@@ -356,7 +356,10 @@ After that, changing the prefix key requires manipulating keymaps."
 ;;;###autoload
 (define-minor-mode outline-minor-mode
   "Toggle Outline minor mode.
-With arg, turn Outline minor mode on if arg is positive, off otherwise.
+With a prefix argument ARG, enable Outline minor mode if ARG is
+positive, and disable it otherwise.  If called from Lisp, enable
+the mode if ARG is omitted or nil.
+
 See the command `outline-mode' for more information on this mode."
   nil " Outl" (list (cons [menu-bar] outline-minor-mode-menu-bar-map)
                    (cons outline-minor-mode-prefix outline-mode-prefix-map))
@@ -377,9 +380,10 @@ See the command `outline-mode' for more information on this mode."
     (show-all)))
 \f
 (defvar outline-level 'outline-level
-  "*Function of no args to compute a header's nesting level in an outline.
+  "Function of no args to compute a header's nesting level in an outline.
 It can assume point is at the beginning of a header line and that the match
 data reflects the `outline-regexp'.")
+;;;###autoload(put 'outline-level 'risky-local-variable t)
 
 (defvar outline-heading-alist ()
   "Alist associating a heading for every possible level.
@@ -444,10 +448,6 @@ at the end of the buffer."
   "Non-nil if the character after point is invisible."
   (get-char-property (or pos (point)) 'invisible))
 
-(defun outline-visible ()
-  (not (outline-invisible-p)))
-(make-obsolete 'outline-visible 'outline-invisible-p "21.1")
-
 (defun outline-back-to-heading (&optional invisible-ok)
   "Move to previous heading line, or beg of this line if it's a heading.
 Only visible heading lines are considered, unless INVISIBLE-OK is non-nil."
@@ -594,7 +594,7 @@ If there are no such entries, return nil.
 ALIST defaults to `outline-heading-alist'.
 Similar to (car (rassoc LEVEL ALIST)).
 If there are several different entries with same new level, choose
-the one with the smallest distance to the assocation of HEAD in the alist.
+the one with the smallest distance to the association of HEAD in the alist.
 This makes it possible for promotion to work in modes with several
 independent sets of headings (numbered, unnumbered, appendix...)"
   (unless alist (setq alist outline-heading-alist))
@@ -642,12 +642,12 @@ the match data is set appropriately."
 ;; Vertical tree motion
 
 (defun outline-move-subtree-up (&optional arg)
-  "Move the currrent subtree up past ARG headlines of the same level."
+  "Move the current subtree up past ARG headlines of the same level."
   (interactive "p")
   (outline-move-subtree-down (- arg)))
 
 (defun outline-move-subtree-down (&optional arg)
-  "Move the currrent subtree down past ARG headlines of the same level."
+  "Move the current subtree down past ARG headlines of the same level."
   (interactive "p")
   (let ((movfunc (if (> arg 0) 'outline-get-next-sibling
                   'outline-get-last-sibling))
@@ -751,6 +751,7 @@ If FLAG is nil then text is shown, while if FLAG is t the text is hidden."
     ;; very end of the heading, before the newline, so text inserted at FROM
     ;; belongs to the heading rather than to the entry.
     (let ((o (make-overlay from to nil 'front-advance)))
+      (overlay-put o 'evaporate t)
       (overlay-put o 'invisible 'outline)
       (overlay-put o 'isearch-open-invisible
                   (or outline-isearch-open-invisible-function
@@ -802,7 +803,7 @@ If FLAG is nil then text is shown, while if FLAG is t the text is hidden."
 ;; Function to be set as an outline-isearch-open-invisible' property
 ;; to the overlay that makes the outline invisible (see
 ;; `outline-flag-region').
-(defun outline-isearch-open-invisible (overlay)
+(defun outline-isearch-open-invisible (_overlay)
   ;; We rely on the fact that isearch places point on the matched text.
   (show-entry))
 \f
@@ -905,6 +906,8 @@ Show the heading too, if it is currently invisible."
                   (goto-char (point-max))
                   ;; Keep empty last line, if available.
                   (if (bolp) (1- (point)) (point)))))
+      (if (< end beg)
+         (setq beg (prog1 end (setq end beg))))
       ;; First hide everything.
       (outline-flag-region beg end t)
       ;; Then unhide the top level headers.
@@ -912,7 +915,11 @@ Show the heading too, if it is currently invisible."
        (lambda ()
         (if (<= (funcall outline-level) levels)
             (outline-show-heading)))
-       beg end)))
+       beg end)
+      ;; Finally unhide any trailing newline.
+      (goto-char (point-max))
+      (if (and (bolp) (not (bobp)) (outline-invisible-p (1- (point))))
+          (outline-flag-region (1- (point)) (point) nil))))
   (run-hooks 'outline-view-change-hook))
 
 (defun hide-other ()
@@ -1115,5 +1122,4 @@ convenient way to make a table of contents of the buffer."
 (provide 'outline)
 (provide 'noutline)
 
-;; arch-tag: 1724410e-7d4d-4f46-b801-49e18171e874
 ;;; outline.el ends here