diff options
author | Richard M. Stallman <rms@gnu.org> | 2005-08-26 11:52:08 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 2005-08-26 11:52:08 +0000 |
commit | 97a2c165fcf2ea7180e68f89961cce736ce781cf (patch) | |
tree | 84732d387c38b13c2d572e90bb2fadc3680aa2e8 /lisp/outline.el | |
parent | 381850151b11aee0222cf253c8f777524c7ffe85 (diff) | |
download | emacs-97a2c165fcf2ea7180e68f89961cce736ce781cf.tar.gz |
(outline-promote): Try shortening the heading.
As last resort, read the heading to use.
(outline-demote): As last resort, read the heading to use.
Diffstat (limited to 'lisp/outline.el')
-rw-r--r-- | lisp/outline.el | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/lisp/outline.el b/lisp/outline.el index 213bc34aba7..61968da99d7 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -471,13 +471,28 @@ in the region." (save-excursion (outline-get-next-sibling) (point)))) (t (outline-back-to-heading t) - (let* ((head (match-string 0)) + (let* ((head (match-string-no-properties 0)) (level (save-match-data (funcall outline-level))) (up-head (or (outline-head-from-level (1- level) head) + ;; Use the parent heading, if it is really + ;; one level less. (save-excursion (save-match-data (outline-up-heading 1 t) - (match-string 0)))))) + (and (= (1- level) (funcall outline-level)) + (match-string-no-properties 0)))) + ;; Bummer!! There is no lower level heading. + ;; Let's try to invent one by deleting the last char. + (save-match-data + (let ((new-head (substring head 0 -1))) + (if (string-match (concat "\\`\\(?:" outline-regexp "\\)") + new-head) + ;; Why bother checking that it is indeed lower level ? + new-head + ;; Didn't work, so ask what to do. + (read-string (format "Parent heading for `%s': " + head) + head nil nil t))))))) (unless (rassoc level outline-heading-alist) (push (cons head level) outline-heading-alist)) @@ -501,7 +516,7 @@ in the region." (point) (save-excursion (outline-get-next-sibling) (point)))) (t - (let* ((head (match-string 0)) + (let* ((head (match-string-no-properties 0)) (level (save-match-data (funcall outline-level))) (down-head (or (outline-head-from-level (1+ level) head) @@ -516,21 +531,23 @@ in the region." (<= (funcall outline-level) level)))) (unless (eobp) (looking-at outline-regexp) - (match-string 0)))) + (match-string-no-properties 0)))) (save-match-data - ;; Bummer!! There is no lower heading in the buffer. - ;; Let's try to invent one by repeating the first char. - (let ((new-head (concat (substring head 0 1) head))) + ;; Bummer!! There is no higher-level heading in the buffer. + ;; Let's try to invent one by repeating the last char. + (let ((new-head (concat head (substring head -1)))) (if (string-match (concat "\\`\\(?:" outline-regexp "\\)") new-head) - ;; Why bother checking that it is indeed lower level ? + ;; Why bother checking that it is indeed higher level ? new-head - ;; Didn't work: keep it as is so it's still a heading. - head)))))) + ;; Didn't work, so ask what to do. + (read-string (format "Demoted heading for `%s': " + head) + head nil nil t))))))) - (unless (rassoc level outline-heading-alist) - (push (cons head level) outline-heading-alist)) - (replace-match down-head nil t))))) + (unless (rassoc level outline-heading-alist) + (push (cons head level) outline-heading-alist)) + (replace-match down-head nil t))))) (defun outline-head-from-level (level head &optional alist) "Get new heading with level LEVEL from ALIST. |