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."