Mercurial > hg > xemacs-beta
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 |