Hello, > I'm sure, it's only a small error of mine. Replace `(mapcar #'list (org-entry-properties nil nil))` by `(org-entry-properties nil nil)` in your `org-read-entry-property-name` definition: ``` (defun org-read-entry-property-name () "Read a property name from the current entry (basically a rewrite of org-read-property-name which uses org-entry-properties instead to speed up)" (let ((completion-ignore-case t) (default-prop (or (and (org-at-property-p) (org-match-string-no-properties 2)) org-last-set-property))) (org-completing-read (concat "Property" (if default-prop (concat " [" default-prop "]") "") ": ") (org-entry-properties nil nil) nil nil nil nil default-prop))) ``` Regards, tony / @ardumont On Tue, Apr 12, 2016 at 3:55 PM, Karl Voit wrote: > * Thierry Banel wrote: > > Nice function! > > Maybe a rewrite of (org-read-property-name) calling > > (org-entry-properties) could speed up things. > > (org-entry-properties) returns an assoc list of the local header > properties. > > OK, great idea. > > I tried by myself (Elisp noob) and failed: see code below. > > The code evaluates without complaining but when I use the function, > I get asked for a property which gets also correctly written to the > property. However, the completion of the property does not work. > > I'm sure, it's only a small error of mine. > > Thanks for your help here! > > > ;; version that tries to read only properties of current entry: > (defun org-read-entry-property-name () > "Read a property name from the current entry (basically a rewrite of > org-read-property-name which uses org-entry-properties instead to speed > up)" > (let ((completion-ignore-case t) > (default-prop (or (and (org-at-property-p) > (org-match-string-no-properties 2)) > org-last-set-property))) > (org-completing-read > (concat "Property" > (if default-prop (concat " [" default-prop "]") "") > ": ") > ;; ORIGINAL LINE: (mapcar #'list (org-buffer-property-keys nil t t)) > (mapcar #'list (org-entry-properties nil nil)) > nil nil nil nil default-prop))) > > (defun my-org-region-to-property (&optional property) > (interactive) > ;; if no region is defined, do nothing > (if (use-region-p) > ;; if a region string is found, ask for a property and set property > to > ;; the string in the region > (let ((val (replace-regexp-in-string > "\\`[ \t\n]*" "" > (replace-regexp-in-string "[ \t\n]*\\'" "" > (substring (buffer-string) > (- > (region-beginning) 1) > (region-end)))) > ) > ;; if none was stated by user, read property from user > (prop (or property > (org-read-entry-property-name)))) > ;; set property > (org-set-property prop val)))) > > > -- > mail|git|SVN|photos|postings|SMS|phonecalls|RSS|CSV|XML to Org-mode: > > get Memacs from https://github.com/novoid/Memacs < > > https://github.com/novoid/extract_pdf_annotations_to_orgmode + more on > github > > >