Mercurial > hg > xemacs-beta
diff man/mule/R2L.texi @ 70:131b0175ea99 r20-0b30
Import from CVS: tag r20-0b30
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:02:59 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/mule/R2L.texi Mon Aug 13 09:02:59 2007 +0200 @@ -0,0 +1,321 @@ +\input texinfo @c -*-texinfo-*- +@setfilename ../info/R2L +@settitle Right-to-left writing + +@titlepage +@sp 6 +@center @titlefont{Right-to-left writing} +@sp 4 +@center Version 2.0 +@sp 5 +@center Ken'ichi HANDA +@center handa@@etl.go.jp +@page + +@end titlepage + +@comment ============================================================ +@node Top, , , (mule) +@section 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:: +@ignore +* Double cursor:: +* Highlighing:: +* Visual inputting:: +@end ignore +@end menu + +@comment ============================================================ +@node Right-to-left Character Set, Direction of Buffer, , Top +@section Right-to-left Character Set + + In Mule, each character set has the attribute @dfn{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 @samp{_} (underscore). + +@comment ============================================================ +@node Direction of Buffer, Cursor Motion, Right-to-left character set, Top +@section Direction of buffer + + Each buffer also has the attribute @dfn{direction} (buffer local +variable @code{display-direction}). By default, the value is @code{nil} +(means l2r direction). Provided that a buffer contains: + +@example +this is a DESREVER word. +@end example + + If @code{display-direction} is @code{nil} (this is the default), what +you see on your screen is: + +@example ++---------------------------------+ +|this is a DESREVER word. | +| | ++---------------------------------+ +@end example + +but, if the direction is non-@code{nil}, what you see is: + +@example ++---------------------------------+ +| word.DESREVERthis is a | +| | ++---------------------------------+ +@end example + + If you are in visual-mode, the value of @code{display-direction} is +reflected in the mode-line. The string @samp{L2R} means +@code{display-direction} is @code{nil}; @samp{R2L} means non-@code{nil}. +In visual-mode, you can set @code{display-direction} to @code{nil} by +typing @kbd{C-c <}, and to @code{t} (this means non-@code{nil}) by +typing @kbd{C-c >}. + + If you read a file that has the extension @file{.l2r}, the buffer +automatically turns into visual-mode and @code{display-direction} is set +to @code{nil}. Likewise, if a file has the extension @file{.r2l}, the +buffer automatically goes in visual-mode and @code{display-direction} is +set to @code{t}. + +@comment ============================================================ +@node Cursor Motion, LR commands, Direction of Buffer, Top +@section Cursor Motion + + If you are not in visual-mode and type @kbd{C-f} (or @kbd{M-x +forward-char}, the cursor moves as follows: + +@example +|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. | + ^ +@end example + + 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. + +@table @asis +@item @kbd{C-f} or @kbd{M-x visual-forward-char} +Move the cursor visually forward in characters. + +@item @kbd{C-b} or @kbd{M-x visual-backward-char} +Move the cursor visually backward in characters. + +@item @kbd{C-p}, @kbd{@key{UP}} or @kbd{M-x visual-previous-line} +Move the cursor up in lines. + +@item @kbd{C-n}, @kbd{@key{DOWN}} or @kbd{M-x visual-next-line} +Move the cursor down in lines. + +@item @kbd{C-a} or @kbd{M-x visual-beginning-of-line} +Move the cursor to the visual beginning of the current line. + +@item @kbd{M-f} or @kbd{M-x visual-forward-word} +Move the cursor visually forward in words. + +@item @kbd{M-b} or @kbd{M-x visual-backward-word} +Move the cursor visually backward in words. + +@item @kbd{M-<}, @kbd{HOME} or @kbd{M-x visual-beginning-of-buffer} +Move the cursor to the visual beginning of the current buffer. + +@item @kbd{M->}, @kbd{END} or @kbd{M-x visual-end-of-buffer} +Move the cursor to the visual end of the current buffer. +@end table + + Note that ordinary cursor motion commands (@code{forward-char}, +@code{backward-char}, etc.) behave according to the @dfn{logical order} +of the text, whilst the above commands behave according to the +@dfn{visual order}. Compare the difference of the two @kbd{C-f} +commands. (You can exit visual-mode by typing @kbd{C-c C-c}.) + + Some of you may be confused by the words @dfn{forward} and +@dfn{backward}. Here is a summary: + +@example +display-direction nil non-nil +------------------------------------------------ +forward right left +backward left right +@end example + +@comment ============================================================ +@node LR Commands, , Cursor Motion, Top +@section LR Commands + + If you have been using Emacs or Mule for a long time, it is possible +that @kbd{C-b} and @dfn{move to left} are so strongly associated in your +mind that you want to move the cursor to left by @kbd{C-b} no matter how +@code{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 @kbd{C-f}, @kbd{C-a} and @kbd{C-e}, respectively. + + In such cases, include the following line in your @file{~/.emacs} +file: + +@lisp +(setq visual-use-lr-commands t) +@end lisp + + This lisp command enables so called @dfn{LR commands}. LR commands +act according to the absolute screen direction (such as @dfn{left} or +@dfn{right}) rather than the relative direction (@dfn{forward} or +@dfn{backward}). + +@table @asis +@item @kbd{C-b}, @kbd{@key{LEFT}} or @kbd{M-x visual-move-to-left-char} +Move the cursor to the left in characters. + +@item @kbd{C-f}, @kbd{@key{RIGHT}} or @kbd{M-x visual-move-to-right-char} +Move the cursor to the right in characters. + +@item @kbd{M-b}, @kbd{@key{M-LEFT}} or @kbd{M-x visual-move-to-left-word} +Move the cursor to the left in words. + +@item @kbd{M-f}, @kbd{@key{M-RIGHT}} or @kbd{M-x visual-move-to-right-word} +Move the cursor to the right in words. + +@item @kbd{C-a} or @kbd{M-x visual-left-end-of-line} +Move the cursor to the left-most column of the current line. + +@item @kbd{C-e} or @kbd{M-x visual-right-end-of-line} +Move the cursor to the right-most column of the current line. +@end table + + As a matter of fact, the four keys, @key{LEFT}, @key{RIGHT}, +@key{M-LEFT} and @key{M-RIGHT} are active even though your +@file{~/.emacs} file does not contain the @code{setq} line above. So if +you are confused, use the arrow keys. + +@ignore + +@node Double cursor, Highlighing, Direction of buffer, Top +@section Double cursor + +If the value of 'r2l-double-cursor' is non-nil, when POINT +is in between r2l char and l2r (normal) char, two cursor are +displayed to denote insertion points for both types of +character. For instance, in the above example, when you +move POINT forward one by one, the cursor changes as +follows: + +@example + |this is a WERBEH word. | + ^ + |this is a WERBEH word. | + ^ + |this is a WERBEH word. | + ^ ^ + |this is a WERBEH word. | + ^ + |this is a WERBEH word. | + ^ + |this is a WERBEH word. | + ^ + |this is a WERBEH word. | + ^ + |this is a WERBEH word. | + ^ + |this is a WERBEH word. | + ^ ^ + |this is a WERBEH word. | + ^ +@end example + +@node Highlighing, Visual inputting, Double cursor, Top +@section Highlighing characters of reverse direction + +If the value of 'highlight-reverse-direction' is non-nil +(default), a character whose direction is different from +that of the current buffer is highlighted by gray-color (or +background mesh). + +@node Visual inputting, , Highlighing, Top +@section Visual inputting + +As mentioned above, cursor motion in r2l text is rather complicated. +Further, even with the double cursor function, you may need some time +to learn inserting/deleting characters in an r2l text. + +To faciliate the manipulation of r2l texts, quail provides a set of +functions which make cursor motion and insertion/deletion behave as +you expect. + + visually-forward-char + Function: Move cursor visually forward by ARG chars. + + visually-backward-char + Function: Move cursor visually backward by ARG chars. + + visually-beginning-of-line + Function: Move cursor to the visually beginning of line. + + visually-insert-char + Function: With argument CH, call VISUALLY-INSERT-CHAR ARG times. + + visually-backward-delete-char + Function: Delete ARG chars visually before cursor. + + visually-delete-char + Function: Delete ARG chars under cursor. + + These functions behave as if the whole buffer were filled with +characters of same direction: for example, when the buffer direction +is l2r, visually-forward-char moves the cursor to the right (or left, +if the buffer direction is r2l) step by step; visually-insert-char +puts the typed character just under the cursor and moves the cursor to +the right (left) by one column; visually-backward-delete-char removes +the character left (right) to the cursor, etc. + +In quail/hebrew.el these visual functions are called via appropriate +quail cursor motion functions. As quail cursor motion functions are +bound to appropriate keys, you will not be puzzled by the complicated +cursor behaviours as long as you use the hebrew package of quail-mode. + +@end ignore + +@contents +@bye