Fix naming and docstring issues in `org-iswitchb'
[org-mode.git] / contrib / babel / library-of-babel.org
blob49172e0af858953d470ee58ad1d63a9e59749b65
1 #+title:    The Library of Babel
2 #+author:     Org-mode People
3 #+STARTUP:  odd hideblocks
5 * Introduction
6   The Library of Babel is an extensible collection of ready-made and
7   easily-shortcut-callable source-code blocks for handling common
8   tasks.  Org-babel comes pre-populated with the source-code blocks
9   located in this file. It is possible to add source-code blocks from
10   any org-mode file to the library by calling =(org-babel-lob-ingest
11   "path/to/file.org")=.
12   
13   This file is included in worg mainly less for viewing through the
14   web interface, and more for contribution through the worg git
15   repository.  If you have code snippets that you think others may
16   find useful please add them to this file and [[file:~/src/worg/worg-git.org::contribute-to-worg][contribute them]] to
17   worg.
18   
19   The raw Org-mode text of this file can be downloaded at
20   [[repofile:contrib/babel/library-of-babel.org][library-of-babel.org]]
22 * Simple
23 A collection of simple utility functions
25 #+srcname: echo
26 #+begin_src emacs-lisp :var input="echo'd"
27   input
28 #+end_src
30 * File I/O
31 ** reading and writing files
32 Read the contents of the file at =path= into a string.
33 #+srcname: read
34 #+begin_src emacs-lisp :var path=""
35   (with-temp-filebuffer path
36     (buffer-substring (point-min) (point-max)))
37 #+end_src
39 Read the lines of the file at =path= into a list.
40 #+srcname: read-lines
41 #+begin_src emacs-lisp :var path=""
42   (split-string
43    (with-temp-filebuffer path
44      (buffer-substring (point-min) (point-max))))
45 #+end_src
47 Write =data= to a file at =path=.  If =data= is a list, then write it
48 as a table in traditional Org-mode table syntax.
49 #+srcname: write
50 #+begin_src emacs-lisp :var data="" :var path=""
51   (with-temp-file path
52     (org-babel-insert-result data))
53   nil
54 #+end_src
56 ** remote files
58 Read local or remote file in [[http://www.json.org/][json]] format into emacs-lisp objects.
59 #+srcname: json
60 #+begin_src emacs-lisp :var file='() :var url='()
61   (require 'json)
62   (cond
63    (file
64     (with-temp-filebuffer file
65       (goto-char (point-min))
66       (json-read)))
67    (url
68     (require 'w3m)
69     (with-temp-buffer
70       (w3m-retrieve url)
71       (goto-char (point-min))
72       (json-read))))
73 #+end_src
75 * Plotting code
77 ** R
78   Plot column 2 (y axis) against column 1 (x axis). Columns 3 and beyond, if present, are ignored.
80 #+srcname: R-plot(data=R-plot-example-data)
81 #+begin_src R :session *R*
82 plot(data)
83 #+end_src
85 #+tblname: R-plot-example-data
86 | 1 |  2 |
87 | 2 |  4 |
88 | 3 |  9 |
89 | 4 | 16 |
90 | 5 | 25 |
92 #+lob: R-plot(data=R-plot-example-data)
94 #+resname: R-plot(data=R-plot-example-data)
95 : nil
97 ** Gnuplot
99 * Tables
100 ** LaTeX Table export
101 *** booktabs
102 This block can be used to wrap a table in the latex =booktabs=
103 environment, it takes the following arguments -- all but the first two
104 are optional.
105 | arg   | description                                |
106 |-------+--------------------------------------------|
107 | table | a reference to the table                   |
108 | align | optional alignment string                  |
109 | env   | optional environment, default to "tabular" |
110 | width | optional width specification string        |
112 #+srcname: booktabs
113 #+begin_src emacs-lisp :var table='((:head) hline (:body)) :var align='() :var env="tabular" :var width='() :noweb yes :results latex
114   (flet ((to-tab (tab)
115                  (orgtbl-to-generic
116                   (mapcar (lambda (lis)
117                             (if (listp lis)
118                                 (mapcar (lambda (el)
119                                           (if (stringp el)
120                                               el
121                                             (format "%S" el))) lis)
122                               lis)) tab)
123                   (list :lend " \\\\" :sep " & " :hline "\\hline"))))
124     (org-fill-template
125      "
126   \\begin{%env}%width%align
127   \\toprule
128   %table
129   \\bottomrule
130   \\end{%env}\n"
131      (list
132       (cons "env"       (or env "table"))
133       (cons "width"     (if width (format "{%s}" width) ""))
134       (cons "align"     (if align (format "{%s}" align) ""))
135       (cons "table"
136             ;; only use \midrule if it looks like there are column headers
137             (if (equal 'hline (second table))
138                 (concat (to-tab (list (first table)))
139                         "\n\\midrule\n"
140                         (to-tab (cddr table)))
141               (to-tab table))))))
142 #+end_src
144 *** longtable
145 This block can be used to wrap a table in the latex =longtable=
146 environment, it takes the following arguments -- all but the first two
147 are optional.
148 | arg       | description                                                 |
149 |-----------+-------------------------------------------------------------|
150 | table     | a reference to the table                                    |
151 | align     | optional alignment string                                   |
152 | width     | optional width specification string                         |
153 | hline     | the string to use as hline separator, defaults to "\\hline" |
154 | head      | optional "head" string                                      |
155 | firsthead | optional "firsthead" string                                 |
156 | foot      | optional "foot" string                                      |
157 | lastfoot  | optional "lastfoot" string                                  |
159 #+srcname: longtable
160 #+begin_src emacs-lisp :var table='((:table)) :var align='() :var width='() :var hline="\\hline" :var firsthead='() :var head='() :var foot='() :var lastfoot='() :noweb yes :results latex
161   (org-fill-template
162    "
163   \\begin{longtable}%width%align
164   %firsthead
165   %head
166   %foot
167   %lastfoot
168   
169   %table
170   \\end{longtable}\n"
171    (list
172     (cons "width"     (if width (format "{%s}" width) ""))
173     (cons "align"     (if align (format "{%s}" align) ""))
174     (cons "firsthead" (if firsthead (concat firsthead "\n\\endfirsthead\n") ""))
175     (cons "head"      (if head (concat head "\n\\endhead\n") ""))
176     (cons "foot"      (if foot (concat foot "\n\\endfoot\n") ""))
177     (cons "lastfoot"  (if lastfoot (concat lastfoot "\n\\endlastfoot\n") ""))
178     (cons "table" (orgtbl-to-generic
179                    (mapcar (lambda (lis)
180                              (if (listp lis)
181                                  (mapcar (lambda (el)
182                                            (if (stringp el)
183                                                el
184                                              (format "%S" el))) lis)
185                                lis)) table)
186                    (list :lend " \\\\" :sep " & " :hline hline)))))
187 #+end_src
189 ** Elegant lisp for transposing a matrix.
191 #+tblname: transpose-example
192 | 1 | 2 | 3 |
193 | 4 | 5 | 6 |
195 #+srcname: transpose
196 #+begin_src emacs-lisp :var table=transpose-example
197   (apply #'mapcar* #'list table)
198 #+end_src
200 #+resname:
201 | 1 | 4 |
202 | 2 | 5 |
203 | 3 | 6 |
205 * Misc
206 #+srcname: python-identity(a=1)
207 #+begin_src python
209 #+end_src
211 #+srcname: python-add(a=1, b=2)
212 #+begin_src python
213 a + b
214 #+end_src