@ref-lib fun/tags-mac.r file-reference
@ref-lib fun/sokoban.r sokoban-call-ref
@ref-lib fun/global-ref regexp-reference cmd-reference
@{{{  @ref-header EMacs-Reference-Card
@ref-title EMacs - Reference Card
@ref-author Michael Haardt
This is the reference file for EMacs, a binding for the folding-editor
Origami.
@}}}
@{{{  EMacs-Reference-Card
@{{{  EMacs Command Line Options
You can use the following commad line options, to control the modes of
EMacs:

@ref-start-tbl Off 10 On 10 Mode 40
-Onotime  @@ -Otime   @@ time display in the statusline
-Onoposi  @@ -Oposi   @@ position display in the statusline
-Onofull  @@ -Ofull   @@ full shifting display
-Onoai    @@ -Oai     @@ autoindent
-Onomagic @@ -Omagic  @@ regular exprsession search
-Onomagic @@ -Oxmagic @@ extended regular expression search
-Onoc     @@ -Oc      @@ c-mode
@ref-end-tbl

You can also use the option '-Odefault' to use the default values:

@ref-start-picture
-Otime -Onoposi -Onofull -Oai -Onomagic -Onoc
@ref-end-picture
@}}}
@{{{  @cmd-opt Origami Command Line Options
@}}}
@{{{  @regexp Origami Regular Expressions
@}}}
@{{{  Messages, errors and prompts
Sometimes EMacs may want to tell you something, like when you did
something which EMacs does not allow. If it is something simple, such
as typing a control key sequence which is not associated with any
command, EMacs will just ignore it. Otherwise, it will also display an
informative error message at the bottom of the screen. Simple messages
are displayed in brackets, prompts will appear without brackets and end
with a question mark.

When starting using verbose mode, EMacs will be less ignorant and tell
you more. Look under command line switches and/or modes on how to use
modes.
@}}}
@{{{  The status line and the message line
The line immediately above the bottom line is referred to as the "mode
line". The mode line looks something like

@ref-start-picture
 * EMacs 1.6.79 (None)  teach-emacs
@ref-end-picture

This is a very useful "information" line.

@ref-start-item asterisk (star)
indicates that changes have been made to the file.
Immediately after opening or saving a file, there is no star.
@ref-end-item
@ref-start-item name ("EMacs" in this case)
shows the name of your compiled keybinding, which runs on top of the Origami
interpreter.
@ref-end-item
@ref-start-item words inside the parentheses
indicate the "modes" EMacs is currently in.
@ref-end-item
@ref-start-item filename ("teach-emacs" in this case)
is the name of the file you are currently editing.
@ref-end-item

If you use more than one window, each window will have its own mode
line.
@}}}
@{{{  Used notation of input
In the following sections, the notation below is used to describe which
commands are bound to which keys or sequences of keys.

@ref-start-item C-<chr>
Hold the CONTROL key while pressing the character <chr>.
Thus, C-F would be: hold the CONTROL key and press F. Some
people may be used to see ^F, here it is C-F.
@ref-end-item
@ref-start-item M-<chr>
If you have no Meta key, then press the ESCAPE key and release
it, then press the character <chr>. Alternatively, if your
keyboard has a meta key, then hold it down while typing <chr>.
@ref-end-item
@ref-start-item M-C-<chr>
If you have no Meta key, then press the ESCAPE key and release
it, then hold the CONTROL key while pressing the character <chr>.
Otherwise, hold down Meta and Control while typing <chr>.
@ref-end-item
@}}}
@{{{  Bound keys and key sequences
Each key inserts/overwrites its character at the current cursor position,
unless it is bound to a command, in which case the command will be started.
If the key is start of a key sequence to which a command is bound, EMacs will
wait for the rest of that sequence and show what was typed so far in the
message line.  Killing text means that the text will be erased from the buffer
and appended to the kill buffer whereas deleting text means just erasing it,
although a limited undo function is available.

@{{{  The general abort command
@ref-start-item C-G
The EMacs command used to abort any command, no matter if it requests
input or not, is C-G. For example, you can used C-G to discard
a numeric argument, at the beginning of a command that you
don't want to finish, to abort loading big files and to abort
running macros.
@ref-end-item
@}}}
@{{{  Cursor motion
@{{{  Basic cursor control (up, down, left, right)
Not the best, but the most basic way to move the cursor is to use the
commands previous-line, backward-character, forward-character and
next-line. Here, in a more graphical form, are the commands:

@ref-start-picture
                     Previous line, C-P
                           :
Backward, C-B .. Current cursor position .. Forward, C-F
                           :
                     Next line, C-N
@ref-end-picture

You'll probably find it easy to think of these by letter: P for
previous, N for next, B for backward and F for forward. When you go off
the top or bottom of the screen, the text beyond the edge is shifted
onto the screen so that your instructions can be carried out while
keeping the cursor on the screen. If your terminal is supported, then
the cursor keys will work as well.
@}}}
@{{{  Move cursor backward/forward one word
@ref-start-item M-b
backward-word, moves the cursor back one word.
@ref-end-item
@ref-start-item M-f
backward-word, moves the cursor forward one word.
@ref-end-item
@}}}
@{{{  Move cursor backward/forward one sentence
The end of a sentence in EMacs means a line with a period at its end or
a period followed by two spaces.

@ref-start-item M-B
backward-sentence. Moves the cursor to the beginning of the last sentence.
@ref-end-item
@ref-start-item M-F
forward-sentence. Moves the cursor to the beginning of the next sentence.
@ref-end-item
@}}}
@{{{  Move cursor to the previous/next paragraph
A paragraph in EMacs is text without blank lines and without a period in
the first column.

@ref-start-item M-p
previous-paragraph, moves the cursor to the previous paragraph.
@ref-end-item
@ref-start-item M-n
next-paragraph, moves the cursor to the next paragraph.
@ref-end-item
@}}}
@{{{  Move cursor to the previous/next page
@ref-start-item M-v
previous-page, move one page back. If your terminal is supported, then
the NextPage key will also work.
@ref-end-item
@ref-start-item C-V
next-page, move one page forward. If your terminal is supported, then
the PreviousPage key will also work.
@ref-end-item
@}}}
@{{{  Move cursor to the beginning/end of a line
@ref-start-item C-A
beginning-of-line, move to the beginning of line. If your terminal is
supported, the begin key will also work.
@ref-end-item
@ref-start-item C-E
end-of-line, move to the end of line. If your terminal is supported, the
end key will also work.
@ref-end-item
@}}}
@{{{  Move cursor to the beginning/end of a fold
@ref-start-item M-<
beginning-of-fold, move to the beginning of the entered fold.
If your terminal is supported, the home key will also work.
@ref-end-item
@ref-start-item M->
end-of-fold, move to the end of the entered fold.
@ref-end-item
@}}}
@{{{  Move cursor to line with a specific number
@ref-start-item M-g
go-to-line, moves the cursor to the specified line in an entered
fold. With a numeric argument, Origami jumps to that line,
otherwise a prompt asking for it will be issued.
@ref-end-item
@}}}
@{{{  Move cursor to matching paren, bracket or brace
@ref-start-item M-#
goto-matching-fence, move cursor to matching paren, bracket or brace. If the
cursor stands not on one of the above mentioned fences, EMacs tries to find
one of the following more complex structures (Skip1 -> Skip2 [ -> Skip3 ] ->
Skip1 .. ):
@ref-start-tbl Language 8 Skip1 10 Skip2 10 Skip3 10
all @@ #ifdef @@ #else @@ #endif
all @@ #if @@ #else @@ #endif
OCL @@ @if-using @@ @fi
@ref-end-tbl
@ref-end-item
@}}}
@{{{  Move cursor in and out of folds
@ref-start-item C-O
open-fold, opens the fold under the cursor. If your terminal
is supported, then the open key will work as well.
@ref-end-item
@ref-start-item C-C
close-fold, closes the current fold and folds inside it. If
your terminal is supported, then the close key will work as well.
@ref-end-item
@ref-start-item M-C-O
enter-fold, enters the fold under the cursor. If the line is not a fold,
Origami tries to follow the given include statement or prompts for a filename.
The environement variable `ORIGAMILIBPATH' may contain a `:' separated list of
directories (default is `/usr/include').
@ref-end-item
@ref-start-item M-C-C
exit-fold, exits the current fold.
@ref-end-item
@}}}
@}}}
@{{{  Editing
@{{{  Creating a new line
@ref-start-item C-M
newline-and-indent, splits the line at the cursor position.  If mode
@ref-end-item
@ref-start-item C-J
Autoindent is active, then the new line is indented as the previous
line.
@ref-end-item
@}}}
@{{{  Deleting characters
@ref-start-item C-H
delete-previous-character, deletes the character left to the
cursor.  Most backspace keys also send C-H.
@ref-end-item
@ref-start-item C-D
delete-character, deletes the character under the cursor.  Most
@ref-end-item
@ref-start-item C-?
delete keys also send a C-?.
@ref-end-item
@}}}
@{{{  Exchanging characters
@ref-start-item C-T
transpose-characters, exchanges the character under the cursor
with the character left from the cursor, then moves the cursor
forward one character.
@ref-end-item
@}}}
@{{{  Deleting words
@ref-start-item M-C-H
delete-word-backward, deletes word backwards from cursor position.
@ref-end-item
@ref-start-item M-C-D
delete-word, deletes word under cursor position.
@ref-end-item
@}}}
@{{{  Changing capitalization of words
@ref-start-item M-c
case-word-capitalize, capitalizes the word starting at cursor
position and moves the cursor forward one word.
@ref-end-item
@ref-start-item M-u
case-word-upper, changes the word to upper case starting at
cursor position and moves the cursor forward one word.
@ref-end-item
@ref-start-item M-l
case-word-lower, changes the word to lower case starting at
cursor position and moves the cursor forward one word.
@ref-end-item
@}}}
@{{{  Killing, deleting, and getting erased text back
@ref-start-item C-K
kill-line, kills all text from cursor position to end of line.
If the cursor was already at the end of the line, the newline
character ending the line will be killed, joining the current line
with the next line.
@ref-end-item

@ref-start-item M-C-K  |  delline
delete-line, deleted all text from cursor position to end of line.
If the cursor was already at the end of the line, the newline
character ending the line will be deleted, joining the current line
with the next line.
@ref-end-item

@ref-start-item C-Y
insert-folded-kill-buffer, moves the kill buffer in a fold and
yanks this fold back
@ref-end-item

@ref-start-item C-X C-Y
undo-delete-line, yank the last deleted line back
@ref-end-item
@}}}

@{{{  copy-to-kill-buffer
@ref-start-item M-k
copy-to-kill-buffer, appends the line to the kill buffer without
killing it
@ref-end-item
@}}}
@{{{  unfold-fold
@ref-start-item C-U
unfold-fold, removes the fold marks of the fold under the cursor
@ref-end-item
@}}}
@{{{  auto-header
@ref-start-item C-X C-H
auto-header, copies the first in of the fold under the cursor to
the fold header
@ref-end-item
@}}}
@{{{  toggle-file-fold
@ref-start-item C-X C-F
toggle-file-fold, toggles between a fold and a file-fold
@ref-end-item
@}}}
@{{{  toggle-attach-file-to-fold
@ref-start-item C-X C-A
toggle-attach-file-to-fold, attaches a file to a fold to create a
file-fold for an already existing file, or unlinks the file from
the fold
@ref-end-item
@}}}
@}}}
@{{{  Regions
Regions in EMacs are parts of the buffer, one end marked by an invisible
mark, the other by the cursor. The region includes the beginning
position and excludes the ending position. Regions have to respect the
fold structure.

@ref-start-item C-@
set-mark, set an invisible mark at the current cursor position.
This function is also bound to control-space, because most keyboards
generate the same character on C-@ and control-space.
@ref-end-item
@ref-start-item C-X C-X
change-mark-and-position, set the invisible mark at the cursor
position and move the cursor to the previos location of the mark.
@ref-end-item
@ref-start-item C-X x
highlight-region, show the marked region highlighted. A set argument will
enhance the display time.
@ref-end-item
@ref-start-item M-C-W
delete-region, delete a region. This can be undone by undo-delete-line.
@ref-end-item
@ref-start-item C-W
kill-region, move the region to the kill buffer.
@ref-end-item
@ref-start-item M-w
copy-region, copy the region in the kill buffer.
@ref-end-item
@ref-start-item M-C-@
fold-region, folds the region.
@ref-end-item
@}}}
@{{{  Search/replace
@{{{  Search for a string
@ref-start-item M-C-S
search-forward, prompts for a string and moves the cursor
to the next occurence of it.
@ref-end-item
@ref-start-item M-C-R
search-reverse, prompts for a string and moves the cursor
to the last occurence of it.
@ref-end-item
@}}}
@{{{  Incremental search for a string
Incremental search allows you to see the result of the search while the
search string is typed/changed.

@ref-start-item C-S
incremental-search-forward, switches to incremental search mode
with default direction forward.
@ref-end-item
@ref-start-item C-R
incremental-search-reverse, switches to incremental search mode
with default direction backward.
@ref-end-item

@{{{  Functions in incremental search mode
During incremental search, you can use the following commands:

@ref-start-item <chr>
Append the character to the search pattern and search in current
search direction.
@ref-end-item
@ref-start-item C-S
Move the cursor to the next occurence of the search string and
switch to search direction forward.
@ref-end-item
@ref-start-item C-R
Move to the previous occurence and switch to searching backward.
@ref-end-item
@ref-start-item C-P
Go back in search history.
@ref-end-item
@ref-start-item C-N
Go forward in search history.
@ref-end-item
@ref-start-item C-M  |  C-J
exit incremental search, leave the cursor where it is.
@ref-end-item
@ref-start-item C-H
remove last letter from search pattern.
@ref-end-item
@ref-start-item C-G
aborts incremental search, sets the cursor to where it was before.
@ref-end-item
@}}}
@}}}
@{{{  Search and replace
@ref-start-item M-R
replace-string, asks for a search string and a replace string
and replaces all occurences of the search string by the replace
string.
@ref-end-item
@ref-start-item M-R
query-replace-string, asks for a search string and a replace
string and gives the choice to replace the search string by the
replace string at all occurences. During query-replace-string
the following commands are available:

@ref-start-item Y
replace and go to next occurence
@ref-end-item
@ref-start-item N
don't replace and go to next occurence
@ref-end-item
@ref-start-item !
replace all further occurences
@ref-end-item
@ref-start-item A
abort
@ref-end-item
@ref-start-item .
replace this occurence and abort after
@ref-end-item
@ref-end-item
@}}}
@}}}
@{{{  Files
@ref-start-item C-X C-I
insert-file, inserts the contents of a file at the current position into the
buffer.
@ref-end-item
@ref-start-item C-X C-S
save-file, writes the buffer back to the edited file. If your
terminal is supported, the save key will also work.
@ref-end-item
@ref-start-item C-X C-W
write-file, writes the buffer to another file.
@ref-end-item
@ref-start-item C-X C-R
read-file, reads another file into the buffer.  A set argument will read the
file without parsing.  The state of the mode parsing will not be changed.
@ref-end-item
@ref-start-item C-X C-N
next-file, reads next file from command line argument list into
the buffer.
@ref-end-item
@ref-start-item C-X C-P
previous-file, reads previous file from command line argument list into
the buffer.
@ref-end-item
@ref-start-item M-~
set-file-unchanged, marks the buffer as unchanged.
@ref-end-item
@}}}
@{{{  Buffers
Origami has a different buffer concept than most other emacs
implementations. Each buffer has its own (and only) window to edit it.
Buffers may not be currently visible, so list-buffers is an important
function if you get lost.

@ref-start-item C-X C-B
list-buffers, show a list of all used buffers and offers a menu
for selecting another buffer (return moves you back to the old
position). If your terminal supports it, the select key will
also work.
@ref-end-item
@ref-start-item C-X b
change-buffername, changes the name of the current buffer
@ref-end-item

@{{{  Opening and closing buffers
@ref-start-item C-X "2
open-buffer, open a second buffer by parting the current window
horizontally.  A set argument will read the file without parsing.  The
state of the mode parsing will not be changed.
@ref-end-item
@ref-start-item C-X "3
open-adjacent-buffer, open a second buffer by parting the current window
vertically.  A set argument will read the file without parsing.  The state
of the mode parsing will not be changed.
@ref-end-item
@ref-start-item C-X "0
exit-buffer, close the current buffer and unify the window with
the window of the previous buffer
@ref-end-item
@ref-start-item C-X @
show a special buffer containing the last messages.
@ref-end-item
@}}}
@{{{  Changing between buffers
@ref-start-item M-C-X p
previous-buffer, go to the previous buffer.
@ref-end-item
@ref-start-item M-C-X n
next-buffer, go to the next buffer.
@ref-end-item
@ref-start-item C-X o
other-buffer, go cyclic to the next buffer.
@ref-end-item
@ref-start-item M-C-X C-P
up-buffer, move up one buffer
@ref-end-item
@ref-start-item M-C-X C-N
down-buffer, move down one buffer
@ref-end-item
@ref-start-item M-C-X C-B
left-buffer, move left one buffer
@ref-end-item
@ref-start-item M-C-X C-F
right-buffer, move right one buffer
@ref-end-item
@}}}
@{{{  Resizing buffers
@ref-start-item C-X "1
full-size-buffer, extend the size of the current buffer to screen size
@ref-end-item
@ref-start-item M-C-X ^
grow-buffer, grow current buffer vertically
@ref-end-item
@ref-start-item M-C-X v
shrink-buffer, shrink current buffer vertically
@ref-end-item
@ref-start-item M-C-X <
widen-buffer, grow current buffer horizontally
@ref-end-item
@ref-start-item M-C-X >
narrow-buffer, shrink current buffer horizontally
@ref-end-item
@}}}
@}}}
@{{{  Modes
Unlike most other Emacs implementations, Origami does not seperate
between major and minor modes. The mode default values can be set
using command line switches:

@{{{  Origami Command Line Options
@}}}
@{{{  EMacs Command Line Options
@}}}

All modes are related to a buffer, they are set with C-X "m <mode-key>
and deleted with C-X C-M <mode-key>. The following mode-keys are
available:

@ref-start-item "a
autosave, asks for a time interval and saves the text each time
after this interval expires
@ref-end-item
@ref-start-item "c
c-mode, syntax support for C
@ref-end-item
@ref-start-item "d
show a menu for changing the used character display mode. This
mode also can only be changed, not deleted.
@ref-end-item
@ref-start-item "f
full-shift, moving over the right border of the screen will shift
the whole buffer, not only the current line.
@ref-end-item
@ref-start-item "i
autoindent, new lines will be indented as their predecessor
@ref-end-item
@ref-start-item "l
set-language, sets a new language for fold comments. This mode
can only be changed and not deleted.
@ref-end-item
@ref-start-item "m
basic-regular-expression, search/replace will use regular
expressions
@ref-end-item
@ref-start-item "M
extended-regular-expression, search/replace will use extended
expressions.
@ref-end-item
@ref-start-item "n
no-parse, reading files will be done without fold parsing
@ref-end-item
@ref-start-item "o
overwrite, new text overwrites existing text instead of being
inserted
@ref-end-item
@ref-start-item "p
position, always show current position in status line
@ref-end-item
@ref-start-item "t
time, display the time right from the filename
@ref-end-item
@ref-start-item "v
view, text can only be viewd but not changed
@ref-end-item
@ref-start-item "V
If set, EMacs will be more verbose in some situations.
@ref-end-item
@ref-start-item "w
wrap, wraps a word to the next line if neccessary
@ref-end-item
@ref-start-item "#
hash-shifting
@ref-end-item
@}}}
@{{{  Arguments
@ref-start-item M-<number>
set-argument-<number> (number can be a digit from 0 to 9),
set number as argument for the next executed command. Any
following typed digits will be part of the number. Most
commands simply are executed number times, when prefixed by
an argument.
@ref-end-item
@}}}
@{{{  Shell Commands
@{{{  shell
@ref-start-item shift-command  |  C-X "c
shell, starts a sub shell
@ref-end-item
@}}}
@{{{  shell-command
@ref-start-item command  |  C-X "!
shell-command, starts a sub shell with a given command
@ref-end-item
@}}}
@{{{  filter-buffer
@ref-start-item C-X "|
filter-buffer, first saves  current file and then filters it
through the specified filter command.
@ref-end-item
@}}}
@{{{  pipe-to-command
@ref-start-item C-X ">
pipe-to-command, feeds the command with the current file as
standard input.
@ref-end-item
@}}}
@{{{  pipe-from-command
@ref-start-item C-X "<
pipe-from-command, inserts standard output from command at the
current position.
@ref-end-item
@}}}
@{{{  make-it
@ref-start-item M-x m
make-it, invoke make
@ref-end-item
@}}}
@{{{  compile-it
@ref-start-item M-x c
compile-it, invoke C compiler
@ref-end-item
@}}}
@{{{  beautify-c-code
@ref-start-item C-X "i
beautify-c-code, filter buffer through beautifier
@ref-end-item
@}}}
@{{{  check-out
@ref-start-item M-x o
check-out, checks current file out but does *not* reload the
buffer.
@ref-end-item
@}}}
@{{{  check-in
@ref-start-item M-x i
check-in, saves buffer and checks file in
@ref-end-item
@}}}
@{{{  spell-it
@ref-start-item M-x s
spell-it, runs current file through spell and starts an
interactive search and replace for all misspelled words.
@ref-end-item
@}}}
@}}}
@{{{  More advanced functions
@{{{  C-Mode
The following characters have a special meaning in C-mode:

@ref-start-picture
( [ { '  "  ;
@ref-end-picture

Just play around to get used to them, once you are they save lots of
typing. In C-mode words consist of letters, digits and underscores.
@}}}
@{{{  Tags
@{{{  enter-and-go-tags-buffer
@ref-start-item M-.
enter-and-go-tags-buffer, prompt for tag and go to tagged
position (open buffer, if needed)

filename-or-tag-completion can also be used. In this case, the
first tag starting with the given text is used.
@ref-end-item

@{{{  @tags-mac-ref Tags file
@}}}
@}}}
@{{{  find-and-go-tags-buffer
@ref-start-item M-,
find-and-go-tags-buffer, like enter-and-go-tags-buffer, but use
the word under the cursor
@ref-end-item

@{{{  @tags-mac-ref Tags file
@}}}
@}}}
@{{{  set-user-tags-file
@ref-start-item C-X t
set-user-tags-file, define a new tags file (empty input uses
default tags files).
@ref-end-item

@{{{  @tags-mac-ref Tags file
@}}}
@}}}
@}}}
@{{{  Macros
@{{{  start-define-macro
@ref-start-item C-X "(
define-macro, starts recording a keyboard macro
@ref-end-item
@}}}
@{{{  end-define-macro
@ref-start-item C-X ")
define-macro, ends recording a keyboard macro
@ref-end-item
@}}}
@{{{  execute-macro
@ref-start-item C-X "e
execute-macro, executes a recorded keyboard macro
@ref-end-item
@}}}
@}}}

@{{{  center-and-redraw-display
@ref-start-item C-L
center-and-redraw-display, redraws screen bringing the current
line to the middle of the screen.
@ref-end-item
@}}}
@{{{  redraw-display
@ref-start-item refresh  |  M-C-L
redraw, redraws screen e.g. after write(1)s from other people
etc.
@ref-end-item
@}}}

@{{{  describe-bindings
@ref-start-item shift-help  |  C-X "?
describe-bindings, shows all commands and where they are bound to
@ref-end-item
@}}}
@{{{  describe-fold
@ref-start-item C-X "=
describe-fold, gives you some information about your position in
the text
@ref-end-item
@}}}
@{{{  quote-character
@ref-start-item C-Q
quote-character, simply insert the next character and do not
parse it as a command
@ref-end-item
@}}}
@{{{  filename-or-tag-completion
@ref-start-item M-C-I
filename-or-tag-completion, complete a word to a filename. This
function works everywhere, not only in prompts! If
filename-or-tag-completion is used outside of prompts and if
there is no filename to complete, Emacs tries to complete the
started word as tag.
@ref-end-item

@{{{  @tags-mac-ref Tags file
@}}}
@}}}
@{{{  fill-paragraph
@ref-start-item M-q
fill-paragraph, fills paragraph from cursor to end of paragraph
@ref-end-item
@}}}
@{{{  set-fill-column
@ref-start-item C-X "f
set-fill-column, sets fill column to argument, or cursor position
if none is given, or asks for it if cursor if at the left margin.
@ref-end-item
@}}}
@}}}
@{{{  How to get out
@{{{  exit-origami
@ref-start-item exit  |  C-X C-C
exit-origami
@ref-end-item
@}}}
@{{{  save-and-exit-origami
@ref-start-item shift-exit  |  M-Z
save-and-exit-origami
@ref-end-item
@}}}
@{{{  suspend-origami
@ref-start-item suspend  |  C-Z
suspend-origami
@ref-end-item
@}}}
@}}}

@{{{  Funny Functions
@{{{  @ff sokoban
@ref-start-item M-X k
@{{{  sokoban
@}}}
@ref-end-item
@}}}
@{{{  @ff towers-of-hanoi
@ref-start-item M-X t
Play the well known game towers-of-hanoi at the bottom of the current buffer.
set-argument can be used, to control the height.
@ref-end-item
@}}}
@}}}
@}}}
@}}}
