comparison 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
comparison
equal deleted inserted replaced
69:804d1389bcd6 70:131b0175ea99
1 \input texinfo @c -*-texinfo-*-
2 @setfilename ../info/R2L
3 @settitle Right-to-left writing
4
5 @titlepage
6 @sp 6
7 @center @titlefont{Right-to-left writing}
8 @sp 4
9 @center Version 2.0
10 @sp 5
11 @center Ken'ichi HANDA
12 @center handa@@etl.go.jp
13 @page
14
15 @end titlepage
16
17 @comment ============================================================
18 @node Top, , , (mule)
19 @section Right-to-left writing
20
21 This document describes how Mule handles a text written from right to
22 left.
23
24 @menu
25 * Right-to-left Character Set::
26 * Direction of Buffer::
27 * Cursor Motion::
28 * LR Commands::
29 @ignore
30 * Double cursor::
31 * Highlighing::
32 * Visual inputting::
33 @end ignore
34 @end menu
35
36 @comment ============================================================
37 @node Right-to-left Character Set, Direction of Buffer, , Top
38 @section Right-to-left Character Set
39
40 In Mule, each character set has the attribute @dfn{direction}. The
41 value is either 0 (l2r, left-to-right) or 1 (r2l, right-to-left). For
42 the moment, Mule has four r2l character sets, namely, Hebrew
43 (ISO8859-8), ASCII-r2l (private) Arabic1 (private) and Arabic2
44 (private). ASCII-r2l is for providing r2l space and punctuation
45 characters to Hebrew. Consecutive r2l characters are shown from right
46 to left on the screen.
47
48 Hereafter, we denote r2l characters by capital letters and l2r
49 characters by lowercase letters in strings. Punctuation marks (e.g.,
50 period) mean normal ASCII characters. For r2l space and punctuations,
51 we use the letter @samp{_} (underscore).
52
53 @comment ============================================================
54 @node Direction of Buffer, Cursor Motion, Right-to-left character set, Top
55 @section Direction of buffer
56
57 Each buffer also has the attribute @dfn{direction} (buffer local
58 variable @code{display-direction}). By default, the value is @code{nil}
59 (means l2r direction). Provided that a buffer contains:
60
61 @example
62 this is a DESREVER word.
63 @end example
64
65 If @code{display-direction} is @code{nil} (this is the default), what
66 you see on your screen is:
67
68 @example
69 +---------------------------------+
70 |this is a DESREVER word. |
71 | |
72 +---------------------------------+
73 @end example
74
75 but, if the direction is non-@code{nil}, what you see is:
76
77 @example
78 +---------------------------------+
79 | word.DESREVERthis is a |
80 | |
81 +---------------------------------+
82 @end example
83
84 If you are in visual-mode, the value of @code{display-direction} is
85 reflected in the mode-line. The string @samp{L2R} means
86 @code{display-direction} is @code{nil}; @samp{R2L} means non-@code{nil}.
87 In visual-mode, you can set @code{display-direction} to @code{nil} by
88 typing @kbd{C-c <}, and to @code{t} (this means non-@code{nil}) by
89 typing @kbd{C-c >}.
90
91 If you read a file that has the extension @file{.l2r}, the buffer
92 automatically turns into visual-mode and @code{display-direction} is set
93 to @code{nil}. Likewise, if a file has the extension @file{.r2l}, the
94 buffer automatically goes in visual-mode and @code{display-direction} is
95 set to @code{t}.
96
97 @comment ============================================================
98 @node Cursor Motion, LR commands, Direction of Buffer, Top
99 @section Cursor Motion
100
101 If you are not in visual-mode and type @kbd{C-f} (or @kbd{M-x
102 forward-char}, the cursor moves as follows:
103
104 @example
105 |this is a DESREVER word. |
106 ^
107 |this is a DESREVER word. |
108 ^
109 |this is a DESREVER word. |
110 ^
111 |this is a DESREVER word. |
112 ^
113 |this is a DESREVER word. |
114 ^
115 |this is a DESREVER word. |
116 ^
117 |this is a DESREVER word. |
118 ^
119 |this is a DESREVER word. |
120 ^
121 |this is a DESREVER word. |
122 ^
123 |this is a DESREVER word. |
124 ^
125 |this is a DESREVER word. |
126 ^
127 |this is a DESREVER word. |
128 ^
129 |this is a DESREVER word. |
130 ^
131 |this is a DESREVER word. |
132 ^
133 @end example
134
135 This is rather complicated and misleading. To avoid confusions, the
136 following cursor motion commands are prepared in visual-mode to handle
137 bi-directional texts easily. All these commands accept an additional
138 prefix numeric argument.
139
140 @table @asis
141 @item @kbd{C-f} or @kbd{M-x visual-forward-char}
142 Move the cursor visually forward in characters.
143
144 @item @kbd{C-b} or @kbd{M-x visual-backward-char}
145 Move the cursor visually backward in characters.
146
147 @item @kbd{C-p}, @kbd{@key{UP}} or @kbd{M-x visual-previous-line}
148 Move the cursor up in lines.
149
150 @item @kbd{C-n}, @kbd{@key{DOWN}} or @kbd{M-x visual-next-line}
151 Move the cursor down in lines.
152
153 @item @kbd{C-a} or @kbd{M-x visual-beginning-of-line}
154 Move the cursor to the visual beginning of the current line.
155
156 @item @kbd{M-f} or @kbd{M-x visual-forward-word}
157 Move the cursor visually forward in words.
158
159 @item @kbd{M-b} or @kbd{M-x visual-backward-word}
160 Move the cursor visually backward in words.
161
162 @item @kbd{M-<}, @kbd{HOME} or @kbd{M-x visual-beginning-of-buffer}
163 Move the cursor to the visual beginning of the current buffer.
164
165 @item @kbd{M->}, @kbd{END} or @kbd{M-x visual-end-of-buffer}
166 Move the cursor to the visual end of the current buffer.
167 @end table
168
169 Note that ordinary cursor motion commands (@code{forward-char},
170 @code{backward-char}, etc.) behave according to the @dfn{logical order}
171 of the text, whilst the above commands behave according to the
172 @dfn{visual order}. Compare the difference of the two @kbd{C-f}
173 commands. (You can exit visual-mode by typing @kbd{C-c C-c}.)
174
175 Some of you may be confused by the words @dfn{forward} and
176 @dfn{backward}. Here is a summary:
177
178 @example
179 display-direction nil non-nil
180 ------------------------------------------------
181 forward right left
182 backward left right
183 @end example
184
185 @comment ============================================================
186 @node LR Commands, , Cursor Motion, Top
187 @section LR Commands
188
189 If you have been using Emacs or Mule for a long time, it is possible
190 that @kbd{C-b} and @dfn{move to left} are so strongly associated in your
191 mind that you want to move the cursor to left by @kbd{C-b} no matter how
192 @code{display-direction} is set. Likewise, you may want to move the
193 cursor to the right, to the left-most column and to the right-most
194 column by @kbd{C-f}, @kbd{C-a} and @kbd{C-e}, respectively.
195
196 In such cases, include the following line in your @file{~/.emacs}
197 file:
198
199 @lisp
200 (setq visual-use-lr-commands t)
201 @end lisp
202
203 This lisp command enables so called @dfn{LR commands}. LR commands
204 act according to the absolute screen direction (such as @dfn{left} or
205 @dfn{right}) rather than the relative direction (@dfn{forward} or
206 @dfn{backward}).
207
208 @table @asis
209 @item @kbd{C-b}, @kbd{@key{LEFT}} or @kbd{M-x visual-move-to-left-char}
210 Move the cursor to the left in characters.
211
212 @item @kbd{C-f}, @kbd{@key{RIGHT}} or @kbd{M-x visual-move-to-right-char}
213 Move the cursor to the right in characters.
214
215 @item @kbd{M-b}, @kbd{@key{M-LEFT}} or @kbd{M-x visual-move-to-left-word}
216 Move the cursor to the left in words.
217
218 @item @kbd{M-f}, @kbd{@key{M-RIGHT}} or @kbd{M-x visual-move-to-right-word}
219 Move the cursor to the right in words.
220
221 @item @kbd{C-a} or @kbd{M-x visual-left-end-of-line}
222 Move the cursor to the left-most column of the current line.
223
224 @item @kbd{C-e} or @kbd{M-x visual-right-end-of-line}
225 Move the cursor to the right-most column of the current line.
226 @end table
227
228 As a matter of fact, the four keys, @key{LEFT}, @key{RIGHT},
229 @key{M-LEFT} and @key{M-RIGHT} are active even though your
230 @file{~/.emacs} file does not contain the @code{setq} line above. So if
231 you are confused, use the arrow keys.
232
233 @ignore
234
235 @node Double cursor, Highlighing, Direction of buffer, Top
236 @section Double cursor
237
238 If the value of 'r2l-double-cursor' is non-nil, when POINT
239 is in between r2l char and l2r (normal) char, two cursor are
240 displayed to denote insertion points for both types of
241 character. For instance, in the above example, when you
242 move POINT forward one by one, the cursor changes as
243 follows:
244
245 @example
246 |this is a WERBEH word. |
247 ^
248 |this is a WERBEH word. |
249 ^
250 |this is a WERBEH word. |
251 ^ ^
252 |this is a WERBEH word. |
253 ^
254 |this is a WERBEH word. |
255 ^
256 |this is a WERBEH word. |
257 ^
258 |this is a WERBEH word. |
259 ^
260 |this is a WERBEH word. |
261 ^
262 |this is a WERBEH word. |
263 ^ ^
264 |this is a WERBEH word. |
265 ^
266 @end example
267
268 @node Highlighing, Visual inputting, Double cursor, Top
269 @section Highlighing characters of reverse direction
270
271 If the value of 'highlight-reverse-direction' is non-nil
272 (default), a character whose direction is different from
273 that of the current buffer is highlighted by gray-color (or
274 background mesh).
275
276 @node Visual inputting, , Highlighing, Top
277 @section Visual inputting
278
279 As mentioned above, cursor motion in r2l text is rather complicated.
280 Further, even with the double cursor function, you may need some time
281 to learn inserting/deleting characters in an r2l text.
282
283 To faciliate the manipulation of r2l texts, quail provides a set of
284 functions which make cursor motion and insertion/deletion behave as
285 you expect.
286
287 visually-forward-char
288 Function: Move cursor visually forward by ARG chars.
289
290 visually-backward-char
291 Function: Move cursor visually backward by ARG chars.
292
293 visually-beginning-of-line
294 Function: Move cursor to the visually beginning of line.
295
296 visually-insert-char
297 Function: With argument CH, call VISUALLY-INSERT-CHAR ARG times.
298
299 visually-backward-delete-char
300 Function: Delete ARG chars visually before cursor.
301
302 visually-delete-char
303 Function: Delete ARG chars under cursor.
304
305 These functions behave as if the whole buffer were filled with
306 characters of same direction: for example, when the buffer direction
307 is l2r, visually-forward-char moves the cursor to the right (or left,
308 if the buffer direction is r2l) step by step; visually-insert-char
309 puts the typed character just under the cursor and moves the cursor to
310 the right (left) by one column; visually-backward-delete-char removes
311 the character left (right) to the cursor, etc.
312
313 In quail/hebrew.el these visual functions are called via appropriate
314 quail cursor motion functions. As quail cursor motion functions are
315 bound to appropriate keys, you will not be puzzled by the complicated
316 cursor behaviours as long as you use the hebrew package of quail-mode.
317
318 @end ignore
319
320 @contents
321 @bye