emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Orgmode] [PATCH] Fix Subtle Heading Creation Bugs


From: Peter Jones
Subject: [Orgmode] [PATCH] Fix Subtle Heading Creation Bugs
Date: Fri, 17 Oct 2008 18:10:12 -0600
User-agent: Gnus/5.110011 (No Gnus v0.11) Emacs/22.2 (darwin)

Since commit 238d0d1 (Improve consistency for inserting new headlines)
a few minor inconsistencies were introduced to heading creation with
the control key, A.K.A. org-insert-heading-respect-content.  This
patch resolves those subtle "bugs".

This patch changes org-insert-heading-respect-content so that it:

 - Creates a new heading even if point is in a plain list
   (force-heading is set to true, behavior before 238d0d1)
 - If the previous heading was closed, keep it closed
   (keeps the previous heading in the state it was before C-RET)

It also includes changes for org-insert-todo-heading and the OrgMode
manual.

Thanks Carsten for making the changes in 238d0d1 for me.  With the
attached patch, heading creation is now perfect (for me at least ;).

>From 200826587af4bd40995d1d45381006ed0639f7e9 Mon Sep 17 00:00:00 2001
From: Peter Jones <address@hidden>
Date: Fri, 17 Oct 2008 17:26:11 -0600
Subject: [PATCH] Fix Subtle Heading Creation Bugs

Since commit 238d0d1 (Improve consistency for inserting new headlines)
a few minor inconsistencies were introduced to heading creation with
the control key, A.K.A. org-insert-heading-respect-content.  This
patch resolves those subtle "bugs".

This patch changes org-insert-heading-respect-content so that it:

 - Creates a new heading even if point is in a plain list
   (force-heading is set to true, behavior before 238d0d1)
 - If the previous heading was closed, keep it closed
   (keeps the previous heading in the state it was before C-RET)
---
 lisp/org.el |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/lisp/org.el b/lisp/org.el
index 9c08ba4..541cf3a 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -4607,7 +4607,7 @@ but create the new hedline after the current line."
                           (match-string 0))
                       (error "*"))))
             (blank (cdr (assq 'heading org-blank-before-new-entry)))
-            pos)
+            pos should-hide-previous-heading)
        (cond
         ((and (org-on-heading-p) (bolp)
               (or (bobp)
@@ -4622,6 +4622,9 @@ but create the new hedline after the current line."
          nil)
         (t
          ;; in the middle of the line
+          (save-excursion
+            (end-of-line)
+            (setq should-hide-previous-heading (org-invisible-p)))
          (org-show-entry)
          (let ((split
                 (org-get-alist-option org-M-RET-may-split-line 'headline))
@@ -4652,6 +4655,10 @@ but create the new hedline after the current line."
        (setq pos (point))
        (end-of-line 1)
        (unless (= (point) pos) (just-one-space) (backward-delete-char 1))
+        (when (and org-insert-heading-respect-content 
should-hide-previous-heading)
+            (save-excursion
+              (outline-previous-visible-heading 1)
+              (hide-entry)))
        (run-hooks 'org-insert-heading-hook)))))
 
 (defun org-get-heading (&optional no-tags)
@@ -4675,7 +4682,7 @@ but create the new hedline after the current line."
 (defun org-insert-heading-respect-content ()
   (interactive)
   (let ((org-insert-heading-respect-content t))
-    (call-interactively 'org-insert-heading)))
+    (org-insert-heading t)))
 
 (defun org-insert-todo-heading-respect-content ()
   (interactive)
-- 
1.6.0


>From e7de89ce7a1bd3ab2259159fdb65b052d74370a0 Mon Sep 17 00:00:00 2001
From: Peter Jones <address@hidden>
Date: Fri, 17 Oct 2008 17:57:47 -0600
Subject: [PATCH] Update documentation WRT C-RET

---
 doc/org.texi |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/doc/org.texi b/doc/org.texi
index 31996e0..b76fcaf 100644
--- a/doc/org.texi
+++ b/doc/org.texi
@@ -897,8 +897,9 @@ of a headline), then a headline like the current one will 
be inserted
 after the end of the subtree.
 @kindex address@hidden
 @item address@hidden
-Just like @address@hidden, but if the heading is inserted after the current,
-insert it actually after the entire subtree.
+Just like @address@hidden, except when adding a new heading below the
+current heading, the new heading is placed after the body instead of before
+it.  This command works from anywhere in the entry.
 @kindex address@hidden
 @item address@hidden
 Insert new TODO entry with same level as current heading.
-- 
1.6.0


>From 4f7aed562ae93759fb1638378029aeef3cc70e79 Mon Sep 17 00:00:00 2001
From: Peter Jones <address@hidden>
Date: Fri, 17 Oct 2008 18:03:38 -0600
Subject: [PATCH] Also fix org-insert-todo-heading

---
 lisp/org.el |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/lisp/org.el b/lisp/org.el
index 541cf3a..5e4d6a5 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -4684,18 +4684,18 @@ but create the new hedline after the current line."
   (let ((org-insert-heading-respect-content t))
     (org-insert-heading t)))
 
-(defun org-insert-todo-heading-respect-content ()
-  (interactive)
+(defun org-insert-todo-heading-respect-content (force-state)
+  (interactive "P")
   (let ((org-insert-heading-respect-content t))
-    (call-interactively 'org-insert-todo-heading)))
+    (org-insert-todo-heading force-state t)))
 
-(defun org-insert-todo-heading (arg)
+(defun org-insert-todo-heading (arg &optional force-heading)
   "Insert a new heading with the same level and TODO state as current heading.
 If the heading has no TODO state, or if the state is DONE, use the first
 state (TODO by default).  Also with prefix arg, force first state."
   (interactive "P")
   (when (not (org-insert-item 'checkbox))
-    (org-insert-heading)
+    (org-insert-heading force-heading)
     (save-excursion
       (org-back-to-heading)
       (outline-previous-heading)
-- 
1.6.0

-- 
Peter Jones, http://pmade.com
pmade inc.  Louisville, CO US

reply via email to

[Prev in Thread] Current Thread [Next in Thread]