[Doc] Some documentation

This commit is contained in:
Daniel - 2017-08-05 17:35:35 +02:00
parent 6ea314923f
commit dbc036a1fd
Signed by: dbo
GPG Key ID: 4F63DB96D45AA9C6
3 changed files with 7173 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,185 @@
#+TITLE: Notes on “Babel: Introduction”
#+AUTHOR: Daniel
#+DATE: 2016-06-26
Tutorial from http://orgmode.org/worg/org-contrib/babel/intro.html
* Source Code Execution
#+begin_src hy
(print "Hello, There!")
#+end_src
#+RESULTS:
: Hello, There!
#+begin_src sh
echo "This file takes up `du -h emacs-org-babel-tutorial.org | sed 's/\([0-9k]*\)[ ]*emacs-org-babel-tutorial.org/\1/'`"
#+end_src
#+RESULTS:
: This file takes up 4.0K
#+begin_src R :colnames yes
words <- tolower(scan("emacs-org-babel-tutorial.org", what="", na.strings=c("|",":")))
t(sort(table(words[nchar(words) > 3]), decreasing=TRUE)[1:10])
#+end_src
#+RESULTS:
| #+begin_src | #+end_src | #+results: | date | plus | today's | :results | hello, | import | is") |
|-------------+-----------+------------+------+------+---------+----------+--------+--------+------|
| 5 | 5 | 4 | 3 | 3 | 3 | 2 | 2 | 2 | 2 |
** Capturing the Results of Code Evaluation
#+begin_src python :results value
import time
print("Hello, today's date is %s" % time.ctime())
print("Two plus two is")
return 2 + 2
#+end_src
#+RESULTS:
: 4
#+begin_src python :results output
import time
print("Hello, today's date is %s" % time.ctime())
print("Two plus two is")
2 + 2
#+end_src
#+RESULTS:
: Hello, today's date is Sun Jun 26 16:04:36 2016
: Two plus two is
** Session-based Evaluation
Have a look into /Emacs Speaks Statistics/
** Arguments to Code Blocks
#+name: square
#+header: :var x = 0
#+begin_src python
return x*x
#+end_src
#+call: square(x=6)
#+RESULTS:
: 36
#+tblname: fibonacci-inputs
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 |
#+name: fibonacci-seq
#+begin_src emacs-lisp :var fib-inputs=fibonacci-inputs
(defun fibonacci (n)
(if (or (= n 0) (= n 1))
n
(+ (fibonacci (- n 1))
(fibonacci (- n 2)))))
(mapcar (lambda (row)
(mapcar #'fibonacci row))
fib-inputs)
#+end_src
#+RESULTS: fibonacci-seq
| 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | 55 |
| 1 | 3 | 8 | 21 | 55 | 144 | 377 | 987 | 2584 | 6765 |
** In-line Code Blocks
In-line code can be call without header arguments (like so: src_sh{date}) or
with header arguments (like so: src_python[:results value]{return 10 + 10}).
** Code Block Body Expansion
Preview: =C-c C-v v=, bound to =org-babel-expand-src-block=
#+tblname: data
| username | john-doe |
| password | abc123 |
#+begin_src emacs-lisp :var data=data
(setq my-special-username (first (first data)))
(setq my-special-password (first (second data)))
#+end_src
** A Meta-programming Language for Org-mode
#+name: directories
#+begin_src sh :results replace
cd ~ && du -sc * | grep -v total
#+end_src
#+RESULTS: directories
| 538604 | Desktop |
| 77332656 | Documents |
| 1206668 | Mail |
| 8 | News |
#+name: directory-pie-chart
#+begin_src R :session R-pie-example :var dirs=directories
pie(dirs[,1], labels = dirs[,2])
#+end_src
#+RESULTS: directory-pie-chart
Note: the syntax =#+name: directory-pie-chart(dirs=directories)= did not work.
** Using Code Blocks in Org Tables
*** Example 1: Data Summaries Using R
#+name: tbl-example-data
#+begin_src R
runif(n=5, min=0, max=1)
#+end_src
#+name: R-mean
#+begin_src R :var x=""
colMeans(x)
#+end_src
#+tblname: summaries
| mean |
|-------------------|
| 0.574235895462334 |
#+TBLFM: @2$1='(org-sbe "R-mean" (x "tbl-example-data()"))
*** Example 2: Babel Test Suite
/No notes/
* The Library of Babel
#+lob: square(x=6)
Does not do what I expected …
* Literate Programming
#+name: hello-world-prefix
#+begin_src sh :exports none
echo "/-----------------------------------------------------------\\"
#+end_src
#+name: hello-world-postfix
#+begin_src sh :exports none
echo "\-----------------------------------------------------------/"
#+end_src
#+name: hello-world
#+begin_src sh :tangle hello.sh :exports none :noweb yes
<<hello-world-prefix>>
echo "| hello world |"
<<hello-world-postfix>>
#+end_src
Tangling with =C-c C-v t=.
* Reproducible Research

308
doc/keyboard-macros.org Normal file
View File

@ -0,0 +1,308 @@
#+TITLE: Workshop for Emacs Macros
#+AUTHOR: Howard Abrams
#+DATE: 2015 Nov 24
#+TAGS: emacs workshop
#+STARTUP: hideblocks
Basic idea of this file is to be both a *guide* and a *practice pad*
for leveling up on Emacs keyboard macro system.
To use, just [[https://github.com/howardabrams/pdx-emacs-hackers/raw/master/workshops/keyboard-macros.org][download this file]] to your system, and edit it in Emacs.
Then just follow along... If you are not familiar with org-mode files,
here are the basics for this workshop:
- Hit a tab on the header expands or collapses it
- Narrow to show just one section with: C-x n s
- Return by widening normally with: C-x n w
- Hyperlinks can be clicked on to view the Emacs Manual
Pretty much treat the rest of this document as a text file.
* Basic Usage
Lets begin with something simple to try out this project.
In the /block area/ below, hit: C-c ' (yes, the apostrophe).
When done with the tasks, hit: C-x C-s to close and return here.
#+BEGIN_SRC org
- This foobar should be Interesting
- Nulla foobar Posuere
- Nullam foobar Tempus
- Etiam foobar laoreet quam sed Arcu
- Donec foobar hendrerit tempor Tellus
- Mauris foobar mollis tincidunt Felis
- etiam laoreet quam sed arcu
- nullam rutrum
- sed diam
- lorem ipsum dolor sit amet, consectetuer adipiscing elit
- mauris ac felis vel velit tristique imperdiet
- fusce suscipit, wisi nec facilisis facilisis, est dui fermentum leo, quis tempor ligula erat quis odio
- donec hendrerit tempor tellus
#+END_SRC
Notice that the frame is split with this document still visible?
Good, lets play around. Lets capitalize the first letter of each line.
Position point at the beginning of the first line, and then:
- F3
- M-c
- C-n
- C-a
- F4
Press F4 repeatedly to capitalize the first word on each line.
Dont capitalize /every/ line... leave a few alone for a moment.
Now you have the basics.
Lets make a new macro to capitalize the /last/ word on each line.
Pop back up to the top of the list, and:
- F3
- C-e
- M-b
- M-c
- C-n
- F4
Once again, leave a few lines alone.
Just one more macro, as I want to show you something interesting.
Jump back to the beginning, and:
- F3
- C-a
- M-f
- Space
- foobar (or type any single word you find amusing)
- C-n
- F4
Type: C-x C-k C-k
Notice it behaves the same as F4, but you can keep typing C-k to
execute your macro.
Start typing C-n and/or C-p and notice the minibuffer. It alternates
between the following:
- M-c C-n C-a
- C-e M-b M-c C-n
- C-a M-f SPC f 2*o b a r C-n
Typing C-k at any point will execute that macro. Youve now see the
Emacs Macro Ring, and can manipulate it. You are now at Level 2.
Type C-c ' (apostrophe) to close that side window.
* Naming Macros
While that =foobar= macro may be quite handy, looping around the
keyboard macro ring to select it may be inefficient. Name it!
C-x C-k n
Give it a name of foobar, and now, you can: M-x foobar
to have the macro run.
Perhaps it may be more useful to bind that macro to some un-used
key, like C-c k or F2 ... type:
C-x C-k b
And then type your binding, e.g. C-c k
You know that C-c followed by a single letter is supposed to be free
of usage and available for your nefarious reasons, right?
Read the [[info:emacs#Save%20Keyboard%20Macro][the Emacs Manual]] for details. If you actually tried this
example, then you have earned enough experience points to be level 3.
* What do you mean On Every Line?
Keyboard macros are slick, and while we /could/ prefix the F4 with
the numbering prefix to run it multiple times at once, e.g. C-9 F4,
a typical use case is to run it on every line in a region.
Position the cursor in the block, and type: C-c
#+BEGIN_SRC org
I will not take out the trash
I should not stop swearing
I may not stop to smell the roses
I do not want to go shopping
I could not care less
#+END_SRC
With the point on the first line, type:
- F3
- C-a
- M-f
- M-f
- Space
- not (type the word, =not=)
- F4
Now select the remaining 4 lines any way you like, and type:
- C-x C-k r
Read [[info:emacs#Basic%20Keyboard%20Macro][the Emacs Manual]] for complete details, and welcome to level 4.
* Numbering
Numbering things seems to be important to people. Lets see if we
can easily number the worst song ever inflicted on humanity.
Once again, position the point inside the block, and type: C-c '
#+BEGIN_SRC org
1 Drummers Drumming
2 Pipers Piping
3 Lords a Leaping
4 Ladies Dancing
5 Maids a Milking
6 Swans a Swimming
7 Geese a Laying
8 Golden Rings
9 Calling Birds
10 French Hens
11 Turtle Doves
12 Partridge in a Pear Tree
#+END_SRC
Follow along at home. First, position the point at the end (on the
line with the partridge), and:
- C-x C-k C-c
- 1
- Return (to set a counter to 1)
- F3
- C-a
- F3
- Spacebar
- C-n
- F4
Yes, hitting the F3 key twice (once to start the macro, and again to
insert the value of the counter) is a bit odd. You can also use the
binding: C-x C-k C-i
Each time you hit F4, you increment the counter that is inserted.
By the way, if you didnt do the whole =C-x C-k C-c= to set the
counter to 1, the first value would be 0. Read [[info:emacs#Keyboard%20Macro%20Counter][the manual]] for
details.
* Fixing Macros
Now that you are a Level 5 Elf Keyboard Macro-er, and you can now
sling macros everywhere, you may notice that sometimes, in the
middle of a long macro, you flub it.
If you hit F4 too soon (it happens), hit: C-u C-u F3 to pick up
where you left off and enter the rest of the macro. Hit F4 when you
are really finished.
If you need to fix a keyboard macro with more finesse, type:
C-x C-k C-e
And behold the glory. Tis a simple language that should be pretty
obvious to a skilled Macro-er as yourself. Type C-h m once in that
buffer to display details of how to edit the macro. When you are
finished editing, type: C-c C-c
Ill let you play around with your own example for this one.
Read [[info:emacs#Edit%20Keyboard%20Macro][the manual]] for complete details.
* Variations on a Theme
To gain the Level 7 Keyboard Macro-er title, one should know how to
customize a macro /while/ running it. The following section of HTML
code needs some textual changes. We want to add one of the following
phrases to the /end/ of every paragraph that has a =class= of =change=:
* Because I said so. Got it?
* Because I'm the boss. Got it?
* You heard me. Got it?
* Just do it. Got it?
To begin, first move to the following block (hint: C-c M-f) and hit
TAB to collapse the block (you gotta see all the instructions,
right?) Next, issue a C-c ' on this block to show it in a new
window. If you have trouble with your HTML mode, change the =html=
to =text=.
#+BEGIN_SRC html
<!DOCTYPE html>
<html>
<body>
<p>
Proin neque massa, cursus ut, gravida ut, lobortis eget, lacus.
Praesent augue. Sed diam. Nunc eleifend leo vitae magna. Nunc
rutrum turpis sed pede.
</p>
<p class="change">
Nullam rutrum. Nunc rutrum turpis sed pede.
</p>
<p>
Phasellus at dui in ligula mollis ultricies. Curabitur lacinia
pulvinar nibh. Donec pretium posuere tellus. Praesent
fermentum tempor tellus. Proin quam nisl, tincidunt et, mattis
eget, convallis nec, purus.
</p>
<p class="change">
Fusce sagittis, libero non molestie mollis, magna orci ultrices
dolor, at vulputate neque nulla lacinia eros. Sed diam. Nam
vestibulum accumsan nisl.
</p>
<p>
Aliquam feugiat tellus ut neque. Nam vestibulum accumsan
nisl. Praesent fermentum tempor tellus.
</p>
<p>
Vivamus id enim. Suspendisse potenti. Curabitur lacinia
pulvinar nibh. Mauris ac felis vel velit tristique imperdiet.
</p>
<p class="change">
Donec vitae dolor. Mauris ac felis vel velit tristique
imperdiet. Nunc aliquet, augue nec adipiscing interdum, lacus
tellus malesuada massa, quis varius mi purus non odio. Proin
quam nisl, tincidunt et, mattis eget, convallis nec, purus. Nam
euismod tellus id erat.
</p>
<p>
Nullam rutrum.
</p>
</body>
</html>
#+END_SRC
Type the following:
- F3
- C-s
- Type: class="change"
- C-e
- C-s
- Type: </p>
- C-p
- C-e
- C-x q
- Type: Got it?
- C-n
- F4
In this particular case, we actually didn't do anything special, so
move to the beginning of the buffer, and hit F4, and the cursor will
go to the end of every paragraph that needs changing, and stop with
a prompt:
Proceed with macro? (Y, N, RET, C-l, C-r)
Type C-r and begin typing one of our phrases, and when you are done,
type: C-M-c
The prompt will be re-displayed, so finish the macro with 'Y'.
Check out [[info:emacs#Keyboard%20Macro%20Query][the manual]] for details on this =C-x q= business.