|
|
.. -*- coding: utf-8 -*- |
|
|
|
|
|
======================================== |
|
|
Emacs Support for reStructuredText |
|
|
======================================== |
|
|
|
|
|
:Authors: Stefan Merten <stefan@merten-home.de>, Martin Blais |
|
|
<blais@furius.ca> |
|
|
:Version: ``rst.el`` V1.4.1 |
|
|
:Abstract: |
|
|
|
|
|
High-level description of the existing Emacs_ support for editing |
|
|
reStructuredText_ text documents. Suggested setup code and usage |
|
|
instructions are provided. |
|
|
|
|
|
.. contents:: |
|
|
|
|
|
Introduction |
|
|
============ |
|
|
|
|
|
reStructuredText_ is a syntax for simple text files that allows a |
|
|
tool set - docutils_ - to extract generic document structure. For |
|
|
people who use Emacs_, there is a package that adds a major mode that |
|
|
supports editing the syntax of reStructuredText_: ``rst.el``. This |
|
|
document describes the features it provides, and how to setup your |
|
|
Emacs_ to use them and how to invoke them. |
|
|
|
|
|
Installation |
|
|
============ |
|
|
|
|
|
Emacs_ support for reStructuredText_ is implemented as an Emacs_ major |
|
|
mode (``rst-mode``) provided by the ``rst.el`` Emacs_ package. |
|
|
|
|
|
Emacs_ distributions contain ``rst.el`` since version V23.1. However, |
|
|
a significantly updated version of ``rst.el`` is contained in Emacs_ |
|
|
V24.3. This document describes the version of ``rst.el`` contained in |
|
|
Emacs_ V24.3 and later versions. This version of ``rst.el`` has the |
|
|
internal version V1.4.1. |
|
|
|
|
|
If you have Emacs_ V24.3 or later you do not need to install anything |
|
|
to get reST support. If you have an Emacs_ between V23.1 and V24.2 you |
|
|
may use the version of ``rst.el`` installed with Emacs_ or install a |
|
|
more recent one locally_ (recommended). In other cases you need to |
|
|
install ``rst.el`` locally_ to get reST support. |
|
|
|
|
|
Checking situation |
|
|
------------------ |
|
|
|
|
|
Here are some steps to check your situation: |
|
|
|
|
|
#. In Emacs_ switch to an empty buffer and try :: |
|
|
|
|
|
M-x rst-mode |
|
|
|
|
|
If this works you have ``rst.el`` installed somewhere. You can see |
|
|
that it works if you find a string ``ReST`` in Emacs' modeline of |
|
|
the current buffer. If this doesn't work you need to install |
|
|
``rst.el`` yourself locally_. |
|
|
|
|
|
#. In the buffer you just switched to ``rst-mode`` try :: |
|
|
|
|
|
C-h v rst-version |
|
|
|
|
|
If this fails you have a version of ``rst.el`` older than |
|
|
V1.1.0. Either you have an old ``rst.el`` locally or you are using |
|
|
an Emacs_ between V23.1 and V24.2. In this case it is recommended |
|
|
that you install a more recent version of ``rst.el`` locally_. |
|
|
|
|
|
You may also try :: |
|
|
|
|
|
C-h v emacs-version |
|
|
|
|
|
to find out your Emacs_ version. |
|
|
|
|
|
#. Check the version of ``rst.el`` |
|
|
|
|
|
The content of ``rst-version`` gives you the internal version of |
|
|
``rst.el``. The version contained in Emacs_ V24.3 and described here |
|
|
is V1.4.0. If you have an older version you may or may not install |
|
|
a more recent version of ``rst.el`` locally_. |
|
|
|
|
|
.. _locally: |
|
|
|
|
|
Local installation |
|
|
------------------ |
|
|
|
|
|
If you decided to install locally please follow these steps. |
|
|
|
|
|
#. Download ``rst.el`` |
|
|
|
|
|
Download the most recent published version of ``rst.el`` from |
|
|
http://sourceforge.net/p/docutils/code/HEAD/tree/trunk/docutils/tools/editors/emacs/rst.el |
|
|
|
|
|
#. Put ``rst.el`` to a directory in ``load-path`` |
|
|
|
|
|
Use :: |
|
|
|
|
|
C-h v load-path |
|
|
|
|
|
If in the resulting list you find a directory in your home |
|
|
directory put ``rst.el`` in this directory. |
|
|
|
|
|
Make sure the directory is one of the first entries in |
|
|
``load-path``. Otherwise a version of ``rst.el`` which came with |
|
|
Emacs_ may be found before your local version. |
|
|
|
|
|
In Emacs_ see the info node ``Init File Examples`` for more |
|
|
information on how to set up your Emacs_ initialization |
|
|
machinery. Try :: |
|
|
|
|
|
C-h i |
|
|
mEmacs<Return> |
|
|
sInit File Examples<Return> |
|
|
|
|
|
#. Enable ``rst-mode`` |
|
|
|
|
|
Add the following to your Emacs_ initialization setup :: |
|
|
|
|
|
(require 'rst) |
|
|
|
|
|
After you restarted Emacs_ ``rst.el`` is loaded and ready to be |
|
|
used. |
|
|
|
|
|
Switching ``rst-mode`` on |
|
|
------------------------- |
|
|
|
|
|
By default ``rst-mode`` is switched on for files ending in ``.rst`` or |
|
|
``.rest``. If in a buffer you want to switch ``rst-mode`` on manually |
|
|
use :: |
|
|
|
|
|
M-x rst-mode |
|
|
|
|
|
If you want to use ``rst-mode`` in files with other extensions modify |
|
|
``auto-mode-alist`` to automatically turn it on whenever you visit |
|
|
reStructuredText_ documents:: |
|
|
|
|
|
(setq auto-mode-alist |
|
|
(append '(("\\.txt\\'" . rst-mode) |
|
|
("\\.rst\\'" . rst-mode) |
|
|
("\\.rest\\'" . rst-mode)) auto-mode-alist)) |
|
|
|
|
|
Put the extensions you want in the correct place in the example |
|
|
above. Add more lines if needed. |
|
|
|
|
|
If have local variables enabled (try ``C-h v enable-local-variables`` |
|
|
to find out), you can also add the following at the top of your |
|
|
documents to trigger rst-mode:: |
|
|
|
|
|
.. -*- mode: rst -*- |
|
|
|
|
|
Or this at the end of your documents:: |
|
|
|
|
|
.. |
|
|
Local Variables: |
|
|
mode: rst |
|
|
End: |
|
|
|
|
|
Key bindings |
|
|
============ |
|
|
|
|
|
``rst-mode`` automatically binds several keys for invoking special |
|
|
functions for editing reStructuredText_. Since ``rst-mode`` contains a |
|
|
lot of functionality most key bindings consist of three |
|
|
keystrokes. |
|
|
|
|
|
Following the Emacs_ conventions for major modes the key bindings of |
|
|
``rst-mode`` start with ``C-c C-<letter>``. The second key stroke |
|
|
selects a group of key bindings: |
|
|
|
|
|
C-c C-a |
|
|
Commands to adjust the section headers and work with the hierarchy |
|
|
they build. |
|
|
|
|
|
C-c C-c |
|
|
Commands to compile the current reStructuredText_ document to |
|
|
various output formats. |
|
|
|
|
|
C-c C-l |
|
|
Commands to work with lists of various kinds. |
|
|
|
|
|
C-c C-r |
|
|
Commands to manipulate the current region. |
|
|
|
|
|
C-c C-t |
|
|
Commands to create and manipulate a table of contents. |
|
|
|
|
|
At any stage of typing you may use ``C-h`` to get help on the |
|
|
available key bindings. I.e. ``C-c C-h`` gives you help on all key |
|
|
bindings while ``C-c C-r C-h`` gives you help on the commands for |
|
|
regions. This is handy if you forgot a certain key binding. |
|
|
|
|
|
Additional key bindings which have a certain meaning in other Emacs_ |
|
|
modes are reused in ``rst-mode`` so you don't have to learn a |
|
|
different set of key bindings for editing reStructuredText_. |
|
|
|
|
|
In ``rst-mode`` try :: |
|
|
|
|
|
C-h m |
|
|
|
|
|
to list all mode specific key bindings. Most of the key bindings are |
|
|
described in this tutorial. |
|
|
|
|
|
.. note:: The key bindings have been completely revamped in ``rst.el`` |
|
|
V1.0.0. This was necessary to make room for new |
|
|
functionality. Some of the old bindings still work but give |
|
|
a warning to use the new binding. In the output of ``C-h m`` |
|
|
these bindings show up as ``rst-deprecated-...``. The old |
|
|
bindings will be removed completely in a later version. |
|
|
|
|
|
Section Adornments |
|
|
================== |
|
|
|
|
|
``rst-mode`` recognizes the section adornments building the section |
|
|
hierarchy of the document. Section adornments are the underlines or |
|
|
under- and overlines used to mark a section title. There are a couple |
|
|
of commands to work with section adornments. These commands are bound |
|
|
to key bindings starting with ``C-c C-a``. |
|
|
|
|
|
Adjusting a Section Title |
|
|
------------------------- |
|
|
|
|
|
There is a function that helps a great deal to maintain these |
|
|
adornments: ``rst-adjust`` (bound to ``C-c C-a C-a``, ``C-c C-=``, and |
|
|
``C-=``). This function is a Swiss army knife that can be invoked |
|
|
repeatedly and whose behavior depends on context: |
|
|
|
|
|
#. If there is an incomplete adornment, e.g. :: |
|
|
|
|
|
My Section Title |
|
|
== |
|
|
|
|
|
invocation will complete the adornment. It can also be used to |
|
|
adjust the length of the existing adornment when you need to edit |
|
|
the title. |
|
|
|
|
|
#. If there is no section adornment at all, by default an adornment of |
|
|
the same level as the last encountered section level is added. You |
|
|
can simply enter a few characters of the title and invoke the |
|
|
function to create the section adornment. |
|
|
|
|
|
The variable ``rst-new-adornment-down`` can be customized to create |
|
|
one level lower adornments than the previous section title instead |
|
|
of keeping the level. |
|
|
|
|
|
#. If there is already a section adornment, it is promoted one level |
|
|
up. You can invoke it like this repeatedly to cycle the title |
|
|
through the hierarchy of existing adornments. |
|
|
|
|
|
Invoking the function with a negative prefix argument, e.g. ``C-- |
|
|
C-=``, will effectively reverse the direction of adornment cycling. |
|
|
To alternate between underline-only and over-and-under styles, you can |
|
|
use a regular prefix argument, e.g. ``C-u C-=``. See the |
|
|
documentation of ``rst-adjust`` for more description of the prefix |
|
|
arguments to alter the behavior of the function. |
|
|
|
|
|
Promoting and Demoting Many Sections |
|
|
------------------------------------ |
|
|
|
|
|
When you are re-organizing the structure of a document, it can be |
|
|
useful to change the level of a number of section titles. The same |
|
|
key binding can be used to do that: if the region is active when the |
|
|
binding is invoked, all the section titles that are within the region |
|
|
are promoted accordingly (or demoted, with negative prefix argument). |
|
|
|
|
|
Redoing All the Adornments to Your Taste |
|
|
---------------------------------------- |
|
|
|
|
|
If you open someone else's file and the adornments it contains are |
|
|
unfamiliar, you may want to readjust them to fit your own preferred |
|
|
hierarchy of adornments. This can be difficult to perform by hand. |
|
|
However, you can do this easily by invoking |
|
|
``rst-straighten-adornments`` (``C-c C-a C-s``), which operates on the |
|
|
entire buffer. |
|
|
|
|
|
Customizations for Adornments |
|
|
----------------------------- |
|
|
|
|
|
You can customize the variable ``rst-preferred-adornments`` to a list |
|
|
of the adornments that you like to use for documents. |
|
|
|
|
|
If you prefer adornments according to |
|
|
http://sphinx-doc.org/rest.html#sections you may customize it to end |
|
|
up with a value like this:: |
|
|
|
|
|
((35 over-and-under 0) ; ?# |
|
|
(42 over-and-under 0) ; ?* |
|
|
(61 simple 0) ; ?= |
|
|
(45 simple 0) ; ?- |
|
|
(94 simple 0) ; ?^ |
|
|
(34 simple 0)) ; ?" |
|
|
|
|
|
This will become the default in a later version of ``rst.el``. |
|
|
|
|
|
If you set ``rst-preferred-adornments`` to nil resembling the empty |
|
|
list only the section adornment found in the buffer will be used. |
|
|
|
|
|
Viewing the Hierarchy of Section Adornments |
|
|
------------------------------------------- |
|
|
|
|
|
You can visualize the hierarchy of the section adornments in the |
|
|
current buffer by invoking ``rst-display-adornments-hierarchy``, bound |
|
|
on ``C-c C-a C-d``. A temporary buffer will appear with fake section |
|
|
titles rendered in the style of the current document. This can be |
|
|
useful when editing other people's documents to find out which section |
|
|
adornments correspond to which levels. |
|
|
|
|
|
Movement and Selection |
|
|
====================== |
|
|
|
|
|
Movement and Selection for Sections |
|
|
----------------------------------- |
|
|
|
|
|
You can move the cursor between the different section titles by using |
|
|
the ``rst-backward-section`` (``C-M-a``) and ``rst-forward-section`` |
|
|
(``C-M-e``). To mark the section that cursor lies in, use |
|
|
``rst-mark-section`` (``C-M-h``). |
|
|
|
|
|
The key bindings are modeled after other modes with similar |
|
|
functionality. |
|
|
|
|
|
Movements and Selection for Text Blocks |
|
|
--------------------------------------- |
|
|
|
|
|
The understanding of reStructuredText_ of ``rst-mode`` is used to set |
|
|
all the variables influencing Emacs' understanding of paragraphs. Thus |
|
|
all operations on paragraphs work as usual. For instance |
|
|
``forward-paragraph`` (``M-}``) works as usual. |
|
|
|
|
|
Indenting and Filling |
|
|
===================== |
|
|
|
|
|
Indentation of text plays a major role in the syntax of |
|
|
reStructuredText_. It is tedious to maintain the indentation |
|
|
manually. ``rst-mode`` understands most of the structure of |
|
|
reStructuredText_ allowing for sophisticated indentation and filling |
|
|
support described in this section. |
|
|
|
|
|
Indenting Text Blocks |
|
|
--------------------- |
|
|
|
|
|
``rst-mode`` supports indentation of text blocks by the command |
|
|
``rst-shift-region`` (``C-c C-r TAB``). Mark a region and use ``C-c |
|
|
C-r TAB`` to indent all blocks one tab to the right. Use ``M-- C-c C-r |
|
|
TAB`` to indent the region one tab to the left. |
|
|
|
|
|
You may use arbitrary prefix arguments such as ``M-2`` or ``M-- 2`` to |
|
|
determine the number of tabs you want to indent. A prefix of ``M-0`` |
|
|
removes all indentation in the active region. |
|
|
|
|
|
A tab is an indentation making sense for the block at hand in |
|
|
reStructuredText_ syntax. In some cases the exact indentation depends |
|
|
on personal taste. You may customize a couple of variables ``M-x |
|
|
customize-group<RET> rst-indent<RET>`` to match your taste. |
|
|
|
|
|
Indenting Lines While Typing |
|
|
---------------------------- |
|
|
|
|
|
In Emacs_ the ``TAB`` key is often used for indenting the current |
|
|
line. ``rst-mode`` implements this for the sophisticated indentation |
|
|
rules of reStructuredText_. Pressing ``TAB`` cycles through the |
|
|
possible tabs for the current line. In the same manner |
|
|
``newline-and-indent`` (``C-j``) indents the new line properly. |
|
|
|
|
|
This is very handy while writing lists. Consider this |
|
|
reStructuredText_ bullet list with the cursor at ``@``:: |
|
|
|
|
|
* Level 1 |
|
|
|
|
|
* Level 2@ |
|
|
|
|
|
Type ``C-j`` twice to get this:: |
|
|
|
|
|
* Level 1 |
|
|
|
|
|
* Level 2 |
|
|
|
|
|
@ |
|
|
|
|
|
Now you an enter text at this level, or start a new list item by |
|
|
typing another ``*``. Or you may type ``TAB`` to reduce the |
|
|
indentation once:: |
|
|
|
|
|
* Level 1 |
|
|
|
|
|
* Level 2 |
|
|
|
|
|
@ |
|
|
|
|
|
Typing another ``TAB`` gets you to the first level:: |
|
|
|
|
|
* Level 1 |
|
|
|
|
|
* Level 2 |
|
|
|
|
|
@ |
|
|
|
|
|
.. note:: Since Emacs_ V24.4 ``electric-indent-mode`` is globally on. |
|
|
This breaks indentation in ``rst-mode`` and renders |
|
|
``rst-mode`` mostly useless. This is fixed in V1.4.1 of |
|
|
``rst-mode``. |
|
|
|
|
|
A quick fix for older versions of ``rst.el`` is to add the |
|
|
following line at the end of the ``(define-derived-mode |
|
|
rst-mode ...`` block in your copy of ``rst.el``:: |
|
|
|
|
|
(setq electric-indent-inhibit t) |
|
|
|
|
|
You may also install V1.4.1 or newer locally_. |
|
|
|
|
|
Filling |
|
|
------- |
|
|
|
|
|
``rst-mode`` understanding the indentation rules of reStructuredText_ |
|
|
also supports filling paragraphs. Just use ``fill-paragraph`` |
|
|
(``M-q``) as you do in other modes. |
|
|
|
|
|
Operating on Lists |
|
|
================== |
|
|
|
|
|
Lists are supported in various flavors in reStructuredText_. |
|
|
``rst-mode`` understands reStructuredText_ lists and offers some |
|
|
support for operating on lists. Key bindings for commands for |
|
|
operating on lists start with ``C-c C-l``. |
|
|
|
|
|
Please note that so far definition lists are not explicitly supported |
|
|
by ``rst-mode``. |
|
|
|
|
|
Bulleted and Enumerated Lists |
|
|
----------------------------- |
|
|
|
|
|
If you have a couple of plain lines you want to turn into an |
|
|
enumerated list you can invoke ``rst-enumerate-region`` (``C-c C-l |
|
|
C-e``). For example, the following region :: |
|
|
|
|
|
Apples |
|
|
|
|
|
Oranges |
|
|
|
|
|
Bananas |
|
|
|
|
|
becomes :: |
|
|
|
|
|
1. Apples |
|
|
|
|
|
2. Oranges |
|
|
|
|
|
3. Bananas |
|
|
|
|
|
``rst-bullet-list-region`` (``C-c C-l C-b``) does the same, but |
|
|
results in a bullet list :: |
|
|
|
|
|
* Apples |
|
|
|
|
|
* Oranges |
|
|
|
|
|
* Bananas |
|
|
|
|
|
By default, each paragraph starting on the leftmost line in the |
|
|
highlighted region will be taken to be a single list or enumeration |
|
|
item, for example, enumerating the following:: |
|
|
|
|
|
An apple a day |
|
|
keeps the doctor away. |
|
|
|
|
|
But oranges |
|
|
are tastier than apples. |
|
|
|
|
|
If you preferred bananas |
|
|
you may be |
|
|
a monkey. |
|
|
|
|
|
Will result in:: |
|
|
|
|
|
1. An apple a day |
|
|
keeps the doctor away. |
|
|
|
|
|
2. But oranges |
|
|
are tastier than apples. |
|
|
|
|
|
3. If you preferred bananas |
|
|
you may be |
|
|
a monkey. |
|
|
|
|
|
If you would like to enumerate each of the lines, use a prefix |
|
|
argument on the preceding commands, e.g.:: |
|
|
|
|
|
Apples |
|
|
Oranges |
|
|
Bananas |
|
|
|
|
|
becomes:: |
|
|
|
|
|
* Apples |
|
|
* Oranges |
|
|
* Bananas |
|
|
|
|
|
Straightening Existing Bullet List Hierarchies |
|
|
---------------------------------------------- |
|
|
|
|
|
If you invoke ``rst-straighten-bullets-region`` (``C-c C-l C-s``), the |
|
|
existing bullets in the active region will be replaced to reflect |
|
|
their respective level. This does not make a difference in the |
|
|
document structure that reStructuredText_ defines, but looks better |
|
|
in, for example, if all of the top-level bullet items use the |
|
|
character ``-``, and all of the 2nd level items use ``*``, etc. |
|
|
|
|
|
Inserting a List Item |
|
|
--------------------- |
|
|
|
|
|
To start a new list you may invoke ``rst-insert-list`` (``C-c C-l |
|
|
C-i``). You may choose from an item style supported by |
|
|
reStructuredText_. |
|
|
|
|
|
You may also invoke ``rst-insert-list`` at the end of a list item. In |
|
|
this case it inserts a new line containing the markup for the a list |
|
|
item on the same level. |
|
|
|
|
|
Operating on Other Text Blocks |
|
|
============================== |
|
|
|
|
|
Creating and Removing Line Blocks |
|
|
--------------------------------- |
|
|
|
|
|
To create line blocks, first select the region to convert and invoke |
|
|
``rst-line-block-region`` ``C-c C-r C-l``. For example, the following |
|
|
:: |
|
|
|
|
|
Apples |
|
|
Oranges |
|
|
Bananas |
|
|
|
|
|
becomes :: |
|
|
|
|
|
| Apples |
|
|
| Oranges |
|
|
| Bananas |
|
|
|
|
|
This works even if the region is indented. To remove line blocks, |
|
|
select a region and invoke with a prefix argument. |
|
|
|
|
|
Commenting a Region of Text |
|
|
--------------------------- |
|
|
|
|
|
``rst-mode`` understands reStructuredText_ comments. Use |
|
|
``comment-dwim`` (``M-;``) to work on comments as usual:: |
|
|
|
|
|
Apples |
|
|
Oranges |
|
|
Bananas |
|
|
|
|
|
becomes:: |
|
|
|
|
|
.. |
|
|
Apples |
|
|
Oranges |
|
|
Bananas |
|
|
|
|
|
To remove a comment you have to tell this to ``comment-dwim`` |
|
|
explicitly by using a prefix argument (``C-u M-;``). |
|
|
|
|
|
Please note that only indented comments are supported properly by the |
|
|
parts of ``comment-dwim`` working on regions. |
|
|
|
|
|
.. _Conversion: |
|
|
|
|
|
Converting Documents from Emacs |
|
|
=============================== |
|
|
|
|
|
``rst-mode`` provides a number of functions for running documents |
|
|
being edited through the docutils tools. The key bindings for these |
|
|
commands start with ``C-c C-c``. |
|
|
|
|
|
The main generic function is ``rst-compile`` (``C-c C-c C-c``). It |
|
|
invokes a compilation command with the correct output name for the |
|
|
current buffer and then invokes Emacs' compile function. It also looks |
|
|
for the presence of a ``docutils.conf`` configuration file in the |
|
|
parent directories and adds it to the command line options. There is also |
|
|
``rst-compile-alt-toolset`` (``C-c C-c C-a``) in case you often need |
|
|
run your document in a second toolset. |
|
|
|
|
|
You can customize the commands being used by setting |
|
|
``rst-compile-primary-toolset`` and ``rst-compile-secondary-toolset``. |
|
|
|
|
|
Other commands are available for other formats: |
|
|
|
|
|
* ``rst-compile-pseudo-region`` (``C-c C-c C-x``) |
|
|
|
|
|
When crafting documents, it is often convenient to view which data |
|
|
structures docutils will parse them into. You can use to run the |
|
|
active region through ``rst2pseudoxml.py`` and have the output |
|
|
automatically be displayed in a new buffer. |
|
|
|
|
|
* ``rst-compile-pdf-preview`` (``C-c C-c C-p``) |
|
|
|
|
|
Convert the current document to PDF and launch a viewer on the |
|
|
results. |
|
|
|
|
|
* ``rst-compile-slides-preview`` (``C-c C-c C-s``): Convert the |
|
|
current document to S5 slides and view in a web browser. |
|
|
|
|
|
Imenu Support |
|
|
============= |
|
|
|
|
|
Using Imenu |
|
|
----------- |
|
|
|
|
|
Emacs_ has a package called ``imenu``. ``rst-mode`` supports Imenu by |
|
|
adding a function to convert the structure of a reStructuredText_ |
|
|
buffer to an Imenu index. Thus you can use invoke ``imenu`` (``M-x |
|
|
imenu``) to navigate through the section index or invoke |
|
|
``imenu-add-to-menubar`` (``M-x imenu-add-to-menubar``) to add an |
|
|
Imenu menu entry to Emacs' menu bar. |
|
|
|
|
|
Using which function |
|
|
-------------------- |
|
|
|
|
|
As a side effect of Imenu support the ``which-func`` package is also |
|
|
supported. Invoke ``which-function-mode`` (``M-x |
|
|
which-function-mode``) to add the name of the current section to the |
|
|
mode line. This is especially useful if you navigate through documents |
|
|
with long sections which do not fit on a single screen. |
|
|
|
|
|
Using the Table of Contents |
|
|
=========================== |
|
|
|
|
|
The sections in a reStructuredText_ document can be used to form a |
|
|
table of contents. ``rst-mode`` can work with such a table of contents |
|
|
in various forms. Key bindings for these commands start with ``C-c |
|
|
C-t``. |
|
|
|
|
|
Navigating Using the Table of Contents |
|
|
-------------------------------------- |
|
|
|
|
|
When you are editing long documents, it can be a bit difficult to |
|
|
orient yourself in the structure of your text. To that effect, a |
|
|
function is provided that presents a hierarchically indented table of |
|
|
contents of the document in a temporary buffer, in which you can |
|
|
navigate and press ``Return`` to go to a specific section. |
|
|
|
|
|
Invoke ``rst-toc`` (``C-c C-t C-t``). It presents a temporary buffer |
|
|
that looks something like this:: |
|
|
|
|
|
Table of Contents: |
|
|
Debugging Meta-Techniques |
|
|
Introduction |
|
|
Debugging Solution Patterns |
|
|
Recognize That a Bug Exists |
|
|
Subdivide and Isolate |
|
|
Identify and Verify Assumptions |
|
|
Use a Tool for Introspection |
|
|
Change one thing at a time |
|
|
Learn about the System |
|
|
Understanding a bug |
|
|
The Basic Steps in Debugging |
|
|
Attitude |
|
|
Bad Feelings |
|
|
Good Feelings |
|
|
References |
|
|
|
|
|
When you move the cursor to a section title and press ``RET`` or ``f`` |
|
|
or click with ``button1`` on a section title, the temporary buffer |
|
|
disappears and you are left with the cursor positioned at the chosen |
|
|
section. Clicking with ``button2`` jumps to the respective section but |
|
|
keeps the toc buffer. You can use this to look at the various section |
|
|
headers quickly. Use ``q`` in this buffer to just quit it without |
|
|
moving the cursor in the original document. Use ``z`` to zap the |
|
|
buffer altogether. |
|
|
|
|
|
Inserting a Table of Contents |
|
|
----------------------------- |
|
|
|
|
|
Oftentimes in long text documents that are meant to be read directly, |
|
|
a table of contents is inserted at the beginning of the text. In |
|
|
reStructuredText_ documents, since the table of contents is |
|
|
automatically generated by the parser with the ``.. contents::`` |
|
|
directive, people generally have not been adding an explicit table of |
|
|
contents to their source documents, and partly because it is too much |
|
|
trouble to edit and maintain. |
|
|
|
|
|
The Emacs_ support for reStructuredText_ provides a function to insert |
|
|
such a table of contents in your document. Since it is not meant to |
|
|
be part of the document text, you should place such a table of |
|
|
contents within a comment, so that it is ignored by the parser. This |
|
|
is the favored usage:: |
|
|
|
|
|
.. contents:: |
|
|
.. |
|
|
1 Introduction |
|
|
2 Debugging Solution Patterns |
|
|
2.1 Recognize That a Bug Exists |
|
|
2.2 Subdivide and Isolate |
|
|
2.3 Identify and Verify Assumptions |
|
|
2.4 Use a Tool for Introspection |
|
|
2.5 Change one thing at a time |
|
|
2.6 Learn about the System |
|
|
3 Understanding a bug |
|
|
4 The Basic Steps in Debugging |
|
|
5 Attitude |
|
|
5.1 Bad Feelings |
|
|
5.2 Good Feelings |
|
|
6 References |
|
|
|
|
|
Just place the cursor at the top-left corner where you want to insert |
|
|
the TOC and invoke the function ``rst-toc-insert`` with ``C-c C-t |
|
|
C-i``. The table of contents will display all the section titles that |
|
|
are under the location where the insertion occurs. This way you can |
|
|
insert local table of contents by placing them in the appropriate |
|
|
location. |
|
|
|
|
|
You can use a numeric prefix argument to limit the depth of rendering |
|
|
of the TOC. |
|
|
|
|
|
You can customize the look of the TOC by setting the values of the |
|
|
following variables: ``rst-toc-indent``, ``rst-toc-insert-style``, |
|
|
``rst-toc-insert-max-level``. |
|
|
|
|
|
Maintaining the Table of Contents Up-to-date |
|
|
-------------------------------------------- |
|
|
|
|
|
One issue is that you will probably want to maintain the inserted |
|
|
table of contents up-to-date. ``rst-toc-update`` (``C-c C-t C-u``) |
|
|
will automatically update an inserted table of contents following a |
|
|
``.. contents::`` directive laid out like the example above. |
|
|
|
|
|
Syntax Highlighting via Font-Lock |
|
|
================================= |
|
|
|
|
|
``rst-mode`` provides syntax highlighting for nearly all to |
|
|
reStructuredText_ constructs. |
|
|
|
|
|
Use ``customize-group rst-faces`` to customize the faces used for |
|
|
font-locking. |
|
|
|
|
|
Customization |
|
|
============= |
|
|
|
|
|
Some aspects of ``rst-mode`` can be configured through the |
|
|
customization feature of Emacs_. Try :: |
|
|
|
|
|
M-x customize-group<RETURN>rst |
|
|
|
|
|
for all customizations or use the respective menu entry. Those |
|
|
customizations which are useful for many people are described in this |
|
|
section. |
|
|
|
|
|
Customizing Section Title Formatting |
|
|
------------------------------------ |
|
|
|
|
|
For a couple of things the reStructuredText_ syntax offers a choice of |
|
|
options on how to do things exactly. Some of these choices influence |
|
|
the operation of ``rst.el`` and thus can be configured. The |
|
|
customizations are contained in the ``rst-adjust`` group. |
|
|
|
|
|
Among these things is the exact layout of section adornments. In fact |
|
|
reStructuredText_ prescribes only the characters and how these |
|
|
characters must be used but the exact use of concrete adornments may |
|
|
be different in every source file. Using the customization option |
|
|
``rst-preferred-adornments`` you can tell ``rst-mode`` on the exact |
|
|
sequence of adornments you prefer to markup the different levels of |
|
|
sections headers. |
|
|
|
|
|
Finally the title text of over-and-under adornments may be indented in |
|
|
reStructuredText_. ``rst-default-indent`` tells ``rst-mode`` how many |
|
|
positions a over-and-under adornment should be indented when toggling |
|
|
from simple adornment and in case a consistent indentation throughout |
|
|
the whole buffer for such adornment is needed. |
|
|
|
|
|
Customizing Indentation |
|
|
----------------------- |
|
|
|
|
|
reStructuredText_ uses indentation a lot to signify a certain meaning. |
|
|
In some cases the exact amount of indentation is prescribed by the |
|
|
syntax while in some cases the exact indentation is not fixed. The |
|
|
customization group ``rst-indent`` allows to customize the amount of |
|
|
indentation in these cases. |
|
|
|
|
|
In field lists the content of a field needs to be indented relative to |
|
|
the field label. ``rst-indent-field`` tells ``rst-mode`` the amount of |
|
|
indentation to use for field content. A value of zero always indents |
|
|
according to the content after the field label. |
|
|
|
|
|
The indentation of literal blocks is controlled by |
|
|
``rst-indent-literal-normal`` and ``rst-indent-literal-minimized``. |
|
|
The first is used when the leading literal tag (``::``) appears alone |
|
|
on a line. The second is used when the minimized style is used where |
|
|
the literal tag follows some text. |
|
|
|
|
|
The indentation of comments is controlled by ``rst-indent-comment``. |
|
|
Of course this makes only sense for the indented comments of |
|
|
reStructuredText_. |
|
|
|
|
|
Customization option ``rst-indent-width`` gives the default |
|
|
indentation when there are no other hints on what amount of |
|
|
indentation to use. |
|
|
|
|
|
Customizing Faces |
|
|
----------------- |
|
|
|
|
|
The faces used for font-locking can be defined in the ``rst-faces`` |
|
|
customization group. The customization options ending in ``-face`` are |
|
|
only there for backward compatibility so please leave them as they |
|
|
are. |
|
|
|
|
|
reStructuredText_ sets no limit on the nesting of sections. By default |
|
|
there are six levels of fontification defined. Section titles deeper |
|
|
than six level have no special fontification - only the adornments are |
|
|
fontified. The exact mapping from a level to a face is done by by |
|
|
``rst-adornment-faces-alist``, however. So if you need fontification |
|
|
deeper than six levels you may want to customize this option. You may |
|
|
also want to customize it if you like the general idea of section |
|
|
title fontification in ``rst-mode`` but for instance prefer a reversed |
|
|
order. |
|
|
|
|
|
Customizing Conversion |
|
|
---------------------- |
|
|
|
|
|
Conversion_ can be customized by the customization options in the |
|
|
customization group ``rst-compile``. |
|
|
|
|
|
If some conversion does not work as expected please check |
|
|
the variable ``rst-compile-toolsets`` :: |
|
|
|
|
|
M-x customize-option<RETURN>rst-compile-toolsets |
|
|
|
|
|
This variable defines the commands and other details used for |
|
|
conversion. In case of problems please check that the commands are |
|
|
either available or customize them to what is available in your |
|
|
environment. |
|
|
|
|
|
.. note:: There are some options in V1.4.1 of ``rst.el`` which should |
|
|
be customization options but are not yet. Customization |
|
|
support will be added in a later version. |
|
|
|
|
|
.. note:: Please note that there is a package ``rst2pdf`` based on the |
|
|
ReportLab library. Please note that the command of this |
|
|
package requires an additional ``-o`` for naming the output |
|
|
file. This breaks the usual conventions employed by Docutils |
|
|
tools. ``rst-mode`` V1.4.1 does not support this directly. |
|
|
|
|
|
Other Customizations |
|
|
-------------------- |
|
|
|
|
|
``rst-preferred-bullets`` can be customized to hold your preferred set |
|
|
of bullets to use for bulleted lists. |
|
|
|
|
|
``rst-mode-hook`` is a normal major mode hook which may be customized. |
|
|
It is run if you enter ``rst-mode``. |
|
|
|
|
|
Related aspects |
|
|
=============== |
|
|
|
|
|
This section covers some general aspects using Emacs_ for editing |
|
|
reStructuredText_ source. They are not directly related to |
|
|
``rst-mode`` but may enhance your experience. |
|
|
|
|
|
``text-mode`` Settings |
|
|
---------------------- |
|
|
|
|
|
Consult the Emacs_ manual for more ``text-mode`` customizations. In |
|
|
particular, you may be interested in setting the following variables, |
|
|
functions and modes that pertain somewhat to ``text-mode``: |
|
|
|
|
|
* ``indent-tabs-mode`` |
|
|
* ``colon-double-space`` |
|
|
* ``sentence-end-double-space`` |
|
|
* ``auto-fill-mode`` |
|
|
* ``auto-mode-alist`` |
|
|
|
|
|
Editing Tables: Emacs table mode |
|
|
-------------------------------- |
|
|
|
|
|
You may want to check out `Emacs table mode`_ to create an edit |
|
|
tables, it allows creating ASCII tables compatible with |
|
|
reStructuredText_. |
|
|
|
|
|
.. _Emacs table mode: http://table.sourceforge.net/ |
|
|
|
|
|
Character Processing |
|
|
-------------------- |
|
|
|
|
|
Since reStructuredText punts on the issue of character processing, |
|
|
here are some useful resources for Emacs_ users in the Unicode world: |
|
|
|
|
|
* `xmlunicode.el and unichars.el from Norman Walsh |
|
|
<http://nwalsh.com/emacs/xmlchars/index.html>`__ |
|
|
|
|
|
* `An essay by Tim Bray, with example code |
|
|
<http://www.tbray.org/ongoing/When/200x/2003/09/27/UniEmacs>`__ |
|
|
|
|
|
* For Emacs_ users on Mac OS X, here are some useful useful additions |
|
|
to your .emacs file. |
|
|
|
|
|
- To get direct keyboard input of non-ASCII characters (like |
|
|
"option-e e" resulting in "é" [eacute]), first enable the option |
|
|
key by setting the command key as your meta key:: |
|
|
|
|
|
(setq mac-command-key-is-meta t) ;; nil for option key |
|
|
|
|
|
Next, use one of these lines:: |
|
|
|
|
|
(set-keyboard-coding-system 'mac-roman) |
|
|
(setq mac-keyboard-text-encoding kTextEncodingISOLatin1) |
|
|
|
|
|
I prefer the first line, because it enables non-Latin-1 characters |
|
|
as well (em-dash, curly quotes, etc.). |
|
|
|
|
|
- To enable the display of all characters in the Mac-Roman charset, |
|
|
first create a fontset listing the fonts to use for each range of |
|
|
characters using charsets that Emacs_ understands:: |
|
|
|
|
|
(create-fontset-from-fontset-spec |
|
|
"-apple-monaco-medium-r-normal--10-*-*-*-*-*-fontset-monaco, |
|
|
ascii:-apple-monaco-medium-r-normal--10-100-75-75-m-100-mac-roman, |
|
|
latin-iso8859-1:-apple-monaco-medium-r-normal--10-100-75-75-m-100-mac-roman, |
|
|
mule-unicode-0100-24ff:-apple-monaco-medium-r-normal--10-100-75-75-m-100-mac-roman") |
|
|
|
|
|
Latin-1 doesn't cover characters like em-dash and curly quotes, so |
|
|
"mule-unicode-0100-24ff" is needed. |
|
|
|
|
|
Next, use that fontset:: |
|
|
|
|
|
(set-frame-font "fontset-monaco") |
|
|
|
|
|
- To enable cooperation between the system clipboard and the Emacs_ |
|
|
kill ring, add this line:: |
|
|
|
|
|
(set-clipboard-coding-system 'mac-roman) |
|
|
|
|
|
Other useful resources are in `Andrew Choi's Emacs 21 for Mac OS X |
|
|
FAQ <http://members.shaw.ca/akochoi-emacs/stories/faq.html>`__. |
|
|
|
|
|
Credits |
|
|
======= |
|
|
|
|
|
Part of the original code of ``rst.el`` has been written by Martin |
|
|
Blais and David Goodger and Wei-Wei Guo. The font-locking came from |
|
|
Stefan Merten. |
|
|
|
|
|
Most of the code has been modified, enhanced and extended by Stefan |
|
|
Merten who also is the current maintainer of ``rst.el``. |
|
|
|
|
|
.. _Emacs: http://www.gnu.org/software/emacs/emacs.html |
|
|
.. _reStructuredText: http://docutils.sf.net/rst.html |
|
|
.. _Docutils: http://docutils.sf.net/ |
|
|
|
|
|
|
|
|
|
|
|
.. LocalWords: reST utf Merten Blais rst el docutils modeline emacs |
|
|
.. LocalWords: Init mEmacs sInit alist setq txt overlines RET nd py |
|
|
.. LocalWords: dwim conf toolset pseudoxml pdf Imenu imenu menubar |
|
|
.. LocalWords: func toc xmlunicode unichars eacute charset fontset |
|
|
.. LocalWords: kTextEncodingISOLatin charsets monaco ascii latin |
|
|
.. LocalWords: iso unicode Choi's Goodger Guo |
|
|
|
|
|
.. |
|
|
Local Variables: |
|
|
mode: rst |
|
|
indent-tabs-mode: nil |
|
|
fill-column: 70 |
|
|
End:
|
|
|
|