aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/outline.el
diff options
context:
space:
mode:
authorRichard M. Stallman <[email protected]>2005-08-26 11:52:08 +0000
committerRichard M. Stallman <[email protected]>2005-08-26 11:52:08 +0000
commit20e3210fb7584494c83dda26d79b3ad54d525d2e (patch)
tree87c650f614fdc4f85448a81904b5fb3fd6a1fc01 /lisp/outline.el
parent04ec34141ff9216131130a83777a2a42fde3255d (diff)
(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.el43
1 files changed, 30 insertions, 13 deletions
diff --git a/lisp/outline.el b/lisp/outline.el
index 213bc34aba..61968da99d 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.