فهرست منبع

org-capture: Fix capture aborting

* lisp/org-capture.el (org-capture-place-entry): Fix delimiters for
  region to delete when aborting capture.
* testing/lisp/test-org-capture.el (test-org-capture/abort): Add test.
Nicolas Goaziou 6 سال پیش
والد
کامیت
aaa3372b8b
2فایلهای تغییر یافته به همراه29 افزوده شده و 14 حذف شده
  1. 14 13
      lisp/org-capture.el
  2. 15 1
      testing/lisp/test-org-capture.el

+ 14 - 13
lisp/org-capture.el

@@ -1128,21 +1128,22 @@ may have been stored before."
       (unless (org-at-heading-p) (outline-next-heading)))
      ;; Otherwise, insert as a top-level entry at the end of the file.
      (t (goto-char (point-max))))
-    (let ((beg (point))
-	  (template (org-capture-get :template)))
+    (let ((origin (point)))
       (unless (bolp) (insert "\n"))
       (org-capture-empty-lines-before)
-      (org-capture-verify-tree template)
-      (org-paste-subtree level template 'for-yank)
-      (org-capture-empty-lines-after)
-      (org-capture-position-for-last-stored beg)
-      (unless (org-at-heading-p) (outline-next-heading))
-      (org-capture-mark-kill-region beg (point))
-      (let ((end (if (org-at-heading-p) (line-end-position 0) (point))))
-	(org-capture-narrow beg end)
-	(when (or (search-backward "%?" beg t)
-		  (search-forward "%?" end t))
-	  (replace-match ""))))))
+      (let ((beg (point)))
+	(org-capture-position-for-last-stored beg)
+	(let ((template (org-capture-get :template)))
+	  (org-capture-verify-tree template)
+	  (org-paste-subtree level template 'for-yank))
+	(let ((end (if (org-at-heading-p) (line-end-position 0) (point))))
+	  (org-capture-empty-lines-after)
+	  (unless (org-at-heading-p) (outline-next-heading))
+	  (org-capture-mark-kill-region origin (point))
+	  (org-capture-narrow beg end)
+	  (when (or (search-backward "%?" beg t)
+		    (search-forward "%?" end t))
+	    (replace-match "")))))))
 
 (defun org-capture-place-item ()
   "Place the template as a new plain list item."

+ 15 - 1
testing/lisp/test-org-capture.el

@@ -146,7 +146,9 @@
 	     (list file1 file2 (buffer-file-name)))))))))
 
 (ert-deftest test-org-capture/abort ()
-  "Test that capture can be aborted after inserting at end of capture buffer."
+  "Test aborting a capture process."
+  ;; Test that capture can be aborted after inserting at end of
+  ;; capture buffer.
   (should
    (equal
     "* A\n* B\n"
@@ -158,6 +160,18 @@
 	(goto-char (point-max))
 	(insert "Capture text")
 	(org-capture-kill))
+      (buffer-string))))
+  ;; Test aborting a capture that split the line.
+  (should
+   (equal
+    "* AB\n"
+    (org-test-with-temp-text-in-file "* AB\n"
+      (let* ((file (buffer-file-name))
+	     (org-capture-templates
+	      `(("t" "Todo" entry
+		 (file+function ,file (lambda () (goto-char 4))) "** H1 %?"))))
+	(org-capture nil "t")
+	(org-capture-kill))
       (buffer-string)))))
 
 (ert-deftest test-org-caputre/entry ()