From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Antoine R. Dumont" Subject: Re: Add caching to org-buffer-property-keys Date: Tue, 12 Apr 2016 19:54:51 +0200 Message-ID: <878u0i3e6s.fsf@gmail.com> References: <2016-03-02T12-21-52@devnull.Karl-Voit.at> <56D73594.6090908@free.fr> <2016-04-12T15-52-23@devnull.Karl-Voit.at> Mime-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:37177) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aq2Wj-0003mG-9L for emacs-orgmode@gnu.org; Tue, 12 Apr 2016 13:55:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aq2Wf-0007DV-25 for emacs-orgmode@gnu.org; Tue, 12 Apr 2016 13:55:01 -0400 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]:36520) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aq2We-0007DO-O2 for emacs-orgmode@gnu.org; Tue, 12 Apr 2016 13:54:56 -0400 Received: by mail-wm0-x243.google.com with SMTP id l6so7421066wml.3 for ; Tue, 12 Apr 2016 10:54:56 -0700 (PDT) In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: Karl Voit Cc: Org Mode Mailing List --=-=-= Content-Type: text/plain eniotna writes: > 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))) > ``` Also, for information you could use format function. It clarifies the prompt computation ^^: ``` (defun org-read-entry-property-name () "Read a property name from the current entry." (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 (format "Property [%s]: " (if default-prop 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 >> >> >> Cheers, -- tony / @ardumont ----------------------------------------------------------------- gpg fingerprint BF00 203D 741A C9D5 46A8 BE07 52E2 E984 0D10 C3B8 --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBCAAGBQJXDTZsAAoJEFLi6YQNEMO4JG0P/3qrXhS2jVad9oqdd6v3LdzL XYwFeQR4tKZNqcfVupcDbskMu84eQwnDhb3LYWyJpyaGBxc7LZ8Zkwp+jn3yvHlF Tkua4cEzv+Z4zMORJ1oeXU4ofFdb2NXcuXowg/3kGyHO+Y/KMdYfWJO4YkoyIjvk IhFkPN2Ygmlt7zTLgYIzVEM1hfiDryEDf495WWuimscodIikzSZ7//Q+XzU+Ue8G WEIwvkW6qRCXlfmRsZAo1ZBSFhTGXU0ZE39vU0iUU/uX8BTB0lOqQIiYgcg/5mnh TbZKOMk5qjlFmkYxK7tLhJNlWfbKJKQLund6gj5wORL88BZ4JJrZEr3sZU/92OGN vvPHeXzfJCUZmeDBs6MivkAGSelANT/x13aRVSRPnkXguS+AJrJbNCuKJonNlYEr QBWh40fBo9IWTCLzpPsOluXlComwCn9bJxfI7+Ayhse0TAWqfjMKGU39wMm91e8t Mmc+C1Dag/Au668bPXEencHOqHHr+lV0cW7X8CXbLN+Z4EXfh0Sy+dClymmg8QHo iBZlwV7fDdvN4sT8/1RUDYsoJqqIWjyMzMQg/qTsAK3QnvYeFQQuFtwqE8lE0RbD VqubnGkN4lLW7pM7jQu1hpqnFfpfiyoWfYoF2vEKt75oUHKVR27urmrB3F0XNefN 5cVKronRJv8RELcD2nPS =1z5q -----END PGP SIGNATURE----- --=-=-=--