Info file: R2L,    -*-Text-*-
produced by `texinfo-format-buffer'
from file `R2L.texi'
using `texinfmt.el' version 2.32 of 19 November 1993.




File: R2L, Node: Top, Up: (mule)

Right-to-left writing
=====================

  This document describes how Mule handles a text written from right to
left.

* Menu:

* Right-to-left Character Set::
* Direction of Buffer::
* Cursor Motion::
* LR Commands::


File: R2L, Node: Right-to-left Character Set, Next: Direction of Buffer, Up: Top

Right-to-left Character Set
===========================

  In Mule, each character set has the attribute "direction".  The value
is either 0 (l2r, left-to-right) or 1 (r2l, right-to-left).  For the
moment, Mule has four r2l character sets, namely, Hebrew (ISO8859-8),
ASCII-r2l (private) Arabic1 (private) and Arabic2 (private).  ASCII-r2l
is for providing r2l space and punctuation characters to Hebrew.
Consecutive r2l characters are shown from right to left on the screen.

Hereafter, we denote r2l characters by capital letters and l2r
characters by lowercase letters in strings.  Punctuation marks (e.g.,
period) mean normal ASCII characters.  For r2l space and punctuations,
we use the letter `_' (underscore).


File: R2L, Node: Direction of Buffer, Next: Cursor Motion, Prev: Right-to-left character set, Up: Top

Direction of buffer
===================

  Each buffer also has the attribute "direction" (buffer local variable
`display-direction').  By default, the value is `nil' (means l2r
direction).  Provided that a buffer contains:

     this is a DESREVER word.

  If `display-direction' is `nil' (this is the default), what you see on
your screen is:

     +---------------------------------+
     |this is a DESREVER word.         |
     |                                 |
     +---------------------------------+

but, if the direction is non-`nil', what you see is:

     +---------------------------------+
     |          word.DESREVERthis is a |
     |                                 |
     +---------------------------------+

  If you are in visual-mode, the value of `display-direction' is
reflected in the mode-line.  The string `L2R' means `display-direction'
is `nil'; `R2L' means non-`nil'.  In visual-mode, you can set
`display-direction' to `nil' by typing `C-c <', and to `t' (this means
non-`nil') by typing `C-c >'.

  If you read a file that has the extension `.l2r', the buffer
automatically turns into visual-mode and `display-direction' is set to
`nil'.  Likewise, if a file has the extension `.r2l', the buffer
automatically goes in visual-mode and `display-direction' is set to `t'.


File: R2L, Node: Cursor Motion, Next: LR commands, Prev: Direction of Buffer, Up: Top

Cursor Motion
=============

  If you are not in visual-mode and type `C-f' (or `M-x forward-char',
the cursor moves as follows:

     |this is a DESREVER word.      |
             ^
     |this is a DESREVER word.      |
              ^
     |this is a DESREVER word.      |
               ^
     |this is a DESREVER word.      |
                       ^
     |this is a DESREVER word.      |
                      ^
     |this is a DESREVER word.      |
                     ^
     |this is a DESREVER word.      |
                    ^
     |this is a DESREVER word.      |
                   ^
     |this is a DESREVER word.      |
                  ^
     |this is a DESREVER word.      |
                 ^
     |this is a DESREVER word.      |
                ^
     |this is a DESREVER word.      |
                        ^
     |this is a DESREVER word.      |
                         ^
     |this is a DESREVER word.      |
                          ^

  This is rather complicated and misleading.  To avoid confusions, the
following cursor motion commands are prepared in visual-mode to handle
bi-directional texts easily.  All these commands accept an additional
prefix numeric argument.

`C-f' or `M-x visual-forward-char'
     Move the cursor visually forward in characters.

`C-b' or `M-x visual-backward-char'
     Move the cursor visually backward in characters.

`C-p', `UP' or `M-x visual-previous-line'
     Move the cursor up in lines.

`C-n', `DOWN' or `M-x visual-next-line'
     Move the cursor down in lines.

`C-a' or `M-x visual-beginning-of-line'
     Move the cursor to the visual beginning of the current line.

`M-f' or `M-x visual-forward-word'
     Move the cursor visually forward in words.

`M-b' or `M-x visual-backward-word'
     Move the cursor visually backward in words.

`M-<', `HOME' or `M-x visual-beginning-of-buffer'
     Move the cursor to the visual beginning of the current buffer.

`M->', `END' or `M-x visual-end-of-buffer'
     Move the cursor to the visual end of the current buffer.

  Note that ordinary cursor motion commands (`forward-char',
`backward-char', etc.) behave according to the "logical order" of the
text, whilst the above commands behave according to the "visual order".
Compare the difference of the two `C-f' commands.  (You can exit
visual-mode by typing `C-c C-c'.)

  Some of you may be confused by the words "forward" and "backward".
Here is a summary:

     display-direction       nil             non-nil
     ------------------------------------------------
     forward                 right           left
     backward                left            right


File: R2L, Node: LR Commands, Prev: Cursor Motion, Up: Top

LR Commands
===========

  If you have been using Emacs or Mule for a long time, it is possible
that `C-b' and "move to left" are so strongly associated in your mind
that you want to move the cursor to left by `C-b' no matter how
`display-direction' is set.  Likewise, you may want to move the cursor
to the right, to the left-most column and to the right-most column by
`C-f', `C-a' and `C-e', respectively.

  In such cases, include the following line in your `~/.emacs' file:

     (setq visual-use-lr-commands t)

  This lisp command enables so called "LR commands".  LR commands act
according to the absolute screen direction (such as "left" or "right")
rather than the relative direction ("forward" or "backward").

`C-b', `LEFT' or `M-x visual-move-to-left-char'
     Move the cursor to the left in characters.

`C-f', `RIGHT' or `M-x visual-move-to-right-char'
     Move the cursor to the right in characters.

`M-b', `M-LEFT' or `M-x visual-move-to-left-word'
     Move the cursor to the left in words.

`M-f', `M-RIGHT' or `M-x visual-move-to-right-word'
     Move the cursor to the right in words.

`C-a' or `M-x visual-left-end-of-line'
     Move the cursor to the left-most column of the current line.

`C-e' or `M-x visual-right-end-of-line'
     Move the cursor to the right-most column of the current line.

  As a matter of fact, the four keys, LEFT, RIGHT, M-LEFT and M-RIGHT
are active even though your `~/.emacs' file does not contain the `setq'
line above.  So if you are confused, use the arrow keys.


