Emacs: Org Mode, Work with Source Code

By Xah Lee. Date: . Last updated: .

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.

emacs org mode babel 2020-08-16 Dtq32
emacs org mode babel 2020-08-16

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

Key Shortcut

Supported languages

The following are the keyword of supported languages, as of GNU Emacs 27.1. (2020-12-15)

Evaluate Code

To 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 eval-region.

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 None.

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-specialCtrl+c '】 to create a new buffer in split pane, dedicated to the language.

• edit it, and Alt+x org-edit-src-saveCtrl+x Ctrl+s】 will save it back in the original org mode file.

Alt+x org-edit-specialCtrl+c '】 again to remove this edit mode buffer.

Thanks

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/

Org Mode

If you have a question, put $5 at patreon and message me on xah discord.
Or support me by Buy Xah Emacs Tutorial

Emacs Tutorial

Emacs Init

Emacs Keys

ELisp

ELisp Examples

ELisp Write Major Mode


Emacs Tutorial

Quick Start

Manage Windows

File

Buffer

Find Replace

Copy/Paste

Unicode

Whitespace

Rectangle Edit

Line Wrap

Shell

View Special File

Working with Brackets

Org Mode

HTML

Emacs Efficiency

Misc