Re: [O] getting file properties
Hello, Nick Dokos ndo...@gmail.com writes: Here's one way: (defun jk-org-kwds () (let* ((parse-tree (org-element-parse-buffer)) (keys (org-element-map parse-tree 'keyword (function identity (mapcar (function (lambda (x) (cons (org-element-property :key x) (org-element-property :value x keys))) This returns a list of (KEY. VALUE) pairs. I'm sure there are other (better, cheaper) ways, but I'm going through org-element.el, and having that hammer in hand, everything looks like a nail to me :-) I suggest the slightly more efficient variation: (defun jk-org-kwds () (org-element-map (org-element-parse-buffer 'element) 'keyword (lambda (keyword) (cons (org-element-property :key keyword) (org-element-property :value keyword) The optional argument `element' prevents `org-element-parse-buffer' from diving too deep and `org-element-map' does the job of `mapcar'. Regards, -- Nicolas Goaziou
Re: [O] getting file properties
Thanks for the great suggestions (Nick, Nick, and Eric)! Here are the two functions that finally do what I wanted. I added the second function to get a specific result. #+RANDOM: tfjkdsla jfkdsa #+BEGIN_SRC emacs-lisp :results value ; suggested by Nicolas Goaziou n.goaz...@gmail.com (defun jk-org-kwds () (org-element-map (org-element-parse-buffer 'element) 'keyword (lambda (keyword) (cons (org-element-property :key keyword) (org-element-property :value keyword) (defun jk-org-kwd (KEYWORD) get the value of a KEYWORD in the form of #+KEYWORD: value (cdr (assoc KEYWORD (jk-org-kwds (jk-org-kwd RANDOM) #+END_SRC #+RESULTS: : tfjkdsla jfkdsa A less orgish way I worked out last night after browsing through org.el is: #+ANDREWID: jkitchin #+BEGIN_SRC emacs-lisp :results value (defun jk-get-file-keyword (KEYWORD) get the value from a line like this #+OPTION: value in a file. (interactive) (let ((case-fold-search t) (re (format ^#\\+%s:[ \t]+\\([^\t\n]+\\) KEYWORD))) (if (not (save-excursion (or (re-search-forward re nil t) (re-search-backward re nil t (error (format No line containing #+%s: value found KEYWORD))) (match-string 1))) (jk-get-file-keyword ANDREWID) #+END_SRC #+RESULTS: : jkitchin This is pretty awesome! John --- John Kitchin Associate Professor Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 http://kitchingroup.cheme.cmu.edu
[O] getting file properties
Hi everyone, if I have an org-file with this in it: #+EMAIL: jkitc...@cmu.edu is there an org lisp command to get the email address after I have opened the file? I am looping through many files to generate a report, and would like to do this in emacs-lisp. I had hoped org-entry-get would do it, but it does not (it will retrieve it from #+PROPERTY: EMAIL jkitc...@cmu.edu). Is it possible to define other keywords similar to that? E.g. #+ANDREWID: jkitchin and then to be able to read them from a lisp command (without writing the parsing code myself)? something like (org-entry-get-keyword ANDREWID). I could not find anything like this in the property API ( http://orgmode.org/manual/Using-the-property-API.html) which is where i thought it would be. Thanks! John --- John Kitchin Associate Professor Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 http://kitchingroup.cheme.cmu.edu
Re: [O] getting file properties
John Kitchin jkitc...@andrew.cmu.edu writes: Hi everyone, if I have an org-file with this in it: #+EMAIL: jkitc...@cmu.edu is there an org lisp command to get the email address after I have opened the file? I am looping through many files to generate a report, and would like to do this in emacs-lisp. I had hoped org-entry-get would do it, but it does not (it will retrieve it from #+PROPERTY: EMAIL jkitc...@cmu.edu). Is it possible to define other keywords similar to that? E.g. #+ANDREWID: jkitchin and then to be able to read them from a lisp command (without writing the parsing code myself)? something like (org-entry-get-keyword ANDREWID). I could not find anything like this in the property API (http://orgmode.org/manual/Using-the-property-API.html) which is where i thought it would be. Thanks! John --- John Kitchin Associate Professor Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 http://kitchingroup.cheme.cmu.edu I'm interested in an answer to this as well...
Re: [O] getting file properties
da...@adboyd.com (J. David Boyd) writes: John Kitchin jkitc...@andrew.cmu.edu writes: Hi everyone, if I have an org-file with this in it: #+EMAIL: jkitc...@cmu.edu is there an org lisp command to get the email address after I have opened the file? I am looping through many files to generate a report, and would like to do this in emacs-lisp. I had hoped org-entry-get would do it, but it does not (it will retrieve it from #+PROPERTY: EMAIL jkitc...@cmu.edu). Is it possible to define other keywords similar to that? E.g. #+ANDREWID: jkitchin and then to be able to read them from a lisp command (without writing the parsing code myself)? something like (org-entry-get-keyword ANDREWID). I could not find anything like this in the property API (http://orgmode.org/manual/Using-the-property-API.html) which is where i thought it would be. Thanks! John --- John Kitchin Associate Professor Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 http://kitchingroup.cheme.cmu.edu I'm interested in an answer to this as well... Here's one way: --8---cut here---start-8--- (defun jk-org-kwds () (let* ((parse-tree (org-element-parse-buffer)) (keys (org-element-map parse-tree 'keyword (function identity (mapcar (function (lambda (x) (cons (org-element-property :key x) (org-element-property :value x keys))) --8---cut here---end---8--- This returns a list of (KEY. VALUE) pairs. I'm sure there are other (better, cheaper) ways, but I'm going through org-element.el, and having that hammer in hand, everything looks like a nail to me :-) -- Nick
Re: [O] getting file properties
John Kitchin jkitc...@andrew.cmu.edu writes: Hi everyone, if I have an org-file with this in it: #+EMAIL: jkitc...@cmu.edu is there an org lisp command to get the email address after I have opened the file? I am looping through many files to generate a report, and would like to do this in emacs-lisp. I had hoped org-entry-get would do it, but it does not (it will retrieve it from #+PROPERTY: EMAIL jkitc...@cmu.edu). Is it possible to define other keywords similar to that? E.g. #+ANDREWID: jkitchin and then to be able to read them from a lisp command (without writing the parsing code myself)? something like (org-entry-get-keyword ANDREWID). I could not find anything like this in the property API (http://orgmode.org/manual/Using-the-property-API.html) which is where i thought it would be. Thanks! John If you mean file-level properties (ie not properties on headlines), `org-export-get-environment' is one place to look. It runs `org-export--get-inbuffer-options', which parses options at the top of the file. I don't think it will read arbitrary properties, though...