diff --git a/lisp/org-pcomplete.el b/lisp/org-pcomplete.el
index 42d0f9f89..6347d1cf4 100644
--- a/lisp/org-pcomplete.el
+++ b/lisp/org-pcomplete.el
@@ -359,7 +359,7 @@ This needs more work, to handle headings with lots of spaces in them."
(concat x ": "))
(let ((lst (pcomplete-uniqify-list
(copy-sequence
- (org-buffer-property-keys nil t t)))))
+ (org-buffer-property-keys nil t t t)))))
(dolist (prop (org-entry-properties))
(setq lst (delete (car prop) lst)))
lst))
diff --git a/lisp/org.el b/lisp/org.el
index c71fda47c..b426afd05 100755
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -16121,7 +16121,8 @@ decreases scheduled or deadline date by one day."
(org-indent-line)))))
(run-hook-with-args 'org-property-changed-functions property value)))
-(defun org-buffer-property-keys (&optional specials defaults columns)
+(defun org-buffer-property-keys
+ (&optional specials defaults columns ignore-malformed)
"Get all property keys in the current buffer.
When SPECIALS is non-nil, also list the special properties that
@@ -16132,7 +16133,10 @@ special meaning internally: ARCHIVE, CATEGORY, SUMMARY,
DESCRIPTION, LOCATION, and LOGGING and others.
When COLUMNS in non-nil, also include property names given in
-COLUMN formats in the current buffer."
+COLUMN formats in the current buffer.
+
+When IGNORE-MALFORMED is non-nil, malformed drawer repair will not be
+automatically performed, such drawers will be silently ignored."
(let ((case-fold-search t)
(props (append
(and specials org-special-properties)
@@ -16144,7 +16148,8 @@ COLUMN formats in the current buffer."
(let ((range (org-get-property-block)))
(catch 'skip
(unless range
- (when (and (not (org-before-first-heading-p))
+ (when (and (not ignore-malformed)
+ (not (org-before-first-heading-p))
(y-or-n-p (format "Malformed drawer at %d, repair?"
(line-beginning-position))))
(org-get-property-block nil t))
diff --git a/testing/lisp/test-org-pcomplete.el b/testing/lisp/test-org-pcomplete.el
new file mode 100644
index 000000000..b7bcc4a30
--- /dev/null
+++ b/testing/lisp/test-org-pcomplete.el
@@ -0,0 +1,43 @@
+;;; test-org-pcomplete.el --- test pcomplete integration
+
+;; Copyright (C) 2015 Alexey Lebedeff
+;; Authors: Alexey Lebedeff
+
+;; This file is not part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see .
+
+;;; Comments:
+
+
+
+;;; Code:
+
+(ert-deftest test-org-pcomplete/prop ()
+ "Test property completion behaviour in an Org buffer"
+ ;; Drawer where we are currently completing property name is
+ ;; malformed in any case, it'll become valid only after successful
+ ;; completion. We expect that this completion process will finish
+ ;; successfully, and there will be no interactive drawer repair
+ ;; attempts.
+ (should
+ (equal
+ "* a\n:PROPERTIES:\n:pname: \n:END:\n* b\n:PROPERTIES:\n:pname: pvalue\n:END:\n"
+ (org-test-with-temp-text "* a\n:PROPERTIES:\n:pna\n:END:\n* b\n:PROPERTIES:\n:pname: pvalue\n:END:\n"
+ (flet ((y-or-n-p (prompt) (error "Should not be called")))
+ (pcomplete))
+ (buffer-string)))))
+
+(provide 'test-org-pcomplete)
+;;; test-org-pcomplete.el ends here
diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index dc8f2fb16..552a489d5 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -3352,7 +3352,13 @@ Paragraph"
(equal '("A" "B" "COLUMNS")
(org-test-with-temp-text
"* H\n:PROPERTIES:\n:COLUMNS: %25ITEM %A %20B\n:END:"
- (org-buffer-property-keys nil nil t)))))
+ (org-buffer-property-keys nil nil t))))
+ ;; With non-nil IGNORE-MALFORMED malformed property drawers are silently ignored.
+ (should
+ (equal '("A")
+ (org-test-with-temp-text
+ "* a\n:PROPERTIES:\n:A: 1\n:END:\n* b\n:PROPERTIES:\nsome junk here\n:END:\n"
+ (org-buffer-property-keys nil nil nil t)))))
(ert-deftest test-org/property-values ()
"Test `org-property-values' specifications."