Re: [O] getting file properties

2013-05-05 Thread Nicolas Goaziou
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

2013-05-05 Thread John Kitchin
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

2013-05-04 Thread John Kitchin
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

2013-05-04 Thread J. David Boyd
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

2013-05-04 Thread Nick Dokos
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

2013-05-04 Thread Eric Abrahamsen
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...