Emacs: Org Mode, Work with Source Code
org-mode can embed programing language source code, and you can interactively evaluate it, edit it, or export to HTML with evaluated results embedded/updated in the exported file.
If you've never used org-mode before, first see Emacs: Outline, org-mode
Source Code Marked Up
Source code in org mode is marked up like this:
#+BEGIN_SRC emacs-lisp (+ 1 3) #+END_SRC
here's example of python, ruby:
#+BEGIN_SRC python return 3 + 7 #+END_SRC
#+BEGIN_SRC ruby p 3 + 4 #+END_SRC
- In emacs 27, to insert source code markup, press Ctrl+c Ctrl+, (
- In emacs 26, to insert source code markup, press < s Tab
The following are the keyword of supported languages, as of GNU Emacs 27.1. (2020-12-15)
Evaluate CodeTo evaluate code block, put cursor in the code block, then press Ctrl+c Ctrl+c.
Here's a example you can copy paste into org mode file to test.
#+BEGIN_SRC emacs-lisp (+ 3 4) #+END_SRC #+RESULTS: : 7
Setup Which Languages to Allow Eval
By default, only emacs lisp code is allowed to eval. If you need other languages, you need to add this to your emacs init:
(require 'org) (require 'ob) ;; make org mode allow eval of some langs (org-babel-do-load-languages 'org-babel-load-languages '((emacs-lisp . t) (clojure . t) (python . t) (ruby . t)))
Restart emacs, or, select the code and Alt+x
Or, you can put the elisp code in the beginning of org file, and tell user to press Ctrl+c Ctrl+c to eval it.
#+BEGIN_SRC emacs-lisp ;; make org mode allow eval of some langs (org-babel-do-load-languages 'org-babel-load-languages '((emacs-lisp . t) (clojure . t) (python . t) (ruby . t))) #+END_SRC
Here's a example of Python. Try to eval it.
#+BEGIN_SRC python return 3 + 7 #+END_SRC #+RESULTS: : 10
Note: for Python, when in non-session mode, you need to have a
return … at the end, in order to print result, else the result is
Stop Emacs from Confirming Eval
Everytime you eval a source code in org mode, emacs will ask you to confirm.
You can turn that off by putting the following in your emacs init.
;; stop emacs asking for confirmation (setq org-confirm-babel-evaluate nil)
Or, if you want it to be per buffer, you can put the following at the top of your org file, and eval it everytime you open that file.
#+BEGIN_SRC emacs-lisp ;; stop emacs asking for confirmation, for this buffer only (setq-local org-confirm-babel-evaluate nil) #+END_SRC
Turn on Syntax Coloring
To make org mode syntax color embeded source code, put the following in your emacs init:
(setq org-src-fontify-natively t)
Editing Source Code
• When cursor is inside the source code block, Alt+x
org-edit-special 【Ctrl+c '】 to create a new buffer in split pane, dedicated to the language.
• edit it, and Alt+x
org-edit-src-save 【Ctrl+x Ctrl+s】 will save it back in the original org mode file.
org-edit-special 【Ctrl+c '】 again to remove this edit mode buffer.
Org mode's source code feature (originally known as Org Babel) is written by Eric Schulte. Thank you Eric Schulte. Eric's home page is http://www.cs.unm.edu/~eschulte/ . Eric is also the author of emacs starter kit. http://eschulte.github.io/emacs24-starter-kit/
Put $5 at https://www.patreon.com/xahlee , or goto paypal.com and pay to Xah@XahLee.org . Message me on XahLee discord, say so, ask me questions.
Or Buy Xah Emacs Tutorial