瀏覽代碼

Merge branch 'maint'

Nicolas Goaziou 8 年之前
父節點
當前提交
eda4684d35
共有 2 個文件被更改,包括 22 次插入19 次删除
  1. 16 18
      lisp/org.el
  2. 6 1
      testing/lisp/test-org.el

+ 16 - 18
lisp/org.el

@@ -16000,24 +16000,22 @@ If yes, return this value.  If not, return the current value of the variable."
   "Delete PROPERTY from entry at point-or-marker POM.
 Accumulated properties, i.e. PROPERTY+, are also removed.  Return
 non-nil when a property was removed."
-  (unless (member property org-special-properties)
-    (org-with-point-at pom
-      (let ((range (org-get-property-block)))
-	(when range
-	  (let* ((begin (car range))
-		 (origin (cdr range))
-		 (end (copy-marker origin))
-		 (re (org-re-property
-		      (concat (regexp-quote property) "\\+?") t t)))
-	    (goto-char begin)
-	    (while (re-search-forward re end t)
-	      (delete-region (match-beginning 0) (line-beginning-position 2)))
-	    ;; If drawer is empty, remove it altogether.
-	    (when (= begin end)
-	      (delete-region (line-beginning-position 0)
-			     (line-beginning-position 2)))
-	    ;; Return non-nil if some property was removed.
-	    (prog1 (/= end origin) (set-marker end nil))))))))
+  (org-with-point-at pom
+    (pcase (org-get-property-block)
+      (`(,begin . ,origin)
+       (let* ((end (copy-marker origin))
+	      (re (org-re-property
+		   (concat (regexp-quote property) "\\+?") t t)))
+	 (goto-char begin)
+	 (while (re-search-forward re end t)
+	   (delete-region (match-beginning 0) (line-beginning-position 2)))
+	 ;; If drawer is empty, remove it altogether.
+	 (when (= begin end)
+	   (delete-region (line-beginning-position 0)
+			  (line-beginning-position 2)))
+	 ;; Return non-nil if some property was removed.
+	 (prog1 (/= end origin) (set-marker end nil))))
+      (_ nil))))
 
 ;; Multi-values properties are properties that contain multiple values
 ;; These values are assumed to be single words, separated by whitespace.

+ 6 - 1
testing/lisp/test-org.el

@@ -4220,7 +4220,12 @@ Paragraph<point>"
      (org-entry-delete (point) "A")))
   (should-not
    (org-test-with-temp-text "* H\n:PROPERTIES:\n:A: 1\n:B: 2\n:END:"
-     (org-entry-delete (point) "C"))))
+     (org-entry-delete (point) "C")))
+  ;; Special properties cannot be located in a drawer.  Allow to
+  ;; remove them anyway, in case of user error.
+  (should
+   (org-test-with-temp-text "* H\n:PROPERTIES:\n:SCHEDULED: 1\n:END:"
+     (org-entry-delete (point) "SCHEDULED"))))
 
 (ert-deftest test-org/entry-get ()
   "Test `org-entry-get' specifications."