summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Dominik <carsten.dominik@gmail.com>2010-07-20 09:27:37 +0200
committerCarsten Dominik <carsten.dominik@gmail.com>2010-07-20 09:27:37 +0200
commitaf9d3d119219b3e71850b63e44cb1c26cea5dfd1 (patch)
tree0e77a383418f7368d04f61a1082b2d2a8ceb1f21
parentcee04fa632570b12e9950386282bfde02a02ff6b (diff)
parentd6208a7fe57acc1b3da71698e676abcbdc31622a (diff)
downloadorg-mode-af9d3d119219b3e71850b63e44cb1c26cea5dfd1.tar.gz
Merge branch 'master' of git+ssh://repo.or.cz/srv/git/org-mode
-rw-r--r--contrib/babel/library-of-babel.org101
1 files changed, 84 insertions, 17 deletions
diff --git a/contrib/babel/library-of-babel.org b/contrib/babel/library-of-babel.org
index 49172e0..f7d2394 100644
--- a/contrib/babel/library-of-babel.org
+++ b/contrib/babel/library-of-babel.org
@@ -29,32 +29,31 @@ A collection of simple utility functions
* File I/O
** reading and writing files
-Read the contents of the file at =path= into a string.
+Read the contents of the file at =file=. The =:results vector= and
+=:results scalar= header arguments can be used to read the contents of
+file as either a table or a string.
#+srcname: read
-#+begin_src emacs-lisp :var path=""
- (with-temp-filebuffer path
- (buffer-substring (point-min) (point-max)))
-#+end_src
-
-Read the lines of the file at =path= into a list.
-#+srcname: read-lines
-#+begin_src emacs-lisp :var path=""
- (split-string
- (with-temp-filebuffer path
- (buffer-substring (point-min) (point-max))))
+#+begin_src emacs-lisp :var file=""
+ (if (member "vector" result-params)
+ (with-temp-buffer
+ (org-table-import (expand-file-name file) nil)
+ (org-table-to-lisp))
+ (with-temp-buffer
+ (insert-file-contents (expand-file-name file))
+ (buffer-string)))
#+end_src
-Write =data= to a file at =path=. If =data= is a list, then write it
+Write =data= to a file at =file=. If =data= is a list, then write it
as a table in traditional Org-mode table syntax.
#+srcname: write
-#+begin_src emacs-lisp :var data="" :var path=""
- (with-temp-file path
+#+begin_src emacs-lisp :var data="" :var file=""
+ (with-temp-file file
(org-babel-insert-result data))
nil
#+end_src
** remote files
-
+**** json
Read local or remote file in [[http://www.json.org/][json]] format into emacs-lisp objects.
#+srcname: json
#+begin_src emacs-lisp :var file='() :var url='()
@@ -72,13 +71,81 @@ Read local or remote file in [[http://www.json.org/][json]] format into emacs-li
(json-read))))
#+end_src
+**** Google docs
+The following code blocks make use of the [[http://code.google.com/p/googlecl/][googlecl]] Google command line
+tool. This tool provides functionality for accessing Google services
+from the command line, and the following code blocks use /googlecl/
+for reading from and writing to Google docs with Org-mode code blocks.
+
+****** read a document from Google docs
+The =google= command seems to be throwing "Moved Temporarily" errors
+when trying to download textual documents, but this is working fine
+for spreadsheets.
+#+source: gdoc-read
+#+begin_src emacs-lisp :var title="example"
+ (let* ((format (if (member "vector" result-params) "csv" "txt"))
+ (file (concat title "." format))
+ (cmd (format "google docs get --format %S --title %S" format title)))
+ (message cmd) (message (shell-command-to-string cmd))
+ (prog1 (if (string= format "csv")
+ (with-temp-buffer
+ (org-table-import (shell-quote-argument file) nil)
+ (org-table-to-lisp))
+ (with-temp-buffer
+ (insert-file-contents (shell-quote-argument file))
+ (buffer-string)))
+ (delete-file file)))
+#+end_src
+
+For example, a line like the following can be used to read the
+contents of a spreadsheet named =num-cells= into a table.
+#+begin_src org
+ ,#+call: gdoc-read(title="num-cells"") :results vector
+#+end_src
+
+A line like the following can be used to read the contents of a
+document as a string.
+#+begin_src org
+ ,#+call: gdoc-read(title="loremi") :results scalar
+#+end_src
+
+****** write a document to a Google docs
+Write =data= to a google document named =title=. If =data= is tabular
+it will be saved to a spreadsheet, otherwise it will be saved as a
+normal document.
+#+source: gdoc-write
+#+begin_src emacs-lisp :var title="babel-upload" :var data=fibs(n=10) :results silent
+ (let* ((format (if (listp data) "csv" "txt"))
+ (tmp-file (make-temp-file "org-babel-google-doc" nil (concat "." format)))
+ (cmd (format "google docs upload --title %S %S" title tmp-file)))
+ (with-temp-file tmp-file
+ (insert
+ (if (listp data)
+ (orgtbl-to-csv
+ data '(:fmt (lambda (el) (if (stringp el) el (format "%S" el)))))
+ (if (stringp data) data (format "%S" data)))))
+ (message cmd)
+ (prog1 (shell-command-to-string cmd) (delete-file tmp-file)))
+#+end_src
+
+example usage
+#+begin_src org
+ ,#+source: fibs
+ ,#+begin_src emacs-lisp :var n=8
+ , (flet ((fib (m) (if (< m 2) 1 (+ (fib (- m 1)) (fib (- m 2))))))
+ , (mapcar (lambda (el) (list el (fib el))) (number-sequence 0 (- n 1))))
+ ,#+end_src
+
+ ,#+call: gdoc-write(title="fibs", data=fibs(n=10))
+#+end_src
+
* Plotting code
** R
Plot column 2 (y axis) against column 1 (x axis). Columns 3 and beyond, if present, are ignored.
#+srcname: R-plot(data=R-plot-example-data)
-#+begin_src R :session *R*
+#+begin_src R
plot(data)
#+end_src