This commit was generated by cvs2svn to compensate for changes in r410,
authortomo <tomo>
Thu, 12 Aug 1999 02:35:36 +0000 (02:35 +0000)
committertomo <tomo>
Thu, 12 Aug 1999 02:35:36 +0000 (02:35 +0000)
which included commits to RCS files with non-trunk default branches.

57 files changed:
configure.usage
etc/HELLO
etc/NEWS
etc/TUTORIAL.th
lib-src/ChangeLog
lib-src/Makefile.in.in
lib-src/config.values.in
lisp/buffer.el
lisp/code-files.el
lisp/config.el
lisp/cus-edit.el
lisp/cus-face.el
lisp/custom.el
lisp/fill.el
lisp/gui.el
lisp/menubar-items.el
lisp/minibuf.el
lisp/mule/cyrillic.el
lisp/mule/english.el
lisp/mule/european.el
lisp/mule/greek.el
lisp/mule/hebrew.el
lisp/mule/korean.el
lisp/mule/mule-ccl.el
lisp/mule/mule-help.el
lisp/mule/mule-misc.el
lisp/rect.el
lisp/simple.el
lisp/toolbar.el
lwlib/ChangeLog
man/ChangeLog
man/custom.texi
man/emodules.texi
man/texinfo.texi
man/widget.texi
man/xemacs/packages.texi
nt/ChangeLog
nt/xemacs.mak
src/Makefile.in.in
src/device.h
src/event-Xt.c
src/event-msw.c
src/frame.h
src/general.c
src/glyphs-msw.c
src/glyphs-widget.c
src/glyphs-x.c
src/gui.c
src/keymap.c
src/mule-ccl.h
src/scrollbar.c
src/window.c
src/window.h
src/winslots.h
tests/ChangeLog
tests/glyph-test.el
version.sh

index e104857..dbeeb9a 100644 (file)
@@ -136,6 +136,8 @@ Additional features:
 --mail-locking=TYPE (*) Specify the locking to be used by movemail to prevent
                         concurrent updates of mail spool files. Valid types
                         are `lockf', `flock', and `file'.
+--with-modules         Compile in experimental support for dynamically
+                       loaded libraries (Dynamic Shared Objects).
 --with-site-lisp=yes    Allow for a site-lisp directory in the XEmacs hierarchy
                         searched before the installation packages.
 --with-site-modules=no  Disable site-modules directory in the XEmacs hierarchy,
index 7938aa5..748f116 100644 (file)
--- a/etc/HELLO
+++ b/etc/HELLO
@@ -26,7 +26,7 @@ Russian (\e.L\eN@\eNc\eNa\eNa\eNZ\eNX\eNY)    \eN7\eNT\eN`\eNP\eNR\eNa\eNb\eNR\eNc\eNY\eNb\eNU!
 Slovak                 Dobr\e.B\eN} de\eNr
 Spanish (Espa\e.A\eNqol) \eN!Hola!
 Swedish (Svenska)      Hej, Goddag
-Thai (\e$(?@0R0I0R0d070B0\e(B)   \e$(?J0G8J04H$0C8:0\e(B, \e$(?J0G8J04H$2P0\e(B
+Thai (\e$(?@0R0I0R0d070B0\e(B)           \e$(?J0G8J04H$0C8:0\e(B, \e$(?J0G8J04H$2P0\e(B
 
 Tigrigna (\e$(3"8#r!N"^\e(B)     \e$(3!Q!,!<"8\e(B
 Turkish (T\e.A\eN|rk\eNge)        Merhaba
index ce047cd..29238ae 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -33,6 +33,26 @@ file.
 * Changes in XEmacs 21.2
 ========================
 
+** The functions in rect.el have been almost completely rewritten...
+to avoid inserting undesirable spaces, notably at the end of lines.
+Two typical examples of this old behavior are `string-rectangle', which filled
+all lines up to the right side of the rectangle, and `clear-rectangle', which
+filled even empty lines up to the left side.
+
+This is not the case any more. All these functions have been rewritten to
+avoid inserting unwanted spaces, and an optional prefix now allows them to
+behave the old way.
+
+As a side effect, `move-to-column' now also accepts 'coerce as its second
+argument, meaning that the line shouldn't be filled if its too short to reach
+the desired column.
+
+** You can now customize and save comments for faces and variables.
+
+In Custom buffers, a new menu entry allows you to add and edit a comment.
+Comments for variables can also be assigned by calling
+`customize-set-(value|variable)' with a prefix argument.
+
 ** XEmacs now locates the early package hierarchy at ~/.xemacs/packages.
 
 This has changed from simply ~/.xemacs.
@@ -45,11 +65,11 @@ and a delete key.  If set to nil, the key labeled "Delete" will delete
 backward.  If set to non-nil, the "Delete" key will delete forward,
 except on keyboards where a "Backspace" key is not provided.
 
-Unless our implementation has bugs, the only reason why you would want 
+Unless our implementation has bugs, the only reason why you would want
 to set `delete-key-deletes-forward' to nil is if you want to use the
 Delete key to delete backwards, despite the presence (according to
 Xlib) of a BackSpace key on the keyboard.
+
 ** Interactive searching and matching case improvements.
 
 Case sensitiveness in searching operations is normally controlled by
@@ -57,7 +77,7 @@ the variable `case-fold-search' (if non-nil, case is ignored while
 searching).  This mechanism has now been slightly improved for
 interactive searches: if the search string (or regexp) contains
 uppercase characters, the searching is forced to be case-sensitive,
-`case-fold-search'.   
+`case-fold-search'.
 
 The new behavior affects all functions performing interactive
 searches, like `zap-to-char', `list-matching-lines', `tags-search'
index e2319c6..add2dc9 100644 (file)
                      ==============================
-                     GNUEMACS \e,T@RIR\e0-Uh\e1\e0;Xh\e19\e(B (Mule) \e,T`\e0:Wi\e1M'\e05i\e19\e(B
+                     GNUEMACS ÀÒÉÒ­Õè»Øè¹ (Mule) àº×éͧµé¹
                      ==============================
 
-\e,TKARB`K\e05X\e1\e(B:       \e,T`M!JRC)\e0:Q\e1:`\e0:Wi\e1M'\e05i\e19\e09Ui\e1\e(B \e0\e,T6Y\e1!`\e0"U\e1B9\e0"Vi\e19b4B\e0BV\e14K\e0EQ\e1!\e07Uh\e1\e0Gh\e1R\e(B "\e,TEM'`\e0Eh\e19`EB\e04U\e1!\e0Gh\e1R`\e0CU\e1B9\e0CYi\e1\e(B"
-               \e,T:CC\e07Q\e14\e07Uh\e1`\e0CTh\e1A\e05i\e19\e04i\e1GB\e(B ">>" \e,T(P\e0AU\e1$S\e0JQh\e1'\e0Gh\e1R\e(B \e0\e,T5h\e1Md;(Pc\e0Ki\e17SMPdC\e(B
+ËÁÒÂà˵Ø:       àÍ¡ÊÒéºÑºàº×éͧµé¹¹Õé ¶Ù¡à¢Õ¹¢Öé¹â´ÂÂÖ´ËÅÑ¡·ÕèÇèÒ "ÅͧàÅè¹àÅ´աÇèÒàÃÕ¹ÃÙé"
+               ºÃ÷Ѵ·ÕèàÃÔèÁµé¹´éÇ ">>" ¨ÐÁÕ¤ÓÊÑè§ÇèÒ µèÍ仨ÐãËé·ÓÍÐäÃ
 
-     \e,Tb4B\e07Qh\e1Gd;\e(B \e,T!RC\e0;i\e1M9$S\e0JQh\e1'c\e0Ki\e1\e0!Q\e1:\e(B Mule \e,T7Sd\e04i\e1b4Bc\e0*i\e1\e(B \e0\e,T;Xh\e1A$M9b7CE\e(B (\e0\e,T;Xh\e1A\e07Uh\e1:9K\e09i\e1R\e0JQ\e1A\e0<Q\e1J\e(B \e,T`\e0"U\e1B9d\e0Gi\e1\e(B
-\e0\e,TGh\e1R\e(B CTRL \e,TK\e0CW\e1M\e(B CTL) \e,TK\e0CW\e1M\e(B \e0\e,T;Xh\e1A\e(B META (\e,Tb4B;!\e05T\e1\e(B \e,TKARB\e06V\e1'\e0;Xh\e1A\e(B ESC)  \e,Tc9\e07Uh\e1\e09Ui\e1\e(B \e,T`CR(Pc\e0*i\e1\e0JQ\e1-\e0EQ\e1!I\e03l\e1\e05h\e1Md;\e(B
-\e0\e,T9Ui\e1\e(B \e,Ta79!RC`\e0"U\e1B9`\e05g\e1A\e(B \e,Tf\e(B \e0\e,TGh\e1R\e(B CONTROL \e,TK\e0CW\e1M\e(B META
+     â´Â·ÑèÇä» ¡Òûé͹¤ÓÊÑè§ãËé¡Ñº Mule ·Óä´éâ´Âãªé »ØèÁ¤Í¹â·ÃÅ (»ØèÁ·Õ躹˹éÒÊÑÁ¼ÑÊ à¢Õ¹äÇé
+ÇèÒ CTRL ËÃ×Í CTL) ËÃ×Í »ØèÁ META (â´Â»¡µÔ ËÁÒ¶֧»ØèÁ ESC)  ã¹·Õè¹Õé àÃÒ¨ÐãªéÊÑ­ÅѡɳìµèÍä»
+¹Õé á·¹¡ÒÃà¢Õ¹àµçÁ æ ÇèÒ CONTROL ËÃ×Í META
 
-C-<\e0\e,T5Q\e1G\e0MQ\e1!IC\e(B>     \e,TKARB\e06V\e1'\e(B \e,Tc\e0Ki\e1!4\e0;Xh\e1A$M9b7CE\e0$i\e1R'd\e0Gi\e1\e(B \e,Ta\e0Ei\e1G!4\e0;Xh\e1A\e(B <\e0\e,T5Q\e1G\e0MQ\e1!IC\e(B>   \e0\e,T5Q\e1GM\e0Bh\e1R'`\e0*h\e19\e(B C-f
-               \e,TKARB\e06V\e1'\e(B \e,Tc\e0Ki\e1!4\e0;Xh\e1A$M9b7CE\e0$i\e1R'd\e0Gi\e1\e(B \e,Ta\e0Ei\e1G!4\e0;Xh\e1A\e(B f
+C-<µÑÇÍÑ¡ÉÃ>     ËÁÒ¶֧ ãËé¡´»ØèÁ¤Í¹â·ÃŤéÒ§äÇé áÅéÇ¡´»ØèÁ <µÑÇÍÑ¡ÉÃ>   µÑÇÍÂèÒ§àªè¹ C-f
+               ËÁÒ¶֧ ãËé¡´»ØèÁ¤Í¹â·ÃŤéÒ§äÇé áÅéÇ¡´»ØèÁ f
 <<Blank lines inserted here by startup of help-with-tutorial>>
-       >> \e,T5M9\e09Ui\e1"Mc\e0Ki\e1EM'!4\e(B C-v (View Next Screen \e0\e,T4Y\e1K\e09i\e1R\e05h\e1Md;\e(B) \e0\e,T4Y\e1\e(B  \e,T`\e0>Wh\e1M`\e0EWh\e1M9d;\e0Mh\e1R9K\e09i\e1R\e(B
-          \e0\e,T5h\e1Md;\e(B
-          \e0\e,T5h\e1M(R!\e09Ui\e1`\e0;g\e19\e05i\e19d;\e(B  \e0\e,T7X\e1!$\e0CQi\e1'\e07Uh\e1\e0Mh\e1R9K\e09i\e1RK\e09Vh\e1'\e(B \e,Tf\e(B \e,T(:"Mc\e0Ki\e17Sc97S9M'`\e04U\e1BG\e0!Q\e19\e(B \e,T`\e0>Wh\e1M`\e0EWh\e1M9d;\e(B
-          \e0\e,T4Y\e1K\e09i\e1R\e05h\e1Md;\e(B
+       >> µÍ¹¹Õé¢ÍãËéÅͧ¡´ C-v (View Next Screen ´Ù˹éÒµèÍä») ´Ù  à¾×èÍàÅ×è͹ä»Íèҹ˹éÒ
+          µèÍä»
+          µèͨҡ¹Õéà»ç¹µé¹ä»  ·Ø¡¤ÃÑ駷ÕèÍèҹ˹éÒ˹Ö觠栨º¢ÍãËé·Ó㹷ӹͧà´ÕÂǡѹ à¾×èÍàÅ×è͹ä»
+          ´Ù˹éÒµèÍä»
 
-ESC <\e0\e,T5Q\e1G\e0MQ\e1!IC\e(B>   \e,TKARB\e06V\e1'\e(B \e,Tc\e0Ki\e1!4\e0;Xh\e1A\e(B ESC \e,Ta\e0Ei\e1G;\e0Eh\e1MB\e(B \e,TK\e0EQ\e1'(R!\e09Qi\e19\e0(V\e1'!4\e0;Xh\e1A\e(B <\e0\e,T5Q\e1G\e0MQ\e1!IC\e(B> \e,T5RA\e(B
+ESC <µÑÇÍÑ¡ÉÃ>   ËÁÒ¶֧ ãËé¡´»ØèÁ ESC áÅéÇ»ÅèÍ ËÅѧ¨Ò¡¹Ñ鹨֧¡´»ØèÁ <µÑÇÍÑ¡ÉÃ> µÒÁ
 
-\e,TKARB`K\e05X\e1\e(B:       <\e0\e,T5Q\e1G\e0MQ\e1!IC\e(B> \e,Td\e0Ah\e1\e0Gh\e1R`\e0;g\e19\e05Q\e1GcK\e0-h\e1K\e0CW\e1M\e05Q\e1G`\e0Eg\e1!\e(B \e,T(Pc\e0Ki\e1$GRAKARB`K\e0AW\e1M9\e0!Q\e19`\e0AWh\e1M\e06Y\e1!c\e0*i\e1c9\e(B
-               \e,T$S\e0JQh\e1'\e(B   \e0\e,T6i\e1RKR!\e0AU\e1\e0;Xh\e1A\e(B META \e,Tc\e0Ki\e1!4\e(B \e0\e,T!g\e1(PJRARC6c\e0*i\e1!RC!4\e(B M-<\e0\e,T5Q\e1G\e0MQ\e1!IC\e(B> \e,Ta79\e(B
-               \e,T!RC\e(B ESC <\e0\e,T5Q\e1G\e0MQ\e1!IC\e(B> \e,Td\e04i\e1\e(B  (\e0\e,T$W\e1Mc\e0Ki\e1!4\e0;Xh\e1A\e(B META \e0\e,T$i\e1R'd\e0Gi\e1\e(B \e,Ta\e0Ei\e1G\e0(V\e1'!4\e(B <\e0\e,T5Q\e1G\e0MQ\e1!IC\e(B>)
+ËÁÒÂà˵Ø:       <µÑÇÍÑ¡ÉÃ> äÁèÇèÒà»ç¹µÑÇãË­èËÃ×͵ÑÇàÅç¡ ¨ÐãËé¤ÇÒÁËÁÒÂàËÁ×͹¡Ñ¹àÁ×èͶ١ãªéã¹
+               ¤ÓÊÑ觠  ¶éÒËÒ¡ÁÕ»ØèÁ META ãËé¡´ ¡ç¨ÐÊÒÁÒöãªé¡Òá´ M-<µÑÇÍÑ¡ÉÃ> á·¹
+               ¡ÒàESC <µÑÇÍÑ¡ÉÃ> ä´é  (¤×ÍãËé¡´»ØèÁ META ¤éÒ§äÇé áÅéǨ֧¡´ <µÑÇÍÑ¡ÉÃ>)
 
-\e0\e,T"i\e1MJS\e0$Q\e1-\e(B:        \e,T`GER(P`\e0ET\e1!c\e0*i\e1\e(B Emacs \e,Tc\e0Ki\e1!4\e(B C-x C-c  \e,TK\e0CW\e1Mc9!C\e03U\e1\e07Uh\e1\e0JQh\e1'\e(B Emacs \e,T(R!\e(B csh
-               \e0\e,T!g\e1JRARC6c\e0*i\e1\e(B suspend (\e,TK\e0BX\e14\e0*Qh\e1G$CRG\e(B) \e,Td\e04i\e1\e(B  \e,T!RC\e(B suspend Emacs \e,T7Sd\e04i\e1b4B\e(B
-               \e,T!4\e(B C-z
+¢éÍÊӤѭ:        àÇÅÒ¨ÐàÅÔ¡ãªé Emacs ãËé¡´ C-x C-c  ËÃ×Í㹡óշÕèÊÑ觠Emacs ¨Ò¡ csh
+               ¡çÊÒÁÒöãªé suspend (ËÂØ´ªÑèǤÃÒÇ) ä´é  ¡Òàsuspend Emacs ·Óä´éâ´Â
+               ¡´ C-z
 
-     \e0\e,T5h\e1M(R!\e09Ui\e1\e(B  \e,T"Mc\e0Ki\e1\e0;i\e1M9$S\e0JQh\e1'\e(B C-v \e0\e,T7X\e1!\e(B \e,Tf\e(B \e,T$\e0CQi\e1'\e07Uh\e1\e0Mh\e1R9(:K\e09Vh\e1'K\e09i\e1R\e(B
+     µèͨҡ¹Õé  ¢ÍãËé»é͹¤ÓÊÑ觠C-v ·Ø¡ æ ¤ÃÑ駷ÕèÍèÒ¹¨ºË¹Öè§Ë¹éÒ
 
-     \e,T@RBc9K\e09i\e1R\e07Uh\e1a\e0Ei\e1G\e0!Q\e1:K\e09i\e1R\e06Q\e14d;\e(B \e,T(P\e0AU\e1`\e09Wi\e1MKR\e0+i\e1S\e0!Q\e19M\e0BYh\e1:R':CC\e07Q\e14\e(B  \e0\e,T7Uh\e1`\e0;g\e19`\e0*h\e19\e09Ui\e1\e(B \e0\e,T!g\e1`\e0>Wh\e1Mc\e0Ki\e1JRARC6\e0CYi\e1\e(B
-\e,Td\e04i\e1\e0Gh\e1R\e(B \e,T`\e09Wi\e1MKR\e07Uh\e1aJ4'M\e0BYh\e1\e09Qi\e19\e(B \e0\e,T5h\e1M`\e09Wh\e1M'\e0!Q\e19M\e0BYh\e1\e(B
+     ÀÒÂã¹Ë¹éÒ·ÕèáÅéǡѺ˹éҶѴ仠¨ÐÁÕà¹×éÍËÒ«éӡѹÍÂÙèºÒ§ºÃ÷Ѵ  ·Õèà»ç¹àªè¹¹Õé ¡çà¾×èÍãËéÊÒÁÒöÃÙé
+ä´éÇèÒ à¹×éÍËÒ·ÕèáÊ´§ÍÂÙè¹Ñé¹ µèÍà¹×èͧ¡Ñ¹ÍÂÙè
 
 
-     \e0\e,T!h\e1M9\e0MWh\e19\e(B \e,T(S`\e0;g\e19(P\e05i\e1M'\e0CYi\e1\e0GT\e1\e08U\e1!RCbB!\e0Bi\e1RB5SaK\e09h\e1'd;AR\e(B \e,T@RBc9a\e0?i\e1A\e0"i\e1M\e0AY\e1E`\e0JU\e1B\e0!h\e1M9\e(B  \e,T5RA\e07Uh\e1:M!d;\e(B
-\e,Ta\e0Ei\e1G\e(B \e0\e,T!g\e1\e0$W\e1M\e(B C-v \e,Tc\e0*i\e1JSK\e0CQ\e1:`\e0EWh\e1M9d;\e0"i\e1R'K\e09i\e1R\e(B  \e0\e,T6i\e1R(P`\e0EWh\e1M9!\e0EQ\e1:\e07Uh\e1`\e0!h\e1R\e(B \e0\e,T!g\e1c\e0Ki\e1!4\e(B ESC v
+     ¡è͹Í×è¹ ¨Óà»ç¹¨ÐµéͧÃÙéÇÔ¸Õ¡ÒÃâ¡ÂéÒµÓá˹è§ä»ÁÒ ÀÒÂã¹á¿éÁ¢éÍÁÙÅàÊÕ¡è͹  µÒÁ·ÕèºÍ¡ä»
+áÅéÇ ¡ç¤×Í C-v ãªéÊÓËÃѺàÅ×è͹仢éҧ˹éÒ  ¶éÒ¨ÐàÅ×è͹¡ÅѺ·Õèà¡èÒ ¡çãËé¡´ ESC v
 
-      >> \e,TEM'c\e0*i\e1\e(B ESC v \e,TaEP\e(B C-v \e,T`\e0>Wh\e1M`\e0EWh\e1M9d;AR\e04Y\e1\e(B \e0\e,TJQ\e1!JM'JRA$\e0CQi\e1'\e(B
+      >> Åͧãªé ESC v áÅРC-v à¾×èÍàÅ×è͹ä»ÁÒ´Ù ÊÑ¡ÊͧÊÒÁ¤ÃÑé§
 
-\e,TJ\e0CX\e1;\e(B
+ÊÃØ»
 ===
-     \e,T$S\e0JQh\e1'\e(B \e,TJSK\e0CQ\e1:`\e0EWh\e1M9d;AR\e07U\e1EPK\e09i\e1R@RBc9a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B \e0\e,T$W\e1M\e(B
+     ¤ÓÊÑ觠ÊÓËÃѺàÅ×è͹ä»ÁÒ·ÕÅÐ˹éÒÀÒÂã¹á¿éÁ¢éÍÁÙÅ ¤×Í
 
-     C-v     \e,T`\e0EWh\e1M9d;\e0"i\e1R'K\e09i\e1R\e(B \e,TK\e09Vh\e1'K\e09i\e1R(M\e(B
-     ESC v   \e,T`\e0EWh\e1M9d;\e0"i\e1R'K\e0EQ\e1'\e(B \e,TK\e09Vh\e1'K\e09i\e1R(M\e(B
-     C-l     \e,T`\e0"U\e1B9K\e09i\e1R(McK\e0Ah\e1\e(B \e,TaEPc9"3P`\e04U\e1BG\e0!Q\e19\e(B \e0\e,T!g\e1c\e0Ki\e1`\e0EWh\e1M95SaK\e09h\e1'"M'`$M\e0Cl\e1`+M\e0Cl\e1\e(B (cursor)
-             \e,Td;M\e0BYh\e15C'!ER'(M\e(B
+     C-v     àÅ×è͹仢éҧ˹éҠ˹Öè§Ë¹éÒ¨Í
+     ESC v   àÅ×è͹仢éÒ§ËÅѧ Ë¹Öè§Ë¹éÒ¨Í
+     C-l     à¢Õ¹˹éÒ¨ÍãËÁè áÅÐã¹¢³Ðà´ÕÂǡѹ ¡çãËéàÅ×è͹µÓá˹觢ͧà¤ÍÃìà«ÍÃì (cursor)
+             ä»ÍÂÙèµÃ§¡ÅÒ§¨Í
 
-       >> \e,T"Mc\e0Ki\e1\e0JQ\e1'`!5\e04Y\e1\e0Gh\e1R\e(B \e,Tc9"3P\e09Ui\e1`$M\e0Cl\e1`+M\e0Cl\e1M\e0BYh\e1\e07Uh\e1dK9\e(B \e,T>\e0Ci\e1MA\e07Qi\e1'(S\e0"i\e1M$GRA\e07Uh\e1M\e0BYh\e1CM:\e0"i\e1R'"M'\e(B
-          \e,T`$M\e0Cl\e1`+M\e0Cl\e1\e04i\e1GB\e(B  \e,Ta\e0Ei\e1GEM'!4\e(B C-l \e0\e,T4Y\e1\e(B   \e,T5CG(JM:\e04Y\e1\e0Gh\e1R\e(B \e,T`$M\e0Cl\e1`+M\e0Cl\e1`\e0EWh\e1M9d;M\e0BYh\e1\e07Uh\e1dK9\e(B
-          \e0\e,T"i\e1M$GRA\e07Uh\e1M\e0BYh\e1CM:\e0"i\e1R'`;\e0EUh\e1B9d;M\e0Bh\e1R'dC\e(B
+       >> ¢ÍãËéÊѧࡵ´ÙÇèÒ ã¹¢³Ð¹Õéà¤ÍÃìà«ÍÃìÍÂÙè·Õèä˹ ¾ÃéÍÁ·Ñ駨ӢéͤÇÒÁ·ÕèÍÂÙèÃͺ¢éÒ§¢Í§
+          à¤ÍÃìà«ÍÃì´éÇ  áÅéÇÅͧ¡´ C-l ´Ù   µÃǨÊͺ´ÙÇèÒ à¤ÍÃìà«ÍÃìàÅ×è͹ä»ÍÂÙè·Õèä˹
+          ¢éͤÇÒÁ·ÕèÍÂÙèÃͺ¢éÒ§à»ÅÕè¹ä»ÍÂèÒ§äÃ
 
-\e0\e,TGT\e1\e08U\e1bB!\e0Bi\e1RB`$M\e0Cl\e1`+M\e0Cl\e1\e0"Qi\e19\e0>Wi\e190R9\e(B
+ÇÔ¸Õâ¡ÂéÒÂà¤ÍÃìà«ÍÃì¢Ñé¹¾×é¹°Ò¹
 =======================
 
-     \e,T5M9\e09Ui\e1\e(B \e,T`CR\e0!g\e1\e0CYi\e1\e0GT\e1\e08U\e1bB!\e0Bi\e1RBd;ARa::\e07U\e1EPK\e09i\e1Ra\e0Ei\e1G\e(B  \e0\e,T5h\e1Md;\e(B \e0\e,T!g\e1AR`\e0CU\e1B9\e0CYi\e1\e0GT\e1\e08U\e1bB!\e0Bi\e1RBd;\e07Uh\e15SaK\e09h\e1'c4\e(B
-\e,T5SaK\e09h\e1'K\e09Vh\e1'@RBc9K\e09i\e1R`\e04U\e1BG\e0!Q\e19\e(B \e0\e,T+Vh\e1'JRARC67Sd\e04i\e1KERB\e0GT\e1\e08U\e1\e(B  \e0\e,TGT\e1\e08U\e1K\e09Vh\e1'\e0!g\e1\e0$W\e1Mc\e0Ki\e1c\e0*i\e1$S\e0JQh\e1'\e(B \e,Td;:CC\e07Q\e14\e0!h\e1M9K\e09i\e1R\e(B
-(previous) \e,Td;:CC\e07Q\e14\e05h\e1Md;\e(B (next) \e,Td;\e04i\e1R9K\e09i\e1R\e(B (forward) \e,Td;\e04i\e1R9K\e0EQ\e1'\e(B (backward)  \e,T$S\e0JQh\e1'\e(B
-\e,T`K\e0Eh\e1R\e09Ui\e1\e(B \e0\e,T6Y\e1!\e05Qi\e1'd\e0Gi\e1\e07Uh\e1\e(B C-p C-n C-f \e,TaEP\e(B C-b \e,T5RAES\e04Q\e1:\e(B  \e0\e,T+Vh\e1'(P7Sc\e0Ki\e1bB!\e0Bi\e1RBd;ARd\e04i\e1\e(B \e,Tb4B`\e07U\e1B:\e0!Q\e1:\e(B
-\e,T5SaK\e09h\e1'\e0;Q\e1(\e0(X\e1\e0:Q\e19\e(B  \e,TJ\e0CX\e1;`\e0"U\e1B9`\e0;g\e19a<9@R>d\e04i\e1\e04Q\e1'\e09Ui\e1\e(B
+     µÍ¹¹Õé àÃÒ¡çÃÙéÇÔ¸Õâ¡ÂéÒÂä»ÁÒẺ·ÕÅÐ˹éÒáÅéÇ  µèÍä» ¡çÁÒàÃÕ¹ÃÙéÇÔ¸Õâ¡ÂéÒÂä»·ÕèµÓá˹è§ã´
+µÓá˹è§Ë¹Öè§ÀÒÂã¹Ë¹éÒà´ÕÂǡѹ «Öè§ÊÒÁÒö·Óä´éËÅÒÂÇÔ¸Õ  ÇÔ¸Õ˹Ö觡ç¤×ÍãËéãªé¤ÓÊÑ觠仺Ã÷Ѵ¡è͹˹éÒ
+(previous) ä»ºÃ÷ѴµèÍä» (next) ä»´éҹ˹éÒ (forward) ä»´éÒ¹ËÅѧ (backward)  ¤ÓÊÑè§
+àËÅèÒ¹Õé ¶Ù¡µÑé§äÇé·Õè C-p C-n C-f áÅРC-b µÒÁÅӴѺ  «Ö觨зÓãËéâ¡ÂéÒÂä»ÁÒä´é â´Âà·Õº¡Ñº
+µÓá˹觻Ѩ¨ØºÑ¹  ÊÃØ»à¢Õ¹à»ç¹á¼¹ÀÒ¾ä´é´Ñ§¹Õé
 
 
-                             \e,T:CC\e07Q\e14\e07Uh\e1a\e0Ei\e1G\e(B C-p
+                             ºÃ÷Ѵ·ÕèáÅéÇ C-p
                                     :
                                     :
-   \e0\e,T5Q\e1G\e0MQ\e1!IC\e04i\e1R9K\e0EQ\e1'\e(B C-b  ....  \e,T5SaK\e09h\e1'`$M\e0Cl\e1`+M\e0Cl\e1\e0;Q\e1(\e0(X\e1\e0:Q\e19\e(B  ....   \e0\e,T5Q\e1G\e0MQ\e1!IC\e04i\e1R9K\e09i\e1R\e(B C-f
+   µÑÇÍÑ¡ÉôéÒ¹ËÅѧ C-b  ....  µÓá˹è§à¤ÍÃìà«ÍÃì»Ñ¨¨ØºÑ¹  ....   µÑÇÍÑ¡Éôéҹ˹éÒ C-f
                                     :
                                     :
-                             \e,T:CC\e07Q\e14\e05h\e1Md;\e(B C-n
+                             ºÃ÷ѴµèÍä» C-n
 
 
-     \e,T$S\e0JQh\e1'`K\e0Eh\e1R\e09Ui\e1\e(B \e,T`MRAR(R!\e05Q\e1G\e0MQ\e1!IC\e05Q\e1GaC!"M'\e(B \e,T$S\e0Gh\e1R\e(B Previous Next Backward Forward
-\e0\e,T+Vh\e1'(P\e0*h\e1GBc\e0Ki\e1(Sd\e04i\e1d\e0Ah\e1BR!\e(B  \e,T$S\e0JQh\e1'`K\e0Eh\e1R\e09Ui\e1`\e0;g\e19$S\e0JQh\e1'JSK\e0CQ\e1:!RCbB!\e0Bi\e1RB\e0"Qi\e19\e0>Wi\e190R9\e(B \e0\e,T+Vh\e1'\e05i\e1M'c\e0*i\e1M\e0BYh\e1`JAM\e(B
+     ¤ÓÊÑè§àËÅèÒ¹Õé àÍÒÁÒ¨Ò¡µÑÇÍÑ¡ÉõÑÇáá¢Í§ ¤ÓÇèÒ Previous Next Backward Forward
+«Ö觨ЪèÇÂãËé¨Óä´éäÁèÂÒ¡  ¤ÓÊÑè§àËÅèÒ¹Õéà»ç¹¤ÓÊÑè§ÊÓËÃѺ¡ÒÃâ¡ÂéÒ¢Ñé¹¾×é¹°Ò¹ «Ö觵éͧãªéÍÂÙèàÊÁÍ
 
-       >> \e,TEM'!4\e(B C-n \e0\e,T4Y\e1KERB\e(B \e,Tf\e(B \e,T$\e0CQi\e1'\e(B  \e,T`\e0>Wh\e1M`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1AR\e0BQ\e1':CC\e07Q\e14\e09Ui\e1\e(B (\e,T:CC\e07Q\e14\e07Uh\e1!S\e0EQ\e1'\e0Mh\e1R9\e(B
-          \e,TM\e0BYh\e1\e09Ui\e1\e(B)
+       >> Åͧ¡´ C-n ´ÙËÅÒ 栤ÃÑ駠 à¾×èÍàÅ×è͹à¤ÍÃìà«ÍÃìÁÒÂѧºÃ÷Ѵ¹Õé (ºÃ÷Ѵ·Õè¡ÓÅѧÍèÒ¹
+          ÍÂÙè¹Õé)
 
-       >> \e,TEM'!4\e(B C-f \e0\e,T4Y\e1KERB\e(B \e,Tf\e(B \e,T$\e0CQi\e1'\e(B  \e,T`\e0>Wh\e1M`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1d;\e0BQ\e1'5C'!ER'"M':CC\e07Q\e14\e(B \e,Ta\e0Ei\e1GEM'\e(B
-          \e,T!4\e(B C-p \e,T`\e0EWh\e1M9\e0"Vi\e19\e0"i\e1R':9\e04Y\e1\e(B  \e0\e,TJQ\e1'`!5\e04Y\e1\e04i\e1GB\e0Gh\e1R\e(B \e,T5SaK\e09h\e1'"M'`$M\e0Cl\e1`+M\e0Cl\e1`;\e0EUh\e1B9d;M\e0Bh\e1R'dC\e(B
+       >> Åͧ¡´ C-f ´ÙËÅÒ 栤ÃÑ駠 à¾×èÍàÅ×è͹à¤ÍÃìà«ÍÃìä»ÂѧµÃ§¡ÅÒ§¢Í§ºÃ÷Ѵ áÅéÇÅͧ
+          ¡´ C-p àÅ×è͹¢Öé¹¢éÒ§º¹´Ù  Êѧࡵ´Ù´éÇÂÇèÒ µÓá˹觢ͧà¤ÍÃìà«ÍÃìà»ÅÕè¹ä»ÍÂèÒ§äÃ
 
-       >> \e,TEM'!4\e(B C-b \e,T"3P\e07Uh\e1M\e0BYh\e1\e07Uh\e15SaK\e09h\e1'K\e09i\e1R\e0JX\e14"M':CC\e07Q\e14\e04Y\e1\e(B  \e0\e,TJQ\e1'`!5\e04Y\e1\e04i\e1GB\e0Gh\e1R\e(B \e,T`$M\e0Cl\e1`+M\e0Cl\e1`$\e0EWh\e1M9\e(B
-          \e,Td;M\e0Bh\e1R'dC\e(B  \e,T(R!\e09Qi\e19c\e0Ki\e1!4\e(B C-b \e0\e,TMU\e1!JM'JRA$\e0CQi\e1'\e(B  \e,Ta\e0Ei\e1G!4\e(B C-f \e,T`\e0>Wh\e1M`\e0EWh\e1M9d;\e0BQ\e1'\e07i\e1RB\e0JX\e14\e(B
-          \e,T"M':CC\e07Q\e14\e04Y\e1\e(B  \e,T`$M\e0Cl\e1`+M\e0Cl\e1(P`\e0;g\e19M\e0Bh\e1R'dC\e(B \e0\e,T6i\e1R!4(9`EB\e07i\e1RB:CC\e07Q\e14d;\e(B
+       >> Åͧ¡´ C-b ¢³Ð·ÕèÍÂÙè·ÕèµÓá˹è§Ë¹éÒÊØ´¢Í§ºÃ÷Ѵ´Ù  Êѧࡵ´Ù´éÇÂÇèÒ à¤ÍÃìà«ÍÃìà¤Å×è͹
+          ä»ÍÂèÒ§äà ¨Ò¡¹Ñé¹ãËé¡´ C-b ÍÕ¡ÊͧÊÒÁ¤ÃÑ駠 áÅéÇ¡´ C-f à¾×èÍàÅ×è͹ä»Âѧ·éÒÂÊØ´
+          ¢Í§ºÃ÷Ѵ´Ù  à¤ÍÃìà«ÍÃì¨Ðà»ç¹ÍÂèÒ§äà¶éÒ¡´¨¹àÅ·éÒºÃ÷Ѵä»
 
 
-     \e,T`GER\e07Uh\e1`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1\e(B \e,T(9`EB:CC\e07Q\e14aC!\e0JX\e14K\e0CW\e1M:CC\e07Q\e14\e07i\e1RB\e0JX\e14"M'K\e09i\e1Rd;\e(B  \e,T`$M\e0Cl\e1`+M\e0Cl\e1(P\e(B
-\e,T`\e0EWh\e1M9d;\e0BQ\e1':CC\e07Q\e14\e05h\e1Md;c9\e07T\e1H7R'\e09Qi\e19\e(B \e,Tf\e(B  \e,TaEP;\e0CQ\e1:c\e0Ki\e1`$M\e0Cl\e1`+M\e0Cl\e1!\e0EQ\e1:ARM\e0BYh\e1:9K\e09i\e1R(M`JAM\e(B
+     àÇÅÒ·ÕèàÅ×è͹à¤ÍÃìà«ÍÃì ¨¹àźÃ÷ѴááÊØ´ËÃ×ͺÃ÷Ѵ·éÒÂÊØ´¢Í§Ë¹éÒä»  à¤ÍÃìà«ÍÃì¨Ð
+àÅ×è͹ä»ÂѧºÃ÷ѴµèÍä»ã¹·ÔÈ·Ò§¹Ñé¹ æ  áÅлÃѺãËéà¤ÍÃìà«ÍÃì¡ÅѺÁÒÍÂÙ躹˹éÒ¨ÍàÊÁÍ
 
-       >> \e,TEM'!4\e(B C-n \e,T`\e0>Wh\e1M`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1c\e0Ki\e1`EB:CC\e07Q\e14\e0Eh\e1R'\e0JX\e14"M'K\e09i\e1R(M\e04Y\e1\e(B  \e,Ta\e0Ei\e1G\e0JQ\e1'`!5\e04Y\e1\e0Gh\e1R\e(B
-          \e,T`\e0!T\e14MPdC\e0"Vi\e19\e(B \e,TaEP5SaK\e09h\e1'"M'`$M\e0Cl\e1`+M\e0Cl\e1`;\e0EUh\e1B9d;M\e0Bh\e1R'dC\e(B
+       >> Åͧ¡´ C-n à¾×èÍàÅ×è͹à¤ÍÃìà«ÍÃìãËéàźÃ÷ѴÅèÒ§ÊØ´¢Í§Ë¹éҨʹ٠ áÅéÇÊѧࡵ´ÙÇèÒ
+          à¡Ô´ÍÐäâÖé¹ áÅеÓá˹觢ͧà¤ÍÃìà«ÍÃìà»ÅÕè¹ä»ÍÂèÒ§äÃ
 
-     \e0\e,T6i\e1R\e0CYi\e1\e0JV\e1!\e0Gh\e1R!RC"\e0BQ\e1:d;\e07U\e1EP\e05Q\e1G\e0MQ\e1!IC\e09Qi\e19\e0MW\e14MR4\e0BW\e14BR4\e(B  \e0\e,T!g\e1JRARC6c\e0*i\e1!RC`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1d;\e07U\e1EP$S\e(B
-\e,Td\e04i\e1\e(B  \e,T!4\e(B ESC f \e,T`\e0>Wh\e1Mc\e0Ki\e1`\e0EWh\e1M9d;\e0"i\e1R'K\e09i\e1RK\e09Vh\e1'$S\e(B \e,TaEP\e(B ESC b \e,T`\e0>Wh\e1Mc\e0Ki\e1`\e0EWh\e1M9d;\e0"i\e1R'K\e0EQ\e1'K\e09Vh\e1'$S\e(B
+     ¶éÒÃÙéÊÖ¡ÇèÒ¡ÒâÂѺ价ÕÅеÑÇÍÑ¡ÉùÑé¹Í×´ÍÒ´Â×´ÂÒ´  ¡çÊÒÁÒöãªé¡ÒÃàÅ×è͹à¤ÍÃìà«ÍÃìä»·ÕÅФÓ
+ä´é  ¡´ ESC f à¾×èÍãËéàÅ×è͹仢éҧ˹éÒ˹Ö觤ӠáÅРESC b à¾×èÍãËéàÅ×è͹仢éÒ§ËÅѧ˹Ö觤Ó
 
-\e,TKARB`K\e05X\e1\e(B:        \e,TJSK\e0CQ\e1:@RIRd7B\e(B  \e0\e,TBQ\e1'd\e0Ah\e1JRARC6a\e0:h\e1'aB!5SaK\e09h\e1'"M'$Sd\e04i\e1\e06Y\e1!\e05i\e1M'\e(B  \e0\e,T(V\e1'd\e0Ah\e1\e(B
-                \e,TJRARC6c\e0*i\e1JM'$S\e0JQh\e1'\e09Ui\e1d\e04i\e1\e(B
+ËÁÒÂà˵Ø:        ÊÓËÃѺÀÒÉÒä·Â  ÂѧäÁèÊÒÁÒöáºè§á¡µÓá˹觢ͧ¤Óä´é¶Ù¡µéͧ  ¨Ö§äÁè
+                ÊÒÁÒöãªéÊͧ¤ÓÊÑ觹Õéä´é
 
-       >> \e,TEM'!4\e(B ESC f \e,TaEP\e(B ESC b \e,TEM'\e04Y\e1KERB\e(B \e,Tf\e(B \e,T$\e0CQi\e1'\e(B  \e,TaEPEM'c\e0*i\e1\e0Ch\e1GA\e0!Q\e1:\e(B C-f \e0\e,T!Q\e1:\e(B C-b \e0\e,T4Y\e1\e(B
-          \e0\e,T4i\e1GB\e(B
+       >> Åͧ¡´ ESC f áÅРESC b Åͧ´ÙËÅÒ 栤ÃÑ駠 áÅÐÅͧãªéÃèÇÁ¡Ñº C-f ¡Ñº C-b ´Ù
+          ´éÇÂ
 
-     \e,T(P\e0JQ\e1'`!5`\e0Kg\e19d\e04i\e1\e0Gh\e1R\e(B ESC f \e,TaEP\e(B ESC b \e0\e,TAU\e1\e0CY\e1;a::$\e0Ei\e1RB$\e0EV\e1'\e0!Q\e1:\e(B C-f \e,TaEP\e(B C-b  \e,Tb4B\e0Jh\e1G9cK\e0-h\e1\e(B
-ESC <\e0\e,T5Q\e1G\e0MQ\e1!IC\e(B> \e,T(Pc\e0*i\e1`\e0!Uh\e1BG\e0!Q\e1:!RC\e0(Q\e14!RC\e0"i\e1M$GRA\e(B  \e0\e,TJh\e1G9\e(B C-<\e0\e,T5Q\e1G\e0MQ\e1!IC\e(B> \e,T(Pc\e0*i\e1\e0!Q\e1:\e0JTh\e1'\e07Uh\e1`\e0;g\e19\e0>Wi\e190R9AR!\e(B
-\e,T!\e0Gh\e1R\e(B (\e,T`\e0*h\e19\e(B \e0\e,T5Q\e1G\e0MQ\e1!IC\e(B \e,TK\e0CW\e1M\e(B \e,T:CC\e07Q\e14\e(B)
+     ¨ÐÊѧࡵàËç¹ä´éÇèÒ ESC f áÅРESC b ÁÕÃٻẺ¤ÅéÒ¤ÅÖ§¡Ñº C-f áÅРC-b  â´ÂÊèǹãË­è
+ESC <µÑÇÍÑ¡ÉÃ> ¨Ðãªéà¡ÕèÂǡѺ¡ÒèѴ¡ÒâéͤÇÒÁ  Êèǹ C-<µÑÇÍÑ¡ÉÃ> ¨Ðãªé¡ÑºÊÔ觷Õèà»ç¹¾×é¹°Ò¹ÁÒ¡
+¡ÇèÒ (àªè¹ µÑÇÍÑ¡ÉàËÃ×Í ºÃ÷Ѵ)
 
-     C-a \e0\e,T!Q\e1:\e(B C-e \e,T`\e0;g\e19$S\e0JQh\e1'\e09h\e1R(P\e0CYi\e1d\e0Gi\e1\e(B  \e,T`>CRP\e0$h\e1M9\e0"i\e1R'JP4G!\e04U\e1\e07U\e1`\e04U\e1BG\e(B  C-a \e,Tc\e0*i\e1JSK\e0CQ\e1:`\e0EWh\e1M9\e(B
-\e,T`$M\e0Cl\e1`+M\e0Cl\e1d;\e07Uh\e15SaK\e09h\e1'K\e09i\e1R\e0JX\e14"M':CC\e07Q\e14\e(B  C-e \e,TJSK\e0CQ\e1:`\e0EWh\e1M9d;\e07Uh\e15SaK\e09h\e1'\e07i\e1RB\e0JX\e14"M':CC\e07Q\e14\e(B
+     C-a ¡Ñº C-e à»ç¹¤ÓÊÑ觹èÒ¨ÐÃÙéäÇé  à¾ÃÒФè͹¢éÒ§Êдǡ´Õ·Õà´ÕÂÇ  C-a ãªéÊÓËÃѺàÅ×è͹
+à¤ÍÃìà«ÍÃìä»·ÕèµÓá˹è§Ë¹éÒÊØ´¢Í§ºÃ÷Ѵ  C-e ÊÓËÃѺàÅ×è͹价ÕèµÓá˹觷éÒÂÊØ´¢Í§ºÃ÷Ѵ
 
 
-       >> \e,TEM'!4\e(B C-a \e0\e,T4Y\e1JM'$\e0CQi\e1'\e(B  \e,TK\e0EQ\e1'(R!\e09Qi\e19c\e0Ki\e1!4\e(B C-e \e0\e,T4Y\e1JM'$\e0CQi\e1'\e(B  \e,Ta\e0Ei\e1GEM'\e0JQ\e1'`!5\e04Y\e1\e0Gh\e1R\e(B \e,T!RC\e(B
-          \e,T!4$S\e0JQh\e1'\e09Ui\e1AR!!\e0Gh\e1RJM'$\e0CQi\e1'\e(B \e,T(Pd\e0Ah\e1\e0*h\e1GBc\e0Ki\e1`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1d;dK9d\e04i\e1AR!!\e0Gh\e1R\e09Qi\e19\e0MU\e1!\e(B
+       >> Åͧ¡´ C-a ´ÙÊͧ¤ÃÑ駠 ËÅѧ¨Ò¡¹Ñé¹ãËé¡´ C-e ´ÙÊͧ¤ÃÑ駠 áÅéÇÅͧÊѧࡵ´ÙÇèÒ ¡ÒÃ
+          ¡´¤ÓÊÑ觹ÕéÁÒ¡¡ÇèÒÊͧ¤ÃÑ駠¨ÐäÁèªèÇÂãËéàÅ×è͹à¤ÍÃìà«ÍÃìä»ä˹ä´éÁÒ¡¡ÇèÒ¹Ñé¹ÍÕ¡
 
-     \e0\e,TBQ\e1'\e0AU\e1\e0MU\e1!JM'$S\e0JQh\e1'\e(B \e,TJSK\e0CQ\e1:!RC`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1a::\e0'h\e1RB\e(B \e,Tf\e(B \e0\e,T$W\e1M\e(B \e,T$S\e0JQh\e1'\e(B ESC < \e,TJSK\e0CQ\e1:!RC`\e0EWh\e1M9\e(B
-\e,T`$M\e0Cl\e1`+M\e0Cl\e1d;\e07Uh\e15SaK\e09h\e1'aC!\e0JX\e14"M'a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B \e,TaEP$S\e0JQh\e1'\e(B ESC > \e,TJSK\e0CQ\e1:!RC`\e0EWh\e1M9d;5SaK\e09h\e1'\e07i\e1RB\e0JX\e14\e(B
+     ÂѧÁÕÍÕ¡Êͧ¤ÓÊÑ觠ÊÓËÃѺ¡ÒÃàÅ×è͹à¤ÍÃìà«ÍÃìẺ§èÒ 栤×Í ¤ÓÊÑ觠ESC < ÊÓËÃѺ¡ÒÃàÅ×è͹
+à¤ÍÃìà«ÍÃìä»·ÕèµÓá˹è§ááÊØ´¢Í§á¿éÁ¢éÍÁÙÅ áÅФÓÊÑ觠ESC > ÊÓËÃѺ¡ÒÃàÅ×è͹仵Óá˹觷éÒÂÊØ´
 
-     \e,T`CR`\e0CU\e1B!5SaK\e09h\e1'"M'\e0"i\e1M$GRA\e(B \e0\e,T7Uh\e1\e0AU\e1`$M\e0Cl\e1`+M\e0Cl\e1M\e0BYh\e1\e0Gh\e1R\e(B "\e0\e,T(X\e14\e(B (point)"  \e,TK\e0CW\e1M\e0>Y\e14\e0MU\e1!M\e0Bh\e1R'K\e09Vh\e1'd\e04i\e1\e(B
-\e0\e,TGh\e1R\e(B \e,T`$M\e0Cl\e1`+M\e0Cl\e1\e(B \e,T`\e0;g\e19\e0JTh\e1'\e07Uh\e1:M!c\e0Ki\e1`CR\e0CYi\e1\e0Gh\e1R\e(B \e0\e,T(X\e14\e(B \e,TM\e0BYh\e15C'dK9"M'K\e09i\e1R(M\e(B
+     àÃÒàÃÕ¡µÓá˹觢ͧ¢éͤÇÒÁ ·ÕèÁÕà¤ÍÃìà«ÍÃìÍÂÙèÇèÒ "¨Ø´ (point)"  ËÃ×;ٴÍÕ¡ÍÂèҧ˹Öè§ä´é
+ÇèÒ à¤ÍÃìà«ÍÃì à»ç¹ÊÔ觷ÕèºÍ¡ãËéàÃÒÃÙéÇèÒ ¨Ø´ ÍÂÙèµÃ§ä˹¢Í§Ë¹éÒ¨Í
 
-     \e,TJ\e0CX\e1;$S\e0JQh\e1'JSK\e0CQ\e1:!RC`$\e0EWh\e1M9d;AR\e(B \e0\e,T+Vh\e1'CGA!RC`$\e0EWh\e1M9\e07Uh\e1c9K\e09h\e1GB"M'$S\e(B \e,TK\e09h\e1GB"M':CC\e07Q\e14d\e0Gi\e1\e04i\e1GB\e(B
-\e,Td\e04i\e1\e04Q\e1'\e09Ui\e1\e(B
+     ÊÃØ»¤ÓÊÑè§ÊÓËÃѺ¡ÒÃà¤Å×è͹ä»ÁÒ «Öè§ÃÇÁ¡ÒÃà¤Å×è͹·Õèã¹Ë¹èÇ¢ͧ¤Ó Ë¹èÇ¢ͧºÃ÷ѴäÇé´éÇÂ
+ä´é´Ñ§¹Õé
 
-     C-f     \e,Td;\e0"i\e1R'K\e09i\e1RK\e09Vh\e1'\e05Q\e1G\e0MQ\e1!IC\e(B
-     C-b     \e,T!\e0EQ\e1:\e0"i\e1R'K\e0EQ\e1'K\e09Vh\e1'\e05Q\e1G\e0MQ\e1!IC\e(B
+     C-f     ä»¢éҧ˹éÒ˹Ö觵ÑÇÍÑ¡ÉÃ
+     C-b     ¡ÅѺ¢éÒ§ËÅѧ˹Ö觵ÑÇÍÑ¡ÉÃ
 
-     ESC f   \e,Td;\e0"i\e1R'K\e09i\e1RK\e09Vh\e1'$S\e(B
-     ESC b   \e,T!\e0EQ\e1:\e0"i\e1R'K\e0EQ\e1'K\e09Vh\e1'$S\e(B
+     ESC f   ä»¢éҧ˹éÒ˹Ö觤Ó
+     ESC b   ¡ÅѺ¢éÒ§ËÅѧ˹Ö觤Ó
 
-     C-n     \e,T`\e0EWh\e1M9d;:CC\e07Q\e14\e05h\e1Md;\e(B
-     C-p     \e,T`\e0EWh\e1M9d;:CC\e07Q\e14\e07Uh\e1a\e0Ei\e1G\e(B
+     C-n     àÅ×è͹仺Ã÷ѴµèÍä»
+     C-p     àÅ×è͹仺Ã÷Ѵ·ÕèáÅéÇ
 
-     ESC ]   \e,T`\e0EWh\e1M9d;5SaK\e09h\e1'\e07i\e1RB\e0JX\e14"M'\e0Bh\e1MK\e09i\e1R\e(B (paragraph)
-     ESC [   \e,T`\e0EWh\e1M9d;5SaK\e09h\e1'aC!\e0JX\e14"M'\e0Bh\e1MK\e09i\e1R\e(B
+     ESC ]   àÅ×è͹仵Óá˹觷éÒÂÊØ´¢Í§ÂèÍ˹éÒ (paragraph)
+     ESC [   àÅ×è͹仵Óá˹è§ááÊØ´¢Í§ÂèÍ˹éÒ
 
-     C-a     \e,T`\e0EWh\e1M9d;5SaK\e09h\e1'aC!\e0JX\e14"M':CC\e07Q\e14\e(B
-     C-e     \e,T`\e0EWh\e1M9d;5SaK\e09h\e1'\e07i\e1RB\e0JX\e14"M':CC\e07Q\e14\e(B
+     C-a     àÅ×è͹仵Óá˹è§ááÊØ´¢Í§ºÃ÷Ѵ
+     C-e     àÅ×è͹仵Óá˹觷éÒÂÊØ´¢Í§ºÃ÷Ѵ
 
-     ESC <   \e,T`\e0EWh\e1M9d;5SaK\e09h\e1'aC!\e0JX\e14"M'a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B
-     ESC >   \e,T`\e0EWh\e1M9d;5SaK\e09h\e1'\e07i\e1RB\e0JX\e14"M'a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B
+     ESC <   àÅ×è͹仵Óá˹è§ááÊØ´¢Í§á¿éÁ¢éÍÁÙÅ
+     ESC >   àÅ×è͹仵Óá˹觷éÒÂÊØ´¢Í§á¿éÁ¢éÍÁÙÅ
 
-       >> \e,TEM'c\e0*i\e1$S\e0JQh\e1'a\e05h\e1EP$S\e0JQh\e1'\e04Y\e1\e(B  \e,T$S\e0JQh\e1'`K\e0Eh\e1R\e09Ui\e1`\e0;g\e19$S\e0JQh\e1'\e07Uh\e1c\e0*i\e1\e0!Q\e19\e0:h\e1MB\e0JX\e14\e(B  \e,T$S\e0JQh\e1'JM'$S\e0JQh\e1'K\e0EQ\e1'\e(B
-          \e,T(P`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1\e(B \e,Td;\e0BQ\e1'\e07Uh\e1\e07Uh\e1\e0$h\e1M9\e0"i\e1R'd!E\e(B  \e,Tc\e0Ki\e1EM'c\e0*i\e1$S\e0JQh\e1'\e(B C-v \e,TaEP\e(B ESC v \e,T`\e0>Wh\e1M\e(B
-          \e,T`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1!\e0EQ\e1:AR\e07Uh\e15C'\e09Ui\e1\e(B
+       >> Åͧãªé¤ÓÊÑè§áµèÅФÓÊÑ觴٠ ¤ÓÊÑè§àËÅèÒ¹Õéà»ç¹¤ÓÊÑ觷Õèãªé¡Ñ¹ºèÍÂÊØ´  ¤ÓÊÑè§Êͧ¤ÓÊÑè§ËÅѧ
+          ¨ÐàÅ×è͹à¤ÍÃìà«ÍÃì ä»Âѧ·Õè·Õè¤è͹¢éÒ§ä¡Å  ãËéÅͧãªé¤ÓÊÑ觠C-v áÅРESC v à¾×èÍ
+          àÅ×è͹à¤ÍÃìà«ÍÃì¡ÅѺÁÒ·ÕèµÃ§¹Õé
 
-     \e,TJSK\e0CQ\e1:$S\e0JQh\e1'\e0MWh\e19\e(B \e,Tf\e(B \e,T"M'\e(B Emacs \e0\e,T!g\e1`\e0*h\e19\e0!Q\e19\e(B  \e,T$S\e0JQh\e1'`K\e0Eh\e1R\e09Ui\e1(PJRARC6`\e0>Th\e1A\e05Q\e1G`\e0EW\e1M!\e(B (argument) 
-\e,T`\e0>Wh\e1M!SK94\e(B \e,T(S9G9$\e0CQi\e1'\e(B \e,Tc9!RC;\e0/T\e1\e0:Q\e1\e05T\e1'R9d\e04i\e1\e(B   \e,T!RC!SK94(S9G9$\e0CQi\e1'\e(B \e,T7Sd\e04i\e1b4B!4\e(B C-u \e,Ta\e0Ei\e1G5RA\e(B
-\e0\e,T4i\e1GB(S9G9$\e0CQi\e1'\e07Uh\e1\e05i\e1M'!RC\e0!h\e1M9\e(B \e,Ta\e0Ei\e1G\e0(V\e1'\e0$h\e1MB!4$S\e0JQh\e1'5RA\e(B
+     ÊÓËÃѺ¤ÓÊÑè§Í×蹠栢ͧ Emacs ¡çàªè¹¡Ñ¹  ¤ÓÊÑè§àËÅèÒ¹Õé¨ÐÊÒÁÒöà¾ÔèÁµÑÇàÅ×Í¡ (argument) 
+à¾×èÍ¡Ó˹´ ¨Ó¹Ç¹¤ÃÑ駠㹡Òû¯ÔºÑµÔ§Ò¹ä´é   ¡ÒáÓ˹´¨Ó¹Ç¹¤ÃÑ駠·Óä´éâ´Â¡´ C-u áÅéǵÒÁ
+´éǨӹǹ¤ÃÑ駷Õèµéͧ¡Òáè͹ áÅéǨ֧¤èÍ¡´¤ÓÊÑ觵ÒÁ
 
-     \e0\e,T5Q\e1GM\e0Bh\e1R'`\e0*h\e19\e(B  \e,T$S\e0JQh\e1'\e(B C-u 8 C-f \e,TKARB\e06V\e1'\e(B \e,Tc\e0Ki\e1`\e0EWh\e1M9d;\e0"i\e1R'K\e09i\e1R\e(B 8 \e0\e,T5Q\e1G\e0MQ\e1!IC\e(B
+     µÑÇÍÂèÒ§àªè¹  ¤ÓÊÑ觠C-u 8 C-f ËÁÒ¶֧ ãËéàÅ×è͹仢éҧ˹éÒ 8 µÑÇÍÑ¡ÉÃ
 
-       >> \e,Tc\e0Ki\e1EM'!SK94(S9G9$\e0CQi\e1'\e07Uh\e1`KARPJAJSK\e0CQ\e1:$S\e0JQh\e1'\e(B C-n \e,TK\e0CW\e1M\e(B C-p \e,T`\e0>Wh\e1M`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1\e(B
-          \e,Tc\e0Ki\e1ARM\e0BYh\e1c!\e0Ei\e1:CC\e07Q\e14\e09Ui\e1c\e0Ki\e1AR!\e07Uh\e1\e0JX\e14`\e07h\e1R\e07Uh\e1(P7Sd\e04i\e1\e(B \e,Tc9!RC`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1$\e0CQi\e1'`\e04U\e1BG\e(B
+       >> ãËéÅͧ¡Ó˹´¨Ó¹Ç¹¤ÃÑ駷ÕèàËÁÒÐÊÁÊÓËÃѺ¤ÓÊÑ觠C-n ËÃ×Í C-p à¾×èÍàÅ×è͹à¤ÍÃìà«ÍÃì
+          ãËéÁÒÍÂÙèã¡ÅéºÃ÷Ѵ¹ÕéãËéÁÒ¡·ÕèÊØ´à·èÒ·Õè¨Ð·Óä´é ã¹¡ÒÃàÅ×è͹à¤ÍÃìà«ÍÃì¤ÃÑé§à´ÕÂÇ
 
-     \e,TJSK\e0CQ\e1:\e(B C-v \e,TaEP\e(B ESC v \e,T(Pd\e04i\e1<Ea5!\e05h\e1R'd;\e0JQ\e1!`\e0Eg\e1!\e09i\e1MB\e(B  \e,Tc9!C\e03U\e1\e09Ui\e1\e(B \e,T(P`\e0;g\e19!RC`\e0EWh\e1M9K\e09i\e1R(M\e(B
-\e0\e,T"Vi\e19E'\e(B \e,T5RA(S9G9:CC\e07Q\e14a79\e(B
+     ÊÓËÃѺ C-v áÅРESC v ¨Ðä´é¼ÅᵡµèÒ§ä»ÊÑ¡àÅ硹éÍ  ã¹¡Ã³Õ¹Õé ¨Ðà»ç¹¡ÒÃàÅ×è͹˹éÒ¨Í
+¢Öé¹Å§ µÒÁ¨Ó¹Ç¹ºÃ÷Ѵ᷹
 
-       >> \e,TEM'!4\e(B C-u 3 C-v \e0\e,T4Y\e1\e(B
+       >> Åͧ¡´ C-u 3 C-v ´Ù
 
-     \e,T`\e0EWh\e1M9!\e0EQ\e1:\e07Uh\e1`\e0!h\e1Rd\e04i\e1b4B\e(B C-u 3 ESC v
+     àÅ×è͹¡ÅѺ·Õèà¡èÒä´éâ´Â C-u 3 ESC v
 
-\e,T$S\e0JQh\e1'B!`\e0ET\e1!\e(B
+¤ÓÊÑè§Â¡àÅÔ¡
 =========
 
-     \e,T$S\e0JQh\e1'\e(B C-g \e,Tc\e0*i\e1JSK\e0CQ\e1:\e0JQh\e1'B!`\e0ET\e1!$S\e0JQh\e1'\e05h\e1R'\e(B \e,Tf\e(B \e0\e,T7Uh\e1\e05i\e1M'!RC!RC\e0;i\e1M9\e0"i\e1M\e0AY\e1E`\e0>Th\e1A`\e05T\e1A\e(B  \e0\e,T5Q\e1GM\e0Bh\e1R'`\e0*h\e19\e(B
-\e,TCPK\e0Gh\e1R'\e07Uh\e1c\e0Jh\e1\e05Q\e1G`\e0EW\e1M!\e(B (argument) \e,TM\e0BYh\e1\e(B \e,TK\e0CW\e1MCPK\e0Gh\e1R'$S\e0JQh\e1'\e07Uh\e1\e05i\e1M'!RC!4\e0;Xh\e1AAR!!\e0Gh\e1R\e(B 2 \e0\e,T;Xh\e1A\e0"Vi\e19d;\e(B  \e0\e,T6i\e1R\e(B
-\e,TKR!\e05i\e1M'!RCB!`\e0ET\e1!\e(B \e0\e,T!g\e1c\e0Ki\e1!4\e(B C-g
+     ¤ÓÊÑ觠C-g ãªéÊÓËÃѺÊÑè§Â¡àÅÔ¡¤ÓÊÑ觵èÒ§ æ ·Õèµéͧ¡ÒáÒûé͹¢éÍÁÙÅà¾ÔèÁàµÔÁ  µÑÇÍÂèÒ§àªè¹
+ÃÐËÇèÒ§·ÕèãÊèµÑÇàÅ×Í¡ (argument) ÍÂÙè ËÃ×ÍÃÐËÇèÒ§¤ÓÊÑ觷Õèµéͧ¡Òá´»ØèÁÁÒ¡¡ÇèÒ 2 »ØèÁ¢Öé¹ä»  ¶éÒ
+ËÒ¡µéͧ¡ÒáàÅÔ¡ ¡çãËé¡´ C-g
 
-       >> \e,TEM'!SK94(S9G9$\e0CQi\e1'c\e0Ki\e1`\e0;g\e19\e(B 100 \e,Tb4B!RC!4\e(B C-u 100 \e,Ta\e0Ei\e1G!4\e(B C-g \e0\e,T4Y\e1\e(B  \e,TK\e0EQ\e1'(R!\e09Qi\e19\e(B
-          \e,Tc\e0Ki\e1EM'!4\e(B C-f \e0\e,T4Y\e1\e(B \e,Ta\e0Ei\e1G\e0JQ\e1'`!5\e04Y\e1\e0Gh\e1R`$M\e0Cl\e1`+M\e0Cl\e1`\e0EWh\e1M9d;\e0!Uh\e1\e05Q\e1G\e0MQ\e1!IC\e(B  \e,TK\e0CW\e1M5M9\e07Uh\e1>ER4d;!4\e(B
-          ESC \e,Tb4Bd\e0Ah\e1\e05Qi\e1'c(\e(B  \e0\e,T!g\e1JRARC6!4\e(B C-g \e,TB!`\e0ET\e1!d\e04i\e1\e(B
+       >> Åͧ¡Ó˹´¨Ó¹Ç¹¤ÃÑé§ãËéà»ç¹ 100 â´Â¡Òá´ C-u 100 áÅéÇ¡´ C-g ´Ù  ËÅѧ¨Ò¡¹Ñé¹
+          ãËéÅͧ¡´ C-f ´Ù áÅéÇÊѧࡵ´ÙÇèÒà¤ÍÃìà«ÍÃìàÅ×è͹仡ÕèµÑÇÍÑ¡Éà ËÃ×͵͹·Õè¾ÅҴ仡´
+          ESC â´ÂäÁèµÑé§ã¨  ¡çÊÒÁÒö¡´ C-g Â¡àÅÔ¡ä´é
 
-\e0\e,T"i\e1M\e0<T\e14>ER4\e(B (Error)
+¢éͼԴ¾ÅÒ´ (Error)
 ================
 
-     \e,Tc9:R'$\e0CQi\e1'\e(B \e,TMR((P\e0AU\e1!RC\e0JQh\e1';\e0/T\e1\e0:Q\e1\e05T\e1'R9:R'M\e0Bh\e1R'\e(B \e0\e,T7Uh\e1\e(B Emacs \e,TBMA\e0CQ\e1:d\e0Ah\e1d\e04i\e1`\e0!T\e14\e0"Vi\e19\e(B  \e0\e,T5Q\e1GM\e0Bh\e1R'`\e0*h\e19\e(B
-\e,T!RC!4$S\e0JQh\e1'$M9b7CE:R'$S\e0JQh\e1'\e(B \e0\e,T7Uh\e1d\e0Ah\e1d\e04i\e1!SK94d\e0Gi\e1c9\e(B Emacs \e0\e,T!g\e1(P7Sc\e0Ki\e1\e(B Emacs \e0\e,TJh\e1'`\e0JU\e1B'`\e05W\e1M9\e(B
-\e,TaEPaJ4'<E\e07Uh\e1:CC\e07Q\e14\e0Eh\e1R'\e0JX\e14"M'(M\e(B \e,T:M!\e0Gh\e1R\e0<T\e14>ER4M\e0Bh\e1R'dC\e(B
+     ã¹ºÒ§¤ÃÑ駠ÍÒ¨¨ÐÁÕ¡ÒÃÊÑ觻¯ÔºÑµÔ§Ò¹ºÒ§ÍÂèÒ§ ·Õè Emacs ÂÍÁÃѺäÁèä´éà¡Ô´¢Öé¹  µÑÇÍÂèÒ§àªè¹
+¡Òá´¤ÓÊÑ觤͹â·Ãźҧ¤ÓÊÑ觠·ÕèäÁèä´é¡Ó˹´äÇéã¹ Emacs ¡ç¨Ð·ÓãËé Emacs Êè§àÊÕ§àµ×͹
+áÅÐáÊ´§¼Å·ÕèºÃ÷ѴÅèÒ§ÊØ´¢Í§¨Í ºÍ¡ÇèÒ¼Ô´¾ÅÒ´ÍÂèÒ§äÃ
 
-     \e,T$S\e0JQh\e1':R'$S\e0JQh\e1'\e07Uh\e1`\e0"U\e1B9d\e0Gi\e1c9`M!JRC)\e0:Q\e1:\e09Ui\e1\e(B \e,TMR(c\e0*i\e1d\e0Ah\e1d\e04i\e1\e0!Q\e1:\e(B Emacs \e,T:R'\e0CXh\e19\e(B (version) \e0\e,T+Vh\e1'(P\e(B
-\e,T7Sc\e0Ki\e1\e0AU\e1!RCaJ4'<E\e0"i\e1M\e0<T\e14>ER4\e(B (error) \e0\e,T"Vi\e19\e(B   \e,Tc9!C\e03U\e1\e09Ui\e1\e(B \e,T"Mc\e0Ki\e1!4\e0;Xh\e1AMPdC\e0!g\e1d\e04i\e1\e(B \e,T`\e0>Wh\e1M`\e0EWh\e1M9d;\e0BQ\e1'\e0Jh\e1G9\e(B
-\e0\e,T5h\e1Md;\e(B
+     ¤ÓÊÑ觺ҧ¤ÓÊÑ觷Õèà¢Õ¹äÇéã¹àÍ¡ÊÒéºÑº¹Õé ÍÒ¨ãªéäÁèä´é¡Ñº Emacs ºÒ§ÃØè¹ (version) «Ö觨Ð
+·ÓãËéÁÕ¡ÒÃáÊ´§¼Å¢éͼԴ¾ÅÒ´ (error) ¢Öé¹   ã¹¡Ã³Õ¹Õé ¢ÍãËé¡´»ØèÁÍÐäáçä´é à¾×èÍàÅ×è͹ä»ÂѧÊèǹ
+µèÍä»
 
-\e0\e,TGT\e19b4\e0Gl\e1\e(B (Window)
+ÇÔ¹â´Çì (Window)
 ==============
 
-     Emacs \e,TJRARC6`\e0;T\e14\e0GT\e19b4\e0Gl\e1d\e04i\e1>\e0Ci\e1MA\e0!Q\e19KERB\e0GT\e19b4\e0Gl\e1\e(B \e,TaEPc\e0*i\e1\e0GT\e19b4\e0Gl\e1`K\e0Eh\e1R\e09Qi\e19aJ4'<E\e0"i\e1M$GRA\e(B
-\e0\e,T5h\e1R'\e(B \e,Tf\e(B \e,T5RA\e05i\e1M'!RCd\e04i\e1\e(B  \e0\e,T!h\e1M9\e0MWh\e19\e(B \e0\e,T!g\e1$GC(P7S$GRA\e0CYi\e1\e0(Q\e1!\e0!Q\e1:$S\e0JQh\e1'\e(B \e0\e,T7Uh\e1c\e0*i\e1JSK\e0CQ\e1:!RCE:\e0GT\e19b4\e0Gl\e1\e0Jh\e1G9`\e0!T\e19\e(B
-\e,Tc9`GER\e07Uh\e1aJ4'<E\e0EQ\e1>\e08l\e1"M'$S\e0JQh\e1':R'$S\e0JQh\e1'\e(B \e,TK\e0CW\e1M\e(B Help \e,TMM!`\e0JU\e1B\e0!h\e1M9\e(B
+     Emacs ÊÒÁÒöà»Ô´ÇÔ¹â´Çìä´é¾ÃéÍÁ¡Ñ¹ËÅÒÂÇÔ¹â´Çì áÅÐãªéÇÔ¹â´ÇìàËÅèÒ¹Ñé¹áÊ´§¼Å¢éͤÇÒÁ
+µèÒ§ æ µÒÁµéͧ¡ÒÃä´é  ¡è͹Í×è¹ ¡ç¤ÇèзӤÇÒÁÃÙé¨Ñ¡¡Ñº¤ÓÊÑ觠·ÕèãªéÊÓËÃѺ¡ÒÃźÇÔ¹â´ÇìÊèǹà¡Ô¹
+ã¹àÇÅÒ·ÕèáÊ´§¼ÅÅѾ¸ì¢Í§¤ÓÊÑ觺ҧ¤ÓÊÑ觠ËÃ×Í Help ÍÍ¡àÊÕ¡è͹
 
-     C-x 1             \e,T7Sc\e0Ki\e1`\e0;g\e19\e0GT\e19b4\e0Gl\e1`\e04U\e1BG\e(B
+     C-x 1             ·ÓãËéà»ç¹ÇÔ¹â´Çìà´ÕÂÇ
 
-     \e,T$S\e0JQh\e1'\e(B C-x 1 \e,Tc\e0*i\e1JSK\e0CQ\e1:E:\e0GT\e19b4\e0Gl\e1\e0MWh\e19\e(B  \e,Ta\e0Ei\e1G"BRB\e0GT\e19b4\e0Gl\e1\e07Uh\e1\e0AU\e1`$M\e0Cl\e1`+M\e0Cl\e1M\e0BYh\e1\e(B  \e,Tc\e0Ki\e1`\e05g\e1A(M`\e0;g\e19\e(B
-\e0\e,TGT\e19b4\e0Gl\e1`\e04U\e1BG\e(B
+     ¤ÓÊÑ觠C-x 1 ãªéÊÓËÃѺźÇÔ¹â´ÇìÍ×è¹  áÅéÇ¢ÂÒÂÇÔ¹â´Çì·ÕèÁÕà¤ÍÃìà«ÍÃìÍÂÙè  ãËéàµçÁ¨Íà»ç¹
+ÇÔ¹â´Çìà´ÕÂÇ
 
-       >> \e,Tc\e0Ki\e1`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1AR\e07Uh\e1:CC\e07Q\e14\e09Ui\e1\e(B  \e,Ta\e0Ei\e1G!4\e(B C-u 0 C-l
+       >> ãËéàÅ×è͹à¤ÍÃìà«ÍÃìÁÒ·ÕèºÃ÷Ѵ¹Õé  áÅéÇ¡´ C-u 0 C-l
 
-       >> \e,TEM'!4\e(B C-h k C-f \e0\e,T4Y\e1\e(B  \e,Ta\e0Ei\e1G\e0JQ\e1'`!5\e04Y\e1\e0Gh\e1R\e0GT\e19b4\e0Gl\e1\e09Ui\e1`;\e0EUh\e1B9d;M\e0Bh\e1R'dC\e(B \e,T`\e0AWh\e1M\e0AU\e1\e0GT\e19b4\e0Gl\e1cK\e0Ah\e1\e0+Vh\e1'\e(B
-          \e,TM\e08T\e1:RB\e0GT\e1\e08U\e1c\e0*i\e1$S\e0JQh\e1'\e(B C-f \e,T;CR!/\e0"Vi\e19\e(B
+       >> Åͧ¡´ C-h k C-f ´Ù  áÅéÇÊѧࡵ´ÙÇèÒÇÔ¹â´Çì¹Õéà»ÅÕè¹ä»ÍÂèÒ§äààÁ×èÍÁÕÇÔ¹â´ÇìãËÁè«Öè§
+          Í¸ÔºÒÂÇÔ¸Õãªé¤ÓÊÑ觠C-f »ÃÒ¡¯¢Öé¹
 
-       >> \e,TEM'!4\e(B C-x 1 \e,T`\e0>Wh\e1ME:\e0GT\e19b4\e0Gl\e1\e07Uh\e1b<\e0Eh\e1\e0"Vi\e19ARcK\e0Ah\e1\e(B \e,TMM!\e(B
+       >> Åͧ¡´ C-x 1 à¾×èÍźÇÔ¹â´Çì·Õèâ¼Åè¢Öé¹ÁÒãËÁè ÍÍ¡
 
-\e,T!RCa7C!\e(B (insert) \e,TaEP\e(B \e,T!RCE:\e(B (delete)
+¡ÒÃá·Ã¡ (insert) áÅР¡ÒÃź (delete)
 ===================================
 
-     \e,T:9\e(B Emacs \e,T`CR(PJRARC6\e0>T\e1A\e0>l\e1\e05Q\e1G\e0MQ\e1!IC`\e0"i\e1Rd;d\e04i\e1`EB\e(B \e,T`\e0AWh\e1M\e05i\e1M'!RC\e0>T\e1A\e0>l\e1\e0"i\e1M$GRA\e(B  Emacs \e,T(P\e(B
-\e0\e,T6W\e1M\e0Gh\e1R\e05Q\e1GK\e09Q\e1'\e0JW\e1M\e07Uh\e1AM'`\e0Kg\e19d\e04i\e1\e07X\e1!\e05Q\e1G\e(B (\e,T`\e0*h\e19\e(B 'A' '7' '*' '\e,T!\e(B' \e,TaEP\e0MWh\e19\e(B \e,Tf\e(B) \e,T`\e0;g\e19\e0"i\e1M$GRA\e07Uh\e1\e05i\e1M'!RC(P\e(B
-\e,Ta7C!\e(B (insert) \e,T`\e0"i\e1Rd;5C'\e(B \e,Tf\e(B  \e,T`\e0AWh\e1M(P(::CC\e07Q\e14\e(B \e,Tc\e0Ki\e1!4\e(B <Return> \e,T`\e0>Wh\e1M`\e05T\e1A\e0MQ\e1!IC\e0"Vi\e19:CC\e07Q\e14cK\e0Ah\e1\e(B
-(linefeed character) \e,Ta7C!`\e0"i\e1Rd;\e(B
+     º¹ Emacs àÃÒ¨ÐÊÒÁÒö¾ÔÁ¾ìµÑÇÍÑ¡ÉÃà¢éÒä»ä´éàÅ àÁ×è͵éͧ¡ÒþÔÁ¾ì¢éͤÇÒÁ  Emacs ¨Ð
+¶×ÍÇèÒµÑÇ˹ѧÊ×Í·ÕèÁͧàËç¹ä´é·Ø¡µÑÇ (àªè¹ 'A' '7' '*' '¡' áÅÐÍ×è¹ æ) à»ç¹¢éͤÇÒÁ·Õèµéͧ¡ÒèÐ
+á·Ã¡ (insert) à¢éÒ仵ç æ  àÁ×èͨШººÃ÷Ѵ ãËé¡´ <Return> à¾×èÍàµÔÁÍÑ¡ÉâÖ鹺Ã÷ѴãËÁè
+(linefeed character) á·Ã¡à¢éÒä»
 
-     \e,Tc\e0Ki\e1!4\e(B <Delete> \e,T`\e0AWh\e1M\e05i\e1M'!RC(PE:\e05Q\e1G\e0MQ\e1!IC\e07Uh\e1`\e0>Th\e1'\e0>T\e1A\e0>l\e1`\e0"i\e1Rd;\e(B  <Delete> \e,TKARB\e06V\e1'\e0;Xh\e1A`\e0"U\e1B9\e(B
-\e,T:9\e0<T\e1GK\e09i\e1Rd\e0Gi\e1\e0Gh\e1R\e(B "Delete"  \e,TK\e0CW\e1M:R'\e07U\e1MR((P`\e0"U\e1B9d\e0Gi\e1\e(B "Rubout" \e0\e,T!g\e1d\e04i\e1\e(B   \e,Tb4B\e07Qh\e1Gd;\e(B <Delete>
-\e,Tc\e0*i\e1JSK\e0CQ\e1:E:\e05Q\e1G\e0MQ\e1!IC\e07Uh\e1M\e0BYh\e1\e0!h\e1M9K\e09i\e1R5SaK\e09h\e1'`$M\e0Cl\e1`+M\e0Cl\e1\e0;Q\e1(\e0(X\e1\e0:Q\e19\e(B
+     ãËé¡´ <Delete> àÁ×è͵éͧ¡ÒèÐźµÑÇÍÑ¡É÷Õèà¾Ô觾ÔÁ¾ìà¢éÒä»  <Delete> ËÁÒ¶֧»ØèÁà¢Õ¹
+º¹¼ÔÇ˹éÒäÇéÇèÒ "Delete"  ËÃ×ͺҧ·ÕÍÒ¨¨Ðà¢Õ¹äÇé "Rubout" ¡çä´é   â´Â·ÑèÇä» <Delete>
+ãªéÊÓËÃѺźµÑÇÍÑ¡É÷ÕèÍÂÙè¡è͹˹éÒµÓá˹è§à¤ÍÃìà«ÍÃì»Ñ¨¨ØºÑ¹
 
-       >> \e,TEM'\e0>T\e1A\e0>l\e1\e05Q\e1G\e0MQ\e1!IC`\e0"i\e1Rd;KERB\e(B \e,Tf\e(B \e0\e,T5Q\e1G\e(B  \e,Ta\e0Ei\e1Gc\e0*i\e1\e(B <Delete> \e,TE:\e05Q\e1G\e0MQ\e1!IC`K\e0Eh\e1R\e09Qi\e19\e07Ti\e1'\e(B
+       >> Åͧ¾ÔÁ¾ìµÑÇÍÑ¡ÉÃà¢éÒä»ËÅÒ 栵ÑÇ  áÅéÇãªé <Delete> ÅºµÑÇÍÑ¡ÉÃàËÅèÒ¹Ñé¹·Ôé§
 
-       >> \e,TEM'\e0>T\e1A\e0>l\e1\e0"i\e1M$GRAE'd;c\e0Ki\e1`\e0!T\e19"M:"GR\e(B (right margin)  \e,T`GER\e07Uh\e1\e0>T\e1A\e0>l\e1\e0"i\e1M$GRA`\e0"i\e1Rd;\e(B
-          \e,TBRG`\e0!T\e19$GRA!\e0Gi\e1R'"M'K\e09Vh\e1':CC\e07Q\e14\e(B  \e,T:CC\e07Q\e14\e09Qi\e19\e0!g\e1(P\e(B "\e0\e,T6Y\e1!\e05h\e1M\e(B" \e,Tc\e0Ki\e1BRG`\e0!T\e19K\e09Vh\e1'K\e09i\e1R(M\e(B
-         \e,Tb4Bc\e0Jh\e1`$\e0CWh\e1M'KARB\e(B '\' \e,Td\e0Gi\e1\e07Uh\e1"M:"GR\e0JX\e14\e(B \e,T`\e0>Wh\e1M:M!c\e0Ki\e1\e0CYi\e1\e0Gh\e1R:CC\e07Q\e14\e09Ui\e1\e0BQ\e1'\e0AU\e1\e05h\e1M\e(B  Emacs \e,T(P\e(B
-         \e,T`\e0EWh\e1M9\e(B (scroll) \e,TK\e09i\e1R(M`\e0>Wh\e1Mc\e0Ki\e1`\e0Kg\e195SaK\e09h\e1'\e07Uh\e1!S\e0EQ\e1'a\e0!i\e1d"M\e0BYh\e1d\e04i\e1M\e0Bh\e1R'\e0*Q\e14`(9\e(B  \e0\e,T6i\e1RKR!\e(B
-         \e,T"M:"GRK\e0CW\e1M"M:\e0+i\e1RB"M'\e0AU\e1`$\e0CWh\e1M'KARB\e(B '\' \e,TM\e0BYh\e1\e(B \e0\e,T!g\e1`\e0;g\e19!RC:M!c\e0Ki\e1\e0CYi\e1\e0Gh\e1R\e(B \e,T:CC\e07Q\e14\e09Qi\e19\e0BQ\e1'\e0AU\e1\e05h\e1M\e(B
-         \e,Td;c9\e07T\e1H7R'\e09Qi\e19\e(B \e,Tf\e(B
+       >> Åͧ¾ÔÁ¾ì¢éͤÇÒÁŧä»ãËéà¡Ô¹¢Íº¢ÇÒ (right margin)  àÇÅÒ·Õè¾ÔÁ¾ì¢éͤÇÒÁà¢éÒä»
+          ÂÒÇà¡Ô¹¤ÇÒÁ¡ÇéÒ§¢Í§Ë¹Ö觺Ã÷Ѵ  ºÃ÷Ѵ¹Ñ鹡ç¨Ð "¶Ù¡µèÍ" ãËéÂÒÇà¡Ô¹Ë¹Öè§Ë¹éÒ¨Í
+         â´ÂãÊèà¤Ã×èͧËÁÒ '\' äÇé·Õè¢Íº¢ÇÒÊØ´ à¾×èͺ͡ãËéÃÙéÇèÒºÃ÷Ѵ¹ÕéÂѧÁÕµèÍ  Emacs ¨Ð
+         àÅ×è͹ (scroll) Ë¹éÒ¨Íà¾×èÍãËéàËç¹µÓá˹觷Õè¡ÓÅѧá¡éä¢ÍÂÙèä´éÍÂèÒ§ªÑ´à¨¹  ¶éÒËÒ¡
+         ¢Íº¢ÇÒËÃ×͢ͺ«éÒ¢ͧÁÕà¤Ã×èͧËÁÒ '\' ÍÂÙè ¡çà»ç¹¡Òú͡ãËéÃÙéÇèÒ ºÃ÷Ѵ¹Ñé¹ÂѧÁÕµèÍ
+         ä»ã¹·ÔÈ·Ò§¹Ñé¹ æ
 
-     \e,TEM';\e0/T\e1\e0:Q\e1\e05T\e1\e04Y\e1`EB\e(B \e,T$'(P\e0*h\e1GBc\e0Ki\e1`\e0"i\e1Rc(\e0'h\e1RB!\e0Gh\e1R!RCM\e08T\e1:RB\e04i\e1GB\e05Q\e1GK\e09Q\e1'\e0JW\e1M\e(B
+     Åͧ»¯ÔºÑµÔ´ÙàÅ ¤§¨ÐªèÇÂãËéà¢éÒ㨧èÒ¡ÇèÒ¡ÒÃ͸ԺÒ´éǵÑÇ˹ѧÊ×Í
 
-       >> \e,Tc\e0Ki\e1"\e0BQ\e1:`$M\e0Cl\e1`+M\e0Cl\e1d;d\e0Gi\e1:9:CC\e07Q\e14\e0+Vh\e1'\e06Y\e1!\e05h\e1Mc\e0Ki\e1BRG`\e0!T\e19K\e09Vh\e1'K\e09i\e1R(M\e(B \e0\e,T7Uh\e1`\e0>Th\e1'\e0;i\e1M9`\e0"i\e1Rd;`\e0AWh\e1M\e(B
-          \e0\e,TJQ\e1!$\e0CYh\e1\e09Ui\e1\e(B  \e,Ta\e0Ei\e1Gc\e0*i\e1\e(B C-d \e,TE:\e0"i\e1M$GRAMM!:R'\e0Jh\e1G9\e(B \e,T(9$GRABRG"M'\e0"i\e1M$GRAM\e0BYh\e1@RBc9K\e09Vh\e1'\e(B
-         \e,T:CC\e07Q\e14\e(B  \e0\e,TJQ\e1'`!5\e04Y\e1\e0Gh\e1R`$\e0CWh\e1M'KARB\e(B '\' \e,T(PKRBd;\e(B
+       >> ãËé¢ÂѺà¤ÍÃìà«ÍÃìä»äÇ麹ºÃ÷Ѵ«Ö觶١µèÍãËéÂÒÇà¡Ô¹Ë¹Öè§Ë¹éҨ͠·Õèà¾Ô觻é͹à¢éÒä»àÁ×èÍ
+          ÊÑ¡¤ÃÙè¹Õé  áÅéÇãªé C-d Åº¢éͤÇÒÁÍÍ¡ºÒ§Êèǹ ¨¹¤ÇÒÁÂÒǢͧ¢éͤÇÒÁÍÂÙèÀÒÂã¹Ë¹Öè§
+         ºÃ÷Ѵ  Êѧࡵ´ÙÇèÒà¤Ã×èͧËÁÒ '\' ¨ÐËÒÂä»
 
-       >> \e,Tc\e0Ki\e1`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1d;d\e0Gi\e1\e07Uh\e15SaK\e09h\e1'aC!\e0JX\e14"M':CC\e07Q\e14\e(B \e,Ta\e0Ei\e1G!4\e(B <Delete> \e0\e,T4Y\e1\e(B  \e,T!RC7S\e(B
-          \e,Ta::\e09Ui\e1\e(B \e,T(P7Sc\e0Ki\e1\e0JQ\e1-\e0EQ\e1!I\e03l\e1\e0$Qh\e19CPK\e0Gh\e1R':CC\e07Q\e14\e06Y\e1!E:MM!d;\e(B  \e,T:CC\e07Q\e14\e09Qi\e19\e0!g\e1(P\e06Y\e1!`MRd;\e05h\e1M\e0!Q\e1:\e(B
-         \e,T:CC\e07Q\e14\e0!h\e1M9K\e09i\e1R\e09Qi\e19\e(B \e,TCGA\e0!Q\e19`\e0;g\e19:CC\e07Q\e14BRG:CC\e07Q\e14`\e04U\e1BG\e(B \e,TaEPMR((P\e0AU\e1\e0JQ\e1-\e0EQ\e1!I\e03l\e1\e05h\e1M:CC\e07Q\e14\e(B
-         \e,T;CR!/\e0"Vi\e19\e(B
+       >> ãËéàÅ×è͹à¤ÍÃìà«ÍÃìä»äÇé·ÕèµÓá˹è§ááÊØ´¢Í§ºÃ÷Ѵ áÅéÇ¡´ <Delete> ´Ù  ¡Ò÷Ó
+          áºº¹Õ頨зÓãËéÊÑ­Åѡɳì¤Ñè¹ÃÐËÇèÒ§ºÃ÷Ѵ¶Ù¡ÅºÍÍ¡ä»  ºÃ÷Ѵ¹Ñ鹡ç¨Ð¶Ù¡àÍÒ仵è͡Ѻ
+         ºÃ÷Ѵ¡è͹˹éÒ¹Ñé¹ ÃÇÁ¡Ñ¹à»ç¹ºÃ÷ѴÂÒǺÃ÷Ѵà´ÕÂÇ áÅÐÍÒ¨¨ÐÁÕÊÑ­ÅѡɳìµèͺÃ÷Ѵ
+         »ÃÒ¡¯¢Öé¹
 
-       >> \e,Tc\e0Ki\e1!4\e(B <Return> \e,T`\e0>Wh\e1M`\e0>Th\e1A\e(B \e0\e,T5Q\e1G\e0MQ\e1!IC\e0"Vi\e19:CC\e07Q\e14cK\e0Ah\e1\e(B \e,T!\e0EQ\e1:d;M\e0Bh\e1R'`\e04T\e1A\e(B
+       >> ãËé¡´ <Return> à¾×èÍà¾ÔèÁ µÑÇÍÑ¡ÉâÖ鹺Ã÷ѴãËÁè ¡ÅѺä»ÍÂèÒ§à´ÔÁ
 
-     \e,T$S\e0JQh\e1'\e0Jh\e1G9cK\e0-h\e1"M'\e(B Emacs \e,T(PJRARC6!SK94(S9G9$\e0CQi\e1'\e07Uh\e1\e05i\e1M'!RCc\e0Ki\e1;\e0/T\e1\e0:Q\e1\e05T\e1d\e04i\e1\e(B  \e,TCGA\e07Qi\e1'!RC\e(B
-\e,Ta7C!\e(B (insert) \e0\e,T5Q\e1G\e0MQ\e1!IC\e04i\e1GB\e(B
+     ¤ÓÊÑè§ÊèǹãË­è¢Í§ Emacs ¨ÐÊÒÁÒö¡Ó˹´¨Ó¹Ç¹¤ÃÑ駷Õèµéͧ¡ÒÃãË黯ԺѵÔä´é  ÃÇÁ·Ñ駡ÒÃ
+á·Ã¡ (insert) µÑÇÍÑ¡ÉôéÇÂ
 
 
-       >> \e,TEM'\e0;i\e1M9$S\e0JQh\e1'\e(B C-u 8 * \e0\e,T4Y\e1\e(B  \e0\e,TJQ\e1'`!5\e04Y\e1\e0Gh\e1R`\e0!T\e14MPdC\e0"Vi\e19\e(B
+       >> Åͧ»é͹¤ÓÊÑ觠C-u 8 * ´Ù  Êѧࡵ´ÙÇèÒà¡Ô´ÍÐäâÖé¹
 
-     \e0\e,T6i\e1R\e05i\e1M'!RC(P`\e0>Th\e1A:CC\e07Q\e14\e0Gh\e1R'\e(B \e,Tf\e(B (blank line) \e,TCPK\e0Gh\e1R'JM':CC\e07Q\e14\e(B  \e,Tc\e0Ki\e1`\e0EWh\e1M9d;\e07Uh\e15SaK\e09h\e1'\e(B
-\e,TaC!\e0JX\e14"M':CC\e07Q\e14\e07Uh\e1JM'\e(B  \e,Ta\e0Ei\e1G!4\e(B C-o
+     ¶éÒµéͧ¡ÒèÐà¾ÔèÁºÃ÷ѴÇèÒ§ æ (blank line) ÃÐËÇèÒ§ÊͧºÃ÷Ѵ  ãËéàÅ×è͹价ÕèµÓá˹è§
+ááÊØ´¢Í§ºÃ÷Ѵ·ÕèÊͧ  áÅéÇ¡´ C-o
 
-       >> \e,Tc\e0Ki\e1`\e0EWh\e1M9d;\e07Uh\e15SaK\e09h\e1'aC!\e0JX\e14"M':CC\e07Q\e14c4\e0!g\e1d\e04i\e1\e(B  \e,Ta\e0Ei\e1GEM'!4\e(B C-o \e0\e,T4Y\e1\e(B
+       >> ãËéàÅ×è͹价ÕèµÓá˹è§ááÊØ´¢Í§ºÃ÷Ѵ㴡çä´é  áÅéÇÅͧ¡´ C-o ´Ù
 
-     \e0\e,T6V\e1'5C'\e09Ui\e1\e(B  \e,T`CR\e0!g\e1d\e04i\e1`\e0CU\e1B9\e0GT\e1\e08U\e1\e0>Wi\e190R9JSK\e0CQ\e1:!RC\e0;i\e1M9\e0"i\e1M$GRA\e(B \e,TaEP!RCa\e0!i\e1\e07Uh\e1\e0<T\e14a\e0Ei\e1G\e(B  \e,T9M!(R!(P\e(B
-\e,TE:d\e04i\e1\e07U\e1EP\e05Q\e1G\e0MQ\e1!ICa\e0Ei\e1G\e(B  \e0\e,TBQ\e1'\e0AU\e1$S\e0JQh\e1'\e0+Vh\e1'JRARC6c\e0*i\e1E:d\e04i\e1c9`\e0;g\e19$S\e(B \e,Tf\e(B \e,TK\e0CW\e1M`\e0;g\e19:CC\e07Q\e14\e(B \e,Tf\e(B \e0\e,TMU\e1!\e04i\e1GB\e(B  \e,TJ\e0CX\e1;\e(B
-\e,T$S\e0JQh\e1'JSK\e0CQ\e1:!RCE:d\e04i\e1\e04Q\e1'\e09Ui\e1\e(B
+     ¶Ö§µÃ§¹Õé  àÃÒ¡çä´éàÃÕ¹ÇÔ¸Õ¾×é¹°Ò¹ÊÓËÃѺ¡Òûé͹¢éͤÇÒÁ áÅСÒÃá¡é·Õè¼Ô´áÅéÇ  ¹Í¡¨Ò¡¨Ð
+źä´é·ÕÅеÑÇÍÑ¡ÉÃáÅéÇ  ÂѧÁÕ¤ÓÊÑ觫Öè§ÊÒÁÒöãªéźä´éã¹à»ç¹¤Ó æ ËÃ×Íà»ç¹ºÃ÷Ѵ æ ÍÕ¡´éÇ  ÊÃØ»
+¤ÓÊÑè§ÊÓËÃѺ¡ÒÃźä´é´Ñ§¹Õé
 
-     <Delete>       \e,TE:\e05Q\e1G\e0MQ\e1!IC\e07Uh\e1M\e0BYh\e1K\e09i\e1R`$M\e0Cl\e1`+M\e0Cl\e1\e(B
-     C-d            \e,TE:\e05Q\e1G\e0MQ\e1!IC\e07Uh\e1M\e0BYh\e1\e07Uh\e1`$M\e0Cl\e1`+M\e0Cl\e1\e(B
+     <Delete>       ÅºµÑÇÍÑ¡É÷ÕèÍÂÙè˹éÒà¤ÍÃìà«ÍÃì
+     C-d            ÅºµÑÇÍÑ¡É÷ÕèÍÂÙè·Õèà¤ÍÃìà«ÍÃì
 
-     ESC <Delete>   \e,TE:$S\e07Uh\e1M\e0BYh\e1K\e09i\e1R`$M\e0Cl\e1`+M\e0Cl\e1\e(B
-     ESC d          \e,TE:$S\e05Qi\e1'a\e05h\e15SaK\e09h\e1'\e07Uh\e1`$M\e0Cl\e1`+M\e0Cl\e1M\e0BYh\e1\e(B
+     ESC <Delete>   Åº¤Ó·ÕèÍÂÙè˹éÒà¤ÍÃìà«ÍÃì
+     ESC d          Åº¤ÓµÑé§áµèµÓá˹觷Õèà¤ÍÃìà«ÍÃìÍÂÙè
 
-     C-k            \e,TE::CC\e07Q\e14\e05Qi\e1'a\e05h\e15SaK\e09h\e1'\e07Uh\e1`$M\e0Cl\e1`+M\e0Cl\e1M\e0BYh\e1\e(B
+     C-k            ÅººÃ÷ѴµÑé§áµèµÓá˹觷Õèà¤ÍÃìà«ÍÃìÍÂÙè
 
-     \e,Tc9:R'$\e0CQi\e1'\e(B \e,T`CRMR(\e05i\e1M'!RC(P`MR\e0Jh\e1G9\e07Uh\e1E:d;!\e0EQ\e1:\e0$W\e19AR\e(B   \e,Tb;Ca!CA\e(B Emacs \e,T(P(S\e0Jh\e1G9\e07Uh\e1E:\e(B
-\e,TMM!d\e0Gi\e1\e(B \e,T`GER\e07Uh\e1E:\e0"i\e1M$GRAc9K\e09h\e1GB\e07Uh\e1AR!!\e0Gh\e1RK\e09Vh\e1'\e05Q\e1G\e0MQ\e1!IC\e(B   \e,Tc\e0Ki\e1c\e0*i\e1$S\e0JQh\e1'\e(B C-y \e,T`GER\e07Uh\e1\e05i\e1M'!RC(P`MR\e(B
-\e0\e,T"i\e1M$GRA!\e0EQ\e1:\e0$W\e19\e(B  \e0\e,TJTh\e1'\e07Uh\e1$GCCP\e0GQ\e1'\e0!g\e1\e0$W\e1M\e(B C-y \e,Td\e0Ah\e1c\e0*h\e1c\e0*i\e1d\e04i\e1`\e0>U\e1B'a\e0$h\e15SaK\e09h\e1'\e07Uh\e1E:\e0"i\e1M$GRAMM!`\e07h\e1R\e09Qi\e19\e(B  \e,Ta\e05h\e1(P\e(B
-\e,Tc\e0*i\e1\e0!Q\e1:5SaK\e09h\e1'c4\e0!g\e1d\e04i\e1\e(B  C-y \e,T`\e0;g\e19$S\e0JQh\e1'JSK\e0CQ\e1:a7C!\e0"i\e1M$GRA\e07Uh\e1`\e0!g\e1:d\e0Gi\e1\e(B \e,TE'c95SaK\e09h\e1'\e07Uh\e1\e0AU\e1`$M\e0Cl\e1`+M\e0Cl\e1M\e0BYh\e1\e(B
-\e,T`CRJRARC6c\e0*i\e1$GRAJRARC6\e09Ui\e1c9!RC`$\e0EWh\e1M9\e0Bi\e1RB\e0"i\e1M$GRAd\e04i\e1\e(B
+     ã¹ºÒ§¤ÃÑ駠àÃÒÍÒ¨µéͧ¡ÒèÐàÍÒÊèǹ·Õèź仡ÅѺ¤×¹ÁÒ   â»Ãá¡ÃÁ Emacs ¨Ð¨ÓÊèǹ·Õèź
+ÍÍ¡äÇé àÇÅÒ·Õèź¢éͤÇÒÁã¹Ë¹èÇ·ÕèÁÒ¡¡ÇèÒ˹Ö觵ÑÇÍÑ¡Éà  ãËéãªé¤ÓÊÑ觠C-y àÇÅÒ·Õèµéͧ¡ÒèÐàÍÒ
+¢éͤÇÒÁ¡ÅѺ¤×¹  ÊÔ觷Õè¤ÇÃÃÐÇѧ¡ç¤×Í C-y äÁèãªèãªéä´éà¾Õ§á¤èµÓá˹觷Õèź¢éͤÇÒÁÍÍ¡à·èÒ¹Ñé¹  áµè¨Ð
+ãªé¡ÑºµÓá˹è§ã´¡çä´é  C-y à»ç¹¤ÓÊÑè§ÊÓËÃѺá·Ã¡¢éͤÇÒÁ·Õèà¡çºäÇé Å§ã¹µÓá˹觷ÕèÁÕà¤ÍÃìà«ÍÃìÍÂÙè
+àÃÒÊÒÁÒöãªé¤ÇÒÁÊÒÁÒö¹Õé㹡ÒÃà¤Å×è͹ÂéÒ¢éͤÇÒÁä´é
 
-     \e,T$S\e0JQh\e1'JSK\e0CQ\e1:!RCE:\e0AU\e1M\e0BYh\e1JM'a::\e0$W\e1M\e(B \e,T$S\e0JQh\e1'\e(B "Delete" \e0\e,T!Q\e1:\e(B \e,T$S\e0JQh\e1'\e(B "Kill"  \e,T$S\e0JQh\e1'\e(B "Kill"
-\e,T(P`\e0!g\e1:\e0Jh\e1G9E:MM!d\e0Gi\e1\e(B \e,Ta\e05h\e1$S\e0JQh\e1'\e(B "Delete" \e,T(Pd\e0Ah\e1`\e0!g\e1:\e(B  \e,Ta\e05h\e1\e06i\e1RKR!c\e0*i\e1$S\e0JQh\e1'\e09Ui\e1KERB\e(B \e,Tf\e(B \e,T$\e0CQi\e1'\e(B  \e0\e,T!g\e1(P`\e0!g\e1:\e(B
-\e0\e,TJh\e1G9\e07Uh\e1E:MM!d\e0Gi\e1c\e0Ki\e1\e(B
+     ¤ÓÊÑè§ÊÓËÃѺ¡ÒÃźÁÕÍÂÙèÊͧẺ¤×Í ¤ÓÊÑ觠"Delete" ¡Ñº ¤ÓÊÑ觠"Kill"  ¤ÓÊÑ觠"Kill"
+¨Ðà¡çºÊèǹźÍÍ¡äÇé áµè¤ÓÊÑ觠"Delete" ¨ÐäÁèà¡çº  áµè¶éÒËÒ¡ãªé¤ÓÊÑ觹ÕéËÅÒ 栤ÃÑ駠 ¡ç¨Ðà¡çº
+Êèǹ·ÕèźÍÍ¡äÇéãËé
 
-      >> \e,Tc\e0Ki\e1!4\e(B C-n \e0\e,TJQ\e1!JM'JRA$\e0CQi\e1'\e(B \e,T`\e0>Wh\e1M`\e0EWh\e1M9d;\e0BQ\e1'\e07Uh\e1\e07Uh\e1`KARPJA:9K\e09i\e1R(M\e(B \e,Ta\e0Ei\e1GEM'!4\e(B C-k \e,T`\e0>Wh\e1M\e(B
-         \e,TE::CC\e07Q\e14\e09Qi\e19MM!\e04Y\e1\e(B
+      >> ãËé¡´ C-n ÊÑ¡ÊͧÊÒÁ¤ÃÑ駠à¾×èÍàÅ×è͹ä»Âѧ·Õè·ÕèàËÁÒÐÊÁº¹Ë¹éҨ͠áÅéÇÅͧ¡´ C-k à¾×èÍ
+         ÅººÃ÷Ѵ¹Ñé¹ÍÍ¡´Ù
 
-     \e,T`\e0AWh\e1M!4\e(B C-k \e,T$\e0CQi\e1'aC!\e(B \e0\e,T"i\e1M$GRAc9:CC\e07Q\e14\e09Qi\e19(P\e06Y\e1!E:MM!\e(B  \e,TaEP`\e0AWh\e1M!4\e0MU\e1!\e(B C-k \e0\e,TMU\e1!$\e0CQi\e1'\e(B \e,T:CC\e07Q\e14\e(B
-\e0\e,T9Qi\e19`M'\e07Qi\e1':CC\e07Q\e14\e0!g\e1(P\e06Y\e1!E:MM!d;\e04i\e1GB\e(B  \e,Ta\e05h\e1\e06i\e1R!SK94(S9G9$\e0CQi\e1'c\e0Ki\e1\e0!Q\e1:$S\e0JQh\e1'\e(B C-k \e0\e,T!g\e1(PKARB\e06V\e1'\e(B \e,Tc\e0Ki\e1E:\e(B
-\e,T:CC\e07Q\e14MM!\e(B (\e0\e,T7Qi\e1'`\e09Wi\e1MKRaEP\e05Q\e1G:CC\e07Q\e14\e(B) \e,T`\e0;g\e19(S9G9:CC\e07Q\e14\e(B \e,T`\e07h\e1R\e0!Q\e1:(S9G9$\e0CQi\e1'\e07Uh\e1!SK94\e(B
+     àÁ×èÍ¡´ C-k ¤ÃÑé§áá ¢éͤÇÒÁ㹺Ã÷Ѵ¹Ñ鹨ж١źÍÍ¡  áÅÐàÁ×èÍ¡´ÍÕ¡ C-k ÍÕ¡¤ÃÑ駠ºÃ÷Ѵ
+¹Ñé¹àͧ·Ñ駺Ã÷Ѵ¡ç¨Ð¶Ù¡ÅºÍÍ¡ä»´éÇ  áµè¶éÒ¡Ó˹´¨Ó¹Ç¹¤ÃÑé§ãËé¡Ñº¤ÓÊÑ觠C-k ¡ç¨ÐËÁÒ¶֧ ãËéź
+ºÃ÷ѴÍÍ¡ (·Ñé§à¹×éÍËÒáÅеÑǺÃ÷Ѵ) à»ç¹¨Ó¹Ç¹ºÃ÷Ѵ à·èҡѺ¨Ó¹Ç¹¤ÃÑ駷Õè¡Ó˹´
 
-     \e,T:CC\e07Q\e14\e07Uh\e1`\e0>Th\e1'E:MM!d;\e(B \e,T(P\e06Y\e1!`\e0!g\e1:d\e0Gi\e1\e(B \e,TaEPJRARC69S!\e0EQ\e1:\e0$W\e19ARd\e04i\e1\e(B \e,Tb4Bc\e0*i\e1$S\e0JQh\e1'\e(B C-y
+     ºÃ÷Ѵ·Õèà¾Ôè§ÅºÍÍ¡ä» ¨Ð¶Ù¡à¡çºäÇé áÅÐÊÒÁÒö¹Ó¡ÅѺ¤×¹ÁÒä´é â´Âãªé¤ÓÊÑ觠C-y
 
-       >> \e,TEM'!4\e(B C-y \e0\e,T4Y\e1\e(B
+       >> Åͧ¡´ C-y ´Ù
 
-     \e0\e,T"i\e1M$GRA\e07Uh\e1\e06Y\e1!E:MM!\e(B \e,Tb4B!RC!4\e(B C-k \e,TKERB\e(B \e,Tf\e(B \e,T$\e0CQi\e1'\e(B  \e,T(P\e06Y\e1!`\e0!g\e1:CG:CGAd\e0Gi\e1\e(B \e,TaEPJRARC69S\e(B
-\e,T!\e0EQ\e1:AR\e07Qi\e1'KA4d\e04i\e1c9$\e0CQi\e1'`\e04U\e1BG\e(B \e,Tb4B!RC!4\e(B C-y
+     ¢éͤÇÒÁ·Õè¶Ù¡ÅºÍÍ¡ â´Â¡Òá´ C-k ËÅÒ 栤ÃÑ駠 ¨Ð¶Ù¡à¡çºÃǺÃÇÁäÇé áÅÐÊÒÁÒö¹Ó
+¡ÅѺÁÒ·Ñé§ËÁ´ä´é㹤ÃÑé§à´ÕÂÇ â´Â¡Òá´ C-y
 
-       >> \e,TEM'!4\e(B C-k \e0\e,T4Y\e1KERB\e(B \e,Tf\e(B \e,T$\e0CQi\e1'\e(B
+       >> Åͧ¡´ C-k ´ÙËÅÒ 栤ÃÑé§
 
-       >> \e,T$S\e0JQh\e1'JSK\e0CQ\e1:`\e0CU\e1B!\e0"i\e1M$GRA!\e0EQ\e1:AR\e(B \e0\e,T$W\e1M\e(B C-y   \e0\e,T!h\e1M9\e0MWh\e19c\e0Ki\e1`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1E'd;\e0"i\e1R'\e0Eh\e1R'\e(B
-          \e0\e,TJQ\e1!JM'JRA:CC\e07Q\e14\e(B  \e,Ta\e0Ei\e1GEM'!4\e(B C-y \e0\e,T4Y\e1\e(B \e0\e,T!g\e1(PJRARC6\e0$Q\e14EM!\e(B (copy) \e0\e,T"i\e1M$GRAd\e04i\e1\e(B
+       >> ¤ÓÊÑè§ÊÓËÃѺàÃÕ¡¢éͤÇÒÁ¡ÅѺÁÒ ¤×Í C-y   ¡è͹Í×è¹ãËéàÅ×è͹à¤ÍÃìà«ÍÃìŧ仢éÒ§ÅèÒ§
+          ÊÑ¡ÊͧÊÒÁºÃ÷Ѵ  áÅéÇÅͧ¡´ C-y ´Ù ¡ç¨ÐÊÒÁÒö¤Ñ´ÅÍ¡ (copy) ¢éͤÇÒÁä´é
 
-     \e0\e,T6i\e1R5M9\e09Ui\e1`\e0!g\e1:\e0"i\e1M$GRAMPdC:R'M\e0Bh\e1R'd\e0Gi\e1\e(B  \e,Ta\e0Ei\e1GE:\e0"i\e1M$GRA\e0MWh\e19`\e0>Th\e1A`\e0"i\e1Rd;\e0MU\e1!\e(B \e,T(P`\e0!T\e14MPdC\e0"Vi\e19\e(B
-\e,T<E\e0EQ\e1>\e08l\e1\e0$W\e1M\e(B C-y \e,T(P`\e0CU\e1B!\e0$W\e19d\e04i\e1a\e0$h\e1`\e0>U\e1B'\e0"i\e1M$GRA\e07Uh\e1E:MM!$\e0CQi\e1'\e0Eh\e1R\e0JX\e14`\e07h\e1R\e09Qi\e19\e(B
+     ¶éҵ͹¹Õéà¡çº¢éͤÇÒÁÍÐäúҧÍÂèÒ§äÇé  áÅéÇź¢éͤÇÒÁÍ×è¹à¾ÔèÁà¢éÒä»ÍÕ¡ ¨Ðà¡Ô´ÍÐäâÖé¹
+¼ÅÅѾ¸ì¤×Í C-y ¨ÐàÃÕ¡¤×¹ä´éá¤èà¾Õ§¢éͤÇÒÁ·ÕèźÍÍ¡¤ÃÑé§ÅèÒÊØ´à·èÒ¹Ñé¹
 
 
-       >> \e,TEM'E::CC\e07Q\e14\e04Y\e1K\e09Vh\e1':CC\e07Q\e14\e(B  \e,Ta\e0Ei\e1G`\e0EWh\e1M9`$M\e0Cl\e1`+M\e0Cl\e1d;\e07Uh\e1\e0MWh\e19\e(B  \e,Ta\e0Ei\e1GE::CC\e07Q\e14MM!\e04Y\e1\e0MU\e1!K\e09Vh\e1'\e(B
-          \e,T:CC\e07Q\e14\e(B  \e,TEM'!4\e(B C-y \e0\e,T4Y\e1\e(B \e,Ta\e0Ei\e1G\e0JQ\e1'`!5\e04Y\e1\e0Gh\e1R(Pd\e04i\e1a\e0$h\e1`\e0>U\e1B':CC\e07Q\e14\e07Uh\e1JM'\e0$W\e19`\e07h\e1R\e09Qi\e19\e(B
+       >> ÅͧźºÃ÷Ѵ´Ù˹Ö觺Ã÷Ѵ  áÅéÇàÅ×è͹à¤ÍÃìà«ÍÃìä»·ÕèÍ×è¹  áÅéÇźºÃ÷ѴÍÍ¡´ÙÍա˹Öè§
+          ºÃ÷Ѵ  Åͧ¡´ C-y ´Ù áÅéÇÊѧࡵ´ÙÇèÒ¨Ðä´éá¤èà¾Õ§ºÃ÷Ѵ·ÕèÊͧ¤×¹à·èÒ¹Ñé¹
 
-\e,T!RC\e0MQ\e19\e04Y\e1\e(B (UNDO)
+¡ÒÃÍѹ´Ù (UNDO)
 =============
 
-     \e,T`GER\e07Uh\e1a\e0!i\e1d"\e0"i\e1M$GRA:R'M\e0Bh\e1R'\e(B \e,Ta\e0Ei\e1G\e05i\e1M'!RC(P`;\e0EUh\e1B9!\e0EQ\e1:c\e0Ki\e1`\e0;g\e19M\e0Bh\e1R'`\e04T\e1A\e(B  \e0\e,T!g\e1JRARC67Sd\e04i\e1\e07X\e1!\e(B
-\e,T`\e0AWh\e1M\e04i\e1GB$S\e0JQh\e1'\e(B C-x u   \e,Tb4B;!\e05T\e1\e(B \e,T(Pc\e0*i\e1JSK\e0CQ\e1:B!`\e0ET\e1!$S\e0JQh\e1'\e(B \e0\e,T7Uh\e1\e0;i\e1M9`\e0"i\e1Rd;b4Bd\e0Ah\e1\e05Qi\e1'c(\e(B  \e,TJRARC6c\e0*i\e1\e(B
-\e,T$S\e0JQh\e1'\e09Ui\e1\e0!Uh\e1$\e0CQi\e1'\e0!g\e1d\e04i\e15RA\e05i\e1M'!RC\e(B
+     àÇÅÒ·Õèá¡é䢢éͤÇÒÁºÒ§ÍÂèÒ§ áÅéǵéͧ¡ÒèÐà»ÅÕ蹡ÅѺãËéà»ç¹ÍÂèÒ§à´ÔÁ  ¡çÊÒÁÒö·Óä´é·Ø¡
+àÁ×èÍ´éǤÓÊÑ觠C-x u   â´Â»¡µÔ ¨ÐãªéÊÓËÃѺ¡àÅÔ¡¤ÓÊÑ觠·Õè»é͹à¢éÒä»â´ÂäÁèµÑé§ã¨  ÊÒÁÒöãªé
+¤ÓÊÑ觹Õé¡Õè¤ÃÑ駡çä´éµÒÁµéͧ¡ÒÃ
 
-       >> \e,TEM'E::CC\e07Q\e14\e09Ui\e1MM!\e04Y\e1\e(B \e0\e,T4i\e1GB$S\e0JQh\e1'\e(B C-k \e,Ta\e0Ei\e1G`\e0CU\e1B!!\e0EQ\e1:\e0$W\e19AR\e04i\e1GB\e(B C-x u
+       >> ÅͧźºÃ÷Ѵ¹ÕéÍÍ¡´Ù ´éǤÓÊÑ觠C-k áÅéÇàÃÕ¡¡ÅѺ¤×¹ÁÒ´éÇ C-x u
 
-     \e,T$S\e0JQh\e1'\e(B C-_ \e0\e,T!g\e1`\e0;g\e19$S\e0JQh\e1'\e0MQ\e19\e04Y\e1\e0MU\e1!\e0MQ\e19K\e09Vh\e1'\e(B  \e,T$GRAJRARC6`K\e0AW\e1M9\e0!Q\e1:$S\e0JQh\e1'\e(B C-x u
+     ¤ÓÊÑ觠C-_ ¡çà»ç¹¤ÓÊÑè§Íѹ´ÙÍÕ¡Íѹ˹Ö觠 ¤ÇÒÁÊÒÁÒöàËÁ×͹¡Ñº¤ÓÊÑ觠C-x u
 
-     \e,TJRARC6!SK94(S9G9$\e0CQi\e1'c\e0Ki\e1$S\e0JQh\e1'\e(B C-_ \e,TaEP\e(B C-x u \e,Td\e04i\e1\e(B
+     ÊÒÁÒö¡Ó˹´¨Ó¹Ç¹¤ÃÑé§ãËé¤ÓÊÑ觠C-_ áÅРC-x u ä´é
 
 
-\e,Ta\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B (File)
+á¿éÁ¢éÍÁÙÅ (File)
 ==============
 
-     \e,T`CR(S`\e0;g\e19\e05i\e1M'`\e0!g\e1:\e0CQ\e1!IR\e(B (save) \e0\e,T"i\e1M$GRA\e07Uh\e1a\e0!i\e1d"d\e0Gi\e1c9a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B  \e0\e,T6i\e1R\e05i\e1M'!RC(Pc\e0Ki\e1\e0JTh\e1'\e07Uh\e1\e(B
-\e,Ta\e0!i\e1d"`;\e0EUh\e1B9d;M\e0Bh\e1R'6RGC\e(B  \e,Td\e0Ah\e1`\e0*h\e19\e09Qi\e19\e(B \e0\e,TJTh\e1'\e07Uh\e1a\e0!i\e1d"d;\e0!g\e1(PKRBd;\e(B \e0\e,T7Q\e19\e07U\e1\e07Uh\e1`\e0ET\e1!!RCc\e0*i\e1\e(B Emacs
+     àÃÒ¨Óà»ç¹µéͧà¡çºÃÑ¡ÉÒ (save) ¢éͤÇÒÁ·Õèá¡éä¢äÇéã¹á¿éÁ¢éÍÁÙÅ  ¶éÒµéͧ¡ÒèÐãËéÊÔ觷Õè
+á¡éä¢à»ÅÕè¹ä»ÍÂèÒ§¶ÒÇà äÁèàªè¹¹Ñé¹ ÊÔ觷Õèá¡éä¢ä»¡ç¨ÐËÒÂä» ·Ñ¹·Õ·ÕèàÅÔ¡¡ÒÃãªé Emacs
 
-     \e,Ta\e0?i\e1A\e0"i\e1M\e0AY\e1E\e07Uh\e1AM'`\e0Kg\e19M\e0BYh\e1\e(B \e0\e,T$W\e1M\e0JTh\e1'\e07Uh\e1\e0:Q\e19\e07V\e1!\e0JTh\e1'\e07Uh\e1!S\e0EQ\e1'a\e0!i\e1d"M\e0BYh\e1\e(B  \e,TK\e0CW\e1M\e0>Y\e14\e0'h\e1RB\e(B \e,Tf\e(B \e0\e,T!g\e1\e0$W\e1Ma\e0?i\e1A\e0"i\e1M\e0AY\e1E\e07Uh\e1AM'`\e0Kg\e19\e(B
-\e,TM\e0BYh\e1\e0$W\e1M\e05Q\e1Ga\e0?i\e1A\e0"i\e1M\e0AY\e1E\e07Uh\e1!S\e0EQ\e1'a\e0!i\e1d"M\e0BYh\e1\e(B
+     á¿éÁ¢éÍÁÙÅ·ÕèÁͧàËç¹ÍÂÙè ¤×ÍÊÔ觷ÕèºÑ¹·Ö¡ÊÔ觷Õè¡ÓÅѧá¡éä¢ÍÂÙè  ËÃ×;ٴ§èÒ 校ç¤×Íá¿éÁ¢éÍÁÙÅ·ÕèÁͧàËç¹
+ÍÂÙè¤×͵ÑÇá¿éÁ¢éÍÁÙÅ·Õè¡ÓÅѧá¡éä¢ÍÂÙè
 
-     \e,Ta\e05h\e1(9!\e0Gh\e1Ra\e0?i\e1A\e0"i\e1M\e0AY\e1E(P\e06Y\e1!`\e0!g\e1:\e0CQ\e1!IR\e(B (save) \e,TE'd;\e(B  \e,Ta\e0?i\e1A\e0"i\e1M\e0AY\e1E\e07Uh\e1\e06Y\e1!a\e0!i\e1d"M\e0BYh\e1\e(B \e,T(Pd\e0Ah\e1\e06Y\e1!`\e0"U\e1B9\e07Q\e1:\e(B
-\e,TE'd;M\e0Bh\e1R'`\e04g\e14"R4\e(B  \e0\e,TMQ\e19\e09Ui\e1`\e0>Wh\e1M`\e0;g\e19!RC\e0;i\e1M'\e0!Q\e19!RC`\e0"U\e1B9\e07Q\e1:a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e07Uh\e1a\e0!i\e1d"d;a::$\e0CVh\e1'\e(B \e,Tf\e(B \e,T!ER'\e(B \e,Tf\e(B
-\e,Tb4Bd\e0Ah\e1d\e04i\e1\e05Qi\e1'c(\e(B
+     áµè¨¹¡ÇèÒá¿éÁ¢éÍÁÙŨж١à¡çºÃÑ¡ÉÒ (save) Å§ä»  á¿éÁ¢éÍÁÙÅ·Õè¶Ù¡á¡éä¢ÍÂÙè ¨ÐäÁè¶Ù¡à¢Õ¹·Ñº
+ŧä»ÍÂèÒ§à´ç´¢Ò´  Íѹ¹Õéà¾×èÍà»ç¹¡Òûéͧ¡Ñ¹¡ÒÃà¢Õ¹·Ñºá¿éÁ¢éÍÁÙÅ·Õèá¡éä¢ä»áºº¤ÃÖ觠校ÅÒ§ æ
+â´ÂäÁèä´éµÑé§ã¨
 
-     \e,T9M!(R!\e09Ui\e1\e(B \e,T`\e0>Wh\e1M`\e0;g\e19!RC\e0;i\e1M'\e0!Q\e19!RC`\e0!g\e1:\e0CQ\e1!IR\e(B (save) \e0\e,TJTh\e1'\e07Uh\e1a\e0!i\e1d"\e0<T\e14d;b4Bd\e0Ah\e1\e05Qi\e1'c(\e(B  Emacs
-\e,T(P`;\e0EUh\e1B9\e0*Wh\e1Ma\e0?i\e1A\e0"i\e1M\e0AY\e1E\e05i\e19)\e0:Q\e1:`\e0!g\e1:d\e0Gi\e1c\e0Ki\e1\e(B \e0\e,T!h\e1M9!RC`\e0!g\e1:\e0CQ\e1!IR\e(B
+     ¹Í¡¨Ò¡¹Õé à¾×èÍà»ç¹¡Òûéͧ¡Ñ¹¡ÒÃà¡çºÃÑ¡ÉÒ (save) ÊÔ觷Õèá¡é䢼Դä»â´ÂäÁèµÑé§ã¨  Emacs
+¨Ðà»ÅÕ蹪×èÍá¿éÁ¢éÍÁÙŵ鹩ºÑºà¡çºäÇéãËé ¡è͹¡ÒÃà¡çºÃÑ¡ÉÒ
 
-\e,TKARB`K\e05X\e1\e(B:       Emacs \e0\e,TBQ\e1'\e0AU\e1!RC\e0;i\e1M'\e0!Q\e19\e0MX\e1\e0:Q\e1\e05T\e1`K\e05X\e1\e07Uh\e1$R4d\e0Ah\e1\e06V\e1'\e(B \e,Tb4B!RC`\e0!g\e1:\e0CQ\e1!IRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e07Uh\e1!S\e0EQ\e1'\e(B
-               \e,Ta\e0!i\e1d"M\e0BYh\e1`\e0;g\e19CPBP\e(B \e,Tf\e(B \e,Tb4Bc\e0*i\e1\e0*Wh\e1Ma\e0?i\e1A\e0"i\e1M\e0AY\e1E\e05h\e1R'\e0!Q\e19\e(B  \e0\e,T4i\e1GB\e0GT\e1\e08U\e1\e09Ui\e1\e(B \e,T(P7Sc\e0Ki\e1JRARC6E4\e(B
-               \e,T$GRA`\e0JU\e1BKRB\e07Uh\e1MR(`\e0!T\e14\e0"Vi\e19d\e04i\e1\e(B  \e,Tc\e0Ki\e1\e09i\e1MB\e07Uh\e1\e0JX\e14`\e07h\e1R\e07Uh\e1(P7Sd\e04i\e1\e(B
+ËÁÒÂà˵Ø:       Emacs ÂѧÁÕ¡Òûéͧ¡Ñ¹ÍغѵÔà˵طÕè¤Ò´äÁè¶Ö§ â´Â¡ÒÃà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅ·Õè¡ÓÅѧ
+               á¡éä¢ÍÂÙèà»ç¹ÃÐÂРæ â´Âãªéª×èÍá¿éÁ¢éÍÁÙŵèÒ§¡Ñ¹  ´éÇÂÇÔ¸Õ¹Õ頨зÓãËéÊÒÁÒöŴ
+               ¤ÇÒÁàÊÕÂËÒ·ÕèÍÒ¨à¡Ô´¢Öé¹ä´é  ãËé¹éÍ·ÕèÊØ´à·èÒ·Õè¨Ð·Óä´é
 
-     \e,T5C'\e0Jh\e1G9\e0Eh\e1R'"M'(M\e(B \e,T(P\e0AU\e1:CC\e07Q\e14bKA4\e(B (mode line) \e,Tc9\e0EQ\e1!I3P\e0"i\e1R'\e0Eh\e1R'aJ4'M\e0BYh\e1\e(B
+     µÃ§ÊèǹÅèÒ§¢Í§¨Í ¨ÐÁÕºÃ÷ѴâËÁ´ (mode line) ã¹ÅѡɳТéÒ§ÅèÒ§áÊ´§ÍÂÙè
 
 
-(\e0\e,T5Q\e1GM\e0Bh\e1R'\e(B) [--]J:--**-Mule: TUTORIAL.th    (Fundamental) ---55%--------------
+(µÑÇÍÂèÒ§) [--]J:--**-Mule: TUTORIAL.th    (Fundamental) ---55%--------------
 
 
-     \e,T)\e0:Q\e1:JS`9R"M'\e(B Tutorial \e,T"M'\e(B Emacs \e0\e,T7Uh\e1!S\e0EQ\e1'\e0Mh\e1R9M\e0BYh\e1\e09Ui\e1\e0*Wh\e1M\e(B TUTORIAL.th  \e,T`GER\e07Uh\e1\e0JQh\e1'c\e0Ki\e1KR\e(B
-\e,Ta\e0?i\e1A\e0"i\e1M\e0AY\e1EK\e0CW\e1M\e(B find-file (\e0\e,T$i\e19KRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B \e,Ta\e0Ei\e1G\e0Mh\e1R9`\e0"i\e1RARc9\e0:Q\e1?`?M\e0Cl\e1\e(B) \e0\e,T!g\e1(PaJ4'\e0*Wh\e1Ma\e0?i\e1A\e0"i\e1M\e0AY\e1Ed\e0Gi\e1\e(B
-\e,T5C'\e0Jh\e1G9\e(B TUTORIAL.th  \e0\e,T5Q\e1GM\e0Bh\e1R'`\e0*h\e19\e(B \e0\e,T6i\e1R\e0JQh\e1'c\e0Ki\e1KRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e0*Wh\e1M\e(B new-file  \e,T:CC\e07Q\e14bKA4\e0!g\e1(PaJ4'\e(B
-\e,T<E\e0Gh\e1R\e(B "Mule: new-file"
+     ©ºÑºÊÓà¹Ò¢Í§ Tutorial ¢Í§ Emacs ·Õè¡ÓÅѧÍèÒ¹ÍÂÙè¹Õéª×èÍ TUTORIAL.th  àÇÅÒ·ÕèÊÑè§ãËéËÒ
+á¿éÁ¢éÍÁÙÅËÃ×Í find-file (¤é¹ËÒá¿éÁ¢éÍÁÙÅ áÅéÇÍèÒ¹à¢éÒÁÒ㹺ѿà¿ÍÃì) ¡ç¨ÐáÊ´§ª×èÍá¿éÁ¢éÍÁÙÅäÇé
+µÃ§Êèǹ TUTORIAL.th  µÑÇÍÂèÒ§àªè¹ ¶éÒÊÑè§ãËéËÒá¿éÁ¢éÍÁÙŪ×èÍ new-file  ºÃ÷ѴâËÁ´¡ç¨ÐáÊ´§
+¼ÅÇèÒ "Mule: new-file"
 
-\e,TKARB`K\e05X\e1\e(B:       \e,T(P\e0AU\e1$SM\e08T\e1:RB`\e0>Th\e1A`\e05T\e1A`\e0!Uh\e1BG\e0!Q\e1::CC\e07Q\e14bKA4\e(B (mode line) \e,Tc95M9K\e0EQ\e1'\e(B
+ËÁÒÂà˵Ø:       ¨ÐÁÕ¤Ó͸ԺÒÂà¾ÔèÁàµÔÁà¡ÕèÂǡѺºÃ÷ѴâËÁ´ (mode line) ã¹µÍ¹ËÅѧ
 
-     \e,T$S\e0JQh\e1'c\e0Ki\e1KRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B \e,TaEP$S\e0JQh\e1'c\e0Ki\e1`\e0!g\e1:\e0CQ\e1!IRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B \e0\e,TAU\e1\e0EQ\e1!I3Pa5!\e05h\e1R'(R!$S\e0JQh\e1'\e07Uh\e1\e0<h\e1R9\e(B \e,Tf\e(B \e,TAR\e(B
-\e,T5C'\e07Uh\e1\e(B \e,T;CP!M:d;\e04i\e1GB\e(B 2 \e0\e,T5Q\e1G\e0MQ\e1!IC\e(B \e0\e,T$W\e1M\e05i\e1M'!4$S\e0JQh\e1':R'M\e0Bh\e1R'\e(B \e,T5RAK\e0EQ\e1'$S\e0JQh\e1'\e(B C-x \e0\e,T+Vh\e1'KARB\e06V\e1'$S\e0JQh\e1'\e(B
-\e,T`\e0!Uh\e1BG\e0!Q\e1:a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B
+     ¤ÓÊÑè§ãËéËÒá¿éÁ¢éÍÁÙÅ áÅФÓÊÑè§ãËéà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅ ÁÕÅѡɳÐᵡµèÒ§¨Ò¡¤ÓÊÑ觷Õè¼èÒ¹ æ ÁÒ
+µÃ§·Õè »ÃСͺ仴éÇ 2 µÑÇÍÑ¡Éà¤×͵éͧ¡´¤ÓÊÑ觺ҧÍÂèÒ§ µÒÁËÅѧ¤ÓÊÑ觠C-x «Öè§ËÁÒ¶֧¤ÓÊÑè§
+à¡ÕèÂǡѺá¿éÁ¢éÍÁÙÅ
 
-     \e,TaEP\e0MU\e1!\e0(X\e14K\e09Vh\e1'\e(B \e,Ta\e05h\e1a5!\e05h\e1R'(R!$S\e0JQh\e1'\e07Uh\e1\e0<h\e1R9AR\e0$W\e1M\e(B \e,T`GER\e0JQh\e1'c\e0Ki\e1\e0$i\e19KRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B \e,T`CR(P\e06Y\e1!\e(B Emacs
-\e,T6RA\e0*Wh\e1M"M'a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e09Qi\e19\e(B \e,Tf\e(B  \e,T`CR`\e0CU\e1B!$S\e0JQh\e1'`K\e0Eh\e1R\e09Qi\e19\e0Gh\e1R\e(B \e,T$S\e0JQh\e1';CP`@7\e07Uh\e16RA\e05Q\e1G`\e0EW\e1M!\e(B (argument)
-\e,T(R!`7M\e0Cl\e1\e0AT\e1\e09Q\e1E\e(B
+     áÅÐÍÕ¡¨Ø´Ë¹Ö觠áµèᵡµèÒ§¨Ò¡¤ÓÊÑ觷Õè¼èÒ¹ÁÒ¤×Í àÇÅÒÊÑè§ãËé¤é¹ËÒá¿éÁ¢éÍÁÙÅ àÃҨж١ Emacs
+¶ÒÁª×èͧ͢á¿éÁ¢éÍÁÙŹÑé¹ æ  àÃÒàÃÕ¡¤ÓÊÑè§àËÅèÒ¹Ñé¹ÇèÒ ¤ÓÊÑ觻ÃÐàÀ··Õè¶ÒÁµÑÇàÅ×Í¡ (argument)
+¨Ò¡à·ÍÃìÁÔ¹ÑÅ
 
-\e,TKARB`K\e05X\e1\e(B:       \e,Tc9\e07Uh\e1\e09Ui\e1\e(B \e0\e,T5Q\e1G`\e0EW\e1M!\e(B (argument) \e0\e,T$W\e1M\e0*Wh\e1Ma\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B
+ËÁÒÂà˵Ø:       ã¹·Õè¹Õé µÑÇàÅ×Í¡ (argument) ¤×ͪ×èÍá¿éÁ¢éÍÁÙÅ
 
-                    C-x C-f   \e0\e,TJQh\e1'c\e0Ki\e1KR\e(B (find) \e,Ta\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B
+                    C-x C-f   ÊÑè§ãËéËÒ (find) á¿éÁ¢éÍÁÙÅ
 
-     \e,Ta\e0Ei\e1G\e(B Emacs \e,T(P6RA\e0*Wh\e1M"M'a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B \e,Tb4B;CR!/\e0"Vi\e19\e07Uh\e1\e0Jh\e1G9\e0Eh\e1R'"M'(M\e(B  \e,T`CR`\e0CU\e1B!\e0Jh\e1G9\e07Uh\e1c\e0Ki\e1\e0;i\e1M9\e(B
-\e0\e,T*Wh\e1Ma\e0?i\e1A\e0"i\e1M\e0AY\e1E\e09Qi\e19\e0Gh\e1R\e(B \e0\e,TAT\e1\e09T\e1\e0:Q\e1?`?M\e0Cl\e1\e(B (mini buffer)  \e0\e,TAT\e1\e09T\e1\e0:Q\e1?`?M\e0Cl\e1(P\e06Y\e1!c\e0*i\e1'R9c9\e0EQ\e1!I3P\e09Ui\e1\e(B  \e0\e,TAT\e1\e09T\e1\e0:Q\e1?`?M\e0Cl\e1\e(B
-\e,T(PKA4K\e09i\e1R\e07Uh\e1aEPKRBd;\e(B \e,TK\e0EQ\e1'(R!\e07Uh\e1\e0;i\e1M9\e0*Wh\e1Ma\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B \e,Ta\e0Ei\e1G!4\e0;Xh\e1A\e(B <Return> 
+     áÅéÇ Emacs ¨Ð¶ÒÁª×èͧ͢á¿éÁ¢éÍÁÙÅ â´Â»ÃÒ¡¯¢Öé¹·ÕèÊèǹÅèÒ§¢Í§¨Í  àÃÒàÃÕ¡Êèǹ·ÕèãËé»é͹
+ª×èÍá¿éÁ¢éÍÁÙŹÑé¹ÇèÒ ÁԹԺѿà¿ÍÃì (mini buffer)  ÁԹԺѿà¿ÍÃì¨Ð¶Ù¡ãªé§Ò¹ã¹ÅѡɳйÕé  ÁԹԺѿà¿ÍÃì
+¨ÐËÁ´Ë¹éÒ·ÕèáÅÐËÒÂä» ËÅѧ¨Ò¡·Õè»é͹ª×èÍá¿éÁ¢éÍÁÙÅ áÅéÇ¡´»ØèÁ <Return> 
 
-       >> \e,TEM'!4\e(B C-x C-f \e,Ta\e0Ei\e1G5RA\e04i\e1GB\e(B C-g \e0\e,T4Y\e1\e(B  \e,T`\e0;g\e19!RC\e0JQh\e1'B!`\e0ET\e1!`\e09Wi\e1MKRc9\e0AT\e1\e09T\e1\e0:Q\e1?`?M\e0Cl\e1\e(B \e,TK\e0CW\e1M\e(B
-          \e,TB!`\e0ET\e1!$S\e0JQh\e1'\e(B C-x C-f  \e0\e,T4Q\e1'\e09Qi\e19\e(B Emacs \e,T(Pd\e0Ah\e1\e0$i\e19KRa\e0?i\e1A\e0"i\e1M\e0AY\e1Ec4\e(B \e,Tf\e(B
+       >> Åͧ¡´ C-x C-f áÅéǵÒÁ´éÇ C-g ´Ù  à»ç¹¡ÒÃÊÑè§Â¡àÅÔ¡à¹×éÍËÒã¹ÁԹԺѿà¿ÍÃì ËÃ×Í
+          Â¡àÅÔ¡¤ÓÊÑ觠C-x C-f  ´Ñ§¹Ñé¹ Emacs ¨ÐäÁè¤é¹ËÒá¿éÁ¢éÍÁÙÅã´ æ
 
-     \e,T$CRG\e09Ui\e1\e(B \e,TAREM'`\e0!g\e1:\e0CQ\e1!IRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e04Y\e1\e(B  \e,T`GER\e07Uh\e1\e05i\e1M'!RC`\e0!g\e1:\e0CQ\e1!IR\e0JTh\e1'\e07Uh\e1a\e0!i\e1d"AR(9\e06V\e1'5M9\e09Ui\e1\e(B \e0\e,T!g\e1c\e0Ki\e1c\e0*i\e1\e(B
-\e,T$S\e0JQh\e1'\e04Q\e1'\e09Ui\e1\e(B
+     ¤ÃÒǹÕé ÁÒÅͧà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅ´Ù  àÇÅÒ·Õèµéͧ¡ÒÃà¡çºÃÑ¡ÉÒÊÔ觷Õèá¡éä¢ÁÒ¨¹¶Ö§µÍ¹¹Õé ¡çãËéãªé
+¤ÓÊÑ觴ѧ¹Õé
 
-     C-x C-s   \e,T`\e0!g\e1:\e0CQ\e1!IR\e(B (save) \e,Ta\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B
+     C-x C-s   à¡çºÃÑ¡ÉÒ (save) á¿éÁ¢éÍÁÙÅ
 
-     \e,Ta\e0Ei\e1G`\e09Wi\e1MKR\e07Uh\e1M\e0BYh\e1c9\e(B Emacs \e0\e,T!g\e1(P\e06Y\e1!`\e0"U\e1B9E'd;\e07Uh\e1a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B  \e,T`GER`\e0!g\e1:\e0CQ\e1!IRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B \e,Ta\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B
-\e0\e,T5i\e19)\e0:Q\e1:(Pd\e0Ah\e1\e0JY\e1-KRBd;\e(B \e,Ta\e05h\e1(P\e06Y\e1!`\e0!g\e1:d\e0Gi\e1c9\e0*Wh\e1McK\e0Ah\e1\e(B  \e0\e,T+Vh\e1'd\e04i\e1AR(R!\e0*Wh\e1M`\e0!h\e1R\e07Uh\e1\e05h\e1M\e07i\e1RB\e04i\e1GB\e(B '~'
+     áÅéÇà¹×éÍËÒ·ÕèÍÂÙèã¹ Emacs ¡ç¨Ð¶Ù¡à¢Õ¹ŧ价Õèá¿éÁ¢éÍÁÙÅ  àÇÅÒà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅ á¿éÁ¢éÍÁÙÅ
+µé¹©ºÑº¨ÐäÁèÊÙ­ËÒÂä» áµè¨Ð¶Ù¡à¡çºäÇé㹪×èÍãËÁè  «Öè§ä´éÁÒ¨Ò¡ª×èÍà¡èÒ·ÕèµèÍ·éÒ´éÇ '~'
 
-     \e,TK\e0EQ\e1'(R!\e07Uh\e1`\e0!g\e1:\e0CQ\e1!IRa\e0?i\e1A\e0"i\e1M\e0AY\e1E`J\e0Cg\e1(a\e0Ei\e1G\e(B  Emacs \e0\e,T!g\e1(PaJ4'\e0*Wh\e1Ma\e0?i\e1A\e0"i\e1M\e0AY\e1E\e07Uh\e1`\e0!g\e1:c\e0Ki\e1\e04Y\e1\e(B
+     ËÅѧ¨Ò¡·Õèà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅàÊÃç¨áÅéÇ  Emacs ¡ç¨ÐáÊ´§ª×èÍá¿éÁ¢éÍÁÙÅ·Õèà¡çºãËé´Ù
 
-       >> \e,TEM'!4\e(B C-x C-x \e,T`\e0>Wh\e1M`\e0!g\e1:\e0CQ\e1!IRJS`9R"M'\e(B Tutorial \e0\e,T9Ui\e1\e04Y\e1\e(B  \e0\e,T!g\e1(P`\e0Kg\e19\e0Gh\e1R\e(B \e0\e,T7Uh\e1\e0Jh\e1G9\e0Eh\e1R'\e(B
-          \e,T"M'(M\e(B \e0\e,TAU\e1\e0"i\e1M$GRA\e0Gh\e1R\e(B "Wrote ...../TUTORIAL.th" \e,T;CR!/\e0"Vi\e19\e(B
+       >> Åͧ¡´ C-x C-x à¾×èÍà¡çºÃÑ¡ÉÒÊÓà¹Ò¢Í§ Tutorial ¹Õé´Ù  ¡ç¨ÐàËç¹ÇèÒ ·ÕèÊèǹÅèÒ§
+          ¢Í§¨Í ÁÕ¢éͤÇÒÁÇèÒ "Wrote ...../TUTORIAL.th" »ÃÒ¡¯¢Öé¹
 
-     \e,T`GER\e07Uh\e1(PJ\e0Ci\e1R'a\e0?i\e1A\e0"i\e1M\e0AY\e1EcK\e0Ah\e1\e(B  \e0\e,T!g\e1c\e0Ki\e17SCRG\e0!Q\e1:\e0Gh\e1R(P\e0$i\e19KR\e(B (find-file) \e,Ta\e0?i\e1A\e0"i\e1M\e0AY\e1E`\e0!h\e1R\e0+Vh\e1'\e0AU\e1\e(B
-\e,TM\e0BYh\e1\e0!h\e1M9K\e09i\e1R\e09Ui\e1a\e0Ei\e1G\e(B  \e,Ta\e0Ei\e1G\e0>T\e1A\e0>l\e1\e0"i\e1M$GRAE'd;c9a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e07Uh\e1KR`(M\e(B
+     àÇÅÒ·Õè¨ÐÊÃéÒ§á¿éÁ¢éÍÁÙÅãËÁè  ¡çãËé·ÓÃÒǡѺÇèҨФé¹ËÒ (find-file) á¿éÁ¢éÍÁÙÅà¡èÒ«Öè§ÁÕ
+ÍÂÙè¡è͹˹éÒ¹ÕéáÅéÇ  áÅéǾÔÁ¾ì¢éͤÇÒÁŧä»ã¹á¿éÁ¢éÍÁÙÅ·ÕèËÒà¨Í
 
-     \e,TaEP`GER\e07Uh\e1\e0JQh\e1'`\e0!g\e1:\e0CQ\e1!IRa\e0?i\e1A\e0"i\e1M\e0AY\e1E`\e07h\e1R\e09Qi\e19\e(B  \e0\e,T$W\e1M5M9\e07Uh\e1\e(B Emacs \e,T(P`\e0!g\e1:`\e09Wi\e1MKR\e07Uh\e1a\e0!i\e1d"AR\e07Qi\e1'KA4\e(B \e,TE'\e(B
-\e,Tc9a\e0?i\e1A\e0"i\e1M\e0AY\e1E`\e0;g\e19$\e0CQi\e1'aC!\e(B
+     áÅÐàÇÅÒ·ÕèÊÑè§à¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅà·èÒ¹Ñé¹  ¤×͵͹·Õè Emacs ¨Ðà¡çºà¹×éÍËÒ·Õèá¡éä¢ÁÒ·Ñé§ËÁ´ Å§
+ã¹á¿éÁ¢éÍÁÙÅà»ç¹¤ÃÑé§áá
 
 
-\e0\e,T:Q\e1?`?M\e0Cl\e1\e(B (Buffer)
+ºÑ¿à¿ÍÃì (Buffer)
 ===============
 
-     \e0\e,T6i\e1RKR!\e0JQh\e1'c\e0Ki\e1KRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e0MQ\e19\e07Uh\e1JM'\e(B \e0\e,T4i\e1GB$S\e0JQh\e1'\e(B C-x C-f  \e,T`\e09Wi\e1MKR"M'a\e0?i\e1A\e0"i\e1M\e0AY\e1EaC!\e(B \e0\e,T!g\e1(P\e0BQ\e1'$'\e(B
-\e0\e,T6Y\e1!`\e0!g\e1:\e0CQ\e1!IRM\e0BYh\e1c9\e(B Emacs  \e0\e,TJTh\e1'\e07Uh\e1`\e0!g\e1:\e0CQ\e1!IRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e07Uh\e1\e0Mh\e1R9`\e0"i\e1RAR\e(B \e0\e,T+Vh\e1'M\e0BYh\e1@RBc9\e(B Emacs \e,T`\e0CU\e1B!\e0Gh\e1R\e(B
-\e0\e,T:Q\e1?`?M\e0Cl\e1\e(B (Buffer)  \e,T`GER\e07Uh\e1\e0Mh\e1R9a\e0?i\e1A\e0"i\e1M\e0AY\e1EcK\e0Ah\e1`\e0"i\e1RAR\e(B Emacs \e0\e,T!g\e1(PJ\e0Ci\e1R'\e0:Q\e1?`?M\e0Cl\e1cK\e0Ah\e1\e(B \e0\e,T"Vi\e19AR@RBc9\e(B
+     ¶éÒËÒ¡ÊÑè§ãËéËÒá¿éÁ¢éÍÁÙÅÍѹ·ÕèÊͧ ´éǤÓÊÑ觠C-x C-f  à¹×éÍËҢͧá¿éÁ¢éÍÁÙÅáá ¡ç¨ÐÂѧ¤§
+¶Ù¡à¡çºÃÑ¡ÉÒÍÂÙèã¹ Emacs  ÊÔ觷Õèà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅ·ÕèÍèÒ¹à¢éÒÁÒ «Öè§ÍÂÙèÀÒÂã¹ Emacs àÃÕ¡ÇèÒ
+ºÑ¿à¿ÍÃì (Buffer)  àÇÅÒ·ÕèÍèÒ¹á¿éÁ¢éÍÁÙÅãËÁèà¢éÒÁÒ Emacs ¡ç¨ÐÊÃéÒ§ºÑ¿à¿ÍÃìãËÁè ¢Öé¹ÁÒÀÒÂã¹
 
-     \e0\e,T6i\e1R\e05i\e1M'!RC(P\e04Y\e1CRB!RC"M'\e0:Q\e1?`?M\e0Cl\e1\e(B \e0\e,T7Uh\e1\e06Y\e1!`\e0!g\e1:\e0CQ\e1!IRM\e0BYh\e1@RBc9\e(B Emacs  \e0\e,T!g\e1c\e0Ki\e1!4$S\e0JQh\e1'\e(B
+     ¶éÒµéͧ¡ÒèдÙÃÒ¡ÒâͧºÑ¿à¿ÍÃì ·Õè¶Ù¡à¡çºÃÑ¡ÉÒÍÂÙèÀÒÂã¹ Emacs  ¡çãËé¡´¤ÓÊÑè§
 
      C-x C-b
 
-       >> \e,TEM'!4\e(B C-x C-b \e0\e,T4Y\e1\e(B  \e0\e,TJQ\e1'`!5\e04Y\e1\e0Gh\e1Ra\e05h\e1EP\e0:Q\e1?`?M\e0Cl\e1\e0AU\e1\e0*Wh\e1M\e0Gh\e1RMPdC\e(B  \e,TaEP\e06Y\e1!\e05Qi\e1'\e0*Wh\e1Md\e0Gi\e1\e0Gh\e1R\e(B
-          \e,TM\e0Bh\e1R'dC\e(B \e,Tc9\e(B Emacs
+       >> Åͧ¡´ C-x C-b ´Ù  Êѧࡵ´ÙÇèÒáµèÅкѿà¿ÍÃìÁÕª×èÍÇèÒÍÐäà áÅж١µÑ駪×èÍäÇéÇèÒ
+          ÍÂèÒ§äà㹠Emacs
 
-     \e0\e,TAU\e1:R'\e0:Q\e1?`?M\e0Cl\e1\e(B \e0\e,T7Uh\e1d\e0Ah\e1\e0AU\e1\e0$Yh\e1\e0!Q\e1:a\e0?i\e1A\e0"i\e1M\e0AY\e1E(\e0CT\e1'\e(B \e,Tf\e(B  \e0\e,T5Q\e1GM\e0Bh\e1R'`\e0*h\e19\e(B \e,Td\e0Ah\e1\e0AU\e1a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e07Uh\e1\e0AU\e1\e0*Wh\e1M\e0Gh\e1R\e(B "*Buffer
-List*" \e,TM\e0BYh\e1(\e0CT\e1'\e(B \e,Tf\e(B  \e,Ta\e05h\e1`\e0;g\e19\e0:Q\e1?`?M\e0Cl\e1\e07Uh\e1J\e0Ci\e1R'\e0"Vi\e19AR`\e0>Wh\e1MaJ4'CRB!RC\e0:Q\e1?`?M\e0Cl\e1\e(B \e,Tb4B$S\e0JQh\e1'\e(B C-x C-b
+     ÁÕºÒ§ºÑ¿à¿ÍÃì ·ÕèäÁèÁÕ¤Ùè¡Ñºá¿éÁ¢éÍÁÙŨÃÔ§ æ  µÑÇÍÂèÒ§àªè¹ äÁèÁÕá¿éÁ¢éÍÁÙÅ·ÕèÁÕª×èÍÇèÒ "*Buffer
+List*" ÍÂÙè¨ÃÔ§ æ  áµèà»ç¹ºÑ¿à¿ÍÃì·ÕèÊÃéÒ§¢Öé¹ÁÒà¾×èÍáÊ´§ÃÒ¡Òúѿà¿ÍÃì â´Â¤ÓÊÑ觠C-x C-b
 
-     \e0\e,T"i\e1M$GRA\e07X\e1!\e0"i\e1M$GRA\e07Uh\e1;CR!/M\e0BYh\e1c9\e0GT\e19b4\e0Gl\e1"M'\e(B Emacs \e0\e,T9Qi\e19\e(B \e,T(PM\e0BYh\e1c9\e0:Q\e1?`?M\e0Cl\e1c4\e0:Q\e1?`?M\e0Cl\e1K\e09Vh\e1'`JAM\e(B
+     ¢éͤÇÒÁ·Ø¡¢éͤÇÒÁ·Õè»ÃÒ¡¯ÍÂÙèã¹ÇÔ¹â´Çì¢Í§ Emacs ¹Ñé¹ ¨ÐÍÂÙè㹺ѿà¿ÍÃì㴺ѿà¿ÍÃì˹Öè§àÊÁÍ
 
-       >> \e,TEM'!4\e(B C-x 1 \e,T`\e0>Wh\e1ME:CRB!RC\e0:Q\e1?`?M\e0Cl\e1MM!\e04Y\e1\e(B
+       >> Åͧ¡´ C-x 1 à¾×èÍźÃÒ¡Òúѿà¿ÍÃìÍÍ¡´Ù
 
-     \e,T!RC`\e0CU\e1B!a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e0MWh\e19\e0"Vi\e19ARa\e0!i\e1d"\e(B \e,T5M9\e07Uh\e1!S\e0EQ\e1'a\e0!i\e1d"a\e0?i\e1A\e0"i\e1M\e0AY\e1EK\e09Vh\e1'M\e0BYh\e1\e09Qi\e19\e(B  \e,T(Pd\e0Ah\e17Sc\e0Ki\e1a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B
-\e,TaC!\e06Y\e1!`\e0!g\e1:\e0CQ\e1!IR\e(B  \e0\e,TJTh\e1'\e07Uh\e1a\e0!i\e1d"d;c9a\e0?i\e1A\e0"i\e1M\e0AY\e1EaC!(P\e06Y\e1!\e0:Q\e19\e07V\e1!d\e0Gi\e1c9\e0:Q\e1?`?M\e0Cl\e1"M'a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e09Qi\e19\e(B \e,T`\e07h\e1R\e09Qi\e19\e(B
+     ¡ÒÃàÃÕ¡á¿éÁ¢éÍÁÙÅÍ×è¹¢Öé¹ÁÒá¡é䢠µÍ¹·Õè¡ÓÅѧá¡éä¢á¿éÁ¢éÍÁÙÅ˹Öè§ÍÂÙè¹Ñé¹  ¨ÐäÁè·ÓãËéá¿éÁ¢éÍÁÙÅ
+áá¶Ù¡à¡çºÃÑ¡ÉÒ  ÊÔ觷Õèá¡éä¢ä»ã¹á¿éÁ¢éÍÁÙÅáá¨Ð¶Ù¡ºÑ¹·Ö¡äÇé㹺ѿà¿ÍÃì¢Í§á¿éÁ¢éÍÁÙŹÑé¹ à·èÒ¹Ñé¹
 
-     \e,T!RCJ\e0Ci\e1R'\e0:Q\e1?`?M\e0Cl\e1cK\e0Ah\e1\e0"Vi\e19\e(B \e,TJSK\e0CQ\e1:a\e0!i\e1d"a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e0MQ\e19\e07Uh\e1JM'\e(B \e,Ta\e0Ei\e1Ga\e0!i\e1MPdC:R'M\e0Bh\e1R'c9\e0:Q\e1?`?M\e0Cl\e1\e09Qi\e19\e(B
-\e,T(Pd\e0Ah\e1\e0AU\e1<Ec4\e(B \e,Tf\e(B \e0\e,T5h\e1M\e0:Q\e1?`?M\e0Cl\e1"M'a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e0MQ\e19\e07Uh\e1K\e09Vh\e1'\e07Qi\e1'\e0JTi\e19\e(B  \e0\e,T(X\e14\e09Ui\e17Sc\e0Ki\e1JRARC6`\e0!g\e1:a\e0?i\e1A\e0"i\e1M\e0AY\e1EaC!d\e0Gi\e1`\e0>Wh\e1M\e(B
-\e,Ta\e0!i\e1d"c95M9K\e0EQ\e1'\e(B
+     ¡ÒÃÊÃéÒ§ºÑ¿à¿ÍÃìãËÁè¢Öé¹ ÊÓËÃѺá¡éä¢á¿éÁ¢éÍÁÙÅÍѹ·ÕèÊͧ áÅéÇá¡éÍÐäúҧÍÂèҧ㹺ѿà¿ÍÃì¹Ñé¹
+¨ÐäÁèÁÕ¼Åã´ æ µèͺѿà¿ÍÃì¢Í§á¿éÁ¢éÍÁÙÅÍѹ·Õè˹Ö觷Ñé§ÊÔé¹  ¨Ø´¹Õé·ÓãËéÊÒÁÒöà¡çºá¿éÁ¢éÍÁÙÅááäÇéà¾×èÍ
+á¡éä¢ã¹µÍ¹ËÅѧ
 
-     \e,Ta\e05h\e1`GER\e07Uh\e1\e05i\e1M'!RC(P`\e0!g\e1:\e0CQ\e1!IR\e(B (save) \e0\e,T:Q\e1?`?M\e0Cl\e1E'd;c9a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B \e0\e,T4i\e1GB$S\e0JQh\e1'\e(B C-x C-s \e0\e,T9Qi\e19\e(B
-\e,T(P\e05i\e1M'J\e0GT\e17\e0+l\e1d;\e0BQ\e1'\e0:Q\e1?`?M\e0Cl\e1\e07Uh\e1\e05i\e1M'!RC(P`\e0!g\e1:\e(B \e0\e,T4i\e1GB$S\e0JQh\e1'\e(B C-x C-f \e0\e,T+Vh\e1'\e0$h\e1M9\e0"i\e1R'\e0BXh\e1'BR!\e(B  \e,T`CR\e0AU\e1$S\e0JQh\e1'\e0+Vh\e1'\e(B
-\e,Tc\e0*i\e1JSK\e0CQ\e1:!RC\e09Ui\e1b4B`)>RP\e(B \e0\e,T$W\e1M\e(B
+     áµèàÇÅÒ·Õèµéͧ¡ÒèÐà¡çºÃÑ¡ÉÒ (save) ºÑ¿à¿ÍÃìŧä»ã¹á¿éÁ¢éÍÁÙÅ ´éǤÓÊÑ觠C-x C-s ¹Ñé¹
+¨ÐµéͧÊÇÔ·«ìä»ÂѧºÑ¿à¿ÍÃì·Õèµéͧ¡ÒèÐà¡çº ´éǤÓÊÑ觠C-x C-f «Ö觤è͹¢éÒ§ÂØè§ÂÒ¡  àÃÒÁÕ¤ÓÊÑ觫Öè§
+ãªéÊÓËÃѺ¡ÒùÕéâ´Â੾ÒР¤×Í
 
-     C-x s   \e,T`\e0!g\e1:\e0CQ\e1!IR\e(B (save) \e0\e,T7X\e1!\e0:Q\e1?`?M\e0Cl\e1\e07Uh\e1\e0AU\e1M\e0BYh\e1\e(B
+     C-x s   à¡çºÃÑ¡ÉÒ (save) ·Ø¡ºÑ¿à¿ÍÃì·ÕèÁÕÍÂÙè
 
-     C-x s \e,T(P`\e0!g\e1:\e0CQ\e1!IR\e07X\e1!\e0:Q\e1?`?M\e0Cl\e1\e07Uh\e1\e06Y\e1!a\e0!i\e1d"`\e09Wi\e1MKRd;\e(B \e,TE'c9a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B \e,Tb4B(P6RA\e0!h\e1M9\e0Gh\e1R(Pc\e0Ki\e1\e(B
-\e,T`\e0!g\e1:\e0:Q\e1?`?M\e0Cl\e1\e09Ui\e1dKA\e(B y \e,TK\e0CW\e1M\e(B n \e0\e,T!Q\e1:\e0:Q\e1?`?M\e0Cl\e1a\e05h\e1EP\e0:Q\e1?`?M\e0Cl\e1\e(B  \e,T$S6RA(P;CR!/c9\e0Jh\e1G9\e0Eh\e1R'"M'K\e09i\e1R(M\e(B \e0\e,T4Q\e1'\e(B
-\e0\e,T5Q\e1GM\e0Bh\e1R'\e09Ui\e1\e(B
+     C-x s ¨Ðà¡çºÃÑ¡ÉÒ·Ø¡ºÑ¿à¿ÍÃì·Õè¶Ù¡á¡éä¢à¹×éÍËÒ仠ŧã¹á¿éÁ¢éÍÁÙÅ â´Â¨Ð¶ÒÁ¡è͹ÇèÒ¨ÐãËé
+à¡çººÑ¿à¿ÍÃì¹ÕéäËÁ y ËÃ×Í n ¡ÑººÑ¿à¿ÍÃìáµèÅкѿà¿ÍÃì  ¤Ó¶ÒÁ¨Ð»ÃÒ¡¯ã¹ÊèǹÅèÒ§¢Í§Ë¹éҨ͠´Ñ§
+µÑÇÍÂèÒ§¹Õé
 
              Save file  /usr/private/yours/TUTORIAL.th? (y or n)
 
 
 
-\e,T!RC"BRB$S\e0JQh\e1'\e(B (extension)
+¡ÒâÂÒ¤ÓÊÑ觠(extension)
 =======================
 
-     \e,Tc9b;Ca!CA\e(B Editor \e0\e,T9Ui\e1\e(B \e0\e,TAU\e1(S9G9$S\e0JQh\e1'AR!!\e0Gh\e1R\e(B \e,T(S9G9$S\e0JQh\e1'\e0+Vh\e1'JRARC6!4d\e04i\e1b4B\e0;Xh\e1A$M9b7CE\e(B
-\e,TK\e0CW\e1M\e0;Xh\e1A\e(B META \e,Td\e04i\e1KA4\e(B  \e,T$S\e0JQh\e1'"BRB\e(B (eXtend) \e0\e,TAU\e1d\e0Gi\e1`\e0>Wh\e1Mc\e0Ki\e1JRARC6c\e0*i\e1$S\e0JQh\e1'`K\e0Eh\e1R\e09Ui\e1d\e04i\e1KA4\e(B \e0\e,TAU\e1M\e0BYh\e1\e(B 2
-\e,Ta::\e(B \e0\e,T4Q\e1'\e09Ui\e1\e(B
+     ã¹â»Ãá¡ÃÁ Editor ¹Õé Áըӹǹ¤ÓÊÑè§ÁÒ¡¡ÇèÒ ¨Ó¹Ç¹¤ÓÊÑ觫Öè§ÊÒÁÒö¡´ä´éâ´Â»ØèÁ¤Í¹â·ÃÅ
+ËÃ×Í»ØèÁ META ä´éËÁ´  ¤ÓÊÑ觢ÂÒ (eXtend) ÁÕäÇéà¾×èÍãËéÊÒÁÒöãªé¤ÓÊÑè§àËÅèÒ¹Õéä´éËÁ´ ÁÕÍÂÙè 2
+Ẻ ´Ñ§¹Õé
 
-     C-x     \e,T"BRB`\e0>Th\e1A\e04i\e1GB\e05Q\e1G\e0MQ\e1!IC\e(B \e,TJSK\e0CQ\e1:!4\e05Q\e1G\e0MQ\e1!IC5RA`\e0"i\e1Rd;\e(B 1 \e0\e,T5Q\e1G\e(B
-     ESC x   \e,T"BRB`\e0>Th\e1A\e04i\e1GB\e0*Wh\e1M$S\e0JQh\e1'\e(B \e,TJSK\e0CQ\e1:!4\e0*Wh\e1M$S\e0JQh\e1'5RA`\e0"i\e1Rd;\e07Qi\e1'KA4\e(B
+     C-x     ¢ÂÒÂà¾ÔèÁ´éǵÑÇÍÑ¡ÉàÊÓËÃѺ¡´µÑÇÍÑ¡ÉõÒÁà¢éÒä» 1 µÑÇ
+     ESC x   ¢ÂÒÂà¾ÔèÁ´éǪ×èͤÓÊÑ觠ÊÓËÃѺ¡´ª×èͤÓÊÑ觵ÒÁà¢éÒä»·Ñé§ËÁ´
 
-     \e,T$S\e0JQh\e1';CP`@7\e09Ui\e1\e(B \e0\e,T!g\e1`\e0;g\e19$S\e0JQh\e1'\e07Uh\e1\e0AU\e1;CPbB*\e09l\e1\e(B  \e,Ta\e05h\e1\e0Jh\e1G9cK\e0-h\e1(P\e06Y\e1!`\e0CU\e1B!c\e0*i\e1\e(B \e0\e,T9i\e1MB$\e0CQi\e1'!\e0Gh\e1R$S\e0JQh\e1'\e07Qh\e1Gd;\e(B
-\e0\e,T5Q\e1GM\e0Bh\e1R'`\e0*h\e19\e(B \e,T$S\e0JQh\e1'KRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B (find) C-x C-f  \e,T$S\e0JQh\e1'`\e0!g\e1:\e0CQ\e1!IRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B (save) C-x C-s
-\e,T$S\e0JQh\e1'\e(B C-x C-c (\e,T`\e0ET\e1!\e(B Editor) \e0\e,T5h\e1R'\e0!g\e1`\e0;g\e19K\e09Vh\e1'c9$S\e0JQh\e1'`K\e0Eh\e1R\e09Ui\e1\e(B
+     ¤ÓÊÑ觻ÃÐàÀ·¹Õé ¡çà»ç¹¤ÓÊÑ觷ÕèÁÕ»ÃÐ⪹젠áµèÊèǹãË­è¨Ð¶Ù¡àÃÕ¡ãªé ¹éͤÃÑ駡ÇèÒ¤ÓÊÑ觷ÑèÇä»
+µÑÇÍÂèÒ§àªè¹ ¤ÓÊÑè§ËÒá¿éÁ¢éÍÁÙÅ (find) C-x C-f  ¤ÓÊÑè§à¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅ (save) C-x C-s
+¤ÓÊÑ觠C-x C-c (àÅÔ¡ Editor) µèÒ§¡çà»ç¹Ë¹Öè§ã¹¤ÓÊÑè§àËÅèÒ¹Õé
 
-     \e,T$S\e0JQh\e1'\e(B C-z \e,T`\e0;g\e19$S\e0JQh\e1'\e07Uh\e1c\e0*i\e1c9c9!RCMM!(R!\e(B Emacs \e0\e,T$h\e1M9\e0"i\e1R'\e0:h\e1MB\e(B  \e,T$S\e0JQh\e1'\e09Ui\e1(Pd\e0Ah\e1B!`\e0ET\e1!\e(B
-Emacs \e,T`EB\e07U\e1`\e04U\e1BG\e(B \e,Ta\e05h\e1(PK\e0BX\e14\e(B Emacs \e,Td\e0Gi\e1\e0*Qh\e1G$CRG\e(B \e,T`\e0>Wh\e1Mc\e0Ki\e1JRARC6!\e0EQ\e1:d;c\e0*i\e1\e(B csh \e,Td\e04i\e1\e0MU\e1!\e(B  \e,T!RC!4\e(B
-C-z \e0\e,T(V\e1'`\e0;g\e19!RCK\e0BX\e14\e(B Emacs \e,Td\e0Gi\e1\e0*Qh\e1G$CRG`\e07h\e1R\e09Qi\e19\e(B \e,T(Pd\e0Ah\e17S$GRA`\e0JU\e1BKRBc\e0Ki\e1\e0!Q\e1:`\e09Wi\e1MKR\e07Uh\e1a\e0!i\e1d"d;\e(B
+     ¤ÓÊÑ觠C-z à»ç¹¤ÓÊÑ觷Õèãªéã¹ã¹¡ÒÃÍÍ¡¨Ò¡ Emacs ¤è͹¢éÒ§ºèÍ  ¤ÓÊÑ觹Õé¨ÐäÁè¡àÅÔ¡
+Emacs àÅ·Õà´ÕÂÇ áµè¨ÐËÂØ´ Emacs äÇéªÑèǤÃÒÇ à¾×èÍãËéÊÒÁÒö¡ÅѺä»ãªé csh ä´éÍÕ¡  ¡Òá´
+C-z ¨Ö§à»ç¹¡ÒÃËÂØ´ Emacs äÇéªÑèǤÃÒÇà·èÒ¹Ñé¹ ¨ÐäÁè·Ó¤ÇÒÁàÊÕÂËÒÂãËé¡Ñºà¹×éÍËÒ·Õèá¡éä¢ä»
 
-\e,TKARB`K\e05X\e1\e(B:       \e,Ta\e05h\e17\e0Gh\e1R\e(B \e,Tc9!C\e03U\e1\e07Uh\e1c\e0*i\e1:9\e(B X-window \e,TK\e0CW\e1Mc\e0*i\e1\e(B sh \e,TM\e0BYh\e1\e(B \e0\e,T!g\e1(Pd\e0Ah\e1\e0AU\e1$GRAJRARC6\e09Ui\e1\e(B
+ËÁÒÂà˵Ø:       áµè·ÇèҠ㹡óշÕèãªéº¹ X-window ËÃ×Íãªé sh ÍÂÙè ¡ç¨ÐäÁèÁÕ¤ÇÒÁÊÒÁÒö¹Õé
 
 
-     \e,T$S\e0JQh\e1';CP`@7\e(B C-x \e0\e,TAU\e1AR!ARBKERB$S\e0JQh\e1'\e(B  \e,T$S\e0JQh\e1'\e07Uh\e1M\e08T\e1:RBd;a\e0Ei\e1G\e0AU\e1\e04Q\e1'\e09Ui\e1\e(B
+     ¤ÓÊÑ觻ÃÐàÀ· C-x ÁÕÁÒ¡ÁÒÂËÅÒ¤ÓÊÑ觠 ¤ÓÊÑ觷Õè͸ԺÒÂä»áÅéÇÁմѧ¹Õé
 
-     C-x C-f   \e,TKRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B (find) \e,TJSK\e0CQ\e1:a\e0!i\e1d"\e(B
-     C-x C-s   \e,T`\e0!g\e1:\e0CQ\e1!IRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B (save)
-     C-x C-b   \e,TaJ4'CRB!RC\e0:Q\e1?`?M\e0Cl\e1\e(B (buffer list)
-     C-x C-c   \e,T`\e0ET\e1!!RCc\e0*i\e1\e(B Editor \e,TaEP`\e0!g\e1:\e0CQ\e1!IRa\e0?i\e1A\e0"i\e1M\e0AY\e1Eb4B\e0MQ\e15b9\e0AQ\e1\e05T\e1\e(B  \e,Ta\e05h\e1\e06i\e1RKR!\e0AU\e1a\e0?i\e1A\e(B
-               \e0\e,T"i\e1M\e0AY\e1E:R'\e0MQ\e19\e06Y\e1!a\e0!i\e1d"\e(B  \e0\e,T!g\e1c\e0Ki\e16RA\e0Gh\e1R(P`\e0!g\e1:\e0CQ\e1!IRa\e0?i\e1A\e0"i\e1M\e0AY\e1E\e09Qi\e19dKA\e(B  \e,Tb4B\e07Qh\e1Gd;\e(B
-               \e,T!RCMM!(R!\e(B Emacs \e,T7Sd\e04i\e1b4B$S\e0JQh\e1'\e(B C-x C-s C-x C-c \e0\e,T$W\e1Mc\e0Ki\e1`\e0!g\e1:\e0CQ\e1!IR\e(B
-               \e0\e,T!h\e1M9a\e0Ei\e1G\e0(V\e1'`\e0ET\e1!\e(B
+     C-x C-f   ËÒá¿éÁ¢éÍÁÙÅ (find) ÊÓËÃѺá¡éä¢
+     C-x C-s   à¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅ (save)
+     C-x C-b   áÊ´§ÃÒ¡Òúѿà¿ÍÃì (buffer list)
+     C-x C-c   àÅÔ¡¡ÒÃãªé Editor áÅÐà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅâ´ÂÍѵâ¹ÁѵԠ áµè¶éÒËÒ¡ÁÕá¿éÁ
+               ¢éÍÁÙźҧÍѹ¶Ù¡á¡é䢠 ¡çãËé¶ÒÁÇèÒ¨Ðà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙŹÑé¹äËÁ  â´Â·ÑèÇä»
+               ¡ÒÃÍÍ¡¨Ò¡ Emacs ·Óä´éâ´Â¤ÓÊÑ觠C-x C-s C-x C-c ¤×ÍãËéà¡çºÃÑ¡ÉÒ
+               ¡è͹áÅéǨ֧àÅÔ¡
 
-     \e,T$S\e0JQh\e1'"BRB`\e0>Th\e1Aa::\e0*Wh\e1M\e09Qi\e19\e(B \e,Tc\e0*i\e1JSK\e0CQ\e1:$S\e0JQh\e1'\e07Uh\e1d\e0Ah\e1\e0$h\e1MBd\e04i\e1c\e0*i\e1\e(B \e,TK\e0CW\e1M$S\e0JQh\e1'\e07Uh\e1c\e0*i\e1`)>RP\e0!Q\e1:bKA4\e0>T\e1`HI:R'\e(B
-\e,TbKA4\e(B  \e0\e,T5Q\e1GM\e0Bh\e1R'`\e0*h\e19\e(B \e,T$S\e0JQh\e1'\e(B "command-apropos" \e0\e,T+Vh\e1'(P6RA\e(B \e0\e,T$U\e1\e0Bl\e1`\e0GT\e1\e0Cl\e14\e(B (keyword) \e,Ta\e0Ei\e1GaJ4'<E\e(B
-\e,T$S\e0JQh\e1'\e07X\e1!$S\e0JQh\e1'\e07Uh\e1\e0AU\e1\e0*Wh\e1M`\e0!Uh\e1BG\e0"i\e1M'\e0!Q\e1:\e0!Q\e1:\e0$U\e1\e0Bl\e1`\e0GT\e1\e0Cl\e14\e09Qi\e19\e(B  \e,T`GER(P\e0JQh\e1'$S\e0JQh\e1'\e09Ui\e1\e(B \e0\e,T!g\e1c\e0Ki\e1!4\e(B ESC x \e,Ta\e0Ei\e1G(P\e0AU\e1\e05Q\e1G\e0MQ\e1!IC\e(B
-"M-x" \e,T;CR!/\e0"Vi\e19\e07Uh\e1\e0Jh\e1G9\e0Eh\e1R'"M'(M\e(B  \e,T(R!\e09Qi\e19\e0!g\e1c\e0Ki\e1c\e0Jh\e1\e0*Wh\e1M$S\e0JQh\e1'\e07Uh\e1\e05i\e1M'!RC\e(B (\e,Tc9!C\e03U\e1\e09Ui\e1\e0$W\e1M\e(B
-"command-apropos")  \e,T`\e0AWh\e1M\e0;i\e1M9\e0"i\e1M\e0AY\e1Ed;\e06V\e1'\e(B "command-a" \e,Ta\e0Ei\e1G!4\e(B SPACE BAR \e0\e,TJh\e1G9\e07Uh\e1`K\e0EW\e1M"M'\e(B
-\e0\e,T*Wh\e1M$S\e0JQh\e1'\e0!g\e1(P\e06Y\e1!`\e05T\e1A`\e05g\e1A\e(B (completion) \e,Tc\e0Ki\e1`M'b4B\e0MQ\e15b9\e0AQ\e1\e05T\e1\e(B   \e,TK\e0EQ\e1'(R!\e09Qi\e19\e(B \e,T(P\e06Y\e1!6RA\e0$U\e1\e0Bl\e1`\e0GT\e1\e0Cl\e14\e(B \e0\e,T!g\e1c\e0Ki\e1\e(B
-\e,T!4JRB\e0MQ\e1!"CP\e(B (string) \e0\e,T7Uh\e1\e05i\e1M'!RC\e0CYi\e1E'd;\e(B  \e0\e,T5i\e1M'd\e0Ah\e1c\e0Jh\e1\e0$U\e1\e0Bl\e1`\e0GT\e1\e0Cl\e14MPdC`EB\e(B \e0\e,T!g\e1(Pd\e04i\e1$S\e0JQh\e1'\e07Qi\e1'KA4\e07Uh\e1\e0AU\e1M\e0BYh\e1\e(B
+     ¤ÓÊÑ觢ÂÒÂà¾ÔèÁẺª×è͹Ñé¹ ãªéÊÓËÃѺ¤ÓÊÑ觷ÕèäÁè¤èÍÂä´éãªé ËÃ×ͤÓÊÑ觷Õèãªé੾ÒСѺâËÁ´¾ÔàÈɺҧ
+âËÁ´  µÑÇÍÂèÒ§àªè¹ ¤ÓÊÑ觠"command-apropos" «Ö觨жÒÁ ¤ÕÂìàÇÔÃì´ (keyword) áÅéÇáÊ´§¼Å
+¤ÓÊÑ觷ء¤ÓÊÑ觷ÕèÁÕª×èÍà¡ÕèÂÇ¢éͧ¡Ñº¡Ñº¤ÕÂìàÇÔÃì´¹Ñé¹  àÇÅÒ¨ÐÊÑ觤ÓÊÑ觹Õé ¡çãËé¡´ ESC x áÅéǨÐÁÕµÑÇÍÑ¡ÉÃ
+"M-x" »ÃÒ¡¯¢Öé¹·ÕèÊèǹÅèÒ§¢Í§¨Í  ¨Ò¡¹Ñ鹡çãËéãÊèª×èͤÓÊÑ觷Õèµéͧ¡Òà(㹡óչÕé¤×Í
+"command-apropos")  àÁ×èÍ»é͹¢éÍÁÙÅ件֧ "command-a" áÅéÇ¡´ SPACE BAR Êèǹ·ÕèàËÅ×ͧ͢
+ª×èͤÓÊÑ觡ç¨Ð¶Ù¡àµÔÁàµçÁ (completion) ãËéàͧâ´ÂÍѵâ¹ÁѵԠ  ËÅѧ¨Ò¡¹Ñé¹ ¨Ð¶Ù¡¶ÒÁ¤ÕÂìàÇÔÃì´ ¡çãËé
+¡´ÊÒÂÍÑ¡¢ÃР(string) ·Õèµéͧ¡ÒÃÃÙéŧ仠 µéͧäÁèãÊè¤ÕÂìàÇÔÃì´ÍÐäÃàÅ ¡ç¨Ðä´é¤ÓÊÑ觷Ñé§ËÁ´·ÕèÁÕÍÂÙè
 
-       >> \e,TEM'!4\e(B ESC x \e,T5RA\e04i\e1GB\e(B "command-apropos<Return>" \e,TK\e0CW\e1M\e(B
-          "command-a<Space><Return>"  \e,TK\e0EQ\e1'(R!\e09Qi\e19\e0!g\e1!4\e(B "kanji<Return>" \e0\e,T4Y\e1\e(B
+       >> Åͧ¡´ ESC x µÒÁ´éÇ "command-apropos<Return>" ËÃ×Í
+          "command-a<Space><Return>"  ËÅѧ¨Ò¡¹Ñ鹡硴 "kanji<Return>" ´Ù
 
-     \e,Tc\e0Ki\e1!4\e(B C-x 1 \e,T`GER\e05i\e1M'!RC(PE:\e(B "\e0\e,TGT\e19b4\e0Gl\e1\e(B" \e0\e,T7Uh\e1b<\e0Eh\e1\e0"Vi\e19ARcK\e0Ah\e1\e(B 
+     ãËé¡´ C-x 1 àÇÅÒµéͧ¡ÒèÐź "ÇÔ¹â´Çì" ·Õèâ¼Åè¢Öé¹ÁÒãËÁè 
 
-\e,T:CC\e07Q\e14bKA4\e(B (Mode Line)
+ºÃ÷ѴâËÁ´ (Mode Line)
 =====================
 
-     \e,T`GER\e07Uh\e1\e0>T\e1A\e0>l\e1$S\e0JQh\e1'`\e0"i\e1Rd;\e0*i\e1R\e(B \e,Tf\e(B Emacs \e,T(PaJ4'\e0JTh\e1'\e07Uh\e1\e0>T\e1A\e0>l\e1E'd;5C':CC\e07Q\e14\e0Eh\e1R'\e0JX\e14"M'(M\e0+Vh\e1'`\e0CU\e1B!\e(B
-\e0\e,TGh\e1R\e(B echo area  \e,T:CC\e07Q\e14\e0+Vh\e1'M\e0BYh\e1\e06Q\e14\e0"Vi\e19ARK\e09Vh\e1':CC\e07Q\e14\e(B \e,T`\e0CU\e1B!\e0Gh\e1R:CC\e07Q\e14bKA4\e(B (mode line)  \e,T:CC\e07Q\e14\e(B
-\e,TbKA4\e0AU\e1\e0EQ\e1!I3P\e04Q\e1'\e09Ui\e1\e(B
+     àÇÅÒ·Õè¾ÔÁ¾ì¤ÓÊÑè§à¢éÒ仪éÒ æ Emacs ¨ÐáÊ´§ÊÔ觷Õè¾ÔÁ¾ìŧ仵çºÃ÷ѴÅèÒ§ÊØ´¢Í§¨Í«Öè§àÃÕ¡
+ÇèÒ echo area  ºÃ÷Ѵ«Öè§ÍÂÙè¶Ñ´¢Öé¹ÁÒ˹Ö觺Ã÷Ѵ àÃÕ¡ÇèÒºÃ÷ѴâËÁ´ (mode line)  ºÃ÷Ѵ
+âËÁ´ÁÕÅѡɳдѧ¹Õé
 
 
  [--]J:--**-Mule: TUTORIAL.th   (Fundamental) ---NN%--------------
 
 
-\e,TKARB`K\e05X\e1\e(B:       \e,T5C'\e0Jh\e1G9\e(B NN \e,T"M'\e(B NN% \e,T(P\e0AU\e1\e05Q\e1G`E"c\e0Jh\e1M\e0BYh\e1\e(B  \e,T:CC\e07Q\e14bKA4\e07Uh\e1aJ4'M\e0BYh\e1MR((Pa5!\e05h\e1R'\e(B
-               \e,Td;(R!\e05Q\e1GM\e0Bh\e1R'\e0:i\e1R'\e(B \e,Ta\e05h\e1\e0!g\e1d\e0Ah\e1`\e0;g\e19dC\e(B  \e0\e,T5Q\e1GM\e0Bh\e1R'`\e0*h\e19\e(B \e,TMR((P\e0AU\e1`GERK\e0CW\e1M\e(B uptime
-               \e,TaJ4'<EM\e0BYh\e1\e(B  \e0\e,TMQ\e19\e09Ui\e1`\e0;g\e19$GRAJRARC6"M'b;Ca!CA\e(B display-time
+ËÁÒÂà˵Ø:       µÃ§Êèǹ NN ¢Í§ NN% ¨ÐÁÕµÑÇàÅ¢ãÊèÍÂÙè  ºÃ÷ѴâËÁ´·ÕèáÊ´§ÍÂÙèÍÒ¨¨ÐᵡµèÒ§
+               ä»¨Ò¡µÑÇÍÂèÒ§ºéÒ§ áµè¡çäÁèà»ç¹äà µÑÇÍÂèÒ§àªè¹ ÍÒ¨¨ÐÁÕàÇÅÒËÃ×Í uptime
+               áÊ´§¼ÅÍÂÙè  Íѹ¹Õéà»ç¹¤ÇÒÁÊÒÁÒö¢Í§â»Ãá¡ÃÁ display-time
 
-     \e,T:CC\e07Q\e14\e09Ui\e1\e0AU\e1\e0"i\e1M\e0AY\e1E\e07Uh\e1`\e0;g\e19;CPbB*\e09l\e1M\e0BYh\e1KERBM\e0Bh\e1R'\e(B
+     ºÃ÷Ѵ¹ÕéÁÕ¢éÍÁÙÅ·Õèà»ç¹»ÃÐ⪹ìÍÂÙèËÅÒÂÍÂèÒ§
 
 
-     \e0\e,T"i\e1M\e0AY\e1EaC!\e0$W\e1M\e(B \e0\e,T*Wh\e1Ma\e0?i\e1A\e0"i\e1M\e0AY\e1E\e07Uh\e1!S\e0EQ\e1'\e0Mh\e1R9M\e0BYh\e1\e(B   \e0\e,T5Q\e1G`E"\e(B NN% \e,T(PaJ4'c\e0Ki\e1\e0CYi\e1\e0Gh\e1R!S\e0EQ\e1'aJ4'<E\e0Jh\e1G9dK9\e(B
-\e,T"M'a\e0?i\e1A\e0"i\e1M\e0AY\e1EM\e0BYh\e1\e(B \e,Tb4B\e0$T\e14`\e0;g\e19`;M\e0Cl\e1`+9\e05l\e1\e(B   \e0\e,T6i\e1R`\e0;g\e19\e0Jh\e1G9:9\e0JX\e14"M'a\e0?i\e1A\e0"i\e1M\e0AY\e1EM\e0BYh\e1\e0!g\e1(P\e0AU\e1\e0"i\e1M$GRA\e0Gh\e1R\e(B
---Top-- \e,TaJ4'M\e0BYh\e1\e(B  \e0\e,T6i\e1R`\e0;g\e19\e0Jh\e1G9\e0Eh\e1R'\e0JX\e14\e0!g\e1(P\e0AU\e1\e0"i\e1M$GRA\e0Gh\e1R\e(B --Bot--  \e0\e,T6i\e1RKR!JRARC6aJ4'a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B
-\e0\e,T7Qi\e1'KA4:9K\e09i\e1R(Md\e04i\e1\e(B \e0\e,T!g\e1(P\e0AU\e1\e0"i\e1M$GRA\e0Gh\e1R\e(B --All-- \e,TaJ4'M\e0BYh\e1\e(B
+     ¢éÍÁÙÅáá¤×Í ª×èÍá¿éÁ¢éÍÁÙÅ·Õè¡ÓÅѧÍèÒ¹ÍÂÙè   µÑÇàÅ¢ NN% ¨ÐáÊ´§ãËéÃÙéÇèÒ¡ÓÅѧáÊ´§¼ÅÊèǹä˹
+¢Í§á¿éÁ¢éÍÁÙÅÍÂÙè â´Â¤Ô´à»ç¹à»ÍÃìૹµì   ¶éÒà»ç¹Êèǹº¹ÊØ´¢Í§á¿éÁ¢éÍÁÙÅÍÂÙè¡ç¨ÐÁÕ¢éͤÇÒÁÇèÒ
+--Top-- áÊ´§ÍÂÙè  ¶éÒà»ç¹ÊèǹÅèÒ§ÊØ´¡ç¨ÐÁÕ¢éͤÇÒÁÇèÒ --Bot--  ¶éÒËÒ¡ÊÒÁÒöáÊ´§á¿éÁ¢éÍÁÙÅ
+·Ñé§ËÁ´º¹Ë¹éÒ¨Íä´é ¡ç¨ÐÁÕ¢éͤÇÒÁÇèÒ --All-- áÊ´§ÍÂÙè
 
-     \e,T@RBc9G'`\e0Eg\e1:"M':CC\e07Q\e14bKA4\e(B \e,T(PaJ4'c\e0Ki\e1\e0CYi\e1\e0Gh\e1R5M9\e09Ui\e1M\e0BYh\e1c9bKA4\e(B (mode) \e,TMPdC\e(B  \e,Tc9\e05Q\e1GM\e0Bh\e1R'\e(B
-\e0\e,T"i\e1R':9\e0$W\e1M\e(B \e,TM\e0BYh\e1c9bKA4\e(B Fundamental \e0\e,T+Vh\e1'`\e0;g\e19bKA4`\e0CTh\e1A\e05i\e19\e(B (default)  \e,TbKA4\e09Ui\e1`\e0;g\e19K\e09Vh\e1'c9bKA4\e(B
-\e,TK\e0EQ\e1!\e(B (Major Mode)
+     ÀÒÂã¹Ç§àÅ红ͧºÃ÷ѴâËÁ´ ¨ÐáÊ´§ãËéÃÙéÇèҵ͹¹ÕéÍÂÙèã¹âËÁ´ (mode) ÍÐäà ã¹µÑÇÍÂèÒ§
+¢éÒ§º¹¤×Í ÍÂÙèã¹âËÁ´ Fundamental «Öè§à»ç¹âËÁ´àÃÔèÁµé¹ (default)  âËÁ´¹Õéà»ç¹Ë¹Öè§ã¹âËÁ´
+ËÅÑ¡ (Major Mode)
 
-     Emacs \e0\e,TAU\e1bKA4K\e0EQ\e1!\e(B (Major Mode) \e,TJSK\e0CQ\e1:!RCb;Ca!CA@RIR\e(B \e,TK\e0CW\e1M!RCa\e0!i\e1\e0"i\e1M$GRA\e(B \e,T`\e0*h\e19\e(B
-Lisp mode Text mode \e,TaEPbKA4\e0MWh\e19\e(B \e,Tf\e(B \e0\e,TMU\e1!KERBbKA4\e(B  \e,Tb4B;!\e05T\e1\e(B Emacs \e,T(PM\e0BYh\e1c9bKA4K\e0EQ\e1!\e(B
-\e,TbKA4c4bKA4K\e09Vh\e1'`JAM\e(B
+     Emacs ÁÕâËÁ´ËÅÑ¡ (Major Mode) ÊÓËÃѺ¡ÒÃâ»Ãá¡ÃÁÀÒÉÒ ËÃ×Í¡ÒÃá¡é¢éͤÇÒÁ àªè¹
+Lisp mode Text mode áÅÐâËÁ´Í×è¹ æ ÍÕ¡ËÅÒÂâËÁ´  â´Â»¡µÔ Emacs ¨ÐÍÂÙèã¹âËÁ´ËÅÑ¡
+âËÁ´ã´âËÁ´Ë¹Öè§àÊÁÍ
 
-     \e,T$S\e0JQh\e1':R'$S\e0JQh\e1'(P\e0AU\e1>D\e05T\e1!CCA\e07Uh\e1a5!\e05h\e1R'\e0!Q\e19b4B\e0JTi\e19`\e0*T\e1'\e(B \e,T`\e0AWh\e1MM\e0BYh\e1c9bKA4K\e0EQ\e1!\e07Uh\e1\e05h\e1R'\e0!Q\e19\e(B   \e0\e,T5Q\e1GM\e0Bh\e1R'\e(B
-\e,T`\e0*h\e19\e(B \e,T`GERb;Ca!CA@RIR\e(B \e,T(P\e0AU\e1$S\e0JQh\e1'JSK\e0CQ\e1:J\e0Ci\e1R'\e(B \e,TKARB`K\e05X\e1\e(B (comment) \e,TM\e0BYh\e1\e(B  \e,T`\e09Wh\e1M'(R!\e0GT\e1\e08U\e1c\e0Jh\e1\e(B
-\e,TKARB`K\e05X\e1"M'@RIRa\e05h\e1EP@RIRa5!\e05h\e1R'\e0!Q\e19\e(B   \e,T$S\e0JQh\e1'\e09Ui\e1\e0!g\e1(Pa5!\e05h\e1R'\e0!Q\e19d;c9a\e05h\e1EPbKA4K\e0EQ\e1!\e(B  \e,T`\e0>Wh\e1Mc\e0Ki\e1\e(B
-\e,TJRARC6c\e0Jh\e1KARB`K\e05X\e1c9a\e05h\e1EP@RIRd\e04i\e1M\e0Bh\e1R'\e06Y\e1!\e05i\e1M'\e(B
+     ¤ÓÊÑ觺ҧ¤ÓÊÑ觨ÐÁվĵԡÃÃÁ·ÕèᵡµèÒ§¡Ñ¹â´ÂÊÔé¹àªÔ§ àÁ×èÍÍÂÙèã¹âËÁ´ËÅÑ¡·ÕèµèÒ§¡Ñ¹   µÑÇÍÂèÒ§
+àªè¹ àÇÅÒâ»Ãá¡ÃÁÀÒÉÒ ¨ÐÁÕ¤ÓÊÑè§ÊÓËÃѺÊÃéÒ§ ËÁÒÂà˵ؠ(comment) ÍÂÙè  à¹×èͧ¨Ò¡ÇÔ¸ÕãÊè
+ËÁÒÂà˵آͧÀÒÉÒáµèÅÐÀÒÉÒᵡµèÒ§¡Ñ¹   ¤ÓÊÑ觹Õé¡ç¨ÐᵡµèÒ§¡Ñ¹ä»ã¹áµèÅÐâËÁ´ËÅÑ¡  à¾×èÍãËé
+ÊÒÁÒöãÊèËÁÒÂà˵Øã¹áµèÅÐÀÒÉÒä´éÍÂèÒ§¶Ù¡µéͧ
 
-     \e,T$S\e0JQh\e1'JSK\e0CQ\e1:!RC`;\e0EUh\e1B9bKA4c\e0Ki\e1`\e0;g\e19bKA4K\e0EQ\e1!\e0MWh\e19\e(B \e0\e,T$W\e1M$S\e0JQh\e1'"BRB\e(B (extend) \e0\e,T+Vh\e1'\e0*Wh\e1M$S\e0JQh\e1'`\e0;g\e19\e0*Wh\e1M\e(B
-\e,TbKA4\e(B \e0\e,T5Q\e1GM\e0Bh\e1R'`\e0*h\e19\e(B \e,T$S\e0JQh\e1'\e(B M-x fundamental-mode \e0\e,T$W\e1M$S\e0JQh\e1'JSK\e0CQ\e1:`;\e0EUh\e1B9bKA4`\e0;g\e19bKA4\e(B 
+     ¤ÓÊÑè§ÊÓËÃѺ¡ÒÃà»ÅÕè¹âËÁ´ãËéà»ç¹âËÁ´ËÅÑ¡Í×è¹ ¤×ͤÓÊÑ觢ÂÒ (extend) «Ö觪×èͤÓÊÑè§à»ç¹ª×èÍ
+âËÁ´ µÑÇÍÂèÒ§àªè¹ ¤ÓÊÑ觠M-x fundamental-mode ¤×ͤÓÊÑè§ÊÓËÃѺà»ÅÕè¹âËÁ´à»ç¹âËÁ´ 
 Fundamental
 
-     \e,T`GER\e07Uh\e1(Pa\e0!i\e1d"a\e0?i\e1A\e0"i\e1M\e0AY\e1E@RIR\e0MQ\e1'!DI\e(B \e0\e,T!g\e1c\e0Ki\e1c\e0*i\e1\e(B Text mode
+     àÇÅÒ·Õè¨Ðá¡éä¢á¿éÁ¢éÍÁÙÅÀÒÉÒÍѧ¡ÄÉ ¡çãËéãªé Text mode
 
-       >> \e,TEM'\e0;i\e1M9$S\e0JQh\e1'\e(B M-x text-mode<Return>
+       >> Åͧ»é͹¤ÓÊÑ觠M-x text-mode<Return>
 
-     \e0\e,T6i\e1R\e05i\e1M'!RCKR\e0"i\e1M\e0AY\e1E`\e0>Th\e1A`\e0!Uh\e1BG\e0!Q\e1:bKA4K\e0EQ\e1!\e07Uh\e1c\e0*i\e1M\e0BYh\e1c9\e0;Q\e1(\e0(X\e1\e0:Q\e19\e(B \e0\e,T!g\e1c\e0Ki\e1\e0;i\e1M9$S\e0JQh\e1'\e(B C-h m
+     ¶éÒµéͧ¡ÒÃËÒ¢éÍÁÙÅà¾ÔèÁà¡ÕèÂǡѺâËÁ´ËÅÑ¡·ÕèãªéÍÂÙè㹻Ѩ¨ØºÑ¹ ¡çãËé»é͹¤ÓÊÑ觠C-h m
 
-       >> \e,Tc\e0Ki\e1!4\e(B C-h m \e,T`\e0>Wh\e1M\e0HV\e1!IR\e0"i\e1Ma5!\e05h\e1R'CPK\e0Gh\e1R'\e(B Text mode \e0\e,T!Q\e1:\e(B Fundamental mode
+       >> ãËé¡´ C-h m à¾×èÍÈÖ¡ÉÒ¢éÍᵡµèÒ§ÃÐËÇèÒ§ Text mode ¡Ñº Fundamental mode
 
-       >> \e,Tc\e0Ki\e1!4\e(B C-x 1 \e,T`\e0>Wh\e1ME:`M!JRCMM!(R!(M\e(B
+       >> ãËé¡´ C-x 1 à¾×èÍźàÍ¡ÊÒÃÍÍ¡¨Ò¡¨Í
 
-     \e,T5C'\e0Jh\e1G9\e0+i\e1RB"M':CC\e07Q\e14bKA4\e(B \e,T(P\e0AU\e1\e0JQ\e1-\e0EQ\e1!I\e03l\e1\e(B '[--]' \e,T`\e0>Wh\e1MaJ4'bKA4JSK\e0CQ\e1:!RC\e0;i\e1M9\e0"i\e1M\e0AY\e1E\e(B
-(input mode) \e,TM\e0BYh\e1\e(B   \e0\e,TJQ\e1-\e0EQ\e1!I\e03l\e1\e(B [--] \e,TKARB\e06V\e1'JRARC6\e0;i\e1M9\e0"i\e1M\e0AY\e1Ed\e04i\e1\e04i\e1GB\e05Q\e1G\e0MQ\e1!IC@RIR\e0MQ\e1'!DI\e(B
-(English alphabets)  \e,T!\e0CX\e13R\e0Mh\e1R9\e0$Yh\e1\e0AW\e1M"M'\e(B "Tamago" \e,TJSK\e0CQ\e1:CRBEP`\e0MU\e1B4"M'\e0GT\e1\e08U\e1c\e0*i\e1\e(B
+     µÃ§Êèǹ«éÒ¢ͧºÃ÷ѴâËÁ´ ¨ÐÁÕÊÑ­Åѡɳì '[--]' à¾×èÍáÊ´§âËÁ´ÊÓËÃѺ¡Òûé͹¢éÍÁÙÅ
+(input mode) ÍÂÙè   ÊÑ­Åѡɳì [--] ËÁÒ¶֧ÊÒÁÒö»é͹¢éÍÁÙÅä´é´éǵÑÇÍÑ¡ÉÃÀÒÉÒÍѧ¡ÄÉ
+(English alphabets)  ¡ÃسÒÍèÒ¹¤ÙèÁ×ͧ͢ "Tamago" ÊÓËÃѺÃÒÂÅÐàÍÕ´¢Í§ÇÔ¸Õãªé
 
-     \e,TaEP5C'\e04i\e1R9"GR"M'\e0JQ\e1-\e0EQ\e1!I\e03l\e1\e09Qi\e19\e(B \e,T(P\e0AU\e1`$\e0CWh\e1M'KARBaJ4'J6R9P"M'\e(B flag \e,T"M'CP::C\e0KQ\e1J\e(B
-(coding-system) \e,TM\e0BYh\e1\e(B   Mule \e,TJRARC6!SK94CP::C\e0KQ\e1JaB!`)>RPJSK\e0CQ\e1:\e(B \e,T!RC`\e0!g\e1:\e0Mh\e1R9a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B
-\e,T!RC\e0;i\e1M9\e0"i\e1M\e0AY\e1E(R!\e0$U\e1\e0Bl\e1:M\e0Cl\e14\e(B \e,T!RCaJ4'<EMM!7R'(M\e(B \e,Td\e04i\e1\e0MT\e1JCP(R!\e0!Q\e19\e(B  \e,Ta\e05h\e1b4B;!\e05T\e1(PaJ4'`)>RP\e(B
-\e0\e,TJQ\e1-\e0EQ\e1!I\e03l\e1\e0*h\e1GB(S\e(B (mnemonic) \e,T"M'CP::C\e0KQ\e1JJSK\e0CQ\e1:!RC`\e0!g\e1:\e0Mh\e1R9a\e0?i\e1A\e0"i\e1M\e0AY\e1E\e(B \e,T`\e07h\e1R\e09Qi\e19\e(B
+     áÅеç´éÒ¹¢ÇҢͧÊÑ­Åѡɳì¹Ñé¹ ¨ÐÁÕà¤Ã×èͧËÁÒÂáÊ´§Ê¶Ò¹Ð¢Í§ flag ¢Í§ÃкºÃËÑÊ
+(coding-system) ÍÂÙè   Mule ÊÒÁÒö¡Ó˹´ÃкºÃËÑÊá¡੾ÒÐÊÓËÃѺ ¡ÒÃà¡çºÍèÒ¹á¿éÁ¢éÍÁÙÅ
+¡Òûé͹¢éÍÁÙŨҡ¤ÕÂìºÍÃì´ ¡ÒÃáÊ´§¼ÅÍÍ¡·Ò§¨Í ä´éÍÔÊÃШҡ¡Ñ¹  áµèâ´Â»¡µÔ¨ÐáÊ´§à©¾ÒÐ
+ÊÑ­ÅѡɳìªèǨӠ(mnemonic) ¢Í§ÃкºÃËÑÊÊÓËÃѺ¡ÒÃà¡çºÍèÒ¹á¿éÁ¢éÍÁÙÅ à·èÒ¹Ñé¹
 
-       >> \e,T5CG(\e04Y\e1\e0Gh\e1R\e0AU\e1\e0JQ\e1-\e0EQ\e1!I\e03l\e1\e(B \e,T$\e0Ei\e1RB$\e0EV\e1'\e0!Q\e1:\e(B "J:" "S:" "E:" \e,TaJ4'M\e0BYh\e1\e07Uh\e1:CC\e07Q\e14bKA4K\e0CW\e1Md\e0Ah\e1\e(B
+       >> µÃǨ´ÙÇèÒÁÕÊÑ­Åѡɳ젤ÅéÒ¤ÅÖ§¡Ñº "J:" "S:" "E:" áÊ´§ÍÂÙè·ÕèºÃ÷ѴâËÁ´ËÃ×ÍäÁè
 
-     \e0\e,T5Q\e1G\e0MQ\e1!IC\e05Q\e1GaC!\e0$W\e1M\e(B \e0\e,TJQ\e1-\e0EQ\e1!I\e03l\e1\e0*h\e1GB(S\e(B (mnemonic) \e,T"M'CP::C\e0KQ\e1J\e07Uh\e1c\e0*i\e1M\e0BYh\e1\e(B  \e0\e,T5Q\e1G\e(B ':' \e,TaJ4'c\e0Ki\e1\e0CYi\e1\e(B
-\e0\e,TGh\e1R\e0AU\e1\e05Q\e1G\e0MQ\e1!IC"M'@RIR\e0MWh\e19\e(B \e,T9M!(R!@RIR\e0MQ\e1'!DIaJ4'M\e0BYh\e1\e(B (\e,T`\e0*h\e19\e(B \e,T@RIR\e0(U\e19\e(B \e,T@RIR\e0-Uh\e1\e0;Xh\e19\e(B \e,T`\e0;g\e19\e05i\e19\e(B)  \e0\e,T5Q\e1G\e(B J
-\e,TKARB\e06V\e1'\e(B \e,TC\e0KQ\e1J\e07Uh\e1c\e0*i\e1\e0!Q\e1:\e(B JUNET \e0\e,T$W\e1M\e(B \e,TC\e0KQ\e1J\e(B JIS  \e0\e,T5Q\e1G\e(B S \e,TKARB\e06V\e1'\e(B Shift-JIS \e,TaEP\e(B \e0\e,T5Q\e1G\e(B E \e,TKARB\e06V\e1'\e(B
-\e,TC\e0KQ\e1J\e(B EUC \e,T@RIR\e0-Uh\e1\e0;Xh\e19\e(B   \e,T(PJ\e0EQ\e1:`;\e0EUh\e1B9\e(B (toggle) \e,T!RCaJ4'<E@RIR9R9R*R\e05T\e1d\e04i\e1b4B\e(B C-x C-k t
+     µÑÇÍÑ¡ÉõÑÇáá¤×Í ÊÑ­ÅѡɳìªèǨӠ(mnemonic) ¢Í§ÃкºÃËÑÊ·ÕèãªéÍÂÙè  µÑÇ ':' áÊ´§ãËéÃÙé
+ÇèÒÁÕµÑÇÍÑ¡ÉâͧÀÒÉÒÍ×è¹ ¹Í¡¨Ò¡ÀÒÉÒÍѧ¡ÄÉáÊ´§ÍÂÙè (àªè¹ ÀÒÉÒ¨Õ¹ ÀÒÉÒ­Õè»Øè¹ à»ç¹µé¹)  µÑÇ J
+ËÁÒ¶֧ ÃËÑÊ·Õèãªé¡Ñº JUNET ¤×Í ÃËÑÊ JIS  µÑÇ S ËÁÒ¶֧ Shift-JIS áÅРµÑÇ E ËÁÒ¶֧
+ÃËÑÊ EUC ÀÒÉÒ­Õè»Øè¹   ¨ÐÊÅѺà»ÅÕè¹ (toggle) ¡ÒÃáÊ´§¼ÅÀÒÉÒ¹Ò¹ÒªÒµÔä´éâ´Â C-x C-k t
 
-     \e0\e,T5Q\e1GM\e0Bh\e1R'\e0"i\e1R'\e0Eh\e1R'\e(B \e0\e,T$W\e1M!RCJ\e0EQ\e1:`;\e0EUh\e1B9d\e0Ah\e1c\e0Ki\e1aJ4'@RIR9R9R*R\e05T\e1\e(B \e,Ta\e0Ei\e1GJ\e0EQ\e1:!\e0EQ\e1:\e0MU\e1!$\e0CQi\e1'K\e09Vh\e1'\e(B
+     µÑÇÍÂèÒ§¢éÒ§ÅèÒ§ ¤×Í¡ÒÃÊÅѺà»ÅÕè¹äÁèãËéáÊ´§ÀÒÉÒ¹Ò¹ÒªÒµÔ áÅéÇÊÅѺ¡ÅѺÍÕ¡¤ÃÑé§Ë¹Öè§
 
-       >> \e,TEM'\e0;i\e1M9$S\e0JQh\e1'\e(B C-x C-k t \e0\e,T4Y\e1JM'$\e0CQi\e1'\e(B
+       >> Åͧ»é͹¤ÓÊÑ觠C-x C-k t ´ÙÊͧ¤ÃÑé§
 
-     \e0\e,T6i\e1R`7M\e0Cl\e1\e0AT\e1\e09Q\e1E\e07Uh\e1c\e0*i\e1M\e0BYh\e1\e0AU\e1\e0;Xh\e1A\e(B META \e,TaEPbKA4\e07Uh\e1c\e0*i\e1M\e0BYh\e1`\e0;g\e19C\e0KQ\e1J\e(B JIS  \e,T`CR\e0!g\e1(PJRARC6c\e0*i\e1\e0;Xh\e1A\e(B META
-\e,Ta79!RC!4\e0;Xh\e1A\e(B ESCAPE \e,Td\e04i\e1\e(B  \e0\e,TGT\e1\e08U\e1c\e0*i\e1(P`K\e0AW\e1M9\e0!Q\e1:!RCc\e0*i\e1\e0;Xh\e1A$M9b7CE\e(B \e0\e,T$W\e1Mc\e0Ki\e1!4\e0;Xh\e1A\e(B META \e0\e,T$i\e1R'd\e0Gi\e1a\e0Ei\e1G\e0(V\e1'\e(B
-\e,T!4\e05Q\e1G\e0MQ\e1!IC5RA\e(B  M-<\e0\e,T5Q\e1G\e0MQ\e1!IC\e(B> \e,T(P7SK\e09i\e1R\e07Uh\e1`K\e0AW\e1M9\e0!Q\e1:\e(B ESC <\e0\e,T5Q\e1G\e0MQ\e1!IC\e(B>  \e0\e,T9Qh\e19\e0$W\e1M\e(B \e0\e,T7X\e1!M\e0Bh\e1R'\e07Uh\e1M\e08T\e1:RBAR\e(B
-\e,T(9\e06V\e1'\e0(X\e14\e09Ui\e1\e(B \e,T(P\e0BQ\e1'$'\e0AU\e1<E`K\e0AW\e1M9`\e04T\e1A\e(B \e,TK\e0EQ\e1'(R!`;\e0EUh\e1B9\e(B ESC <\e0\e,T5Q\e1G\e0MQ\e1!IC\e(B> \e,Tc\e0Ki\e1`\e0;g\e19\e(B M-<\e0\e,T5Q\e1G\e0MQ\e1!IC\e(B>  \e,Ta\e05h\e1\e0"i\e1M\e(B
-\e,T$GCCP\e0GQ\e1'\e0!g\e1\e0$W\e1M\e(B \e0\e,T;Xh\e1A\e(B META \e,T(Pd\e0Ah\e1JRARC6c\e0*i\e1d\e04i\e1\e0!Q\e1:C\e0KQ\e1J\e(B Shift-JIS \e,TaEP\e(B EUC
+     ¶éÒà·ÍÃìÁÔ¹ÑÅ·ÕèãªéÍÂÙèÁÕ»ØèÁ META áÅÐâËÁ´·ÕèãªéÍÂÙèà»ç¹ÃËÑÊ JIS  àÃÒ¡ç¨ÐÊÒÁÒöãªé»ØèÁ META
+á·¹¡Òá´»ØèÁ ESCAPE ä´é  ÇÔ¸Õãªé¨ÐàËÁ×͹¡Ñº¡ÒÃãªé»ØèÁ¤Í¹â·ÃÅ ¤×ÍãËé¡´»ØèÁ META ¤éÒ§äÇéáÅéǨ֧
+¡´µÑÇÍÑ¡ÉõÒÁ  M-<µÑÇÍÑ¡ÉÃ> ¨Ð·Ó˹éÒ·ÕèàËÁ×͹¡Ñº ESC <µÑÇÍÑ¡ÉÃ>  ¹Ñ蹤×Í ·Ø¡ÍÂèÒ§·Õè͸ԺÒÂÁÒ
+¨¹¶Ö§¨Ø´¹Õé ¨ÐÂѧ¤§ÁÕ¼ÅàËÁ×͹à´ÔÁ ËÅѧ¨Ò¡à»ÅÕè¹ ESC <µÑÇÍÑ¡ÉÃ> ãËéà»ç¹ M-<µÑÇÍÑ¡ÉÃ>  áµè¢éÍ
+¤ÇÃÃÐÇѧ¡ç¤×Í »ØèÁ META ¨ÐäÁèÊÒÁÒöãªéä´é¡ÑºÃËÑÊ Shift-JIS áÅРEUC
 
-     \e,T!RC`;\e0EUh\e1B9CP::C\e0KQ\e1J(P\e0AU\e1<Ea\e0$h\e1`\e0>U\e1B'\e0!Q\e1:a\e05h\e1EP\e0:Q\e1?`?M\e0Cl\e1`\e07h\e1R\e09Qi\e19\e(B  \e,TJRARC6\e04Y\e1$S\e0JQh\e1'`\e0!Uh\e1BG\e0!Q\e1:CP::C\e0KQ\e1J\e(B
-\e,Td\e04i\e1b4B$S\e0JQh\e1'\e(B C-h a coding-system <Return>
+     ¡ÒÃà»ÅÕè¹ÃкºÃËÑʨÐÁÕ¼Åá¤èà¾Õ§¡ÑºáµèÅкѿà¿ÍÃìà·èÒ¹Ñé¹  ÊÒÁÒö´Ù¤ÓÊÑè§à¡ÕèÂǡѺÃкºÃËÑÊ
+ä´éâ´Â¤ÓÊÑ觠C-h a coding-system <Return>
 
-       >> \e,Tc\e0Ki\e1\e0;i\e1M9$S\e0JQh\e1'\e(B C-h a coding-system <Return> \e,Ta\e0Ei\e1G\e0Mh\e1R9CRBEP`\e0MU\e1B4"M'$S\e0JQh\e1'\e(B 
-         set-display-coding-system set-file-coding-system \e,TaEP\e(B
-         set-process-coding-system \e,T(R!`M!JRC\e07Uh\e1;CR!/\e0"Vi\e19\e(B
+       >> ãËé»é͹¤ÓÊÑ觠C-h a coding-system <Return> áÅéÇÍèÒ¹ÃÒÂÅÐàÍÕ´¢Í§¤ÓÊÑ觠
+         set-display-coding-system set-file-coding-system áÅÐ
+         set-process-coding-system ¨Ò¡àÍ¡ÊÒ÷Õè»ÃÒ¡¯¢Öé¹
 
-\e,T!RC\e0$i\e19KR\e(B (search)
+¡Òäé¹ËÒ (search)
 ================
 
-     Emacs \e,TJRARC6\e0$i\e19KRJRB\e0MQ\e1!"CP\e(B (string) \e,T@RBc9a\e0?i\e1A\e0"i\e1M\e0AY\e1Ed;7R'\e0"i\e1R'K\e09i\e1RK\e0CW\e1M\e0"i\e1R'K\e0EQ\e1'd\e04i\e1\e(B
-\e0\e,T6i\e1R\e05i\e1M'!RC\e0$i\e19KRd;7R'\e0"i\e1R'K\e09i\e1R"M'5SaK\e09h\e1'`$M\e0Cl\e1`+M\e0Cl\e1\e(B (cursor) \e0\e,T!g\e1c\e0Ki\e1!4\e(B C-s  \e0\e,T6i\e1R\e05i\e1M'!RC\e0$i\e19KR\e(B
-\e,Td;7R'\e0"i\e1R'K\e0EQ\e1'"M'5SaK\e09h\e1'`$M\e0Cl\e1`+M\e0Cl\e1\e(B  \e0\e,T!g\e1c\e0Ki\e1!4\e(B C-r  \e,TK\e0EQ\e1'(R!\e09Qi\e19(P\e0AU\e1\e0"i\e1M$GRA\e0Gh\e1R\e(B "I-search:"
-\e,T;CR!/\e0"Vi\e195C'\e(B echo area  \e,TB!`\e0ET\e1!!RC\e0$i\e19KRd\e04i\e1\e04i\e1GB!RC!4\e(B ESC
+     Emacs ÊÒÁÒö¤é¹ËÒÊÒÂÍÑ¡¢ÃР(string) ÀÒÂã¹á¿éÁ¢éÍÁÙÅä»·Ò§¢éҧ˹éÒËÃ×Í¢éÒ§ËÅѧä´é
+¶éÒµéͧ¡Òäé¹ËÒä»·Ò§¢éҧ˹éҢͧµÓá˹è§à¤ÍÃìà«ÍÃì (cursor) ¡çãËé¡´ C-s  ¶éÒµéͧ¡Òäé¹ËÒ
+ä»·Ò§¢éÒ§ËÅѧ¢Í§µÓá˹è§à¤ÍÃìà«ÍÃì  ¡çãËé¡´ C-r  ËÅѧ¨Ò¡¹Ñ鹨ÐÁÕ¢éͤÇÒÁÇèÒ "I-search:"
+»ÃÒ¡¯¢Ö鹵ç echo area  Â¡àÅÔ¡¡Òäé¹ËÒä´é´éÇ¡Òá´ ESC
 
 
-       >> \e,T!4\e(B C-s \e,T`\e0>Wh\e1M`\e0CTh\e1A!RC\e0$i\e19KR\e(B  \e,Ta\e0Ei\e1G!4\e05Q\e1G\e0MQ\e1!IC"M'$S\e0Gh\e1R\e(B "cursor" \e,TE'd;\e07U\e1EP\e05Q\e1GM\e0Bh\e1R'\e(B
-          \e0\e,T*i\e1R\e(B \e,Ta\e0Ei\e1G\e0JQ\e1'`!5\e04Y\e1\e0Gh\e1R`$M\e0Cl\e1`+M\e0Cl\e1"\e0BQ\e1:d;M\e0Bh\e1R'dC\e(B
+       >> ¡´ C-s à¾×èÍàÃÔèÁ¡Òäé¹ËÒ  áÅéÇ¡´µÑÇÍÑ¡Éâͧ¤ÓÇèÒ "cursor" Å§ä»·ÕÅеÑÇÍÂèÒ§
+          ªéÒ áÅéÇÊѧࡵ´ÙÇèÒà¤ÍÃìà«ÍÃì¢ÂѺä»ÍÂèÒ§äÃ
 
-       >> \e,TEM'!4\e(B C-s \e0\e,T4Y\e1\e0MU\e1!K\e09Vh\e1'$\e0CQi\e1'`\e0>Wh\e1M\e0$i\e19KR$S\e0Gh\e1R\e(B "cursor" \e0\e,T5Q\e1G\e05h\e1Md;\e(B
+       >> Åͧ¡´ C-s ´ÙÍա˹Ö觤ÃÑé§à¾×èͤé¹ËÒ¤ÓÇèÒ "cursor" µÑǵèÍä»
 
-       >> \e,T!4\e(B <Delete> \e0\e,T4Y\e1\e(B 4 \e,T$\e0CQi\e1'\e(B \e,Ta\e0Ei\e1G\e0JQ\e1'`!5\e04Y\e1\e0Gh\e1R!RC`$\e0EWh\e1M9\e07Uh\e1"M'`$M\e0Cl\e1`+M\e0Cl\e1\e(B
+       >> ¡´ <Delete> ´Ù 4 ¤ÃÑ駠áÅéÇÊѧࡵ´ÙÇèÒ¡ÒÃà¤Å×è͹·Õè¢Í§à¤ÍÃìà«ÍÃì
 
-       >> \e,T!4\e(B ESC \e,T`\e0>Wh\e1MB!`\e0ET\e1!!RC\e0$i\e19KR\e(B
+       >> ¡´ ESC à¾×èÍ¡àÅÔ¡¡Òäé¹ËÒ
 
-     \e,T!RC\e0$i\e19KR(P`\e0CTh\e1A\e0"Vi\e19\e07Q\e19\e07U\e1\e(B \e,Tc9CPK\e0Gh\e1R'\e07Uh\e1\e0>T\e1A\e0>l\e1JRB\e0MQ\e1!"CP\e07Uh\e1\e05i\e1M'!RC(P\e0$i\e19KR\e(B \e,T`\e0"i\e1Rd;`\e0>U\e1B':R'\e0Jh\e1G9\e(B
-\e0\e,T6i\e1R\e05i\e1M'!RC(P\e0$i\e19KR\e05Q\e1G\e05h\e1Md;\e(B \e0\e,T!g\e1c\e0Ki\e1!4\e(B C-s \e0\e,TMU\e1!K\e09Vh\e1'$\e0CQi\e1'\e(B  \e0\e,T6i\e1RKR!\e0$i\e19KRJRB\e0MQ\e1!"CP\e07Uh\e1\e0;i\e1M9`\e0"i\e1Rd;d\e0Ah\e1>:\e(B \e0\e,T!g\e1\e(B
-\e,T(P\e0AU\e1\e0"i\e1M$GRA;CR!/\e0"Vi\e19\e(B  \e,Tc\e0Ki\e1!4\e(B C-g \e,T`\e0>Wh\e1MB!`\e0ET\e1!\e(B
+     ¡Òäé¹ËÒ¨ÐàÃÔèÁ¢Ö鹷ѹ·Õ ã¹ÃÐËÇèÒ§·Õè¾ÔÁ¾ìÊÒÂÍÑ¡¢ÃзÕèµéͧ¡ÒèФé¹ËÒ à¢éÒä»à¾Õ§ºÒ§Êèǹ
+¶éÒµéͧ¡ÒèФé¹ËÒµÑǵèÍä» ¡çãËé¡´ C-s Íա˹Ö觤ÃÑ駠 ¶éÒËÒ¡¤é¹ËÒÊÒÂÍÑ¡¢ÃзÕè»é͹à¢éÒä»äÁ辺 ¡ç
+¨ÐÁÕ¢éͤÇÒÁ»ÃÒ¡¯¢Öé¹  ãËé¡´ C-g à¾×èÍ¡àÅÔ¡
 
-     \e,TCPK\e0Gh\e1R'\e07Uh\e1\e0$i\e19KRM\e0BYh\e1\e(B  \e0\e,T6i\e1R!4\e(B <Delete> \e0\e,T5Q\e1G\e0MQ\e1!IC\e05Q\e1G\e0JX\e14\e07i\e1RBc9JRB\e0MQ\e1!"CP\e0!g\e1(P\e06Y\e1!E:d;\e(B  \e,Ta\e0Ei\e1G\e(B
-\e,T`$M\e0Cl\e1`+M\e0Cl\e1\e0!g\e1(P!\e0EQ\e1:d;5SaK\e09h\e1'\e0!h\e1M9K\e09i\e1R\e(B   \e0\e,T5Q\e1GM\e0Bh\e1R'`\e0*h\e19\e(B \e0\e,T6i\e1R!4\e(B "cu" \e0\e,T!g\e1(P\e0$i\e19KRd;\e06V\e1'5SaK\e09h\e1'\e07Uh\e1\e0AU\e1$S\e0Gh\e1R\e(B
-"cu"  \e,Ta\e05h\e1\e06i\e1R!4\e(B <Delete> \e,Tc9\e0(Q\e1'KGP\e09Ui\e1\e(B \e0\e,T5Q\e1G\e(B 'u' \e,Tc9\e(B search line \e0\e,T!g\e1(PKRBd;\e(B \e,Ta\e0Ei\e1G`$M\e0Cl\e1`+M\e0Cl\e1\e(B
-\e,T(P"\e0BQ\e1:!\e0EQ\e1:d;\e07Uh\e15SaK\e09h\e1'\e07Uh\e1\e0AU\e1\e05Q\e1G\e(B 'c' \e,TM\e0BYh\e1\e(B
+     ÃÐËÇèÒ§·Õè¤é¹ËÒÍÂÙè  ¶éÒ¡´ <Delete> µÑÇÍÑ¡ÉõÑÇÊØ´·éÒÂã¹ÊÒÂÍÑ¡¢ÃСç¨Ð¶Ù¡Åºä»  áÅéÇ
+à¤ÍÃìà«ÍÃì¡ç¨Ð¡ÅѺ仵Óá˹觡è͹˹éÒ   µÑÇÍÂèÒ§àªè¹ ¶éÒ¡´ "cu" ¡ç¨Ð¤é¹ËÒ件֧µÓá˹觷ÕèÁÕ¤ÓÇèÒ
+"cu"  áµè¶éÒ¡´ <Delete> ã¹¨Ñ§ËÇйÕé µÑÇ 'u' ã¹ search line ¡ç¨ÐËÒÂä» áÅéÇà¤ÍÃìà«ÍÃì
+¨Ð¢ÂѺ¡ÅѺ价ÕèµÓá˹觷ÕèÁÕµÑÇ 'c' ÍÂÙè
 
-     \e0\e,T6i\e1R!4\e05Q\e1G\e0MQ\e1!IC$M9b7CE\e(B (control character) \e0\e,T5Q\e1G\e0MWh\e19\e(B \e,T9M!`K\e09W\e1M(R!\e(B C-s \e,TK\e0CW\e1M\e(B C-r
-\e,T!RC\e0$i\e19KR\e0!g\e1(P\e0JTi\e19\e0JX\e14E'\e(B
+     ¶éÒ¡´µÑÇÍÑ¡Éä͹â·ÃÅ (control character) µÑÇÍ×è¹ ¹Í¡à˹×ͨҡ C-s ËÃ×Í C-r
+¡Òäé¹ËÒ¡ç¨ÐÊÔé¹Êشŧ
 
-     \e,T$S\e0JQh\e1'\e(B C-s \e,T(P\e0$i\e19KRJRB\e0MQ\e1!"CP\e07Uh\e1\e05i\e1M'!RC\e(B \e,Td;7R'\e0"i\e1R'K\e09i\e1R"M'5SaK\e09h\e1'`$M\e0Cl\e1`+M\e0Cl\e1\e(B  \e0\e,T6i\e1R\e05i\e1M'!RC\e(B
-\e0\e,T$i\e19KRd;7R'\e07T\e1HK\e0EQ\e1'\e(B  \e0\e,T!g\e1c\e0Ki\e1!4\e(B C-r  \e0\e,T9Qh\e19\e0$W\e1M\e(B \e,TJRARC6c\e0*i\e1\e(B C-s \e,TaEP\e(B C-r \e,TJ\e0EQ\e1:\e0!Q\e19`\e0>Wh\e1M\e0$i\e19KRd;d\e04i\e1c9\e07Qi\e1'\e(B
-\e,TJM'\e07T\e1H7R'\e(B  C-s \e,TaEP\e(B C-r \e,T7SK\e09i\e1R\e07Uh\e1`K\e0AW\e1M9\e0!Q\e19\e07X\e1!;CP!RC\e(B \e,T(P\e05h\e1R'\e0!Q\e19\e0!g\e15C'\e07T\e1H7R'!RC\e0$i\e19KR`\e07h\e1R\e09Qi\e19\e(B
+     ¤ÓÊÑ觠C-s ¨Ð¤é¹ËÒÊÒÂÍÑ¡¢ÃзÕèµéͧ¡Òà价ҧ¢éҧ˹éҢͧµÓá˹è§à¤ÍÃìà«ÍÃì  ¶éÒµéͧ¡ÒÃ
+¤é¹ËÒä»·Ò§·ÔÈËÅѧ  ¡çãËé¡´ C-r  ¹Ñ蹤×Í ÊÒÁÒöãªé C-s áÅРC-r ÊÅѺ¡Ñ¹à¾×èͤé¹ËÒä»ä´éã¹·Ñé§
+Êͧ·ÔÈ·Ò§  C-s áÅРC-r ·Ó˹éÒ·ÕèàËÁ×͹¡Ñ¹·Ø¡»ÃСÒà¨ÐµèÒ§¡Ñ¹¡çµÃ§·ÔÈ·Ò§¡Òäé¹ËÒà·èÒ¹Ñé¹
 
 Recursive Editing Level
 
-     \e,T:R'\e07U\e1\e(B \e,T`CRMR((PK\e0EX\e14`\e0"i\e1Rd;M\e0BYh\e1c9J6R9P\e07Uh\e1`\e0CU\e1B!\e0Gh\e1R\e(B Recursive Editing Level \e,Td\e04i\e1b4B\e(B
-\e,Td\e0Ah\e1\e05Qi\e1'c(\e(B  \e,Tc9bKA4\e09Ui\e1\e(B \e,T`$\e0CWh\e1M'KARBG'`\e0Eg\e1:\e(B '()' \e0\e,T7Uh\e1aJ4'\e0*Wh\e1MbKA4K\e0EQ\e1!\e(B (major mode) \e,TM\e0BYh\e1(P\e0AU\e1G'`\e0Eg\e1:\e(B
-'[]' \e0\e,TEi\e1MA\e(B \e,T`\e0>Th\e1A\e0"Vi\e19\e0MU\e1!K\e09Vh\e1'\e0*Qi\e19\e(B  \e0\e,T5Q\e1GM\e0Bh\e1R'`\e0*h\e19\e(B \e0\e,T6i\e1R`\e04T\e1A`\e0;g\e19\e(B (Fundamental) \e,TM\e0BYh\e1\e(B \e0\e,T!g\e1(P`;\e0EUh\e1B9`\e0;g\e19\e(B
-[(Fundamental)] \e,Ta79\e(B
+     ºÒ§·Õ àÃÒÍÒ¨¨ÐËÅØ´à¢éÒä»ÍÂÙèã¹Ê¶Ò¹Ð·ÕèàÃÕ¡ÇèÒ Recursive Editing Level ä´éâ´Â
+äÁèµÑé§ã¨  ã¹âËÁ´¹Õé à¤Ã×èͧËÁÒÂǧàÅ纠'()' ·ÕèáÊ´§ª×èÍâËÁ´ËÅÑ¡ (major mode) ÍÂÙè¨ÐÁÕǧàÅçº
+'[]' ÅéÍÁ à¾ÔèÁ¢Öé¹Íա˹Ö觪Ñé¹  µÑÇÍÂèÒ§àªè¹ ¶éÒà´ÔÁà»ç¹ (Fundamental) ÍÂÙè ¡ç¨Ðà»ÅÕè¹à»ç¹
+[(Fundamental)] ᷹
 
-\e,TKARB`K\e05X\e1\e(B:       \e,T`CR(Pd\e0Ah\e1M\e08T\e1:RB`\e0!Uh\e1BG\e0!Q\e1:\e(B Recursive Editing Level \e,Tc9\e07Uh\e1\e09Ui\e1\e(B
+ËÁÒÂà˵Ø:       àÃÒ¨ÐäÁè͸ԺÒÂà¡ÕèÂǡѺ Recursive Editing Level ã¹·Õè¹Õé
 
-     \e,Tc\e0Ki\e1!4\e(B M-x top-level <Return> \e,T`\e0>Wh\e1M\e07Uh\e1(PMM!(R!\e(B Recursive Editing Level
+     ãËé¡´ M-x top-level <Return> à¾×èÍ·Õè¨ÐÍÍ¡¨Ò¡ Recursive Editing Level
 
-       >> \e,TEM'!4\e04Y\e1\e(B \e,T5C'\e0Jh\e1G9\e0Eh\e1R'"M'(M(P\e0AU\e1\e0"i\e1M$GRA\e0Gh\e1R\e(B "Back to top level" \e,T;CR!/\e0"Vi\e19\e(B
+       >> Åͧ¡´´Ù µÃ§ÊèǹÅèÒ§¢Í§¨Í¨ÐÁÕ¢éͤÇÒÁÇèÒ "Back to top level" »ÃÒ¡¯¢Öé¹
 
-     \e,T`\e09Wh\e1M'(R!\e(B \e,T`CRM\e0BYh\e1c9CP\e04Q\e1::9\e0JX\e14\e(B (top level) \e,TM\e0BYh\e1a\e0Ei\e1G\e(B  \e,T$S\e0JQh\e1'\e09Ui\e1\e0(V\e1'd\e0Ah\e1\e0AU\e1<Ec4\e(B \e,Tf\e(B
+     à¹×èͧ¨Ò¡ àÃÒÍÂÙèã¹ÃдѺº¹ÊØ´ (top level) ÍÂÙèáÅéÇ  ¤ÓÊÑ觹Õé¨Ö§äÁèÁÕ¼Åã´ æ
 
-     \e,Td\e0Ah\e1JRARC6c\e0*i\e1\e(B \e,T$S\e0JQh\e1'\e(B C-g \e,T`\e0>Wh\e1M\e07Uh\e1(PMM!(R!\e(B Recursive Editing Level \e,Td\e04i\e1\e(B
+     äÁèÊÒÁÒöãªé ¤ÓÊÑ觠C-g à¾×èÍ·Õè¨ÐÍÍ¡¨Ò¡ Recursive Editing Level ä´é
 
 
 Help
 ====
 
-     Emacs \e0\e,TAU\e1$GRAJRARC6\e07Uh\e1\e0AU\e1;CPbB*\e09l\e1\e(B \e,TAR!ARBKERBM\e0Bh\e1R'\e(B \e0\e,T+Vh\e1'd\e0Ah\e1JRARC6M\e08T\e1:RBd\e04i\e1KA4c9\e07Uh\e1\e09Ui\e1\e(B
-\e,Ta\e05h\e1`CR(PJRARC6`\e0CU\e1B!c\e0*i\e1\e(B <HELP> \e,T`\e0>Wh\e1M\e07Uh\e1(P`\e0CU\e1B9\e0CYi\e1$GRAJRARC6`K\e0Eh\e1R\e09Ui\e1\e(B \e,Td\e04i\e1b4B!RC!4\e(B C-h \e0\e,T+Vh\e1'(P\e(B
-\e0\e,T*h\e1GBc\e0Ki\e1`CRd\e04i\e1\e0CQ\e1:\e0CYi\e1\e0"i\e1M\e0AY\e1E`\e0>Th\e1A`\e05T\e1AKERBM\e0Bh\e1R'\e(B
+     Emacs ÁÕ¤ÇÒÁÊÒÁÒö·ÕèÁÕ»ÃÐ⪹ì ÁÒ¡ÁÒÂËÅÒÂÍÂèÒ§ «Öè§äÁèÊÒÁÒö͸ԺÒÂä´éËÁ´ã¹·Õè¹Õé
+áµèàÃÒ¨ÐÊÒÁÒöàÃÕ¡ãªé <HELP> à¾×èÍ·Õè¨ÐàÃÕ¹ÃÙé¤ÇÒÁÊÒÁÒöàËÅèÒ¹Õé ä´éâ´Â¡Òá´ C-h «Ö觨Ð
+ªèÇÂãËéàÃÒä´éÃѺÃÙé¢éÍÁÙÅà¾ÔèÁàµÔÁËÅÒÂÍÂèÒ§
 
-     \e0\e,TGT\e1\e08U\e1c\e0*i\e1\e0$W\e1Mc\e0Ki\e1!4\e(B C-h \e,Ta\e0Ei\e1G5RA\e04i\e1GB\e05Q\e1G`\e0EW\e1M!\e(B (option) \e0\e,TMU\e1!K\e09Vh\e1'\e05Q\e1G\e0MQ\e1!IC\e(B  \e0\e,T6i\e1Rd\e0Ah\e1\e0CYi\e1\e0Gh\e1R(P\e05i\e1M'c\e0*i\e1\e(B
-\e0\e,T5Q\e1G`\e0EW\e1M!MPdC\e(B \e0\e,T!g\e1c\e0Ki\e1!4\e(B C-h ?  \e,Ta\e0Ei\e1G(P\e0AU\e1$SM\e08T\e1:RB`\e0!Uh\e1BG\e0!Q\e1:\e05Q\e1G`\e0EW\e1M!;CR!/\e0"Vi\e19\e(B  \e,Td\e04i\e1KR!`;\e0EUh\e1B9c((P\e(B
-\e,Td\e0Ah\e1`\e0CU\e1B!\e(B HELP \e,TK\e0EQ\e1'(R!!4\e(B C-h \e0\e,T!g\e1c\e0Ki\e1!4\e(B C-g \e,T`\e0>Wh\e1MB!`\e0ET\e1!d\e04i\e1\e(B
+     ÇÔ¸Õãªé¤×ÍãËé¡´ C-h áÅéǵÒÁ´éǵÑÇàÅ×Í¡ (option) Íա˹Ö觵ÑÇÍÑ¡Éà ¶éÒäÁèÃÙéÇèҨеéͧãªé
+µÑÇàÅ×Í¡ÍÐäà¡çãËé¡´ C-h ?  áÅéǨÐÁÕ¤Ó͸ԺÒÂà¡ÕèÂǡѺµÑÇàÅ×Í¡»ÃÒ¡¯¢Öé¹  ä´éËÒ¡à»ÅÕè¹㨨Ð
+äÁèàÃÕ¡ HELP ËÅѧ¨Ò¡¡´ C-h ¡çãËé¡´ C-g à¾×èÍ¡àÅÔ¡ä´é
 
-     \e,T$S\e0JQh\e1'\e(B HELP \e0\e,T>Wi\e190R9\e07Uh\e1\e0JX\e14\e0MQ\e19K\e09Vh\e1'\e0!g\e1\e0$W\e1M\e(B C-h c \e,Ta\e0Ei\e1G5RA\e04i\e1GB!RC!4$S\e0JQh\e1':R'$S\e0JQh\e1'\e(B  \e0\e,T+Vh\e1'(Pc\e0Ki\e1$S\e(B
-\e,TM\e08T\e1:RB\e0JQi\e19\e(B \e,Tf\e(B \e,T`\e0!Uh\e1BG\e0!Q\e1:$S\e0JQh\e1'\e09Qi\e19\e(B
+     ¤ÓÊÑ觠HELP ¾×é¹°Ò¹·ÕèÊØ´Íѹ˹Ö觡ç¤×Í C-h c áÅéǵÒÁ´éÇ¡Òá´¤ÓÊÑ觺ҧ¤ÓÊÑ觠 «Ö觨ÐãËé¤Ó
+͸ԺÒÂÊÑé¹ æ à¡ÕèÂǡѺ¤ÓÊÑ觹Ñé¹
 
-       >> \e,TEM'!4\e(B C-h c C-p \e0\e,T4Y\e1\e(B  \e0\e,T+Vh\e1'(Pc\e0Ki\e1\e0"i\e1M$GRA\e0Gh\e1R\e(B
+       >> Åͧ¡´ C-h c C-p ´Ù  «Ö觨ÐãËé¢éͤÇÒÁÇèÒ
           "C-p runs the command previous-line"
 
-     \e,T$S\e0JQh\e1'\e09Ui\e1(P\e0*h\e1GB\e0CWi\e1M\e0?Wi\e19$GRA(S\e(B \e,T`\e0!Uh\e1BG\e0!Q\e1:$S\e0JQh\e1'\e07Uh\e1`$B\e0<h\e1R95Ra\e0Ei\e1G\e(B \e,Ta\e05h\e1(Sd\e0Ah\e1d\e04i\e1\e(B \e,Td\e04i\e1`\e0;g\e19M\e0Bh\e1R'\e04U\e1\e(B  \e,T$S\e0JQh\e1'\e(B
-\e0\e,T7Uh\e1\e0AU\e1AR!!\e0Gh\e1RK\e09Vh\e1'\e05Q\e1G\e0MQ\e1!IC\e(B \e,T`\e0*h\e19\e(B C-x C-s \e0\e,T!g\e1JRARC6!45RAK\e0EQ\e1'\e(B C-h c \e,Td\e04i\e1\e(B
+     ¤ÓÊÑ觹Õé¨ÐªèÇÂÃ×éÍ¿×鹤ÇÒÁ¨Ó à¡ÕèÂǡѺ¤ÓÊÑ觷Õèà¤Â¼èÒ¹µÒáÅéÇ áµè¨ÓäÁèä´é ä´éà»ç¹ÍÂèÒ§´Õ  ¤ÓÊÑè§
+·ÕèÁÕÁÒ¡¡ÇèÒ˹Ö觵ÑÇÍÑ¡Éààªè¹ C-x C-s ¡çÊÒÁÒö¡´µÒÁËÅѧ C-h c ä´é
 
-     \e0\e,T6i\e1RKR!\e05i\e1M'!RC\e0CYi\e1CRBEP`\e0MU\e1B4AR!!\e0Gh\e1R\e09Ui\e1\e(B  \e0\e,T!g\e1c\e0Ki\e1c\e0*i\e1\e(B k \e,Ta79\e05Q\e1G\e(B c
+     ¶éÒËÒ¡µéͧ¡ÒÃÃÙéÃÒÂÅÐàÍÕ´ÁÒ¡¡ÇèÒ¹Õé  ¡çãËéãªé k á·¹µÑÇ c
 
-       >> \e,TEM'!4\e(B C-h k C-p \e0\e,T4Y\e1\e(B
+       >> Åͧ¡´ C-h k C-p ´Ù
 
-     \e0\e,T!g\e1(P\e0AU\e1\e0GT\e19b4\e0Gl\e1`\e0>Th\e1Ac9\e(B Emacs \e0\e,TMU\e1!K\e09Vh\e1'\e0MQ\e19\e(B \e,T`\e0>Wh\e1MaJ4'CRBEP`\e0MU\e1B4"M'$S\e0JQh\e1'\e09Qi\e19\e(B  \e,T`\e0AWh\e1M\e0Mh\e1R9(:a\e0Ei\e1G\e(B
-\e0\e,T!g\e1c\e0Ki\e1!4\e(B C-x 1 \e,T`\e0>Th\e1AE:\e0GT\e19b4\e0Gl\e1MM!\e(B
+     ¡ç¨ÐÁÕÇÔ¹â´Çìà¾ÔèÁã¹ Emacs Íա˹Öè§Íѹ à¾×èÍáÊ´§ÃÒÂÅÐàÍÕ´¢Í§¤ÓÊÑ觹Ñé¹  àÁ×èÍÍèÒ¹¨ºáÅéÇ
+¡çãËé¡´ C-x 1 à¾ÔèÁźÇÔ¹â´ÇìÍÍ¡
 
-     \e0\e,T5Q\e1G`\e0EW\e1M!\e0MWh\e19\e07Uh\e1\e0AU\e1;CPbB*\e09l\e1\e(B \e0\e,TAU\e1\e04Q\e1'\e09Ui\e1\e(B
+     µÑÇàÅ×Í¡Í×è¹·ÕèÁÕ»ÃÐ⪹ì Áմѧ¹Õé
 
-    C-h f      \e,Tc\e0Ki\e1c\e0Jh\e1\e0*Wh\e1M"M'$S\e0JQh\e1'\e(B \e,T`\e0>Wh\e1MaJ4'CRBEP`\e0MU\e1B4`\e0!Uh\e1BG\e0!Q\e1:$S\e0JQh\e1'\e09Qi\e19\e(B
+    C-h f      ãËéãÊèª×èͧ͢¤ÓÊÑ觠à¾×èÍáÊ´§ÃÒÂÅÐàÍÕ´à¡ÕèÂǡѺ¤ÓÊÑ觹Ñé¹
 
-       >> \e,Tc\e0Ki\e1!4\e(B C-h f previous-line \e,Ta\e0Ei\e1G5RA\e04i\e1GB\e(B <Return> \e,T`\e0>Wh\e1MaJ4'CRBEP`\e0MU\e1B4`\e0!Uh\e1BG\e(B
-          \e0\e,T!Q\e1:$S\e0JQh\e1'\e0+Vh\e1'`\e0CU\e1B!c\e0*i\e1d\e04i\e1(R!!RC!4\e(B C-p
+       >> ãËé¡´ C-h f previous-line áÅéǵÒÁ´éÇ <Return> à¾×èÍáÊ´§ÃÒÂÅÐàÍÕ´à¡ÕèÂÇ
+          ¡Ñº¤ÓÊÑ觫Öè§àÃÕ¡ãªéä´é¨Ò¡¡Òá´ C-p
 
-    C-h a      \e,Ta\e0Ei\e1G5RA\e04i\e1GB\e0$U\e1\e0Bl\e1`\e0GT\e1\e0Cl\e14\e(B (keyword) \e,T`\e0>Wh\e1MaJ4'$S\e0JQh\e1'\e07X\e1!$S\e0JQh\e1'\e(B \e0\e,T7Uh\e1\e0AU\e1\e0$U\e1\e0Bl\e1`\e0GT\e1\e0Cl\e14\e(B \e,TCGAM\e0BYh\e1\e(B
-               \e,T$S\e0JQh\e1'`K\e0Eh\e1R\e09Ui\e1JRARC6`\e0CU\e1B!c\e0*i\e1d\e04i\e1b4B!RC!4\e(B ESC x
+    C-h a      áÅéǵÒÁ´éǤÕÂìàÇÔÃì´ (keyword) à¾×èÍáÊ´§¤ÓÊÑ觷ء¤ÓÊÑ觠·ÕèÁÕ¤ÕÂìàÇÔÃì´ ÃÇÁÍÂÙè
+               ¤ÓÊÑè§àËÅèÒ¹ÕéÊÒÁÒöàÃÕ¡ãªéä´éâ´Â¡Òá´ ESC x
 
-       >> \e,TEM'!4\e(B C-h a file \e,Ta\e0Ei\e1G5RA\e04i\e1GB\e(B <Return> \e,T`\e0>Wh\e1MaJ4'\e0*Wh\e1M$S\e0JQh\e1'\e07X\e1!$S\e0JQh\e1'\e07Uh\e1\e0AU\e1$S\e0Gh\e1R\e(B
-          "file" \e,TCGAM\e0BYh\e1\e(B  \e0\e,T+Vh\e1'(P\e0AU\e1\e(B find-file \e,TaEP\e(B write-file \e0\e,T7Uh\e1`\e0CU\e1B!c\e0*i\e1d\e04i\e1b4B!RC!4\e(B
-          C-x C-f \e,TaEP\e(B C-x C-w \e,TCGAM\e0BYh\e1\e04i\e1GB\e(B
+       >> Åͧ¡´ C-h a file áÅéǵÒÁ´éÇ <Return> à¾×èÍáÊ´§ª×èͤÓÊÑ觷ء¤ÓÊÑ觷ÕèÁÕ¤ÓÇèÒ
+          "file" ÃÇÁÍÂÙè  «Ö觨ÐÁÕ find-file áÅРwrite-file ·ÕèàÃÕ¡ãªéä´éâ´Â¡Òá´
+          C-x C-f áÅРC-x C-w ÃÇÁÍÂÙè´éÇÂ
 
-\e0\e,T7i\e1RB\e0JX\e14\e09Ui\e1\e(B
+·éÒÂÊØ´¹Õé
 ======
 
-\e,TM\e0Bh\e1R\e0EW\e1A\e(B:         \e,T$S\e0JQh\e1'JSK\e0CQ\e1:!RC`\e0ET\e1!\e(B Emacs \e0\e,T$W\e1M\e(B C-x C-c
+ÍÂèÒÅ×Á:         ¤ÓÊÑè§ÊÓËÃѺ¡ÒÃàÅÔ¡ Emacs ¤×Í C-x C-c
 
 
-     \e,T`M!JRC)\e0:Q\e1:`\e0:Wi\e1M'\e05i\e19\e09Ui\e1\e(B  \e0\e,T5Qi\e1'c(`\e0"U\e1B9\e0"Vi\e19JSK\e0CQ\e1:\e0<Yi\e1\e07Uh\e1`\e0CTh\e1A\e0KQ\e14cK\e0Ah\e1\e(B \e,Tb4B`)>RP\e(B  \e0\e,T6i\e1RKR!\e0AU\e1\e0(X\e14dK9\e07Uh\e1d\e0Ah\e1\e(B
-\e,T`\e0"i\e1Rc(\e(B \e0\e,T!g\e1M\e0Bh\e1R\e0AQ\e1Ga\e05h\e1b7I\e05Q\e1G`M'\e(B  \e,Ta\e05h\e1"Mc\e0Ki\e1bB9$GRA\e0<T\e14AR\e0BQ\e1'\e0<Yi\e1`\e0"U\e1B9a79\e(B
+     àÍ¡ÊÒéºÑºàº×éͧµé¹¹Õé  µÑé§ã¨à¢Õ¹¢Öé¹ÊÓËÃѺ¼Ùé·ÕèàÃÔèÁËÑ´ãËÁè â´Â੾ÒР ¶éÒËÒ¡Áըشä˹·ÕèäÁè
+à¢éÒ㨠¡çÍÂèÒÁÑÇáµèâ·ÉµÑÇàͧ  áµè¢ÍãËé⹤ÇÒÁ¼Ô´ÁÒÂѧ¼Ùéà¢Õ¹᷹
 
 
-     \e,TK\e0EQ\e1'(R!c\e0*i\e1\e(B EMACS \e0\e,T4Y\e1\e0JQ\e1!JM'JRA\e0GQ\e19\e(B \e0\e,T!g\e1$'(P\e0*T\e19d;`M'\e(B  \e,Tc95M9aC!\e(B \e,TMR((P\e0AU\e1\e0(X\e14\e07Uh\e1\e0CYi\e1\e0JV\e1!\e0JQ\e1:J9aEP\e(B
-\e,Td\e0Ah\e1`\e0"i\e1Rc(M\e0BYh\e1\e0:i\e1R'\e(B  \e,Ta\e05h\e1\e0JTh\e1'\e09Ui\e1\e0Bh\e1MA`\e0!T\e14\e0"Vi\e19`JAM\e(B \e,T`GERa\e05h\e1`\e0CTh\e1Ac\e0*i\e1\e(B Editor \e,TcK\e0Ah\e1c4\e(B \e,Tf\e(B \e0\e,T!g\e15RA\e(B  \e,Tb4B`)>RP\e(B
-\e,TM\e0Bh\e1R'\e0BTh\e1'\e0!Q\e1:\e(B EMACS \e,T`\e09Wh\e1M'(R!`\e0;g\e19b;Ca!CA\e07Uh\e1\e0AU\e1$GRAJRARC6KER!KERBAR!\e(B   \e0\e,TMQ\e19\e07Uh\e1(\e0CT\e1'a\e0Ei\e1G\e(B EMACS
-\e,T7Sd\e04i\e1\e07X\e1!\e0JTh\e1'\e07X\e1!M\e0Bh\e1R'\e(B
+     ËÅѧ¨Ò¡ãªé EMACS ´ÙÊÑ¡ÊͧÊÒÁÇѹ ¡ç¤§¨ÐªÔ¹ä»àͧ  ã¹µÍ¹áá ÍÒ¨¨ÐÁըش·ÕèÃÙéÊÖ¡ÊѺʹáÅÐ
+äÁèà¢éÒã¨ÍÂÙèºéÒ§  áµèÊÔ觹ÕéÂèÍÁà¡Ô´¢Öé¹àÊÁÍ àÇÅÒáµèàÃÔèÁãªé Editor ãËÁèã´ æ ¡çµÒÁ  â´Â੾ÒÐ
+ÍÂèÒ§ÂÔ觡Ѻ EMACS à¹×èͧ¨Ò¡à»ç¹â»Ãá¡ÃÁ·ÕèÁÕ¤ÇÒÁÊÒÁÒöËÅÒ¡ËÅÒÂÁÒ¡   Íѹ·Õè¨ÃÔ§áÅéÇ EMACS
+·Óä´é·Ø¡ÊÔ觷ءÍÂèÒ§
 
 
 
-\e,T"M"M:\e0$X\e13\e(B
+¢Í¢Íº¤Ø³
 =======
-     \e,T`M!JRC)\e0:Q\e1:\e09Ui\e1\e(B \e0\e,T4Q\e14a;E'AR(R!\e(B "MicroEMACS (kemacs) \e,T@RIR\e0-Uh\e1\e0;Xh\e19\e(B \e,T`\e0:Wi\e1M'\e05i\e19\e(B" \e0\e,T+Vh\e1'd\e04i\e1AR(R!\e(B
-JUNET \e,T`\e0>Wh\e1Mc\e0Ki\e1c\e0*i\e1`\e0;g\e19\e(B Tutorial \e,TJSK\e0CQ\e1:\e(B GNUEmacs (Nemacs)
+     àÍ¡ÊÒéºÑº¹Õé ´Ñ´á»Å§ÁÒ¨Ò¡ "MicroEMACS (kemacs) ÀÒÉÒ­Õè»Øè¹ àº×éͧµé¹" «Öè§ä´éÁÒ¨Ò¡
+JUNET à¾×èÍãËéãªéà»ç¹ Tutorial ÊÓËÃѺ GNUEmacs (Nemacs)
 
-     \e,T`M!JRC\e09Ui\e1\e(B \e0\e,T4Q\e14a;E'AR(R!\e(B "JOVE Tutorial" (19 \e,TA!CR$A\e(B 86) \e,T"M'\e(B Jonathan Payne
-     \e0\e,T+Vh\e1'\e04Q\e14a;E'AR(R!`M!JRC"M'\e(B Steve Zimmerman \e,Ta\e0Kh\e1'\e(B CCA-UNIX \e0\e,T+Vh\e1'\e04Q\e14a;E'\e(B (\e0\e,TMU\e1!\e07U\e1\e(B) \e,TAR\e(B
-     \e,T(R!`M!JRC\e(B "Teach-Emacs" \e,T)\e0:Q\e1:`\e0:Wi\e1M'\e05i\e19\e(B (31 \e0\e,T5X\e1ER$A\e(B 85) \e,T"M'\e(B MIT
+     àÍ¡ÊÒùÕé ´Ñ´á»Å§ÁÒ¨Ò¡ "JOVE Tutorial" (19 Á¡ÃÒ¤Á 86) ¢Í§ Jonathan Payne
+     «Ö觴Ѵá»Å§ÁÒ¨Ò¡àÍ¡ÊÒâͧ Steve Zimmerman áË觠CCA-UNIX «Ö觴Ѵá»Å§ (ÍÕ¡·Õ) ÁÒ
+     ¨Ò¡àÍ¡ÊÒà"Teach-Emacs" ©ºÑºàº×éͧµé¹ (31 µØÅÒ¤Á 85) ¢Í§ MIT
 
      Update - February 1986 by Dana Hoggatt.
 
@@ -671,20 +671,20 @@ JUNET \e,T`\e0>Wh\e1Mc\e0Ki\e1c\e0*i\e1`\e0;g\e19\e(B Tutorial \e,TJSK\e0CQ\e1:\e(B GNUEmacs (
 
      Update/Translate - July 1987 by SANETO Takanori
 
-\e,T"M"M:\e0$X\e13`\e0;g\e19\e0>T\e1`HI\e(B
+¢Í¢Íº¤Ø³à»ç¹¾ÔàÈÉ
 ==============
 
-     \e0\e,T$X\e13\e(B SANETO Takanori (\e,T+R`9b5P\e(B \e,T7R!Rb9\e0CT\e1\e(B) \e0\e,T<Yi\e1a;E@RIR\e0-Uh\e1\e0;Xh\e19)\e0:Q\e1:aC!\e0JX\e14\e(B  \e,T`M!JRC)\e0:Q\e1:\e09Ui\e1\e(B
-\e,T`\e0"U\e1B9\e04i\e1GB\e(B GMW + Wnn + Nemacs  \e,T"MaJ4'$GRA"M:\e0$X\e13\e(B \e,Ta\e04h\e1\e0<Yi\e1\e07Uh\e1J\e0Ci\e1R'b;Ca!CA\e0JX\e14\e0GT\e1`HI`K\e0Eh\e1R\e09Ui\e1\e0"Vi\e19\e(B
-\e,TaEP"M"M:\e0$X\e13\e(B \e0\e,T$X\e13\e(B Fujiwara Shoko \e0\e,T7Uh\e1c\e0Ki\e1$GRA\e0*h\e1GB`K\e0EW\e1Mc9!RCa;E\e(B \e,T!RC\e0;i\e1M9\e0"i\e1M\e0AY\e1E\e(B \e,TaEPM\e0Bh\e1R'\e0MWh\e19\e0MU\e1!\e(B
-\e,TKERB\e(B \e,Tf\e(B \e,TM\e0Bh\e1R'\e(B
+     ¤Ø³ SANETO Takanori («Òà¹âµÐ ·Ò¡Òâ¹ÃÔ) ¼Ùéá»ÅÀÒÉÒ­Õè»Ø蹩ºÑºááÊØ´  àÍ¡ÊÒéºÑº¹Õé
+à¢Õ¹´éÇ GMW + Wnn + Nemacs  ¢ÍáÊ´§¤ÇÒÁ¢Íº¤Ø³ á´è¼Ùé·ÕèÊÃéÒ§â»Ãá¡ÃÁÊØ´ÇÔàÈÉàËÅèÒ¹Õé¢Öé¹
+áÅТ͢ͺ¤Ø³ ¤Ø³ Fujiwara Shoko ·ÕèãËé¤ÇÒÁªèÇÂàËÅ×Í㹡ÒÃá»Å ¡Òûé͹¢éÍÁÙÅ áÅÐÍÂèÒ§Í×è¹ÍÕ¡
+ËÅÒ æ ÍÂèÒ§
 
 
 
 
-\e,T"M\e0CQ\e1:\e0<T\e14*M:\e(B \e,T!RCa;E\e07Uh\e1\e0<T\e14>ER4\e(B \e0\e,T"i\e1M\e0AY\e1E`\e07g\e1(\e(B \e,TaEP\e0MWh\e19\e(B \e,Tf\e(B \e,Td\e0Gi\e1a\e05h\e1`\e0>U\e1B'\e0<Yi\e1`\e04U\e1BG\e(B
+¢ÍÃѺ¼Ô´ªÍº ¡ÒÃá»Å·Õè¼Ô´¾ÅÒ´ ¢éÍÁÙÅà·ç¨ áÅÐÍ×è¹ æ äÇéáµèà¾Õ§¼Ùéà´ÕÂÇ
 
-                        \e0\e,T+X\e1\e0+Y\e1\e0!T\e1\e(B \e0\e,TNT\e1bCb9\e0:X\e1\e(B@sra.co.jp
+                        «Ø«Ù¡Ô ÎÔâÃ⹺Ø@sra.co.jp
 
 
 Update/Add - December 1987 by Hironobu Suzuki
index ea3e9a0..b466a85 100644 (file)
@@ -1,3 +1,12 @@
+1999-07-30  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+       * XEmacs 21.2.19 is released
+
+1999-07-22  SL Baur  <steve@miho>
+
+       * Makefile.in.in (datadir): Add.
+       From Jeff Miller <jmiller@smart.net>
+
 1999-07-13  XEmacs Build Bot <builds@cvs.xemacs.org>
 
        * XEmacs 21.2.18 is released
index 87116be..9fa565b 100644 (file)
@@ -53,6 +53,7 @@ exec_prefix=@exec_prefix@
 bindir=@bindir@
 libdir=@libdir@
 srcdir=@srcdir@
+datadir=@datadir@
 top_srcdir=@top_srcdir@
 archlibdir=@archlibdir@
 configuration=@configuration@
index b182bab..3a1cdc1 100644 (file)
@@ -97,6 +97,8 @@ includedir "@includedir@"
 infodir "@infodir@"
 infopath "@infopath@"
 install_pp "@install_pp@"
+inststaticdir "@inststaticdir@"
+instvardir "@instvardir@"
 internal_makefile_list "@internal_makefile_list@"
 ld "@ld@"
 ld_dynamic_link_flags "@ld_dynamic_link_flags@"
index c829284..e7920c0 100644 (file)
@@ -32,6 +32,9 @@
 
 ;;; Code:
 
+(defvar switch-to-buffer-hooks nil
+  "Hooks to run after a recorded buffer switch.")
+
 (defun switch-to-buffer (bufname &optional norecord)
   "Select buffer BUFNAME in the current window.
 BUFNAME may be a buffer or a buffer name and is created if it did not exist.
@@ -65,6 +68,8 @@ the window-buffer correspondences."
                           (next-window (minibuffer-window))
                         (selected-window))
                       buf)
+    ;; XEmacs change
+    (or norecord (run-hook-with-args 'switch-to-buffer-hooks buf))
     buf))
 
 (defun pop-to-buffer (bufname &optional not-this-window-p on-frame)
index c07749a..87306b8 100644 (file)
@@ -374,9 +374,6 @@ with the file contents.  This is better than simply deleting and inserting
 the whole thing because (1) it preserves some marker positions
 and (2) it puts less data in the undo list.
 
-NOTE: When Mule support is enabled, the REPLACE argument is
-currently ignored.
-
 The coding system used for decoding the file is determined as follows:
 
 1. `coding-system-for-read', if non-nil.
index 6952081..50fdd03 100644 (file)
@@ -29,7 +29,7 @@
 ;;; Code:
 
 \f
-(defvar config-value-file (expand-file-name "config.values" exec-directory)
+(defvar config-value-file (expand-file-name "config.values" doc-directory)
   "File containing configuration parameters and their values.")
 
 (defvar config-value-hash-table nil
index efe6ffb..5851776 100644 (file)
@@ -617,7 +617,7 @@ when the action is chosen.")
 \f
 ;;; The Customize Commands
 
-(defun custom-prompt-variable (prompt-var prompt-val)
+(defun custom-prompt-variable (prompt-var prompt-val &optional comment)
   "Prompt for a variable and a value and return them as a list.
 PROMPT-VAR is the prompt for the variable, and PROMPT-VAL is the
 prompt for the value.  The %s escape in PROMPT-VAL is replaced with
@@ -627,10 +627,13 @@ If the variable has a `variable-interactive' property, that is used as if
 it were the arg to `interactive' (which see) to interactively read the value.
 
 If the variable has a `custom-type' property, it must be a widget and the
-`:prompt-value' property of that widget will be used for reading the value."
+`:prompt-value' property of that widget will be used for reading the value.
+
+If optional COMMENT argument is non nil, also prompt for a comment and return
+it as the third element in the list."
   (let* ((var (read-variable prompt-var))
-        (minibuffer-help-form '(describe-variable var)))
-    (list var
+        (minibuffer-help-form '(describe-variable var))
+        (val
          (let ((prop (get var 'variable-interactive))
                (type (get var 'custom-type))
                (prompt (format prompt-val var)))
@@ -649,24 +652,36 @@ If the variable has a `custom-type' property, it must be a widget and the
                                            (symbol-value var))
                                        (not (boundp var))))
                  (t
-                  (eval-minibuffer prompt)))))))
+                  (eval-minibuffer prompt))))))
+    (if comment
+       (list var val
+             (read-string "Comment: " (get var 'variable-comment)))
+      (list var val))
+    ))
 
 ;;;###autoload
-(defun customize-set-value (var val)
+(defun customize-set-value (var val &optional comment)
   "Set VARIABLE to VALUE.  VALUE is a Lisp object.
 
 If VARIABLE has a `variable-interactive' property, that is used as if
 it were the arg to `interactive' (which see) to interactively read the value.
 
 If VARIABLE has a `custom-type' property, it must be a widget and the
-`:prompt-value' property of that widget will be used for reading the value."
+`:prompt-value' property of that widget will be used for reading the value.
+
+If given a prefix (or a COMMENT argument), also prompt for a comment."
   (interactive (custom-prompt-variable "Set variable: "
-                                      "Set %s to value: "))
+                                      "Set %s to value: "
+                                      current-prefix-arg))
 
-  (set var val))
+  (set var val)
+  (cond ((string= comment "")
+        (put var 'variable-comment nil))
+       (comment
+        (put var 'variable-comment comment))))
 
 ;;;###autoload
-(defun customize-set-variable (var val)
+(defun customize-set-variable (var val &optional comment)
   "Set the default for VARIABLE to VALUE.  VALUE is a Lisp object.
 
 If VARIABLE has a `custom-set' property, that is used for setting
@@ -679,14 +694,24 @@ If VARIABLE has a `variable-interactive' property, that is used as if
 it were the arg to `interactive' (which see) to interactively read the value.
 
 If VARIABLE has a `custom-type' property, it must be a widget and the
-`:prompt-value' property of that widget will be used for reading the value. "
+`:prompt-value' property of that widget will be used for reading the value.
+
+If given a prefix (or a COMMENT argument), also prompt for a comment."
   (interactive (custom-prompt-variable "Set variable: "
-                                      "Set customized value for %s to: "))
+                                      "Set customized value for %s to: "
+                                      current-prefix-arg))
   (funcall (or (get var 'custom-set) 'set-default) var val)
-  (put var 'customized-value (list (custom-quote val))))
+  (put var 'customized-value (list (custom-quote val)))
+  (cond ((string= comment "")
+        (put var 'variable-comment nil)
+        (put var 'customized-variable-comment nil))
+       (comment
+        (put var 'variable-comment comment)
+        (put var 'customized-variable-comment comment))))
+
 
 ;;;###autoload
-(defun customize-save-variable (var val)
+(defun customize-save-variable (var val &optional comment)
   "Set the default for VARIABLE to VALUE, and save it for future sessions.
 If VARIABLE has a `custom-set' property, that is used for setting
 VARIABLE, otherwise `set-default' is used.
@@ -698,11 +723,21 @@ If VARIABLE has a `variable-interactive' property, that is used as if
 it were the arg to `interactive' (which see) to interactively read the value.
 
 If VARIABLE has a `custom-type' property, it must be a widget and the
-`:prompt-value' property of that widget will be used for reading the value. "
+`:prompt-value' property of that widget will be used for reading the value.
+
+If given a prefix (or a COMMENT argument), also prompt for a comment."
   (interactive (custom-prompt-variable "Set and ave variable: "
-                                      "Set and save value for %s as: "))
+                                      "Set and save value for %s as: "
+                                      current-prefix-arg))
   (funcall (or (get var 'custom-set) 'set-default) var val)
   (put var 'saved-value (list (custom-quote val)))
+  (custom-push-theme 'theme-value var 'user 'set (list (custom-quote val)))
+  (cond ((string= comment "")
+        (put var 'variable-comment nil)
+        (put var 'saved-variable-comment nil))
+       (comment
+        (put var 'variable-comment comment)
+        (put var 'saved-variable-comment comment)))
   (custom-save-all))
 
 ;;;###autoload
@@ -842,10 +877,12 @@ If SYMBOL is nil, customize all faces."
   (interactive)
   (let ((found nil))
     (mapatoms (lambda (symbol)
-               (and (get symbol 'customized-face)
+               (and (or (get symbol 'customized-face)
+                        (get symbol 'customized-face-comment))
                     (find-face symbol)
                     (push (list symbol 'custom-face) found))
-               (and (get symbol 'customized-value)
+               (and (or (get symbol 'customized-value)
+                        (get symbol 'customized-variable-comment))
                     (boundp symbol)
                     (push (list symbol 'custom-variable) found))))
     (if (not found)
@@ -859,10 +896,12 @@ If SYMBOL is nil, customize all faces."
   (interactive)
   (let ((found nil))
     (mapatoms (lambda (symbol)
-               (and (get symbol 'saved-face)
+               (and (or (get symbol 'saved-face)
+                        (get symbol 'saved-face-comment))
                     (find-face symbol)
                     (push (list symbol 'custom-face) found))
-               (and (get symbol 'saved-value)
+               (and (or (get symbol 'saved-value)
+                        (get symbol 'saved-variable-comment))
                     (boundp symbol)
                     (push (list symbol 'custom-variable) found))))
     (if (not found )
@@ -1705,6 +1744,77 @@ If INITIAL-STRING is non-nil, use that rather than \"Parent groups:\"."
       (delete-region start (point)))
     found))
 
+;;; The `custom-comment' Widget.
+
+;; like the editable field
+(defface custom-comment-face '((((class grayscale color)
+                                (background light))
+                               (:background "gray85"))
+                              (((class grayscale color)
+                                (background dark))
+                               (:background "dim gray"))
+                              (t
+                               (:italic t)))
+  "Face used for comments on variables or faces"
+  :group 'custom-faces)
+
+;; like font-lock-comment-face
+(defface custom-comment-tag-face
+  '((((class color) (background dark)) (:foreground "gray80"))
+    (((class color) (background light)) (:foreground "blue4"))
+    (((class grayscale) (background light))
+     (:foreground "DimGray" :bold t :italic t))
+    (((class grayscale) (background dark))
+     (:foreground "LightGray" :bold t :italic t))
+    (t (:bold t)))
+  "Face used for variables or faces comment tags"
+  :group 'custom-faces)
+
+(define-widget 'custom-comment 'string
+  "User comment"
+  :tag "Comment"
+  :help-echo "Edit a comment here"
+  :sample-face 'custom-comment-tag-face
+  :value-face 'custom-comment-face
+  :value-set 'custom-comment-value-set
+  :create 'custom-comment-create
+  :delete 'custom-comment-delete)
+
+(defun custom-comment-create (widget)
+  (let (ext)
+    (widget-default-create widget)
+    (widget-put widget :comment-extent
+               (setq ext (make-extent (widget-get widget :from)
+                                      (widget-get widget :to))))
+    (set-extent-property ext 'start-open t)
+    (when (equal (widget-get widget :value) "")
+      (set-extent-property ext 'invisible t))
+    ))
+
+(defun custom-comment-delete (widget)
+  (widget-default-delete widget)
+  (delete-extent (widget-get widget :comment-extent)))
+
+(defun custom-comment-value-set (widget value)
+  (widget-default-value-set widget value)
+  (if (equal value "")
+      (set-extent-property (widget-get widget :comment-extent)
+                          'invisible t)
+    (set-extent-property (widget-get widget :comment-extent)
+                        'invisible nil)))
+
+;; Those functions are for the menu. WIDGET is NOT the comment widget. It's
+;; the global custom one
+(defun custom-comment-show (widget)
+  (set-extent-property
+   (widget-get (widget-get widget :comment-widget) :comment-extent)
+   'invisible nil))
+
+(defun custom-comment-invisible-p (widget)
+  (extent-property
+   (widget-get (widget-get widget :comment-widget) :comment-extent)
+   'invisible))
+
 ;;; The `custom-variable' Widget.
 
 (defface custom-variable-tag-face '((((class color)
@@ -1870,23 +1980,40 @@ Otherwise, look up symbol in `custom-guess-type-alist'."
                    :value value)
                   children))))
     (unless (eq custom-buffer-style 'tree)
-      ;; Now update the state.
       (unless (eq (preceding-char) ?\n)
        (widget-insert "\n"))
-      (if (eq state 'hidden)
-         (widget-put widget :custom-state state)
-       (custom-variable-state-set widget))
       ;; Create the magic button.
       (let ((magic (widget-create-child-and-convert
                    widget 'custom-magic nil)))
        (widget-put widget :custom-magic magic)
        (push magic buttons))
-      ;; Update properties.
-      (widget-put widget :custom-form form)
-      (widget-put widget :buttons buttons)
-      (widget-put widget :children children)
       ;; Insert documentation.
+      ;; ### NOTE: this is ugly!!!! I need to do update the :buttons property
+      ;; before the call to `widget-default-format-handler'. Otherwise, I
+      ;; loose my current `buttons'. This function shouldn't be called like
+      ;; this anyway. The doc string widget should be added like the others.
+      ;; --dv
+      (widget-put widget :buttons buttons)
       (widget-default-format-handler widget ?h)
+      ;; The comment field
+      (unless (eq state 'hidden)
+       (let* ((comment (get symbol 'variable-comment))
+              (comment-widget
+               (widget-create-child-and-convert
+                widget 'custom-comment
+                :parent widget
+                :value (or comment ""))))
+         (widget-put widget :comment-widget comment-widget)
+         ;; Don't push it !!! Custom assumes that the first child is the
+         ;; value one.
+         (setq children (append children (list comment-widget)))))
+      ;; Update the rest of the properties properties.
+      (widget-put widget :custom-form form)
+      (widget-put widget :children children)
+      ;; Now update the state.
+      (if (eq state 'hidden)
+         (widget-put widget :custom-state state)
+       (custom-variable-state-set widget))
       ;; See also.
       (unless (eq state 'hidden)
        (when (eq (widget-get widget :custom-level) 1)
@@ -1910,22 +2037,32 @@ Otherwise, look up symbol in `custom-guess-type-alist'."
         (value (if (default-boundp symbol)
                    (funcall get symbol)
                  (widget-get widget :value)))
+        (comment (get symbol 'variable-comment))
         tmp
-        (state (cond ((setq tmp (get symbol 'customized-value))
+        temp
+        (state (cond ((progn (setq tmp (get symbol 'customized-value))
+                             (setq temp
+                                   (get symbol 'customized-variable-comment))
+                             (or tmp temp))
                       (if (condition-case nil
-                              (equal value (eval (car tmp)))
+                              (and (equal value (eval (car tmp)))
+                                   (equal comment temp))
                             (error nil))
                           'set
                         'changed))
-                     ((setq tmp (get symbol 'saved-value))
+                     ((progn (setq tmp (get symbol 'saved-value))
+                             (setq temp (get symbol 'saved-variable-comment))
+                             (or tmp temp))
                       (if (condition-case nil
-                              (equal value (eval (car tmp)))
+                              (and (equal value (eval (car tmp)))
+                                   (equal comment temp))
                             (error nil))
                           'saved
                         'changed))
                      ((setq tmp (get symbol 'standard-value))
                       (if (condition-case nil
-                              (equal value (eval (car tmp)))
+                              (and (equal value (eval (car tmp)))
+                                   (equal comment nil))
                             (error nil))
                           'standard
                         'changed))
@@ -1945,7 +2082,8 @@ Otherwise, look up symbol in `custom-guess-type-alist'."
            (memq (widget-get widget :custom-state) '(modified changed)))))
     ("Reset to Saved" custom-variable-reset-saved
      (lambda (widget)
-       (and (get (widget-value widget) 'saved-value)
+       (and (or (get (widget-value widget) 'saved-value)
+               (get (widget-value widget) 'saved-variable-comment))
            (memq (widget-get widget :custom-state)
                  '(modified set changed rogue)))))
     ("Reset to Standard Settings" custom-variable-reset-standard
@@ -1954,6 +2092,8 @@ Otherwise, look up symbol in `custom-guess-type-alist'."
            (memq (widget-get widget :custom-state)
                  '(modified set changed saved rogue)))))
     ("---" ignore ignore)
+    ("Add Comment" custom-comment-show custom-comment-invisible-p)
+    ("---" ignore ignore)
     ("Don't show as Lisp expression" custom-variable-edit
      (lambda (widget)
        (eq (widget-get widget :custom-form) 'lisp)))
@@ -2005,18 +2145,34 @@ Optional EVENT is the location for the menu."
         (child (car (widget-get widget :children)))
         (symbol (widget-value widget))
         (set (or (get symbol 'custom-set) 'set-default))
-         val)
+        (comment-widget (widget-get widget :comment-widget))
+        (comment (widget-value comment-widget))
+        val)
     (cond ((eq state 'hidden)
           (error "Cannot set hidden variable"))
          ((setq val (widget-apply child :validate))
           (goto-char (widget-get val :from))
           (error "%s" (widget-get val :error)))
          ((memq form '(lisp mismatch))
+          (when (equal comment "")
+            (setq comment nil)
+            ;; Make the comment invisible by hand if it's empty
+            (set-extent-property (widget-get comment-widget :comment-extent)
+                                 'invisible t))
           (funcall set symbol (eval (setq val (widget-value child))))
-          (put symbol 'customized-value (list val)))
+          (put symbol 'customized-value (list val))
+          (put symbol 'variable-comment comment)
+          (put symbol 'customized-variable-comment comment))
          (t
+          (when (equal comment "")
+            (setq comment nil)
+            ;; Make the comment invisible by hand if it's empty
+            (set-extent-property (widget-get comment-widget :comment-extent)
+                                 'invisible t))
           (funcall set symbol (setq val (widget-value child)))
-          (put symbol 'customized-value (list (custom-quote val)))))
+          (put symbol 'customized-value (list (custom-quote val)))
+          (put symbol 'variable-comment comment)
+          (put symbol 'customized-variable-comment comment)))
     (custom-variable-state-set widget)
     (custom-redraw-magic widget)))
 
@@ -2027,6 +2183,8 @@ Optional EVENT is the location for the menu."
         (child (car (widget-get widget :children)))
         (symbol (widget-value widget))
         (set (or (get symbol 'custom-set) 'set-default))
+        (comment-widget (widget-get widget :comment-widget))
+        (comment (widget-value comment-widget))
         val)
     (cond ((eq state 'hidden)
           (error "Cannot set hidden variable"))
@@ -2034,14 +2192,34 @@ Optional EVENT is the location for the menu."
           (goto-char (widget-get val :from))
           (error "%s" (widget-get val :error)))
          ((memq form '(lisp mismatch))
+          (when (equal comment "")
+            (setq comment nil)
+            ;; Make the comment invisible by hand if it's empty
+            (set-extent-property (widget-get comment-widget :comment-extent)
+                                 'invisible t))
           (put symbol 'saved-value (list (widget-value child)))
-          (funcall set symbol (eval (widget-value child))))
+          (custom-push-theme 'theme-value symbol 'user
+                             'set (list (widget-value child)))
+          (funcall set symbol (eval (widget-value child)))
+          (put symbol 'variable-comment comment)
+          (put symbol 'saved-variable-comment comment))
          (t
+          (when (equal comment "")
+            (setq comment nil)
+            ;; Make the comment invisible by hand if it's empty
+            (set-extent-property (widget-get comment-widget :comment-extent)
+                                 'invisible t))
           (put symbol
                'saved-value (list (custom-quote (widget-value
                                                  child))))
-          (funcall set symbol (widget-value child))))
+          (custom-push-theme 'theme-value symbol 'user
+                             'set (list (custom-quote (widget-value
+                                                 child))))
+          (funcall set symbol (widget-value child))
+          (put symbol 'variable-comment comment)
+          (put symbol 'saved-variable-comment comment)))
     (put symbol 'customized-value nil)
+    (put symbol 'customized-variable-comment nil)
     (custom-save-all)
     (custom-variable-state-set widget)
     (custom-redraw-magic widget)))
@@ -2049,28 +2227,45 @@ Optional EVENT is the location for the menu."
 (defun custom-variable-reset-saved (widget)
   "Restore the saved value for the variable being edited by WIDGET."
   (let* ((symbol (widget-value widget))
-        (set (or (get symbol 'custom-set) 'set-default)))
-    (if (get symbol 'saved-value)
-       (condition-case nil
-           (funcall set symbol (eval (car (get symbol 'saved-value))))
-         (error nil))
-      (signal 'error (list "No saved value for variable" symbol)))
+        (set (or (get symbol 'custom-set) 'set-default))
+        (comment-widget (widget-get widget :comment-widget))
+        (value (get symbol 'saved-value))
+        (comment (get symbol 'saved-variable-comment)))
+    (cond ((or value comment)
+          (put symbol 'variable-comment comment)
+          (condition-case nil
+              (funcall set symbol (eval (car value)))
+            (error nil)))
+         (t
+          (signal 'error (list "No saved value for variable" symbol))))
     (put symbol 'customized-value nil)
+    (put symbol 'customized-variable-comment nil)
     (widget-put widget :custom-state 'unknown)
+    ;; This call will possibly make the comment invisible
     (custom-redraw widget)))
 
 (defun custom-variable-reset-standard (widget)
   "Restore the standard setting for the variable being edited by WIDGET."
   (let* ((symbol (widget-value widget))
-        (set (or (get symbol 'custom-set) 'set-default)))
+        (set (or (get symbol 'custom-set) 'set-default))
+        (comment-widget (widget-get widget :comment-widget)))
     (if (get symbol 'standard-value)
        (funcall set symbol (eval (car (get symbol 'standard-value))))
       (signal 'error (list "No standard setting known for variable" symbol)))
+    (put symbol 'variable-comment nil)
     (put symbol 'customized-value nil)
-    (when (get symbol 'saved-value)
+    (put symbol 'customized-variable-comment nil)
+    (when (or (get symbol 'saved-value) (get symbol 'saved-variable-comment))
       (put symbol 'saved-value nil)
+      (custom-push-theme 'theme-value symbol 'user 'reset 'standard)
+      ;; As a special optimizations we do not (explictly)
+      ;; save resets to standard when no theme set the value.
+      (if (null (cdr (get symbol 'theme-value)))
+         (put symbol 'theme-value nil))
+      (put symbol 'saved-variable-comment nil)
       (custom-save-all))
     (widget-put widget :custom-state 'unknown)
+    ;; This call will possibly make the comment invisible
     (custom-redraw widget)))
 
 ;;; The `custom-face-edit' Widget.
@@ -2225,6 +2420,7 @@ Match frames with dark backgrounds")
 (defun custom-face-value-create (widget)
   "Create a list of the display specifications for WIDGET."
   (let ((buttons (widget-get widget :buttons))
+       children
        (symbol (widget-get widget :value))
        (tag (widget-get widget :tag))
        (state (widget-get widget :custom-state))
@@ -2274,6 +2470,16 @@ Match frames with dark backgrounds")
           (widget-put widget :buttons buttons)
           ;; Insert documentation.
           (widget-default-format-handler widget ?h)
+          ;; The comment field
+          (unless (eq state 'hidden)
+            (let* ((comment (get symbol 'face-comment))
+                   (comment-widget
+                    (widget-create-child-and-convert
+                     widget 'custom-comment
+                     :parent widget
+                     :value (or comment ""))))
+              (widget-put widget :comment-widget comment-widget)
+              (push comment-widget children)))
           ;; See also.
           (unless (eq state 'hidden)
             (when (eq (widget-get widget :custom-level) 1)
@@ -2307,7 +2513,8 @@ Match frames with dark backgrounds")
                                  'sexp))
                           :value spec)))
               (custom-face-state-set widget)
-              (widget-put widget :children (list edit)))
+              (push edit children)
+              (widget-put widget :children children))
             (message "Creating face editor...done"))))))
 
 (defvar custom-face-menu
@@ -2315,11 +2522,14 @@ Match frames with dark backgrounds")
     ("Save for Future Sessions" custom-face-save)
     ("Reset to Saved" custom-face-reset-saved
      (lambda (widget)
-       (get (widget-value widget) 'saved-face)))
+       (or (get (widget-value widget) 'saved-face)
+          (get (widget-value widget) 'saved-face-comment))))
     ("Reset to Standard Setting" custom-face-reset-standard
      (lambda (widget)
        (get (widget-value widget) 'face-defface-spec)))
     ("---" ignore ignore)
+    ("Add Comment" custom-comment-show custom-comment-invisible-p)
+    ("---" ignore ignore)
     ("Show all display specs" custom-face-edit-all
      (lambda (widget)
        (not (eq (widget-get widget :custom-form) 'all))))
@@ -2356,15 +2566,30 @@ widget. If FILTER is nil, ACTION is always valid.")
 
 (defun custom-face-state-set (widget)
   "Set the state of WIDGET."
-  (let ((symbol (widget-value widget)))
-    (widget-put widget :custom-state (cond ((get symbol 'customized-face)
-                                           'set)
-                                          ((get symbol 'saved-face)
-                                           'saved)
-                                          ((get symbol 'face-defface-spec)
-                                           'standard)
-                                          (t
-                                           'rogue)))))
+  (let* ((symbol (widget-value widget))
+        (comment (get symbol 'face-comment))
+        tmp temp)
+    (widget-put widget :custom-state
+               (cond ((progn
+                        (setq tmp (get symbol 'customized-face))
+                        (setq temp (get symbol 'customized-face-comment))
+                        (or tmp temp))
+                      (if (equal temp comment)
+                          'set
+                        'changed))
+                     ((progn
+                        (setq tmp (get symbol 'saved-face))
+                        (setq temp (get symbol 'saved-face-comment))
+                        (or tmp temp))
+                      (if (equal temp comment)
+                          'saved
+                        'changed))
+                     ((get symbol 'face-defface-spec)
+                      (if (equal comment nil)
+                          'standard
+                        'changed))
+                     (t
+                      'rogue)))))
 
 (defun custom-face-action (widget &optional event)
   "Show the menu for `custom-face' WIDGET.
@@ -2385,9 +2610,18 @@ Optional EVENT is the location for the menu."
   "Make the face attributes in WIDGET take effect."
   (let* ((symbol (widget-value widget))
         (child (car (widget-get widget :children)))
-        (value (widget-value child)))
+        (value (widget-value child))
+        (comment-widget (widget-get widget :comment-widget))
+        (comment (widget-value comment-widget)))
+    (when (equal comment "")
+      (setq comment nil)
+      ;; Make the comment invisible by hand if it's empty
+      (set-extent-property (widget-get comment-widget :comment-extent)
+                          'invisible t))
     (put symbol 'customized-face value)
     (face-spec-set symbol value nil '(custom))
+    (put symbol 'customized-face-comment comment)
+    (put symbol 'face-comment comment)
     (custom-face-state-set widget)
     (custom-redraw-magic widget)))
 
@@ -2395,10 +2629,21 @@ Optional EVENT is the location for the menu."
   "Make the face attributes in WIDGET default."
   (let* ((symbol (widget-value widget))
         (child (car (widget-get widget :children)))
-        (value (widget-value child)))
+        (value (widget-value child))
+        (comment-widget (widget-get widget :comment-widget))
+        (comment (widget-value comment-widget)))
+    (when (equal comment "")
+      (setq comment nil)
+      ;; Make the comment invisible by hand if it's empty
+      (set-extent-property (widget-get comment-widget :comment-extent)
+                          'invisible t))
     (face-spec-set symbol value nil '(custom))
     (put symbol 'saved-face value)
+    (custom-push-theme 'theme-face symbol 'user 'set value)
     (put symbol 'customized-face nil)
+    (put symbol 'face-comment comment)
+    (put symbol 'customized-face-comment nil)
+    (put symbol 'saved-face-comment comment)
     (custom-save-all)
     (custom-face-state-set widget)
     (custom-redraw-magic widget)))
@@ -2407,12 +2652,18 @@ Optional EVENT is the location for the menu."
   "Restore WIDGET to the face's default attributes."
   (let* ((symbol (widget-value widget))
         (child (car (widget-get widget :children)))
-        (value (get symbol 'saved-face)))
-    (unless value
+        (value (get symbol 'saved-face))
+        (comment (get symbol 'saved-face-comment))
+        (comment-widget (widget-get widget :comment-widget)))
+    (unless (or value comment)
       (signal 'error (list "No saved value for this face" symbol)))
     (put symbol 'customized-face nil)
+    (put symbol 'customized-face-comment nil)
     (face-spec-set symbol value nil '(custom))
+    (put symbol 'face-comment comment)
     (widget-value-set child value)
+    ;; This call manages the comment visibility
+    (widget-value-set comment-widget (or comment ""))
     (custom-face-state-set widget)
     (custom-redraw-magic widget)))
 
@@ -2420,15 +2671,25 @@ Optional EVENT is the location for the menu."
   "Restore WIDGET to the face's standard settings."
   (let* ((symbol (widget-value widget))
         (child (car (widget-get widget :children)))
-        (value (get symbol 'face-defface-spec)))
+        (value (get symbol 'face-defface-spec))
+        (comment-widget (widget-get widget :comment-widget)))
     (unless value
       (signal 'error (list "No standard setting for this face" symbol)))
     (put symbol 'customized-face nil)
-    (when (get symbol 'saved-face)
+    (put symbol 'customized-face-comment nil)
+    (when (or (get symbol 'saved-face) (get symbol 'saved-face-comment))
       (put symbol 'saved-face nil)
+      (custom-push-theme 'theme-face symbol 'user 'reset 'standard)
+      ;; Do not explictly save resets to standards without themes.
+      (if (null (cdr (get symbol 'theme-face)))
+         (put symbol  'theme-face nil))
+      (put symbol 'saved-face-comment nil)
       (custom-save-all))
     (face-spec-set symbol value nil '(custom))
+    (put symbol 'face-comment nil)
     (widget-value-set child value)
+    ;; This call manages the comment visibility
+    (widget-value-set comment-widget "")
     (custom-face-state-set widget)
     (custom-redraw-magic widget)))
 
@@ -2977,7 +3238,7 @@ explicitly load that file for the settings to take effect."
   :group 'customize)
 
 (defun custom-save-delete (symbol)
-  "Delete the call to SYMBOL form `custom-file'.
+  "Delete the call to SYMBOL form in `custom-file'.
 Leave point at the location of the call, or after the last expression."
   (let ((find-file-hooks nil)
        (auto-mode-alist nil))
@@ -2997,87 +3258,152 @@ Leave point at the location of the call, or after the last expression."
          (throw 'found nil))))))
 
 (defun custom-save-variables ()
-  "Save all customized variables in `custom-file'."
-  (save-excursion
-    (custom-save-delete 'custom-set-variables)
-    (let ((standard-output (current-buffer)))
-      (unless (bolp)
-       (princ "\n"))
-      (princ "(custom-set-variables")
-      (mapatoms (lambda (symbol)
-                 (let ((value (get symbol 'saved-value))
-                       (requests (get symbol 'custom-requests))
-                       (now (not (or (get symbol 'standard-value)
-                                     (and (not (boundp symbol))
-                                          (not (get symbol 'force-value)))))))
-                   (when value
-                     (princ "\n '(")
-                     (prin1 symbol)
-                     (princ " ")
-                     (prin1 (car value))
-                     (cond (requests
-                            (if now
-                                (princ " t ")
-                              (princ " nil "))
-                            (prin1 requests)
-                            (princ ")"))
-                           (now
-                            (princ " t)"))
-                           (t
-                            (princ ")")))))))
+   "Save all customized variables in `custom-file'."
+   (save-excursion
+     (custom-save-delete 'custom-load-themes)
+     (custom-save-delete 'custom-reset-variables)
+     (custom-save-delete 'custom-set-variables)
+     (custom-save-loaded-themes)
+     (custom-save-resets 'theme-value 'custom-reset-variables nil)
+     (let ((standard-output (current-buffer)))
+       (unless (bolp)
+       (princ "\n"))
+       (princ "(custom-set-variables")
+       (mapatoms (lambda (symbol)               
+                 (let ((spec (car-safe (get symbol 'theme-value)))
+                       (requests (get symbol 'custom-requests))
+                       (now (not (or (get symbol 'standard-value)
+                                     (and (not (boundp symbol))
+                                          (not (eq (get symbol 'force-value)
+                                                   'rogue))))))
+                       (comment (get symbol 'saved-variable-comment)))
+                   (when (or (and spec (eq (car spec) 'user)
+                              (eq (second spec) 'set)) comment)
+                     (princ "\n '(")
+                     (princ symbol)
+                     (princ " ")
+                     ;; This comment stuf is in the way ####
+                     ;; Is (eq (third spec) (car saved-value)) ????
+                     ;; (prin1 (third spec))
+                     (prin1 (car (get symbol 'saved-value)))
+                     (when (or now requests comment)
+                       (princ (if now " t" " nil")))
+                     (when (or comment requests)
+                       (princ " ")
+                       (prin1 requests))
+                     (when comment
+                       (princ " ")
+                       (prin1 comment))
+                     (princ ")")))))
       (princ ")")
       (unless (looking-at "\n")
        (princ "\n")))))
 
+(defvar custom-save-face-ignoring nil)
+
+(defun custom-save-face-internal (symbol)
+  (let ((theme-spec (car-safe (get symbol 'theme-face)))
+       (comment (get symbol 'saved-face-comment))
+       (now (not (or (get symbol 'face-defface-spec)
+             (and (not (find-face symbol))
+                  (not (eq (get symbol 'force-face) 'rogue)))))))
+    (when (or (and (not (memq symbol custom-save-face-ignoring))
+              ;; Don't print default face here.
+              theme-spec
+              (eq (car theme-spec) 'user)
+              (eq (second theme-spec) 'set)) comment)
+      (princ "\n '(")
+      (princ symbol)
+      (princ " ")
+      (prin1 (get symbol 'saved-face))
+      (if (or comment now)
+         (princ (if now " t" " nil")))
+      (when comment
+         (princ " ")
+         (prin1 comment))
+      (princ ")"))))
+
 (defun custom-save-faces ()
   "Save all customized faces in `custom-file'."
   (save-excursion
+    (custom-save-delete 'custom-reset-faces)
     (custom-save-delete 'custom-set-faces)
+    (custom-save-resets 'theme-face 'custom-reset-faces '(default))
     (let ((standard-output (current-buffer)))
       (unless (bolp)
        (princ "\n"))
       (princ "(custom-set-faces")
-      (let ((value (get 'default 'saved-face)))
        ;; The default face must be first, since it affects the others.
-       (when value
-         (princ "\n '(default ")
-         (prin1 value)
-         (if (or (get 'default 'face-defface-spec)
-                 (and (not (find-face 'default))
-                      (not (get 'default 'force-face))))
-             (princ ")")
-           (princ " t)"))))
-      (mapatoms (lambda (symbol)
-                 (let ((value (get symbol 'saved-face)))
-                   (when (and (not (eq symbol 'default))
-                              ;; Don't print default face here.
-                              value)
-                     (princ "\n '(")
-                     (prin1 symbol)
-                     (princ " ")
-                     (prin1 value)
-                     (if (or (get symbol 'face-defface-spec)
-                             (and (not (find-face symbol))
-                                  (not (get symbol 'force-face))))
-                         (princ ")")
-                       (princ " t)"))))))
+      (custom-save-face-internal 'default)
+      (let ((custom-save-face-ignoring '(default)))
+       (mapatoms #'custom-save-face-internal))
       (princ ")")
       (unless (looking-at "\n")
        (princ "\n")))))
 
+(defun custom-save-resets (property setter special)
+  (let (started-writing ignored-special)
+    ;; (custom-save-delete setter) Done by caller 
+    (let ((standard-output (current-buffer))
+         (mapper `(lambda (object)
+                   (let ((spec (car-safe (get object (quote ,property)))))
+                     (when (and (not (memq object ignored-special))
+                                (eq (car spec) 'user)
+                                (eq (second spec) 'reset))
+                       ;; Do not write reset statements unless necessary.
+                       (unless started-writing
+                         (setq started-writing t)
+                         (unless (bolp)
+                           (princ "\n"))
+                       (princ "(")
+                       (princ (quote ,setter))
+                       (princ "\n '(")
+                       (princ object)
+                       (princ " ")
+                       (prin1 (third spec))
+                       (princ ")")))))))
+      (mapc mapper special)
+      (setq ignored-special special)
+      (mapatoms mapper)
+      (when started-writing
+       (princ ")\n")))))
+                       
+
+(defun custom-save-loaded-themes ()
+  (let ((themes (reverse (get 'user 'theme-loads-themes)))
+       (standard-output (current-buffer)))
+    (when themes
+      (unless (bolp) (princ "\n"))
+      (princ "(custom-load-themes")
+      (mapc (lambda (theme)
+             (princ "\n   '")
+             (prin1 theme)) themes)
+      (princ " )\n"))))         
+
 ;;;###autoload
 (defun customize-save-customized ()
   "Save all user options which have been set in this session."
   (interactive)
   (mapatoms (lambda (symbol)
              (let ((face (get symbol 'customized-face))
-                   (value (get symbol 'customized-value)))
+                   (value (get symbol 'customized-value))
+                   (face-comment (get symbol 'customized-face-comment))
+                   (variable-comment
+                    (get symbol 'customized-variable-comment)))
                (when face
                  (put symbol 'saved-face face)
+                 (custom-push-theme 'theme-face symbol 'user 'set value)
                  (put symbol 'customized-face nil))
                (when value
                  (put symbol 'saved-value value)
-                 (put symbol 'customized-value nil)))))
+                 (custom-push-theme 'theme-value symbol 'user 'set value)
+                 (put symbol 'customized-value nil))
+               (when variable-comment
+                 (put symbol 'saved-variable-comment variable-comment)
+                 (put symbol 'customized-variable-comment nil))
+               (when face-comment
+                 (put symbol 'saved-face-comment face-comment)
+                 (put symbol 'customized-face-comment nil)))))
   ;; We really should update all custom buffers here.
   (custom-save-all))
 
index cf4755d..18f2d38 100644 (file)
@@ -30,6 +30,7 @@
   "Like `defface', but FACE is evaluated as a normal argument."
   ;; (when (fboundp 'pureload)
     ;; (error "Attempt to declare a face during dump"))
+  ;; #### should we possibly reset force-face here?
   (unless (get face 'face-defface-spec)
     (put face 'face-defface-spec spec)
     (unless (find-face face)
@@ -69,7 +70,7 @@ Text size (e.g. 9pt or 2mm).")
           custom-set-face-font-size custom-face-font-size)
     (:family (editable-field :format "Font Family: %v"
                             :help-echo "\
-Name of font family to use (e.g. times).") 
+Name of font family to use (e.g. times).")
             custom-set-face-font-family custom-face-font-family)
     (:background-pixmap (editable-field :format "Background pixmap: %v"
                                        :help-echo "\
@@ -240,33 +241,94 @@ If FRAME is nil, use the default face."
 ;;;###autoload
 (defun custom-set-faces (&rest args)
   "Initialize faces according to user preferences.
+This asociates the setting with the USER theme.
 The arguments should be a list where each entry has the form:
 
-  (FACE SPEC [NOW])
+  (FACE SPEC [NOW [COMMENT]])
 
 SPEC will be stored as the saved value for FACE.  If NOW is present
 and non-nil, FACE will also be created according to SPEC.
+COMMENT is a string comment about FACE.
 
 See `defface' for the format of SPEC."
-  (while args
-    (let ((entry (car args)))
-      (if (listp entry)
-         (let ((face (nth 0 entry))
-               (spec (nth 1 entry))
-               (now (nth 2 entry)))
+  (apply #'custom-theme-set-faces 'user args))
+
+;;;###autoload
+(defun custom-theme-set-faces (theme &rest args)
+  "Initialize faces according to settings specified by args.
+Records the settings as belonging to THEME.
+
+See `custom-set-faces' for a description of the arguments ARGS."
+  (custom-check-theme theme)
+  (let ((immediate (get theme 'theme-immediate)))
+    (while args
+      (let ((entry (car args)))
+       (if (listp entry)
+           (let ((face (nth 0 entry))
+                 (spec (nth 1 entry))
+                 (now (nth 2 entry))
+                 (comment (nth 3 entry)))
+             (put face 'saved-face spec)
+             (custom-push-theme 'theme-face face theme 'set spec)
+             (put face 'saved-face-comment comment)
+             (when (or now immediate)
+               (put face 'force-face (if now 'rogue 'immediate)))
+             (when (or now immediate (find-face face))
+               (put face 'face-comment comment)
+               (unless (find-face face)
+                 (make-empty-face face))
+               (face-spec-set face spec nil '(custom)))
+             (setq args (cdr args)))
+         ;; Old format, a plist of FACE SPEC pairs.
+         (let ((face (nth 0 args))
+               (spec (nth 1 args)))
            (put face 'saved-face spec)
-           (when now
-             (put face 'force-face t))
-           (when (or now (find-face face))
+           (custom-push-theme 'theme-face face theme 'set spec))
+         (setq args (cdr (cdr args))))))))
+
+;;;###autoload
+(defun custom-theme-face-value (face theme)
+  "Return spec of FACE in THEME if the THEME modifies the
+FACE.  Nil otherwise."
+  (car-safe (custom-theme-value theme (get face 'theme-face))))
+
+(defun custom-theme-reset-internal-face (face to-theme)
+  (let ((spec (custom-theme-face-value face to-theme))
+       was-in-theme)
+    (setq was-in-theme spec)
+    (setq spec (or spec (get face 'standard-value)))
+    (when spec
+      (put face 'save-face was-in-theme)
+      (when (or (get face 'force-face) (find-face face))
              (unless (find-face face)
                (make-empty-face face))
-             (face-spec-set face spec nil '(custom)))
-           (setq args (cdr args)))
-       ;; Old format, a plist of FACE SPEC pairs.
-       (let ((face (nth 0 args))
-             (spec (nth 1 args)))
-         (put face 'saved-face spec))
-       (setq args (cdr (cdr args)))))))
+             (face-spec-set face spec)))
+    spec))
+
+;;;###autoload
+(defun custom-theme-reset-faces (theme &rest args)
+  (custom-check-theme theme)
+  "Reset the value of the face to values previously defined.
+Assosiate this setting with THEME.
+
+ARGS is a list of lists of the form
+
+    (face to-theme)
+
+This means reset face to its value in to-theme."
+  (mapc #'(lambda (arg)
+           (apply #'custom-theme-reset-internal-face arg)
+           (custom-push-theme (car arg) 'theme-face theme 'reset (cadr arg)))
+       args))
+
+;;;###autoload
+(defun custom-reset-faces (&rest args)
+  "Reset the value of the face to values previously defined.
+Assosiate this setting with the 'user' theme.
+
+ARGS is defined as for `custom-theme-reset-faces'"
+  (apply #'custom-theme-reset-faces 'user args))
+
 
 ;;; The End.
 
index 77dd59d..b27b551 100644 (file)
 
 ;; This file only contain the code needed to declare and initialize
 ;; user options.  The code to customize options is autoloaded from
-;; `cus-edit.el'. 
+;; `cus-edit.el'.
 ;;
 ;; The code implementing face declarations is in `cus-face.el'
 
 ;;; Code:
 
+(eval-when-compile
+  (load "cl-macs"))
+
+(if (not (fboundp 'defun*))
+    (autoload 'defun* "cl-macs"))
+
 (require 'widget)
 
 (defvar custom-define-hook nil
@@ -55,8 +61,8 @@ symbol."
   (unless (default-boundp symbol)
     ;; Use the saved value if it exists, otherwise the standard setting.
     (set-default symbol (if (get symbol 'saved-value)
-                           (eval (car (get symbol 'saved-value)))
-                         (eval value)))))
+                            (eval (car (get symbol 'saved-value)))
+                          (eval value)))))
 
 (defun custom-initialize-set (symbol value)
   "Initialize SYMBOL with VALUE.
@@ -64,83 +70,83 @@ Like `custom-initialize-default', but use the function specified by
 `:set' to initialize SYMBOL."
   (unless (default-boundp symbol)
     (funcall (or (get symbol 'custom-set) 'set-default)
-            symbol 
-            (if (get symbol 'saved-value)
-                (eval (car (get symbol 'saved-value)))
-              (eval value)))))
+             symbol
+             (if (get symbol 'saved-value)
+                 (eval (car (get symbol 'saved-value)))
+               (eval value)))))
 
 (defun custom-initialize-reset (symbol value)
   "Initialize SYMBOL with VALUE.
 Like `custom-initialize-set', but use the function specified by
 `:get' to reinitialize SYMBOL if it is already bound."
     (funcall (or (get symbol 'custom-set) 'set-default)
-            symbol 
-            (cond ((default-boundp symbol)
-                   (funcall (or (get symbol 'custom-get) 'default-value)
-                            symbol))
-                  ((get symbol 'saved-value)
-                   (eval (car (get symbol 'saved-value))))
-                  (t
-                   (eval value)))))
+             symbol
+             (cond ((default-boundp symbol)
+                    (funcall (or (get symbol 'custom-get) 'default-value)
+                             symbol))
+                   ((get symbol 'saved-value)
+                    (eval (car (get symbol 'saved-value))))
+                   (t
+                    (eval value)))))
 
 (defun custom-initialize-changed (symbol value)
   "Initialize SYMBOL with VALUE.
-Like `custom-initialize-reset', but only use the `:set' function if the 
+Like `custom-initialize-reset', but only use the `:set' function if the
 not using the standard setting.  Otherwise, use the `set-default'."
   (cond ((default-boundp symbol)
-        (funcall (or (get symbol 'custom-set) 'set-default)
-                 symbol
-                 (funcall (or (get symbol 'custom-get) 'default-value)
-                          symbol)))
-       ((get symbol 'saved-value)
-        (funcall (or (get symbol 'custom-set) 'set-default)
-                 symbol
-                 (eval (car (get symbol 'saved-value)))))
-       (t
-        (set-default symbol (eval value)))))
+         (funcall (or (get symbol 'custom-set) 'set-default)
+                  symbol
+                  (funcall (or (get symbol 'custom-get) 'default-value)
+                           symbol)))
+        ((get symbol 'saved-value)
+         (funcall (or (get symbol 'custom-set) 'set-default)
+                  symbol
+                  (eval (car (get symbol 'saved-value)))))
+        (t
+         (set-default symbol (eval value)))))
 
 (defun custom-declare-variable (symbol value doc &rest args)
   "Like `defcustom', but SYMBOL and VALUE are evaluated as normal arguments."
   ;; Remember the standard setting.
   (put symbol 'standard-value (list value))
   ;; Maybe this option was rogue in an earlier version.  It no longer is.
-  (when (get symbol 'force-value)
-    ;; It no longer is.    
+  (when (eq (get symbol 'force-value) 'rogue)
+    ;; It no longer is.
     (put symbol 'force-value nil))
   (when doc
     (put symbol 'variable-documentation doc))
   (let ((initialize 'custom-initialize-reset)
-       (requests nil))
-    (while args 
+        (requests nil))
+    (while args
       (let ((arg (car args)))
-       (setq args (cdr args))
-       (check-argument-type 'keywordp arg)
-       (let ((keyword arg)
-             (value (car args)))
-         (unless args
-           (signal 'error (list "Keyword is missing an argument" keyword)))
-         (setq args (cdr args))
-         (cond ((eq keyword :initialize)
-                (setq initialize value))
-               ((eq keyword :set)
-                (put symbol 'custom-set value))
-               ((eq keyword :get)
-                (put symbol 'custom-get value))
-               ((eq keyword :require)
-                (setq requests (cons value requests)))
-               ((eq keyword :type)
-                (put symbol 'custom-type value))
-               ((eq keyword :options)
-                (if (get symbol 'custom-options)
-                    ;; Slow safe code to avoid duplicates.
-                    (mapc (lambda (option)
-                            (custom-add-option symbol option))
-                          value)
-                  ;; Fast code for the common case.
-                  (put symbol 'custom-options (copy-sequence value))))
-               (t
-                (custom-handle-keyword symbol keyword value
-                                       'custom-variable))))))
+        (setq args (cdr args))
+        (check-argument-type 'keywordp arg)
+        (let ((keyword arg)
+              (value (car args)))
+          (unless args
+            (signal 'error (list "Keyword is missing an argument" keyword)))
+          (setq args (cdr args))
+          (cond ((eq keyword :initialize)
+                 (setq initialize value))
+                ((eq keyword :set)
+                 (put symbol 'custom-set value))
+                ((eq keyword :get)
+                 (put symbol 'custom-get value))
+                ((eq keyword :require)
+                 (setq requests (cons value requests)))
+                ((eq keyword :type)
+                 (put symbol 'custom-type value))
+                ((eq keyword :options)
+                 (if (get symbol 'custom-options)
+                     ;; Slow safe code to avoid duplicates.
+                     (mapc (lambda (option)
+                             (custom-add-option symbol option))
+                           value)
+                   ;; Fast code for the common case.
+                   (put symbol 'custom-options (copy-sequence value))))
+                (t
+                 (custom-handle-keyword symbol keyword value
+                                        'custom-variable))))))
     (put symbol 'custom-requests requests)
     ;; Do the actual initialization.
     (funcall initialize symbol value))
@@ -158,29 +164,29 @@ Neither SYMBOL nor VALUE needs to be quoted.
 If SYMBOL is not already bound, initialize it to VALUE.
 The remaining arguments should have the form
 
-   [KEYWORD VALUE]... 
+   [KEYWORD VALUE]...
 
 The following KEYWORD's are defined:
 
-:type  VALUE should be a widget type for editing the symbols value.
-       The default is `sexp'.
+:type   VALUE should be a widget type for editing the symbols value.
+        The default is `sexp'.
 :options VALUE should be a list of valid members of the widget type.
-:group  VALUE should be a customization group.  
+:group  VALUE should be a customization group.
         Add SYMBOL to that group.
 :initialize VALUE should be a function used to initialize the
-       variable.  It takes two arguments, the symbol and value
-       given in the `defcustom' call.  The default is
-       `custom-initialize-set' 
-:set   VALUE should be a function to set the value of the symbol. 
-       It takes two arguments, the symbol to set and the value to
-       give it.  The default is `set-default'.
-:get   VALUE should be a function to extract the value of symbol.
-       The function takes one argument, a symbol, and should return
-       the current value for that symbol.  The default is
-       `default-value'. 
+        variable.  It takes two arguments, the symbol and value
+        given in the `defcustom' call.  The default is
+        `custom-initialize-set'
+:set    VALUE should be a function to set the value of the symbol.
+        It takes two arguments, the symbol to set and the value to
+        give it.  The default is `set-default'.
+:get    VALUE should be a function to extract the value of symbol.
+        The function takes one argument, a symbol, and should return
+        the current value for that symbol.  The default is
+        `default-value'.
 :require VALUE should be a feature symbol.  Each feature will be
-       required after initialization, of the the user have saved this
-       option.
+        required after initialization, of the the user have saved this
+        option.
 
 Read the section about customization in the Emacs Lisp manual for more
 information."
@@ -237,7 +243,7 @@ information."
 
 (defun custom-declare-group (symbol members doc &rest args)
   "Like `defgroup', but SYMBOL is evaluated as a normal argument."
-  (while members 
+  (while members
     (apply 'custom-add-to-group symbol (car members))
     (pop members))
   (put symbol 'custom-group (nconc members (get symbol 'custom-group)))
@@ -248,15 +254,15 @@ information."
       (setq args (cdr args))
       (check-argument-type 'keywordp arg)
       (let ((keyword arg)
-           (value (car args)))
-       (unless args
-         (signal 'error (list "Keyword is missing an argument" keyword)))
-       (setq args (cdr args))
-       (cond ((eq keyword :prefix)
-              (put symbol 'custom-prefix value))
-             (t
-              (custom-handle-keyword symbol keyword value
-                                     'custom-group))))))
+            (value (car args)))
+        (unless args
+          (signal 'error (list "Keyword is missing an argument" keyword)))
+        (setq args (cdr args))
+        (cond ((eq keyword :prefix)
+               (put symbol 'custom-prefix value))
+              (t
+               (custom-handle-keyword symbol keyword value
+                                      'custom-group))))))
   (run-hooks 'custom-define-hook)
   symbol)
 
@@ -273,7 +279,7 @@ edit faces, and `custom-group' for editing groups.
 
 The remaining arguments should have the form
 
-   [KEYWORD VALUE]... 
+   [KEYWORD VALUE]...
 
 The following KEYWORD's are defined:
 
@@ -291,9 +297,9 @@ information."
   "To existing GROUP add a new OPTION of type WIDGET.
 If there already is an entry for that option, overwrite it."
   (let* ((members (get group 'custom-group))
-        (old (assq option members)))
+         (old (assq option members)))
     (if old
-       (setcar (cdr old) widget)
+        (setcar (cdr old) widget)
       (put group 'custom-group (nconc members (list (list option widget))))))
   (puthash group t custom-group-hash-table))
 
@@ -302,32 +308,32 @@ If there already is an entry for that option, overwrite it."
 (defun custom-handle-all-keywords (symbol args type)
   "For customization option SYMBOL, handle keyword arguments ARGS.
 Third argument TYPE is the custom option type."
-  (while args 
+  (while args
     (let ((arg (car args)))
       (setq args (cdr args))
       (check-argument-type 'keywordp arg)
       (let ((keyword arg)
-           (value (car args)))
-       (unless args
-         (signal 'error (list "Keyword is missing an argument" keyword)))
-       (setq args (cdr args))
-       (custom-handle-keyword symbol keyword value type)))))  
+            (value (car args)))
+        (unless args
+          (signal 'error (list "Keyword is missing an argument" keyword)))
+        (setq args (cdr args))
+        (custom-handle-keyword symbol keyword value type)))))
 
 (defun custom-handle-keyword (symbol keyword value type)
   "For customization option SYMBOL, handle KEYWORD with VALUE.
 Fourth argument TYPE is the custom option type."
   (cond ((eq keyword :group)
-        (custom-add-to-group value symbol type))
-       ((eq keyword :version)
-        (custom-add-version symbol value))
-       ((eq keyword :link)
-        (custom-add-link symbol value))
-       ((eq keyword :load)
-        (custom-add-load symbol value))
-       ((eq keyword :tag)
-        (put symbol 'custom-tag value))
-       (t
-        (signal 'error (list "Unknown keyword" keyword)))))
+         (custom-add-to-group value symbol type))
+        ((eq keyword :version)
+         (custom-add-version symbol value))
+        ((eq keyword :link)
+         (custom-add-link symbol value))
+        ((eq keyword :load)
+         (custom-add-load symbol value))
+        ((eq keyword :tag)
+         (put symbol 'custom-tag value))
+        (t
+         (signal 'error (list "Unknown keyword" keyword)))))
 
 (defun custom-add-option (symbol option)
   "To the variable SYMBOL add OPTION.
@@ -356,46 +362,278 @@ LOAD should be either a library file name, or a feature name."
     (unless (member load loads)
       (put symbol 'custom-loads (cons load loads)))))
 
+;;; deftheme macro
+
+(defvar custom-known-themes '(user standard)
+   "Themes that have been defthemed.")
+
+;;  #### add strings for group
+;; #### during bootstrap we cannot use cl-macs stuff
+(defun* custom-define-theme (theme feature &optional doc
+         &key short-description immediate variable-reset-string
+         variable-set-string face-set-string face-reset-string
+         &allow-other-keys)
+  (push theme custom-known-themes)
+  (put theme 'theme-feature feature)
+  (put theme 'theme-documentation doc)
+  (if immediate (put theme 'theme-immediate immediate))
+  (if variable-reset-string
+      (put theme 'theme-variable-reset-string variable-reset-string ))
+  (if variable-set-string
+      (put theme 'theme-variable-set-string variable-set-string ))
+  (if face-reset-string
+      (put theme 'theme-face-reset-string face-reset-string ))
+  (if face-set-string
+      (put theme 'theme-face-set-string face-set-string ))
+  (if short-description
+      (put theme 'theme-short-description short-description )))
+
+(defun custom-make-theme-feature (theme)
+  (intern (concat (symbol-name theme) "-theme")))
+
+(defmacro deftheme (theme &rest body)
+  "(deftheme THEME &optional DOC &key KEYWORDS)
+
+Define a theme labeled by SYMBOL THEME. The optional argument DOC is a
+doc string describing the the theme. It is optionally followed by the
+following keyboard arguments
+
+:short-description DESC
+      DESC is a short (one line) description of the theme. If not given DOC
+      is used.
+:immediate FLAG
+      If FLAG is non-nil variables set in this theme are bound
+      immediately when loading the theme.
+:variable-set-string VARIABLE_-SET-STRING
+      A string used by the UI to indicate that the value takes it
+      setting from this theme. It is passed to FORMAT with the
+      name of the theme a additional argument.
+      If not given, a generic description is used.
+:variable-reset-string VARIABLE-RESET-STRING
+      As above but used in the case the variable has been forced to
+      the value in this theme.
+:face-set-string FACE-SET-STRING
+:face-reset-string FACE-RESET-STRING
+      As above but for faces."
+  (let ((feature (custom-make-theme-feature theme)))
+    `(custom-define-theme (quote ,theme) (quote ,feature) ,@body)))
+
+(defsubst custom-theme-p (theme)
+  "Non-nil when THEME has been defined."
+  (memq theme custom-known-themes))
+
+(defsubst custom-check-theme (theme)
+  "Check whether THEME is valid and signal an error if NOT"
+  (unless (custom-theme-p theme)
+    (error "Unknown theme `%s'" theme)))
+
+
+; #### do we need to deftheme 'user and/or 'standard here to make the
+;      code in cus-edit cleaner?.
+
 ;;; Initializing.
 
-(defun custom-set-variables (&rest args)
-  "Initialize variables according to user preferences.  
+(defun custom-push-theme (prop symbol theme mode value)
+  (let ((old (get symbol prop)))
+    (if (eq (car-safe (car-safe old)) theme)
+        (setq old (cdr old)))
+    (put symbol prop (cons (list theme mode value) old))))
 
+(defun custom-set-variables (&rest args)
+  "Initialize variables according to user preferences.
+The settings are registered as theme `user'.
 The arguments should be a list where each entry has the form:
 
-  (SYMBOL VALUE [NOW])
+  (SYMBOL VALUE [NOW [REQUEST [COMMENT]]])
 
 The unevaluated VALUE is stored as the saved value for SYMBOL.
 If NOW is present and non-nil, VALUE is also evaluated and bound as
-the default value for the SYMBOL."
-  (while args 
-    (let ((entry (car args)))
-      (if (listp entry)
-         (let* ((symbol (nth 0 entry))
-                (value (nth 1 entry))
-                (now (nth 2 entry))
-                (requests (nth 3 entry))
-                (set (or (get symbol 'custom-set) 'set-default)))
-           (put symbol 'saved-value (list value))
-           (cond (now 
-                  ;; Rogue variable, set it now.
-                  (put symbol 'force-value t)
-                  (funcall set symbol (eval value)))
-                 ((default-boundp symbol)
-                  ;; Something already set this, overwrite it.
-                  (funcall set symbol (eval value))))
-           (when requests
-             (put symbol 'custom-requests requests)
-             (mapc 'require requests))
-           (setq args (cdr args)))
-       ;; Old format, a plist of SYMBOL VALUE pairs.
-       (message "Warning: old format `custom-set-variables'")
-       (ding)
-       (sit-for 2)
-       (let ((symbol (nth 0 args))
-             (value (nth 1 args)))
-         (put symbol 'saved-value (list value)))
-       (setq args (cdr (cdr args)))))))
+the default value for the SYMBOL.
+REQUEST is a list of features we must 'require for SYMBOL.
+COMMENT is a comment string about SYMBOL."
+  (apply 'custom-theme-set-variables 'user args))
+
+(defun custom-theme-set-variables (theme &rest args)
+  "Initialize variables according to settings specified by args.
+Records the settings as belonging to THEME.
+
+See `custom-set-variables' for a description of the arguments ARGS."
+  (custom-check-theme theme)
+  (let ((immediate (get theme 'theme-immediate)))
+    (while args * etc/custom/example-themes/example-theme.el:
+      (let ((entry (car args)))
+        (if (listp entry)
+            (let* ((symbol (nth 0 entry))
+                   (value (nth 1 entry))
+                   (now (nth 2 entry))
+                   (requests (nth 3 entry))
+                   (comment (nth 4 entry))
+                   (set (or (get symbol 'custom-set) 'set-default)))
+              (put symbol 'saved-value (list value))
+              (custom-push-theme 'theme-value symbol theme 'set value)
+              (put symbol 'saved-variable-comment comment)
+              (cond ((or now immediate)
+                     ;; Rogue variable, set it now.
+                     (put symbol 'force-value (if now 'rogue 'immediate))
+                     (funcall set symbol (eval value)))
+                    ((default-boundp symbol)
+                     ;; Something already set this, overwrite it.
+                     (funcall set symbol (eval value))))
+              (and (or now (default-boundp symbol))
+                 (put symbol 'variable-comment comment))
+              (when requests
+                (put symbol 'custom-requests requests)
+                (mapc 'require requests))
+              (setq args (cdr args)))
+          ;; Old format, a plist of SYMBOL VALUE pairs.
+          (message "Warning: old format `custom-set-variables'")
+          (ding)
+          (sit-for 2)
+          (let ((symbol (nth 0 args))
+                (value (nth 1 args)))
+            (put symbol 'saved-value (list value))
+            (custom-push-theme 'theme-value symbol theme 'set value))
+          (setq args (cdr (cdr args))))))))
+
+(defvar custom-loaded-themes nil
+  "Themes in the order they are loaded.")
+
+(defun custom-theme-loaded-p (theme)
+  "Return non-nil when THEME has been loaded."
+  (memq theme custom-loaded-themes))
+
+(defun provide-theme (theme)
+  "Indicate that this file provides THEME."
+  (custom-check-theme theme)
+  (provide (get theme 'theme-feature))
+  (push theme custom-loaded-themes))
+
+(defun require-theme (theme &optional soft)
+  "Try to load a theme by requiring its feature."
+  ;; Note we do no check for validity of the theme here.
+  ;; This allows to pull in themes by a file-name convention
+  (require (get theme 'theme-feature (custom-make-theme-feature theme))))
+
+(defun custom-do-theme-reset (theme)
+  ; #### untested! slow!
+  (let (spec-list)
+    (mapatoms (lambda (symbol)
+                (setq spec-list (get symbol 'theme-value))
+                (when spec-list
+                  (setq spec-list (delete-if (lambda (elt)
+                                               (eq (car elt) theme))
+                                             spec-list))
+                  (put symbol 'theme-value spec-list)
+                  (custom-theme-reset-internal symbol 'user))
+                (setq spec-list (get symbol 'theme-face))
+                (when spec-list
+                  (setq spec-list (delete-if (lambda (elt)
+                                               (eq (car elt) theme))
+                                             spec-list))
+                  (put symbol 'theme-face spec-list)
+                  (custom-theme-reset-internal-face symbol 'user))))))
+
+(defun custom-theme-load-themes (by-theme &rest body)
+  "Load the themes specified by BODY and record them as required by
+theme BY-THEME. BODY is a secuence of
+       - a SYMBOL
+            require the theme SYMBOL
+       - a list (reset THEME)
+            Undo all the settings made by THEME.
+       - a list (hidden THEME)
+            require the THEME but hide it from the user."
+  (custom-check-theme by-theme)
+  (dolist (theme body)
+    (cond ((and (consp theme) (eq (car theme) 'reset))
+           (custom-do-theme-reset (cadr theme)))
+          ((and (consp theme) (eq (car theme) 'hidden))
+           (require-theme (cadr theme))
+           (unless (custom-theme-loaded-p (cadr theme))
+             (put (cadr theme) 'theme-hidden t)))
+          (t
+           (require-theme theme)
+           (remprop theme 'theme-hidden)))
+    (push theme (get by-theme 'theme-loads-themes))))
+
+(defun custom-load-themes (&rest body)
+  "Load themes for the USER theme as specified by BODY.
+
+BODY is as with custom-theme-load-themes."
+  (apply #'custom-theme-load-themes 'user body))
+
+
+
+
+(defsubst copy-upto-last (elt list)
+  "Copy all the elements of the list upto the last occurence of elt"
+  ;; Is it faster to do more work in C than to do less in elisp?
+  (nreverse (cdr (member elt (reverse list)))))
+
+(defun custom-theme-value (theme theme-spec-list)
+  "Determine the value for THEME defined by THEME-SPEC-LIST.
+Returns (list value) if found. Nil otherwise."
+  ;; Note we do _NOT_ singal an error if the theme is unkown
+  ;; it might have gone away without the user knowing.
+  (let ((theme-or-lower (memq theme (cons 'user custom-loaded-themes)))
+        value)
+    (mapc #'(lambda (theme-spec)
+              (when (member (car theme-spec) theme-or-lower)
+                (setq value (cdr theme-spec))
+                ;; We need to continue because if theme =A and we found
+                ;; B then if the load order is B A C B
+                ;; we actually want the value in C.
+                (setq theme-or-lower (copy-upto-last (car theme-spec)
+                                                     theme-or-lower))
+                ;; We could should circuit if this is now nil.
+                ))
+          theme-spec-list)
+    (if value
+        (if (eq (car value) 'set)
+            (list (cadr value))
+          ;; Yet another reset spec. car value = reset
+          (custom-theme-value (cadr value) theme-spec-list)))))
+
+
+(defun custom-theme-variable-value (variable theme)
+  "Return (list value) value of VARIABLE in THEME if the THEME modifies the
+VARIABLE.  Nil otherwise."
+  (custom-theme-value theme (get variable 'theme-value)))
+
+(defun custom-theme-reset-internal (symbol to-theme)
+  (let ((value (custom-theme-variable-value symbol to-theme))
+        was-in-theme)
+    (setq was-in-theme value)
+    (setq value (or value (get symbol 'standard-value)))
+    (when value
+      (put symbol 'saved-value was-in-theme)
+      (if (or (get 'force-value symbol) (default-boundp symbol))
+          (funcall (get symbol 'custom-set 'set-default) symbol
+                   (eval (car value)))))
+    value))
+
+
+(defun custom-theme-reset-variables (theme &rest args)
+  "Reset the value of the variables to values previously defined.
+Assosiate this setting with THEME.
+
+ARGS is a list of lists of the form
+
+    (variable to-theme)
+
+This means reset variable to its value in to-theme."
+  (custom-check-theme theme)
+  (mapc #'(lambda (arg)
+            (apply #'custom-theme-reset-internal arg)
+            (custom-push-theme 'theme-value (car arg) theme 'reset (cadr arg)))
+        args))
+
+(defun custom-reset-variables (&rest args)
+    "Reset the value of the variables to values previously defined.
+Assosiate this setting with the `user' theme.
+
+The ARGS are as in `custom-theme-reset-variables'."
+    (apply #'custom-theme-reset-variables 'user args))
+
 
 ;;; The End.
 
index 780d6e6..748cba4 100644 (file)
@@ -226,9 +226,10 @@ first line, insist it must match FIRST-LINE-REGEXP."
       ;; XEmacs change
       (if (not dont-skip-first)
          (forward-line 1))
-      (if (>= (point) to)
-         (goto-char firstline)
-       (setq at-second t))
+      (cond ((>= (point) to)
+            (goto-char firstline))
+           ((/= (point) from)
+            (setq at-second t)))
       (move-to-left-margin)
       ;; XEmacs change
       (let ((start (point))
@@ -236,7 +237,7 @@ first line, insist it must match FIRST-LINE-REGEXP."
            ;(eol (save-excursion (end-of-line) (point)))
            )
        (setq result
-             (if (not (looking-at paragraph-start))
+             (if (or dont-skip-first (not (looking-at paragraph-start)))
                  (cond ((and adaptive-fill-regexp (looking-at adaptive-fill-regexp))
                         (buffer-substring-no-properties start (match-end 0)))
                        (adaptive-fill-function (funcall adaptive-fill-function)))))
@@ -429,7 +430,8 @@ space does not end a sentence, so don't break a line there."
          ;; This is the actual filling loop.
          (let ((prefixcol 0) linebeg
                (re-break-point (if (featurep 'mule)
-                                   (concat "[ \n\t]\\|" word-across-newline)
+                                   (concat "[ \n\t]\\|" word-across-newline
+                                           ".\\|." word-across-newline)
                                  "[ \n\t]")))
            (while (not (eobp))
              (setq linebeg (point))
index 893efe5..d23ea03 100644 (file)
@@ -64,6 +64,7 @@ Normally it also has no modelines, menubars, or toolbars."
                                 menubar-visible-p nil
                                 has-modeline-p nil
                                 default-toolbar-visible-p nil
+                                default-gutter-visible-p nil
                                 modeline-shadow-thickness 0
                                 left ,(+ fleft (- (/ fwidth 2)
                                                   (/ (* dfwidth fontw)
index 80cedcd..b284749 100644 (file)
            ("Set language environment")
            "--"
            ["Toggle input method" toggle-input-method]
-           ["Select input method" select-input-method]
+           ["Select input method" set-input-method]
            ["Describe input method" describe-input-method]
            "--"
            ["Describe current coding systems"
                 :selected (eq default-toolbar-position 'right)]
                )
               )))
+      ,@(if (featurep 'gutter)
+           '(("Gutter Appearance"
+              ["Visible"
+               (customize-set-variable 'gutter-visible-p
+                                       (not gutter-visible-p))
+               :style toggle
+               :selected gutter-visible-p]
+              ("Default Location"
+               ["Top"
+                (customize-set-variable 'default-gutter-position 'top)
+                :style radio
+                :selected (eq default-gutter-position 'top)]
+               ["Bottom"
+                (customize-set-variable 'default-gutter-position 'bottom)
+                :style radio
+                :selected (eq default-gutter-position 'bottom)]
+               ["Left"
+                (customize-set-variable 'default-gutter-position 'left)
+                :style radio
+                :selected (eq default-gutter-position 'left)]
+               ["Right"
+                (customize-set-variable 'default-gutter-position 'right)
+                :style radio
+                :selected (eq default-gutter-position 'right)]
+               )
+              )))
       ("Mouse"
        ["Avoid Text..."
        (customize-set-variable 'mouse-avoidance-mode
index 4a8ad96..0061576 100644 (file)
@@ -748,7 +748,7 @@ See also the variable completion-highlight-first-word-only for control over
 
 (defun completing-read (prompt table
                         &optional predicate require-match
-                                  initial-contents history)
+                                  initial-contents history default)
   "Read a string in the minibuffer, with completion.
 Args: PROMPT, TABLE, PREDICATE, REQUIRE-MATCH, INITIAL-CONTENTS, HISTORY.
 PROMPT is a string to prompt with; normally it ends in a colon and a space.
@@ -770,19 +770,25 @@ HISTORY, if non-nil, specifies a history list
   which INITIAL-CONTENTS corresponds to).
   If HISTORY is `t', no history will be recorded.
   Positions are counted starting from 1 at the beginning of the list.
+DEFAULT, if non-nil, is the default value.
 Completion ignores case if the ambient value of
   `completion-ignore-case' is non-nil."
   (let ((minibuffer-completion-table table)
         (minibuffer-completion-predicate predicate)
         (minibuffer-completion-confirm (if (eq require-match 't) nil t))
-        (last-exact-completion nil))
-    (read-from-minibuffer prompt
-                          initial-contents
-                          (if (not require-match)
-                              minibuffer-local-completion-map
-                              minibuffer-local-must-match-map)
-                          nil
-                          history)))
+        (last-exact-completion nil)
+       ret)
+    (setq ret (read-from-minibuffer prompt
+                                   initial-contents
+                                   (if (not require-match)
+                                       minibuffer-local-completion-map
+                                     minibuffer-local-must-match-map)
+                                   nil
+                                   history))
+    (if (and (string= ret "")
+            default)
+       default
+      ret)))
 
 \f
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -2107,10 +2113,12 @@ On mswindows devices, this uses `mswindows-color-list'."
 
 ;;(if (featurep 'mule)
 
-(defun read-coding-system (prompt)
+(defun read-coding-system (prompt &optional default-coding-system)
   "Read a coding-system (or nil) from the minibuffer.
-Prompting with string PROMPT."
-  (intern (completing-read prompt obarray 'find-coding-system t)))
+Prompting with string PROMPT.
+If the user enters null input, return second argument DEFAULT-CODING-SYSTEM."
+  (intern (completing-read prompt obarray 'find-coding-system t nil nil 
+                          default-coding-system)))
 
 (defun read-non-nil-coding-system (prompt)
   "Read a non-nil coding-system from the minibuffer.
index f610c1c..a766710 100644 (file)
@@ -1,4 +1,4 @@
-;;; cyrillic.el --- Support for languages which use Cyrillic characters
+;;; cyrillic.el --- Support for Cyrillic -*- coding: iso-2022-7bit; -*-
 
 ;; Copyright (C) 1995,1999 Electrotechnical Laboratory, JAPAN.
 ;; Licensed to the Free Software Foundation.
 ;;; CYRILLIC
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-;; (define-prefix-command 'describe-cyrillic-environment-map)
-;; (define-key-after describe-language-environment-map [Cyrillic]
-;;   '("Cyrillic" . describe-cyrillic-environment-map)
-;;   t)
-
-;; (define-prefix-command 'setup-cyrillic-environment-map)
-;; (define-key-after setup-language-environment-map [Cyrillic]
-;;   '("Cyrillic" . setup-cyrillic-environment-map)
-;;   t)
-
-\f
 ;; ISO-8859-5 staff
 
 ;; (make-coding-system
 ;;  'cyrillic-iso-8bit 2 ?5
 ;;  "ISO 2022 based 8-bit encoding for Cyrillic script (MIME:ISO-8859-5)"
-;;  '((ascii t) (cyrillic-iso8859-5 t) nil nil
-;;    nil ascii-eol ascii-cntl nil nil nil nil))
+;;  '(ascii cyrillic-iso8859-5  nil nil
+;;    nil nil nil nil nil nil nil)
+;;  '((safe-charsets ascii cyrillic-iso8859-5)
+;;    (mime-charset . iso-8859-5)))
 
 ;; (define-coding-system-alias 'iso-8859-5 'cyrillic-iso-8bit)
 
    ))
 
 (set-language-info-alist
- "Cyrillic-ISO" '((setup-function . (setup-cyrillic-iso-environment
-                                    . setup-cyrillic-environment-map))
-                 (charset . (cyrillic-iso8859-5))
+ "Cyrillic-ISO" '((charset cyrillic-iso8859-5)
                  (tutorial . "TUTORIAL.ru")
-                 (coding-system . (iso-8859-5))
+                 (coding-system iso-8859-5)
+                 (coding-priority iso-8859-5)
+                 (input-method . "cyrillic-yawerty")
+                 (features cyril-util)
                  (sample-text . "Russian (\e,L@caaZXY\e(B)       \e,L7T`PRabRcYbU\e(B!")
-                 (documentation . ("Support for Cyrillic ISO-8859-5."
-                                   . describe-cyrillic-environment-map))))
+                 (documentation . "Support for Cyrillic ISO-8859-5."))
+ '("Cyrillic"))
 
 ;; KOI-8 staff
 
         (write-read-repeat r0 , cyrillic-koi8-r-encode-table))))))
   "CCL program to encode KOI8.")
 
-;(make-coding-system
-;  'cyrillic-koi8 4
-;  ;; We used to use ?K.  It is true that ?K is more strictly correct,
-;  ;; but it is also used for Korean.
-;  ;; So people who use koi8 for languages other than Russian
-;  ;; will have to forgive us.
-;  ?R "KOI8 8-bit encoding for Cyrillic (MIME: KOI8-R)"
-;  (cons ccl-decode-koi8 ccl-encode-koi8))
-
-;(define-coding-system-alias 'koi8-r 'cyrillic-koi8)
-;(define-coding-system-alias 'koi8 'cyrillic-koi8)
+;; (make-coding-system
+;;  'cyrillic-koi8 4
+;;  ;; We used to use ?K.  It is true that ?K is more strictly correct,
+;;  ;; but it is also used for Korean.
+;;  ;; So people who use koi8 for languages other than Russian
+;;  ;; will have to forgive us.
+;;  ?R "KOI8 8-bit encoding for Cyrillic (MIME: KOI8-R)"
+;;  '(ccl-decode-koi8 . ccl-encode-koi8)
+;;  '((safe-charsets ascii cyrillic-iso8859-5)
+;;    (mime-charset . koi8-r)
+;;    (valid-codes (0 . 127) 163 179 (192 . 255))
+;;    (charset-origin-alist (cyrillic-iso8859-5 "KOI8-R"
+;;                                              cyrillic-encode-koi8-r-char))))
+
+;; (define-coding-system-alias 'koi8-r 'cyrillic-koi8)
+;; (define-coding-system-alias 'koi8 'cyrillic-koi8)
 
 (make-coding-system
  'koi8-r 'ccl
    encode ,ccl-encode-koi8
    mnemonic "KOI8"))
 
-;(define-coding-system-alias 'koi8-r 'koi8)
+;; it is not correct, but XEmacs doesn't have `ccl' category...
+(coding-system-put 'koi8-r 'category 'iso-8-1)
 
 ;; (define-ccl-program ccl-encode-koi8-font
-;;   '(0
-;;     ((r1 -= 160)
-;;      (r1 = r1
-;;          [ 32 179  32  32  32  32  32  32  32  32  32  32  32  32  32  32
-;;               225 226 247 231 228 229 246 250 233 234 235 236 237 238 239 240
-;;               242 243 244 245 230 232 227 254 251 253 255 249 248 252 224 241
-;;               193 194 215 199 196 197 214 218 201 202 203 204 205 206 207 208
-;;               210 211 212 213 198 200 195 222 219 221 223 217 216 220 192 209
-;;               32 163  32  32  32  32  32  32  32  32  32  32  32  32  32  32])
-;;      ))
+;;   `(0
+;;     ((r1 |= 128)
+;;      (r1 = r1 ,cyrillic-koi8-r-encode-table)))
 ;;   "CCL program to encode Cyrillic chars to KOI font.")
 
 ;; (setq font-ccl-encoder-alist
 ;;       (cons (cons "koi8" ccl-encode-koi8-font) font-ccl-encoder-alist))
 
+;; (defvar cyrillic-koi8-r-nonascii-translation-table
+;;   (make-translation-table-from-vector cyrillic-koi8-r-decode-table)
+;;   "Value of `nonascii-translation-table' in Cyrillic-KOI8 language environment..")
+
 (set-language-info-alist
- "Cyrillic-KOI8" '((setup-function . (setup-cyrillic-koi8-environment
-                                     . setup-cyrillic-environment-map))
-                  (charset . (cyrillic-iso8859-5))
-                  (coding-system . (koi8-r))
+ "Cyrillic-KOI8" '((charset cyrillic-iso8859-5)
+                  (coding-system koi8-r)
+                  (coding-priority koi8-r)
+                  (input-method . "cyrillic-yawerty")
+                  (features cyril-util)
                   (tutorial . "TUTORIAL.ru")
                   (sample-text . "Russian (\e,L@caaZXY\e(B)      \e,L7T`PRabRcYbU\e(B!")
-                  (documentation . ("Support for Cyrillic KOI-8."
-                                    . describe-cyrillic-environment-map))))
+                  (documentation . "Support for Cyrillic KOI8-R."))
+ '("Cyrillic"))
 
 ;;; ALTERNATIVNYJ staff
 
+(eval-and-compile
+
+(defvar cyrillic-alternativnyj-decode-table
+  [
+   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
+   16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31
+   32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47
+   48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63
+   64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79
+   80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95
+   96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111
+   112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
+   ?\e,L0\e(B  ?\e,L1\e(B  ?\e,L2\e(B  ?\e,L3\e(B  ?\e,L4\e(B  ?\e,L5\e(B  ?\e,L6\e(B  ?\e,L7\e(B  ?\e,L8\e(B  ?\e,L9\e(B  ?\e,L:\e(B  ?\e,L;\e(B  ?\e,L<\e(B  ?\e,L=\e(B  ?\e,L>\e(B  ?\e,L?\e(B
+   ?\e,L@\e(B  ?\e,LA\e(B  ?\e,LB\e(B  ?\e,LC\e(B  ?\e,LD\e(B  ?\e,LE\e(B  ?\e,LF\e(B  ?\e,LG\e(B  ?\e,LH\e(B  ?\e,LI\e(B  ?\e,LJ\e(B  ?\e,LK\e(B  ?\e,LL\e(B  ?\e,LM\e(B  ?\e,LN\e(B  ?\e,LO\e(B
+   ?\e,LP\e(B  ?\e,LQ\e(B  ?\e,LR\e(B  ?\e,LS\e(B  ?\e,LT\e(B  ?\e,LU\e(B  ?\e,LV\e(B  ?\e,LW\e(B  ?\e,LX\e(B  ?\e,LY\e(B  ?\e,LZ\e(B  ?\e,L[\e(B  ?\e,L\\e(B  ?\e,L]\e(B  ?\e,L^\e(B  ?\e,L_\e(B
+   32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32
+   32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32
+   32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32
+   ?\e,L`\e(B  ?\e,La\e(B  ?\e,Lb\e(B  ?\e,Lc\e(B  ?\e,Ld\e(B  ?\e,Le\e(B  ?\e,Lf\e(B  ?\e,Lg\e(B  ?\e,Lh\e(B  ?\e,Li\e(B  ?\e,Lj\e(B  ?\e,Lk\e(B  ?\e,Ll\e(B  ?\e,Lm\e(B  ?\e,Ln\e(B  ?\e,Lo\e(B
+   ?\e,L!\e(B  ?\e,Lq\e(B   32  32  32  32  32  32  32  32  32  32  32  32  32 ?\e,Lp\e(B]
+  "Cyrillic ALTERNATIVNYJ decoding table.")
+
+(defvar cyrillic-alternativnyj-encode-table
+  (let ((table (make-vector 256 32))
+       (i 0))
+    (while (< i 256)
+      (let* ((ch (aref cyrillic-alternativnyj-decode-table i))
+            (split (split-char ch)))
+       (if (eq (car split) 'cyrillic-iso8859-5)
+           (aset table (logior (nth 1 split) 128) i)
+         (if (/= ch 32)
+             (aset table ch i))))
+      (setq i (1+ i)))
+    table)
+  "Cyrillic ALTERNATIVNYJ encoding table.")
+  
+)
+
+
 (define-ccl-program ccl-decode-alternativnyj
-  '(3
+  `(3
     ((read r0)
      (loop
-       (write-read-repeat
-       r0
-       [  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
-              16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31
-              32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47
-              48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63
-              64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79
-              80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95
-              96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111
-              112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
-              ?\e,L0\e(B  ?\e,L1\e(B  ?\e,L2\e(B  ?\e,L3\e(B  ?\e,L4\e(B  ?\e,L5\e(B  ?\e,L6\e(B  ?\e,L7\e(B  ?\e,L8\e(B  ?\e,L9\e(B  ?\e,L:\e(B  ?\e,L;\e(B  ?\e,L<\e(B  ?\e,L=\e(B  ?\e,L>\e(B  ?\e,L?\e(B
-              ?\e,L@\e(B  ?\e,LA\e(B  ?\e,LB\e(B  ?\e,LC\e(B  ?\e,LD\e(B  ?\e,LE\e(B  ?\e,LF\e(B  ?\e,LG\e(B  ?\e,LH\e(B  ?\e,LI\e(B  ?\e,LJ\e(B  ?\e,LK\e(B  ?\e,LL\e(B  ?\e,LM\e(B  ?\e,LN\e(B  ?\e,LO\e(B
-              ?\e,LP\e(B  ?\e,LQ\e(B  ?\e,LR\e(B  ?\e,LS\e(B  ?\e,LT\e(B  ?\e,LU\e(B  ?\e,LV\e(B  ?\e,LW\e(B  ?\e,LX\e(B  ?\e,LY\e(B  ?\e,LZ\e(B  ?\e,L[\e(B  ?\e,L\\e(B  ?\e,L]\e(B  ?\e,L^\e(B  ?\e,L_\e(B
-              32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32
-              32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32
-              32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32
-              ?\e,L`\e(B  ?\e,La\e(B  ?\e,Lb\e(B  ?\e,Lc\e(B  ?\e,Ld\e(B  ?\e,Le\e(B  ?\e,Lf\e(B  ?\e,Lg\e(B  ?\e,Lh\e(B  ?\e,Li\e(B  ?\e,Lj\e(B  ?\e,Lk\e(B  ?\e,Ll\e(B  ?\e,Lm\e(B  ?\e,Ln\e(B  ?\e,Lo\e(B
-              ?\e,L!\e(B  ?\e,Lq\e(B   32  32  32  32  32  32  32  32  32  32  32  32  32 ?\e,Lp\e(B]))))
+      (write-read-repeat r0 ,cyrillic-alternativnyj-decode-table))))
   "CCL program to decode Alternativnyj.")
 
 (define-ccl-program ccl-encode-alternativnyj
   `(1
     ((read r0)
      (loop
-       (if (r0 != ,(charset-id 'cyrillic-iso8859-5))
-          (write-read-repeat r0)
-        ((read r0)
-         (r0 -= 160)
-         (write-read-repeat
-          r0
-          [ 32 240  32  32  32  32  32  32  32  32  32  32  32  32  32  32
-               128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
-               144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
-               160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
-               224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
-               255 241  32  32  32  32  32  32  32  32  32  32  32  32  32  32])
-         )))))
+      (if (r0 != ,(charset-id 'cyrillic-iso8859-5))
+         (write-read-repeat r0)
+       ((read r0)
+        (write-read-repeat r0 ,cyrillic-alternativnyj-encode-table))))))
   "CCL program to encode Alternativnyj.")
 
 ;; (make-coding-system
-;;  'alternativnyj 4
-;;  ?A "Coding-system used for Alternativnyj"
-;;  (cons ccl-decode-alternativnyj ccl-encode-alternativnyj))
+;;  'cyrillic-alternativnyj 4 ?A
+;;  "ALTERNATIVNYJ 8-bit encoding for Cyrillic"
+;;  '(ccl-decode-alternativnyj . ccl-encode-alternativnyj)
+;;  '((safe-charsets ascii cyrillic-iso8859-5)
+;;    (valid-codes (0 . 175) (224 . 241) 255)
+;;    (charset-origin-alist (cyrillic-iso8859-5 "ALTERNATIVNYJ"
+;;                                              cyrillic-encode-koi8-r-char))))
+
+
+;; (define-coding-system-alias 'alternativnyj 'cyrillic-alternativnyj)
 
 (make-coding-system
  'alternativnyj 'ccl
    encode ,ccl-encode-alternativnyj
    mnemonic "Cy.Alt"))
 
+;; it is not correct, but XEmacs doesn't have `ccl' category...
+(coding-system-put 'alternativnyj 'category 'iso-8-1)
+
 ;; (define-ccl-program ccl-encode-alternativnyj-font
 ;;   '(0
-;;     ((r1 -= 160)
-;;      (r1 = r1
-;;       [ 32 240  32  32  32  32  32  32  32  32  32  32  32  32  32  32
-;;        128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
-;;        144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
-;;        160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
-;;        224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
-;;        255 241  32  32  32  32  32  32  32  32  32  32  32  32  32  32])
-;;      ))
+;;     ((r1 |= 128)
+;;      (r1 = r1 ,cyrillic-alternativnyj-encode-table)))
 ;;   "CCL program to encode Cyrillic chars to Alternativnyj font.")
 
 ;; (setq font-ccl-encoder-alist
 ;;       (cons (cons "alternativnyj" ccl-encode-alternativnyj-font)
 ;;             font-ccl-encoder-alist))
 
+;; (defvar cyrillic-alternativnyj-nonascii-translation-table
+;;   (make-translation-table-from-vector cyrillic-alternativnyj-decode-table)
+;;   "Value of `nonascii-translation-table' in Cyrillic-ALT language environment.")
+
 (set-language-info-alist
- "Cyrillic-ALT" '((setup-function . (setup-cyrillic-alternativnyj-environment
-                                    . setup-cyrillic-environment-map))
-                 (charset . (cyrillic-iso8859-5))
-                 (coding-system . (alternativnyj))
+ "Cyrillic-ALT" '((charset cyrillic-iso8859-5)
+                 (coding-system alternativnyj)
+                 (coding-priority alternativnyj)
+                 (input-method . "cyrillic-yawerty")
+                 (features cyril-util)
                  (tutorial . "TUTORIAL.ru")
                  (sample-text . "Russian (\e,L@caaZXY\e(B)       \e,L7T`PRabRcYbU\e(B!")
-                 (documentation . ("Support for Cyrillic ALTERNATIVNYJ."
-                                   . describe-cyrillic-environment-map))))
-
-;;; GENERAL
-
-(defun setup-cyrillic-environment ()
-  "Setup multilingual environment for Cyrillic users."
-  (interactive)
-  (setq primary-language "Cyrillic")
-
-  (setq coding-category-iso-8-1 'iso-8859-5)
-
-  (set-coding-priority
-   '(coding-category-iso-7
-     coding-category-iso-8-1))
-
-  (setq-default buffer-file-coding-system 'iso-8859-5)
-  (set-terminal-coding-system 'iso-8859-5)
-  (set-keyboard-coding-system 'iso-8859-5)
-
-  (setq default-input-method '("Cyrillic" . "quail-yawerty"))
-  )
-
-(defun describe-cyrillic-support ()
-  "Describe how Emacs support Cyrillic."
-  (interactive)
-  (describe-language-support-internal "Cyrillic"))
-
-(set-language-info-alist
- "Cyrillic" '((setup-function . setup-cyrillic-environment)
-              (describe-function . describe-cyrillic-support)
-              (charset . (cyrillic-iso8859-5))
-             (tutorial . "TUTORIAL.ru")
-              (coding-system . (iso-8859-5 koi8-r alternativnyj))
-              (sample-text . "Russian (\e,L@caaZXY\e(B) \e,L7T`PRabRcYbU\e(B!")
-              (documentation . nil)))
+                 (documentation . "Support for Cyrillic ALTERNATIVNYJ."))
+ '("Cyrillic"))
 
 ;;; cyrillic.el ends here
index 60731be..640a472 100644 (file)
@@ -1,8 +1,7 @@
 ;;; english.el --- English support
 
-;; Copyright (C) 1997 Electrotechnical Laboratory, JAPAN.
+;; Copyright (C) 1997,1999 Electrotechnical Laboratory, JAPAN.
 ;; Licensed to the Free Software Foundation.
-;; Copyright (C) 1997 MORIOKA Tomohiko
 
 ;; Keywords: multibyte character, character set, syntax, category
 
 ;; English as a language environment is one of the ways to reset
 ;; various multilingual environment to the original settting.
 
-;; modified for XEmacs by MORIOKA Tomohiko
-
 ;;; Code
 
 (defun setup-english-environment ()
   "Reset multilingual environment of Emacs to the default status.
-The default status is as follows.
-
-  The default value of enable-multibyte-characters is t.
-
-  The default value of buffer-file-coding-system is nil.
-  The coding system for terminal output is nil.
-  The coding system for keyboard input is nil.
-
-  The order of priorities of coding categories and the coding system
-  bound to each category are as follows
-       coding category                 coding system
-       --------------------------------------------------
-       coding-category-iso-7           iso-2022-7bit
-       coding-category-iso-8-1         iso-8859-1
-       coding-category-iso-8-2         iso-8859-1
-       coding-category-iso-7-else      iso-2022-7bit-lock
-       coding-category-iso-8-else      iso-2022-8bit-ss2
-       coding-category-emacs-mule      no-conversion
-       coding-category-sjis            japanese-shift-jis
-       coding-category-big5            chinese-big5
-       coding-category-binarry         no-conversion
-"
+See the function `reset-language-environment' for more detail."
   (interactive)
-  ;; (setq-default enable-multibyte-characters t)
-
-  ;; (setq coding-category-iso-7           'iso-2022-7bit
-  ;;       coding-category-iso-8-1         'iso-8859-1
-  ;;       coding-category-iso-8-2         'iso-8859-1
-  ;;       coding-category-iso-7-else      'iso-2022-7bit-lock
-  ;;       coding-category-iso-8-else      'iso-2022-8bit-ss2
-  ;;       coding-category-emacs-mule      'no-conversion
-  ;;       coding-category-sjis            'japanese-shift-jis
-  ;;       coding-category-big5            'chinese-big5
-  ;;       coding-category-binary          'binary)
-  (set-coding-category-system 'iso-7           'iso-2022-7bit)
-  (set-coding-category-system 'iso-8-1         'iso-8859-1)
-  (set-coding-category-system 'iso-8-2         'iso-8859-1)
-  (set-coding-category-system 'iso-lock-shift  'iso-2022-lock)
-  (set-coding-category-system 'iso-8-designate 'ctext)
-  (set-coding-category-system 'no-conversion   'no-conversion)
-  (set-coding-category-system 'shift-jis       'shift_jis)
-  (set-coding-category-system 'big5            'big5)
-  
-  ;; (set-coding-priority
-  ;;  '(coding-category-iso-7
-  ;;    coding-category-iso-8-2
-  ;;    coding-category-iso-8-1
-  ;;    coding-category-iso-7-else
-  ;;    coding-category-iso-8-else
-  ;;    coding-category-emacs-mule 
-  ;;    coding-category-raw-text
-  ;;    coding-category-sjis
-  ;;    coding-category-big5
-  ;;    coding-category-binary))
-  (set-coding-priority-list
-   '(iso-7
-     iso-8-2
-     iso-8-1
-     iso-8-designate
-     iso-lock-shift
-     no-conversion
-     shift-jis
-     big5))
-  
-  (set-default-coding-systems nil)
-  ;; Don't alter the terminal and keyboard coding systems here.
-  ;; The terminal still supports the same coding system
-  ;; that it supported a minute ago.
-;;;  (set-terminal-coding-system-internal nil)
-;;;  (set-keyboard-coding-system-internal nil)
-
-  ;;(setq nonascii-insert-offset 0)
-  )
+  (reset-language-environment))
 
 (set-language-info-alist
- "English" '((setup-function . setup-english-environment)
-            (tutorial . "TUTORIAL")
-            (charset . (ascii))
+ "English" '((tutorial . "TUTORIAL")
+            (charset ascii)
             (sample-text . "Hello!, Hi!, How are you?")
             (documentation . "\
 Nothing special is needed to handle English.")
index 420ca2c..54a3ca3 100644 (file)
@@ -1,4 +1,4 @@
-;;; european.el --- Support for European languages
+;;; european.el --- European languages -*- coding: iso-2022-7bit; -*-
 
 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
 ;; Licensed to the Free Software Foundation.
 ;;; EUROPEANS
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-;; (define-prefix-command 'describe-european-environment-map)
-;; (define-key-after describe-language-environment-map [European]
-;;   '("European" . describe-european-environment-map)
-;;   t)
-
-;; (define-prefix-command 'setup-european-environment-map)
-;; (define-key-after setup-language-environment-map [European]
-;;   '("European" . setup-european-environment-map)
-;;   t)
-
-;; Setup for LANGAUGE which uses one-byte 8-bit CHARSET, one-byte
-;; 8-bit CODING-SYSTEM, and INPUT-METHOD.
-(defun setup-8-bit-environment (language charset coding-system input-method)
-  (setup-english-environment)
-  (set-default-coding-systems coding-system)
-  ;; (setq coding-category-iso-8-1 coding-system
-  ;;       coding-category-iso-8-2 coding-system)
-  (set-coding-category-system 'iso-8-1 coding-system)
-  (set-coding-category-system 'iso-8-2 coding-system)
-
-  ;; (if charset
-  ;;     (let ((nonascii-offset (- (make-char charset) 128)))
-  ;;       ;; Set up for insertion of characters in this character set
-  ;;       ;; when codes 0200 - 0377 are typed in.
-  ;;       (setq nonascii-insert-offset nonascii-offset)))
-
-  (if input-method
-      (setq default-input-method input-method))
-
-  ;; If this is a Latin-N character set, set up syntax for it in
-  ;; single-byte mode.  We can't use require because the file
-  ;; must be eval'd each time in case we change from one Latin-N to another.
-  ;; (if (string-match "^Latin-\\([1-9]\\)$" language)
-  ;;     (load (downcase language) nil t))
-  )
 \f
 ;; Latin-1 (ISO-8859-1)
 
 ;; (make-coding-system
 ;;  'iso-latin-1 2 ?1
-;;  "ISO 2022 based 8-bit encoding (MIME:ISO-8859-1, Compound Text Encoding)"
-;;  '((ascii t) (latin-iso8859-1 t) nil nil
-;;    nil ascii-eol ascii-cntl nil nil nil nil nil nil nil nil nil t))
+;;  "ISO 2022 based 8-bit encoding for Latin-1 (MIME:ISO-8859-1)"
+;;  '(ascii latin-iso8859-1 nil nil
+;;    nil nil nil nil nil nil nil nil nil nil nil nil t)
+;;  '((safe-charsets ascii latin-iso8859-1)
+;;    (mime-charset . iso-8859-1)))
 
 ;; (define-coding-system-alias 'iso-8859-1 'iso-latin-1)
 ;; (define-coding-system-alias 'latin-1 'iso-latin-1)
-;; (define-coding-system-alias 'ctext 'iso-latin-1)
+
+;; (make-coding-system
+;;  'compound-text 2 ?1
+;;  "ISO 2022 based encoding used in inter client communication of X"
+;;  '((ascii t) (latin-iso8859-1 t) nil nil
+;;    nil ascii-eol ascii-cntl nil nil nil nil nil nil nil nil nil t)
+;;  '((safe-charsets . t)))
+
+;; (define-coding-system-alias 'ctext 'compound-text)
 
 (defun setup-latin1-environment ()
   "Set up multilingual environment (MULE) for European Latin-1 users."
   (interactive)
-  (setup-8-bit-environment "Latin-1" 'latin-iso8859-1 'iso-8859-1
-                          "latin-1-prefix"))
+  (set-language-environment "Latin-1"))
 
 (set-language-info-alist
- "Latin-1" '((setup-function . (setup-latin1-environment
-                               . setup-european-environment-map))
-            (charset . (ascii latin-iso8859-1))
-            (coding-system . (iso-8859-1))
+ "Latin-1" '((charset ascii latin-iso8859-1)
+            (coding-system iso-8859-1)
+            (coding-priority iso-8859-1)
+            (input-method . "latin-1-prefix")
             (sample-text
              . "Hello, Hej, Tere, Hei, Bonjour, Gr\e,A|_\e(B Gott, Ciao, \e,A!\e(BHola!")
-            (documentation . ("\
-These languages are supported with the Latin-1 (ISO-8859-1) character set:
+            (documentation . "\
+This language environment is a generic one for Latin-1 (ISO-8859-1)
+character set which supports the following languages:
  Danish, Dutch, English, Faeroese, Finnish, French, German, Icelandic,
  Irish, Italian, Norwegian, Portuguese, Spanish, and Swedish.
-" . describe-european-environment-map))
-            ))
+We also have a German specific language environment \"German\"."))
+ '("European"))
 
 (set-language-info-alist
- "German" '((setup-function . (setup-latin1-environment
-                               . setup-european-environment-map))
-            (charset . (ascii latin-iso8859-1))
-            (coding-system . (iso-8859-1))
-            (tutorial . "TUTORIAL.de")
-            (sample-text
-             . "Hello, Hej, Tere, Hei, Bonjour, Gr\e,A|_\e(B Gott, Ciao, \e,A!\e(BHola!")
-            (documentation . ("\
+ "French" '((charset ascii latin-iso8859-1)
+           (coding-system iso-8859-1)
+           (coding-priority iso-8859-1)
+           (tutorial . "TUTORIAL.fr")
+           (sample-text
+            . "Hello, Hej, Tere, Hei, Bonjour, Gr\e,A|_\e(B Gott, Ciao, \e,A!\e(BHola!")
+           (documentation . ("\
 These languages are supported with the Latin-1 (ISO-8859-1) character set:
  Danish, Dutch, English, Faeroese, Finnish, French, German, Icelandic,
  Irish, Italian, Norwegian, Portuguese, Spanish, and Swedish.
-" . describe-european-environment-map))
-            ))
+")))
+ '("European"))
 
 (set-language-info-alist
- "French" '((setup-function . (setup-latin1-environment
-                               . setup-european-environment-map))
-            (charset . (ascii latin-iso8859-1))
-            (coding-system . (iso-8859-1))
-            (tutorial . "TUTORIAL.fr")
-            (sample-text
-             . "Hello, Hej, Tere, Hei, Bonjour, Gr\e,A|_\e(B Gott, Ciao, \e,A!\e(BHola!")
-            (documentation . ("\
+ "Norwegian" '((charset ascii latin-iso8859-1)
+              (coding-system iso-8859-1)
+              (coding-priority iso-8859-1)
+              (tutorial . "TUTORIAL.no")
+              (sample-text
+               . "Hello, Hej, Tere, Hei, Bonjour, Gr\e,A|_\e(B Gott, Ciao, \e,A!\e(BHola!")
+              (documentation . ("\
 These languages are supported with the Latin-1 (ISO-8859-1) character set:
  Danish, Dutch, English, Faeroese, Finnish, French, German, Icelandic,
  Irish, Italian, Norwegian, Portuguese, Spanish, and Swedish.
-" . describe-european-environment-map))
-            ))
+")))
+ '("European"))
 
-(set-language-info-alist
- "Norwegian" '((setup-function . (setup-latin1-environment
-                               . setup-european-environment-map))
-            (charset . (ascii latin-iso8859-1))
-            (coding-system . (iso-8859-1))
-            (tutorial . "TUTORIAL.no")
-            (sample-text
-             . "Hello, Hej, Tere, Hei, Bonjour, Gr\e,A|_\e(B Gott, Ciao, \e,A!\e(BHola!")
-            (documentation . ("\
-These languages are supported with the Latin-1 (ISO-8859-1) character set:
- Danish, Dutch, English, Faeroese, Finnish, French, German, Icelandic,
- Irish, Italian, Norwegian, Portuguese, Spanish, and Swedish.
-" . describe-european-environment-map))
-            ))
 \f
 ;; Latin-2 (ISO-8859-2)
 
 ;; (make-coding-system
 ;;  'iso-latin-2 2 ?2
 ;;  "ISO 2022 based 8-bit encoding (MIME:ISO-8859-2)"
-;;  '((ascii t) (latin-iso8859-2 t) nil nil
-;;    nil ascii-eol ascii-cntl nil nil nil nil))
+;;  '(ascii latin-iso8859-2 nil nil
+;;    nil nil nil nil nil nil nil)
+;;  '((safe-charsets ascii latin-iso8859-2)
+;;    (mime-charset . iso-8859-2)))
 
 ;; (define-coding-system-alias 'iso-8859-2 'iso-latin-2)
 ;; (define-coding-system-alias 'latin-2 'iso-latin-2)
@@ -188,67 +149,65 @@ These languages are supported with the Latin-1 (ISO-8859-1) character set:
 (defun setup-latin2-environment ()
   "Set up multilingual environment (MULE) for European Latin-2 users."
   (interactive)
-  (setup-8-bit-environment "Latin-2" 'latin-iso8859-2 'iso-8859-2
-                          "latin-2-prefix"))
+  (set-language-environment "Latin-2"))
 
 (set-language-info-alist
- "Latin-2" '((setup-function . (setup-latin2-environment
-                               . setup-european-environment-map))
-            (charset . (ascii latin-iso8859-2))
-            (coding-system . (iso-8859-2))
-            (documentation . ("\
-These languages are supported with the Latin-2 (ISO-8859-2) character set:
+ "Latin-2" '((charset ascii latin-iso8859-2)
+            (coding-system iso-8859-2)
+            (coding-priority iso-8859-2)
+            (input-method . "latin-2-prefix")
+            (documentation . "\
+This language environment is a generic one for Latin-2 (ISO-8859-2)
+character set which supports the following languages:
  Albanian, Czech, English, German, Hungarian, Polish, Romanian,
- Serbian, Croatian, Slovak, Slovene, and Swedish.
-" . describe-european-environment-map))
-            ))
+ Serbian, Croatian, Slovak, Slovene, Sorbian (upper and lower),
+ and Swedish."))
+ '("European"))
 
 (set-language-info-alist
- "Croatian" '((setup-function . (setup-latin2-environment
-                               . setup-european-environment-map))
-             (charset . (ascii latin-iso8859-2))
+ "Croatian" '((charset ascii latin-iso8859-2)
+             (coding-system iso-8859-2)
+             (coding-priority iso-8859-2)
              (tutorial . "TUTORIAL.hr")
-             (coding-system . (iso-8859-2))
-             (documentation . ("\
-These languages are supported with the Latin-2 (ISO-8859-2) character set:
+             (documentation . "\
+This language environment is a generic one for Latin-2 (ISO-8859-2)
+character set which supports the following languages:
  Albanian, Czech, English, German, Hungarian, Polish, Romanian,
- Serbian, Croatian, Slovak, Slovene, and Swedish.
-" . describe-european-environment-map))
-             ))
+ Serbian, Croatian, Slovak, Slovene, Sorbian (upper and lower),
+ and Swedish."))
+ '("European"))
 
 (set-language-info-alist
- "Polish" '((setup-function . (setup-latin2-environment
-                               . setup-european-environment-map))
-             (charset . (ascii latin-iso8859-2))
-             (tutorial . "TUTORIAL.pl")
-             (coding-system . (iso-8859-2))
-             (documentation . ("\
-These languages are supported with the Latin-2 (ISO-8859-2) character set:
+ "Polish" '((charset ascii latin-iso8859-2)
+           (coding-system iso-8859-2)
+           (coding-priority iso-8859-2)
+           (tutorial . "TUTORIAL.pl")
+           (documentation . "\
+This language environment is a generic one for Latin-2 (ISO-8859-2)
+character set which supports the following languages:
  Albanian, Czech, English, German, Hungarian, Polish, Romanian,
- Serbian, Croatian, Slovak, Slovene, and Swedish.
-" . describe-european-environment-map))
-             ))
+ Serbian, Croatian, Slovak, Slovene, Sorbian (upper and lower),
+ and Swedish."))
+ '("European"))
 
 ;; Romanian support originally from romanian.el
 
 (defun setup-romanian-environment ()
   "Setup multilingual environment (MULE) for Romanian."
   (interactive)
-  (setup-8-bit-environment "Romanian" 'latin-iso8859-2 'iso-8859-2
-                          "romanian"))
+  (set-language-environment "Romanian"))
 
 (set-language-info-alist
- "Romanian" '((setup-function . (setup-romanian-environment
-                                . setup-european-environment-map))
-             (charset . (ascii latin-iso8859-2))
+ "Romanian" '((charset ascii latin-iso8859-2)
+             (coding-system iso-8859-2)
+             (coding-priority iso-8859-2)
+             (input-method . "latin-2-postfix")
              (tutorial . "TUTORIAL.ro")
-             (coding-system . (iso-8859-2))
-             (documentation . ("\
-These languages are supported with the Latin-2 (ISO-8859-2) character set:
- Albanian, Czech, English, German, Hungarian, Polish, Romanian,
- Serbian, Croatian, Slovak, Slovene, and Swedish.
-" . describe-european-environment-map))
-             ))
+             (sample-text . "Bun\e,Bc\e(B ziua, bine a\e,B~\e(Bi venit!")
+             (documentation . t))
+ '("European"))
+
+(provide 'romanian)
 
 ;; Czech support originally from czech.el
 ;; Author: Milan Zamazal <pdm@fi.muni.cz>
@@ -257,24 +216,18 @@ These languages are supported with the Latin-2 (ISO-8859-2) character set:
 (defun setup-czech-environment ()
   "Set up multilingual environment (MULE) for czech users."
   (interactive)
-  (setup-8-bit-environment "Czech" 'latin-iso8859-2 'iso-8859-2
-                          "czech"))
-
+  (set-language-environment "Czech"))
 
 (set-language-info-alist
- "Czech" 
- '((setup-function . (setup-czech-environment
-                     . setup-european-environment-map))
-   (charset . (ascii latin-iso8859-2))
-   (coding-system . (iso-8859-2))
-   (tutorial . "TUTORIAL.cs")
-   (documentation . ("\
-These languages are supported with the Latin-2 (ISO-8859-2) character set:
-Albanian, Czech, English, German, Hungarian, Polish, Romanian,
-Serbian, Croatian, Slovak, Slovene, and Swedish.
-" . describe-european-environment-map))
-))
+ "Czech" '((charset ascii latin-iso8859-2)
+          (coding-system iso-8859-2)
+          (coding-priority iso-8859-2)
+          (tutorial . "TUTORIAL.cs")
+          (sample-text . "P\e,Bx\e(Bejeme v\e,Ba\e(Bm hezk\e,B}\e(B den!")
+          (documentation . t))
+ '("European"))
 
+(provide 'czech)
 
 \f
 ;; Latin-3 (ISO-8859-3)
@@ -282,8 +235,10 @@ Serbian, Croatian, Slovak, Slovene, and Swedish.
 ;; (make-coding-system
 ;;  'iso-latin-3 2 ?3
 ;;  "ISO 2022 based 8-bit encoding (MIME:ISO-8859-3)"
-;;  '((ascii t) (latin-iso8859-3 t) nil nil
-;;    nil ascii-eol ascii-cntl nil nil nil nil))
+;;  '(ascii latin-iso8859-3 nil nil
+;;    nil nil nil nil nil nil nil)
+;;  '((safe-charsets ascii latin-iso8859-3)
+;;    (mime-charset . iso-8859-3)))
 
 ;; (define-coding-system-alias 'iso-8859-3 'iso-latin-3)
 ;; (define-coding-system-alias 'latin-3 'iso-latin-3)
@@ -300,28 +255,29 @@ Serbian, Croatian, Slovak, Slovene, and Swedish.
 (defun setup-latin3-environment ()
   "Set up multilingual environment (MULE) for European Latin-3 users."
   (interactive)
-  (setup-8-bit-environment "Latin-3" 'latin-iso8859-3 'iso-8859-3
-                          "latin-3-prefix"))
+  (set-language-environment "Latin-3"))
 
 (set-language-info-alist
- "Latin-3" '((setup-function . (setup-latin3-environment
-                               . setup-european-environment-map))
-            (charset . (ascii latin-iso8859-3))
-            (coding-system . (iso-8859-3))
-            (documentation . ("\
+ "Latin-3" '((charset ascii latin-iso8859-3)
+            (coding-system iso-8859-3)
+            (coding-priority iso-8859-3)
+            (input-method . "latin-3-prefix")
+            (documentation . "\
 These languages are supported with the Latin-3 (ISO-8859-3) character set:
  Afrikaans, Catalan, Dutch, English, Esperanto, French, Galician,
- German, Italian, Maltese, Spanish, and Turkish.
-" . describe-european-environment-map))
-            ))
+ German, Italian, Maltese, Spanish, and Turkish."))
+ '("European"))
+
 \f
 ;; Latin-4 (ISO-8859-4)
 
 ;; (make-coding-system
 ;;  'iso-latin-4 2 ?4
 ;;  "ISO 2022 based 8-bit encoding (MIME:ISO-8859-4)"
-;;  '((ascii t) (latin-iso8859-4 t) nil nil
-;;    nil ascii-eol ascii-cntl nil nil nil nil))
+;;  '(ascii latin-iso8859-4 nil nil
+;;    nil nil nil nil nil nil nil)
+;;  '((safe-charsets ascii latin-iso8859-4)
+;;    (mime-charset . iso-8895-4)))
 
 ;; (define-coding-system-alias 'iso-8859-4 'iso-latin-4)
 ;; (define-coding-system-alias 'latin-4 'iso-latin-4)
@@ -338,28 +294,29 @@ These languages are supported with the Latin-3 (ISO-8859-3) character set:
 (defun setup-latin4-environment ()
   "Set up multilingual environment (MULE) for European Latin-4 users."
   (interactive)
-  (setup-8-bit-environment "Latin-4" 'latin-iso8859-4 'iso-8859-4
-                          "latin-4-prefix"))
+  (set-language-environment "Latin-4"))
 
 (set-language-info-alist
- "Latin-4" '((setup-function . (setup-latin4-environment
-                               . setup-european-environment-map))
-            (charset . (ascii latin-iso8859-4))
-            (coding-system . (iso-8859-4))
-            (documentation . ("\
+ "Latin-4" '((charset ascii latin-iso8859-4)
+            (coding-system iso-8859-4)
+            (coding-priority iso-8859-4)
+            (input-method . "latin-4-prefix")
+            (documentation . "\
 These languages are supported with the Latin-4 (ISO-8859-4) character set:
  Danish, English, Estonian, Finnish, German, Greenlandic, Lappish,
- Latvian, Lithuanian, and Norwegian.
-" . describe-european-environment-map))
-            ))
+ Latvian, Lithuanian, and Norwegian."))
+ '("European"))
+
 \f
 ;; Latin-5 (ISO-8859-9)
 
 ;; (make-coding-system
 ;;  'iso-latin-5 2 ?9
 ;;  "ISO 2022 based 8-bit encoding (MIME:ISO-8859-9)"
-;;  '((ascii t) (latin-iso8859-9 t) nil nil
-;;    nil ascii-eol ascii-cntl nil nil nil nil))
+;;  '(ascii latin-iso8859-9 nil nil
+;;    nil nil nil nil nil nil nil)
+;;  '((safe-charsets ascii latin-iso8859-9)
+;;    (mime-charset . iso-8859-9)))
 
 ;; (define-coding-system-alias 'iso-8859-9 'iso-latin-5)
 ;; (define-coding-system-alias 'latin-5 'iso-latin-5)
@@ -376,46 +333,52 @@ These languages are supported with the Latin-4 (ISO-8859-4) character set:
 (defun setup-latin5-environment ()
   "Set up multilingual environment (MULE) for European Latin-5 users."
   (interactive)
-  (setup-8-bit-environment "Latin-5" 'latin-iso8859-9 'iso-8859-5
-                          "latin-5-prefix"))
+  (set-language-environment "Latin-5"))
+
+(set-language-info-alist
+ "Latin-5" '((charset ascii latin-iso8859-9)
+            (coding-system iso-8859-9)
+            (coding-priority iso-8859-9)
+            (input-method . "latin-5-prefix")
+            (documentation . "\
+These languages are supported with the Latin-5 (ISO-8859-9) character set."))
+ '("European"))
+
+\f
+(defun setup-german-environment ()
+  "Set up multilingual environment (MULE) for German users."
+  (interactive)
+  (set-language-environment "German"))
+
+(set-language-info-alist
+ "German" '((tutorial . "TUTORIAL.de")
+           (charset ascii latin-iso8859-1)
+           (coding-system iso-8859-1)
+           (coding-priority iso-8859-1)
+           (input-method . "german-postfix")
+           (sample-text . "\
+German (Deutsch Nord)  Guten Tag
+German (Deutsch S\e,A|\e(Bd)     Gr\e,A|_\e(B Gott")
+           (documentation . "\
+This language environment is almost the same as Latin-1,
+but default input method is set to \"german-postfix\"."))
+ '("European"))
+
+(defun setup-slovenian-environment ()
+  "Setup multilingual environment (MULE) for Slovenian."
+  (interactive)
+  (set-language-environment "Slovenian"))
 
 (set-language-info-alist
- "Latin-5" '((setup-function . (setup-latin5-environment
-                               . setup-european-environment-map))
-            (charset . (ascii latin-iso8859-9))
-            (coding-system . (iso-8859-5))
-            (documentation . ("\
-These languages are supported with the Latin-5 (ISO-8859-9) character set.
-" . describe-european-environment-map))
-            ))
-
-;; (defun setup-european-environment ()
-;;   "Setup multilingual environment (MULE) for European languages users.
-;; It actually reset MULE to the default status, and
-;; set quail-latin-1 as the default input method to be selected.
-;; See also the documentation of setup-english-environment."
-;;   (setup-english-environment)
-;;   (setq default-input-method '("European" . "quail-latin-1")))
-
-;; (defun describe-european-support ()
-;;   "Describe how Emacs support European languages."
-;;   (interactive)
-;;   (describe-language-support-internal "European"))
-
-;; (set-language-info-alist
-;;  "European" '((setup-function . setup-european-environment)
-;;               (describe-function . describe-european-support)
-;;               (charset . (ascii latin-iso8859-1 latin-iso8859-2
-;;                           latin-iso8859-3 latin-iso8859-4 latin-iso8859-9))
-;;               (coding-system . (iso-8859-1 iso-8859-2 iso-8859-3
-;;                                 iso-8859-4 iso-8859-9))
-;;               (sample-text
-;;                . "Hello, Hej, Tere, Hei, Bonjour, Gr\e,A|_\e(B Gott, Ciao, \e,A!\e(BHola!")
-;;               (documentation . "\
-;; Almost all of European languages are supported by the character sets and
-;; coding systems listed below.
-;; To input them, LEIM (Libraries for Emacs Input Methods) should have been
-;; installed.")
-;;               ))
+ "Slovenian" '((charset . (ascii latin-iso8859-2))
+              (coding-system . (iso-8859-2))
+              (coding-priority . (iso-8859-2))
+              (input-method . "latin-2-postfix")
+              (tutorial . "TUTORIAL.sl")
+              (sample-text . "\e,B.\e(Belimo vam uspe\e,B9\e(Ben dan!")
+              (documentation . t))
+ '("European"))
+
+(provide 'slovenian)
 
 ;;; european.el ends here
index b878c67..f37bc25 100644 (file)
 (loop for c from 54 to 126
       do (modify-syntax-entry (make-char 'greek-iso8859-7 c) "w"))
 (modify-syntax-entry (make-char 'greek-iso8859-7 32) "w") ; no-break space
-(modify-syntax-entry ?\e,F7\e(B ".")
-(modify-syntax-entry ?\e,F;\e(B ".")
-(modify-syntax-entry ?\e,F=\e(B ".")
+(modify-syntax-entry ?\e.F\eN7 ".")
+(modify-syntax-entry ?\eN; ".")
+(modify-syntax-entry ?\eN= ".")
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; GREEK
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-;; (define-language-environment 'greek
-;;   "Greek"
-;;   (lambda ()
-;;     (set-coding-category-system 'iso-8-designate 'iso-8859-7)
-;;     (set-coding-priority-list '(iso-8-designate iso-8-1))
-;;     (set-default-buffer-file-coding-system 'iso-8859-7)
-;;     (setq terminal-coding-system 'iso-8859-7)
-;;     (setq keyboard-coding-system 'iso-8859-7)
-;;     ;; (setq-default quail-current-package
-;;     ;;               (assoc "greek" quail-package-alist))
-;;     ))
 \f
 ;; (make-coding-system
-;;  'iso-8859-7 2 ?7 "MIME ISO-8859-7"
-;;  '((ascii t) (greek-iso8859-7 t) nil nil
-;;    nil ascii-eol ascii-cntl nil nil nil nil))
+;;  'greek-iso-8bit 2 ?7
+;;  "ISO 2022 based 8-bit encoding for Greek (MIME:ISO-8859-7)"
+;;  '(ascii greek-iso8859-7 nil nil
+;;    nil nil nil nil nil nil nil)
+;;  '((safe-charsets ascii greek-iso8859-7)
+;;    (mime-charset . iso-8859-7)))
+
+;; (define-coding-system-alias 'iso-8859-7 'greek-iso-8bit)
 
 (make-coding-system
  'iso-8859-7 'iso2022 "MIME ISO-8859-7"
 (defun setup-greek-environment ()
   "Setup multilingual environment (MULE) for Greek."
   (interactive)
-  (setup-8-bit-environment "Greek" 'greek-iso8859-7 'iso-8859-7 "greek")
-  )
+  (set-language-environment "Greek"))
 
 (set-language-info-alist
- "Greek" '((setup-function . setup-greek-environment)
-          (charset . (greek-iso8859-7))
-          (coding-system . (iso-8859-7))
-          (sample-text . "Greek (\e,FGkk]mija\e(B)       \e,FCei\\e(B \e,Fsar\e(B")
+ "Greek" '((charset greek-iso8859-7)
+          (coding-system iso-8859-7)
+          (coding-priority iso-8859-7)
+          (input-method . "greek")
+          (sample-text . "Greek (\eNG\eNk\eNk\eN]\eNm\eNi\eNj\eNa)     \eNC\eNe\eNi\eN\ \eNs\eNa\eNr")
           (documentation . t)))
 
 ;;; greek.el ends here
index 767fc0a..9e89fa1 100644 (file)
@@ -1,4 +1,4 @@
-;;; hebrew.el --- Support for Hebrew
+;;; hebrew.el --- Support for Hebrew -*- coding: iso-2022-7bit; -*-
 
 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
 ;; Licensed to the Free Software Foundation.
 ;; (make-coding-system
 ;;  'hebrew-iso-8bit 2 ?8
 ;;  "ISO 2022 based 8-bit encoding for Hebrew (MIME:ISO-8859-8)"
-;;  '((ascii t) (hebrew-iso8859-8 t) nil nil
-;;    nil ascii-eol ascii-cntl nil nil nil nil nil t))
+;;  '(ascii hebrew-iso8859-8 nil nil
+;;    nil ascii-eol ascii-cntl nil nil nil nil nil t)
+;;  '((safe-charsets ascii hebrew-iso8859-8)
+;;    (mime-charset . iso-8859-8)))
 
 ;; (define-coding-system-alias 'iso-8859-8 'hebrew-iso-8bit)
 
@@ -51,7 +53,7 @@
    charset-g3 t
    no-iso6429 t
    mnemonic "MIME/Hbrw"
-))
+   ))
 
 (make-coding-system
  'ctext-hebrew 'iso2022
   "Setup multilingual environment (MULE) for Hebrew.
 But, please note that right-to-left writing is not yet supported."
   (interactive)
-  (setup-8-bit-environment "Hebrew" 'hebrew-iso8859-8 'iso-8859-8
-                          "hebrew")
-  (set-coding-category-system 'iso-8-designate 'iso-8859-8)
-  (set-coding-priority-list
-   '(iso-8-designate
-     iso-8-1
-     iso-7
-     iso-8-2
-     iso-lock-shift
-     no-conversion
-     shift-jis
-     big5))
-  )
+  (set-language-environment "Hebrew"))
 
 (set-language-info-alist
- "Hebrew" '((setup-function . setup-hebrew-environment)
-           (describe-function . describe-hebrew-support)
-           (charset . (hebrew-iso8859-8))
-           (coding-system . (iso-8859-8))
-           (sample-text . "Hebrew      \e,Hylem\e(B")
+ "Hebrew" '((charset hebrew-iso8859-8)
+           (coding-system iso-8859-8)
+           (coding-priority iso-8859-8)
+           (input-method . "hebrew")
+           (sample-text . "Hebrew      \e[2]\e,Hylem\e[0]\e(B")
            (documentation . "Right-to-left writing is not yet supported.")
            ))
 
index 2763262..f42ef2d 100644 (file)
@@ -1,4 +1,4 @@
-;;; korean.el --- Support for Korean
+;;; korean.el --- Support for Korean -*- coding: iso-2022-7bit; -*-
 
 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
 ;; Licensed to the Free Software Foundation.
     (setq-default its:*current-map* (its:get-mode-map "hangul"))))
 \f
 ;; (make-coding-system
-;;  'euc-kr 2 ?K
-;;  "Coding-system of Korean EUC (Extended Unix Code)."
-;;  '((ascii t) korean-ksc5601 nil nil
-;;    nil ascii-eol ascii-cntl))
+;;  'korean-iso-8bit 2 ?K
+;;  "ISO 2022 based EUC encoding for Korean KSC5601 (MIME:EUC-KR)"
+;;  '(ascii korean-ksc5601 nil nil
+;;    nil ascii-eol ascii-cntl)
+;;  '((safe-charsets ascii korean-ksc5601)
+;;    (mime-charset . euc-kr)))
 
 (make-coding-system
  'euc-kr 'iso2022
 
 ;;(define-coding-system-alias 'euc-kr 'euc-korea)
 
-(copy-coding-system 'euc-kr 'korean-euc)
+(define-coding-system-alias 'korean-euc 'euc-kr)
 
 ;; (make-coding-system
 ;;  'iso-2022-kr 2 ?k
-;;  "MIME ISO-2022-KR"
+;;  "ISO 2022 based 7-bit encoding for Korean KSC5601 (MIME:ISO-2022-KR)."
 ;;  '(ascii (nil korean-ksc5601) nil nil
 ;;          nil ascii-eol ascii-cntl seven locking-shift nil nil nil nil nil
-;;          designation-bol))
+;;          designation-bol)
+;;  '((safe-charsets ascii korean-ksc5601)
+;;    (mime-charset . iso-2022-kr)))
 
 (make-coding-system
  'iso-2022-kr 'iso2022
    mnemonic "Ko/7bit"
    eol-type lf))
 
-(defun setup-korean-environment ()
-  "Setup multilingual environment (MULE) for Korean."
-  (interactive)
-  (setup-english-environment)
-  ;; (setq coding-category-iso-8-2 'euc-kr)
-  (set-coding-category-system 'iso-8-2 'euc-kr)
-
-  ;; (set-coding-priority
-  ;;  '(coding-category-iso-7
-  ;;    coding-category-iso-8-2
-  ;;    coding-category-iso-8-1))
-  (set-coding-priority-list
-   '(iso-8-2
-     iso-7
-     iso-8-1
-     iso-8-designate
-     iso-lock-shift
-     no-conversion
-     shift-jis
-     big5))
-
-  (set-default-coding-systems 'euc-kr)
-
-  ;; (when (eq 'x (device-type (selected-device)))
-  ;;   (x-use-halfwidth-roman-font 'korean-ksc5601 "ksc5636"))
-
-  ;; EGG specific setup 97.02.05 jhod
-  (when (featurep 'egg)
-    (when (not (featurep 'egg-kor))
-      (provide 'egg-kor)
-      (load "its-hangul")
-      (setq its:*standard-modes*
-           (cons (its:get-mode-map "hangul") its:*standard-modes*)))
-    (setq-default its:*current-map* (its:get-mode-map "hangul")))
-
-  (setq default-input-method "korean-hangul"))
+;; (define-coding-system-alias 'korean-iso-7bit-lock 'iso-2022-kr)
 
 (set-language-info-alist
- "Korean" '((setup-function . setup-korean-environment)
+ "Korean" '((setup-function . setup-korean-environment-internal)
+           (exit-function . exit-korean-environment)
            (tutorial . "TUTORIAL.ko")
-           (charset . (korean-ksc5601))
-           (coding-system . (iso-2022-kr euc-kr))
+           (charset korean-ksc5601)
+           (coding-system euc-kr iso-2022-kr)
+           (coding-priority euc-kr iso-2022-kr)
+           (input-method . "korean-hangul")
+           (features korea-util)
            (sample-text . "Hangul (\e$(CGQ1[\e(B)        \e$(C>H3gGO<<?d\e(B, \e$(C>H3gGO=J4O1n\e(B")
-           (documentation . t)))
+           (documentation . "\
+The following key bindings are available while using Korean input methods:
+  Shift-SPC:   toggle-korean-input-mthod
+  Control-F9:  quail-hangul-switch-symbol-ksc
+  F9:          quail-hangul-switch-hanja")
+           ))
 
 ;;; korean.el ends here
index 7f28d19..b0c44cd 100644 (file)
 ;;     (read REG ...)
 ;;     | (read-if (REG OPERATOR ARG) CCL_BLOCK CCL_BLOCK)
 ;;     | (read-branch REG CCL_BLOCK [CCL_BLOCK ...])
+;;      | (read-multibyte-character REG {charset} REG {code-point})
 ;; WRITE :=
 ;;     (write REG ...)
 ;;     | (write EXPRESSION)
 ;;     | (write integer) | (write string) | (write REG ARRAY)
 ;;     | string
+;;      | (write-multibyte-character REG(charset) REG(codepoint))
 ;; CALL := (call ccl-program-name)
 ;; END := (end)
 ;;
 ;;     | < | > | == | <= | >= | != | de-sjis | en-sjis
 ;; ASSIGNMENT_OPERATOR :=
 ;;     += | -= | *= | /= | %= | &= | '|=' | ^= | <<= | >>=
-;; ARRAY := '[' interger ... ']'
+;; ARRAY := '[' integer ... ']'
 
 ;;; Code:
 
 (defconst ccl-command-table
   [if branch loop break repeat write-repeat write-read-repeat
-      read read-if read-branch write call end]
-  "*Vector of CCL commands (symbols).")
+      read read-if read-branch write call end
+      read-multibyte-character write-multibyte-character]
+  "Vector of CCL commands (symbols).")
 
 ;; Put a property to each symbol of CCL commands for the compiler.
 (let (op (i 0) (len (length ccl-command-table)))
    jump-cond-expr-register
    read-jump-cond-expr-const
    read-jump-cond-expr-register
+   ex-cmd
    ]
-  "*Vector of CCL compiled codes (symbols).")
+  "Vector of CCL compiled codes (symbols).")
+
+(defconst ccl-extended-code-table
+  [read-multibyte-character
+   write-multibyte-character
+   translate-character
+   translate-character-const-tbl
+   nil nil nil nil nil nil nil nil nil nil nil nil ; 0x04-0x0f
+   iterate-multiple-map
+   map-multiple
+   map-single
+   ]
+  "Vector of CCL extended compiled codes (symbols).")
 
 ;; Put a property to each symbol of CCL codes for the disassembler.
 (let (code (i 0) (len (length ccl-code-table)))
     (put code 'ccl-dump-function (intern (format "ccl-dump-%s" code)))
     (setq i (1+ i))))
 
+(let (code (i 0) (len (length ccl-extended-code-table)))
+  (while (< i len)
+    (setq code (aref ccl-extended-code-table i))
+    (if code
+       (progn
+         (put code 'ccl-ex-code i)
+         (put code 'ccl-dump-function (intern (format "ccl-dump-%s" code)))))
+    (setq i (1+ i))))
+
 (defconst ccl-jump-code-list
   '(jump jump-cond write-register-jump write-register-read-jump
     write-const-jump write-const-read-jump write-string-jump
 
 (defconst ccl-register-table
   [r0 r1 r2 r3 r4 r5 r6 r7]
-  "*Vector of CCL registers (symbols).")
+  "Vector of CCL registers (symbols).")
 
 ;; Put a property to indicate register number to each symbol of CCL.
 ;; registers.
 (defconst ccl-arith-table
   [+ - * / % & | ^ << >> <8 >8 // nil nil nil
    < > == <= >= != de-sjis en-sjis]
-  "*Vector of CCL arithmetic/logical operators (symbols).")
+  "Vector of CCL arithmetic/logical operators (symbols).")
 
 ;; Put a property to each symbol of CCL operators for the compiler.
 (let (arith (i 0) (len (length ccl-arith-table)))
 
 (defconst ccl-assign-arith-table
   [+= -= *= /= %= &= |= ^= <<= >>= <8= >8= //=]
-  "*Vector of CCL assignment operators (symbols).")
+  "Vector of CCL assignment operators (symbols).")
 
 ;; Put a property to each symbol of CCL assignment operators for the compiler.
 (let (arith (i 0) (len (length ccl-assign-arith-table)))
     (aset ccl-program-vector ccl-current-ic code)
     (setq ccl-current-ic (1+ ccl-current-ic))))
 
+;; extended ccl command format
+;;     |- 14-bit -|- 3-bit --|- 3-bit --|- 3-bit --|- 5-bit -|
+;;     |- EX-OP --|-- REG3 --|-- REG2 --|-- REG ---|-- OP ---|
+(defun ccl-embed-extended-command (ex-op reg reg2 reg3)
+  (let ((data (logior (ash (get ex-op 'ccl-ex-code) 3)
+                     (if (symbolp reg3)
+                         (get reg3 'ccl-register-number)
+                       0))))
+    (ccl-embed-code 'ex-cmd reg data reg2)))
+
 ;; Just advance `ccl-current-ic' by INC.
 (defun ccl-increment-ic (inc)
   (setq ccl-current-ic (+ ccl-current-ic inc)))
     (let ((unconditional-jump (ccl-compile-1 true-cmds)))
       (if (null false-cmds)
          ;; This is the place to jump to if condition is false.
-         (ccl-embed-current-address jump-cond-address)
+         (progn
+           (ccl-embed-current-address jump-cond-address)
+           (setq unconditional-jump nil))
        (let (end-true-part-address)
          (if (not unconditional-jump)
              (progn
   (ccl-embed-code 'end 0 0)
   t)
 
+;; Compile read-multibyte-character
+(defun ccl-compile-read-multibyte-character (cmd)
+  (if (/= (length cmd) 3)
+      (error "CCL: Invalid number of arguments: %s" cmd))
+  (let ((RRR (nth 1 cmd))
+       (rrr (nth 2 cmd)))
+    (ccl-check-register rrr cmd)
+    (ccl-check-register RRR cmd)
+    (ccl-embed-extended-command 'read-multibyte-character rrr RRR 0))
+  nil)
+
+;; Compile write-multibyte-character
+(defun ccl-compile-write-multibyte-character (cmd)
+  (if (/= (length cmd) 3)
+      (error "CCL: Invalid number of arguments: %s" cmd))
+  (let ((RRR (nth 1 cmd))
+       (rrr (nth 2 cmd)))
+    (ccl-check-register rrr cmd)
+    (ccl-check-register RRR cmd)
+    (ccl-embed-extended-command 'write-multibyte-character rrr RRR 0))
+  nil)
+
+;; Compile translate-character
+;; (defun ccl-compile-translate-character (cmd)
+;;   (if (/= (length cmd) 4)
+;;       (error "CCL: Invalid number of arguments: %s" cmd))
+;;   (let ((Rrr (nth 1 cmd))
+;;         (RRR (nth 2 cmd))
+;;         (rrr (nth 3 cmd)))
+;;     (ccl-check-register rrr cmd)
+;;     (ccl-check-register RRR cmd)
+;;     (cond ((and (symbolp Rrr) (not (get Rrr 'ccl-register-number)))
+;;            (if (not (get Rrr 'translation-table))
+;;                (error "CCL: Invalid translation table %s in %s" Rrr cmd))
+;;            (ccl-embed-extended-command 'translate-character-const-tbl
+;;                                        rrr RRR 0)
+;;            (ccl-embed-data Rrr))
+;;           (t
+;;            (ccl-check-register Rrr cmd)
+;;            (ccl-embed-extended-command 'translate-character rrr RRR Rrr))))
+;;   nil)
+
+;; (defun ccl-compile-iterate-multiple-map (cmd)
+;;   (ccl-compile-multiple-map-function 'iterate-multiple-map cmd)
+;;   nil)
+
+;; (defun ccl-compile-map-multiple (cmd)
+;;   (if (/= (length cmd) 4)
+;;       (error "CCL: Invalid number of arguments: %s" cmd))
+;;   (let ((func '(lambda (arg mp)
+;;                           (let ((len 0) result add)
+;;                             (while arg
+;;                               (if (consp (car arg))
+;;                                   (setq add (funcall func (car arg) t)
+;;                                         result (append result add)
+;;                                         add (+ (-(car add)) 1))
+;;                                 (setq result
+;;                                       (append result
+;;                                               (list (car arg)))
+;;                                       add 1))
+;;                               (setq arg (cdr arg)
+;;                                     len (+ len add)))
+;;                             (if mp 
+;;                                 (cons (- len) result)
+;;                               result))))
+;;         arg)
+;;     (setq arg (append (list (nth 0 cmd) (nth 1 cmd) (nth 2 cmd))
+;;                       (funcall func (nth 3 cmd) nil)))
+;;     (ccl-compile-multiple-map-function 'map-multiple arg))
+;;   nil)
+
+;; (defun ccl-compile-map-single (cmd)
+;;   (if (/= (length cmd) 4)
+;;       (error "CCL: Invalid number of arguments: %s" cmd))
+;;   (let ((RRR (nth 1 cmd))
+;;         (rrr (nth 2 cmd))
+;;         (map (nth 3 cmd))
+;;         id)
+;;     (ccl-check-register rrr cmd)
+;;     (ccl-check-register RRR cmd)
+;;     (ccl-embed-extended-command 'map-single rrr RRR 0)
+;;     (cond ((symbolp map)
+;;            (if (get map 'code-conversion-map)
+;;                (ccl-embed-data map)
+;;              (error "CCL: Invalid map: %s" map)))
+;;           (t
+;;            (error "CCL: Invalid type of arguments: %s" cmd))))
+;;   nil)
+
+;; (defun ccl-compile-multiple-map-function (command cmd)
+;;   (if (< (length cmd) 4)
+;;       (error "CCL: Invalid number of arguments: %s" cmd))
+;;   (let ((RRR (nth 1 cmd))
+;;         (rrr (nth 2 cmd))
+;;         (args (nthcdr 3 cmd))
+;;         map)
+;;     (ccl-check-register rrr cmd)
+;;     (ccl-check-register RRR cmd)
+;;     (ccl-embed-extended-command command rrr RRR 0)
+;;     (ccl-embed-data (length args))
+;;     (while args
+;;       (setq map (car args))
+;;       (cond ((symbolp map)
+;;              (if (get map 'code-conversion-map)
+;;                  (ccl-embed-data map)
+;;                (error "CCL: Invalid map: %s" map)))
+;;             ((numberp map)
+;;              (ccl-embed-data map))
+;;             (t
+;;              (error "CCL: Invalid type of arguments: %s" cmd)))
+;;       (setq args (cdr args)))))
+
+\f
 ;;; CCL dump staffs
 
 ;; To avoid byte-compiler warning.
        (insert "\n"))
       (setq i (1+ i)))))
 
+(defun ccl-dump-ex-cmd (rrr cc)
+  (let* ((RRR (logand cc ?\x7))
+        (Rrr (logand (ash cc -3) ?\x7))
+        (ex-op (aref ccl-extended-code-table (logand (ash cc -6) ?\x3fff))))
+    (insert (format "<%s> " ex-op))
+    (funcall (get ex-op 'ccl-dump-function) rrr RRR Rrr)))
+
+(defun ccl-dump-read-multibyte-character (rrr RRR Rrr)
+  (insert (format "read-multibyte-character r%d r%d\n" RRR rrr)))
+
+(defun ccl-dump-write-multibyte-character (rrr RRR Rrr)
+  (insert (format "write-multibyte-character r%d r%d\n" RRR rrr)))
+
+;; (defun ccl-dump-translate-character (rrr RRR Rrr)
+;;   (insert (format "translation table(r%d) r%d r%d\n" Rrr RRR rrr)))
+
+;; (defun ccl-dump-translate-character-const-tbl (rrr RRR Rrr)
+;;   (let ((tbl (ccl-get-next-code)))
+;;     (insert (format "translation table(%S) r%d r%d\n" tbl RRR rrr))))
+
+;; (defun ccl-dump-iterate-multiple-map (rrr RRR Rrr)
+;;   (let ((notbl (ccl-get-next-code))
+;;         (i 0) id)
+;;     (insert (format "iterate-multiple-map r%d r%d\n" RRR rrr))
+;;     (insert (format "\tnumber of maps is %d .\n\t [" notbl))
+;;     (while (< i notbl)
+;;       (setq id (ccl-get-next-code))
+;;       (insert (format "%S" id))
+;;       (setq i (1+ i)))
+;;     (insert "]\n")))
+
+;; (defun ccl-dump-map-multiple (rrr RRR Rrr)
+;;   (let ((notbl (ccl-get-next-code))
+;;         (i 0) id)
+;;     (insert (format "map-multiple r%d r%d\n" RRR rrr))
+;;     (insert (format "\tnumber of maps and separators is %d\n\t [" notbl))
+;;     (while (< i notbl)
+;;       (setq id (ccl-get-next-code))
+;;       (if (= id -1)
+;;           (insert "]\n\t [")
+;;         (insert (format "%S " id)))
+;;       (setq i (1+ i)))
+;;     (insert "]\n")))
+
+;; (defun ccl-dump-map-single (rrr RRR Rrr)
+;;   (let ((id (ccl-get-next-code)))
+;;     (insert (format "map-single r%d r%d map(%S)\n" RRR rrr id))))
+
+\f
 ;; CCL emulation staffs 
 
 ;; Not yet implemented.
 \f
+;; Auto-loaded functions.
+
 ;;;###autoload
-(defmacro declare-ccl-program (name)
+(defmacro declare-ccl-program (name &optional vector)
   "Declare NAME as a name of CCL program.
 
 To compile a CCL program which calls another CCL program not yet
-defined, it must be declared as a CCL program in advance."
-  `(put ',name 'ccl-program-idx (register-ccl-program ',name nil)))
+defined, it must be declared as a CCL program in advance.
+Optional arg VECTOR is a compiled CCL code of the CCL program."
+  `(put ',name 'ccl-program-idx (register-ccl-program ',name ,vector)))
 
 ;;;###autoload
 (defmacro define-ccl-program (name ccl-program &optional doc)
@@ -1092,9 +1294,27 @@ The compiled code is a vector of integers."
      nil))
 
 ;;;###autoload
+(defmacro check-ccl-program (ccl-program &optional name)
+  "Check validity of CCL-PROGRAM.
+If CCL-PROGRAM is a symbol denoting a valid CCL program, return
+CCL-PROGRAM, else return nil.
+If CCL-PROGRAM is a vector and optional arg NAME (symbol) is supplied,
+register CCL-PROGRAM by name NAME, and return NAME."
+  `(let ((result ,ccl-program))
+     (cond ((symbolp ,ccl-program)
+           (or (numberp (get ,ccl-program 'ccl-program-idx))
+               (setq result nil)))
+          ((vectorp ,ccl-program)
+           (setq result ,name)
+           (register-ccl-program result ,ccl-program))
+          (t
+           (setq result nil)))
+     result))
+
+;;;###autoload
 (defun ccl-execute-with-args (ccl-prog &rest args)
   "Execute CCL-PROGRAM with registers initialized by the remaining args.
-The return value is a vector of resulting CCL registeres."
+The return value is a vector of resulting CCL registers."
   (let ((reg (make-vector 8 0))
        (i 0))
     (while (and args (< i 8))
index a5442db..dd51dc7 100644 (file)
@@ -57,7 +57,9 @@ With arg, you are asked to select which language."
       (setq buffer-file-name file)
       (setq default-directory (expand-file-name "~/"))
       (setq buffer-auto-save-file-name nil)
-      (insert-file-contents (locate-data-file filename))
+      (let ((coding-system-for-read
+            (get-language-info lang 'tutorial-coding-system)))
+       (insert-file-contents (locate-data-file filename)))
       (goto-char (point-min))
       ;; The 'didactic' blank lines: Possibly insert blank lines
       ;; around <<nya nya nya>>, and change << >> to [ ].
index 5311b24..9b4906e 100644 (file)
@@ -64,7 +64,7 @@ using a window system."
        (len (length string))
        (i 0))
     (while (< i len)
-      (setq col (+ col (charset-columns (char-charset (aref string i)))))
+      (setq col (+ col (charset-width (char-charset (aref string i)))))
       (setq i (1+ i)))
     col))
 
@@ -170,7 +170,7 @@ It returns only 1 in XEmacs.  It is for compatibility with MULE 2.3."
 
 (defun char-width (character)
   "Return number of columns a CHARACTER occupies when displayed."
-  (charset-columns (char-charset character)))
+  (charset-width (char-charset character)))
 
 (defalias 'char-columns 'char-width)
 (make-obsolete 'char-columns 'char-width)
@@ -314,4 +314,60 @@ when the language environment is made current."
 ;;   (put env-sym 'quail-environ-doc-string doc-string)
 ;;   (put env-sym 'set-quail-environ enable-function))
 
+
+;;; @ coding-system category
+;;;
+
+(defun coding-system-get (coding-system prop)
+  "Extract a value from CODING-SYSTEM's property list for property PROP."
+  (or (plist-get
+       (get (coding-system-name coding-system) 'coding-system-property)
+       prop)
+      (condition-case nil
+         (coding-system-property coding-system prop)
+       (error nil))))
+
+(defun coding-system-put (coding-system prop val)
+  "Change value in CODING-SYSTEM's property list PROP to VAL."
+  (put (coding-system-name coding-system)
+       'coding-system-property
+       (plist-put (get (coding-system-name coding-system)
+                      'coding-system-property)
+                 prop val)))
+
+(defun coding-system-category (coding-system)
+  "Return the coding category of CODING-SYSTEM."
+  (or (coding-system-get coding-system 'category)
+      (let ((type (coding-system-type coding-system)))
+       (cond ((eq type 'no-conversion)
+              'no-conversion)
+             ((eq type 'shift-jis)
+              'shift-jis)
+             ((eq type 'ucs-4)
+              'ucs-4)
+             ((eq type 'utf-8)
+              'utf-8)
+             ((eq type 'big5)
+              'big5)
+             ((eq type 'iso2022)
+              (cond ((coding-system-lock-shift coding-system)
+                     'iso-lock-shift)
+                    ((coding-system-seven coding-system)
+                     'iso-7)
+                    (t
+                     (let ((dim 0)
+                           ccs
+                           (i 0))
+                       (while (< i 4)
+                         (setq ccs (coding-system-charset coding-system i))
+                         (if (and ccs
+                                  (> (charset-dimension ccs) dim))
+                             (setq dim (charset-dimension ccs))
+                           )
+                         (setq i (1+ i)))
+                       (cond ((= dim 1) 'iso-8-1)
+                             ((= dim 2) 'iso-8-2)
+                             (t 'iso-8-designate))
+                       ))))))))
+           
 ;;; mule-misc.el ends here
index 5b78d6b..737e1d3 100644 (file)
@@ -1,8 +1,8 @@
 ;;; rect.el --- rectangle functions for XEmacs.
 
-;; Copyright (C) 1985, 1993, 1994 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1993, 1994, 1999 Free Software Foundation, Inc.
 
-;; Maintainer: FSF
+;; Maintainer: Didier Verna <verna@inf.enst.fr>
 ;; Keywords: internal
 
 ;; This file is part of XEmacs.
 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 ;; 02111-1307, USA.
 
-;;; Synched up with: FSF 19.34.
+;;; Synched up with: to be incorporated in a forthcoming GNU Emacs
 
 ;;; Commentary:
 
 ;; This package provides the operations on rectangles that are ocumented
 ;; in the XEmacs Reference Manual.
 
+;; ### NOTE: this file has been almost completely rewritten by Didier Verna
+;; <verna@inf.enst.fr>, Jul 99. The purpose of this rewrite is to be less
+;; intrusive and fill lines with whitespaces only when needed. A few functions
+;; are untouched though, as noted above their definition.
+
+
 ;;; Code:
 
+;; ### NOTE: this function is untouched, but not used anymore.
+;; `apply-on-rectangle' is used instead. It's still there because it's
+;; documented so people might use it in their code, so I've decided not to
+;; touch it. --dv
 ;; XEmacs: extra-args
 (defun operate-on-rectangle (function start end coerce-tabs &rest extra-args)
   "Call FUNCTION for each line of rectangle with corners at START, END.
@@ -44,15 +54,15 @@ FUNCTION is called with three arguments:
 Point is at the end of the segment of this line within the rectangle."
   (let (startcol startlinepos endcol endlinepos)
     (save-excursion
-     (goto-char start)
-     (setq startcol (current-column))
-     (beginning-of-line)
-     (setq startlinepos (point)))
+      (goto-char start)
+      (setq startcol (current-column))
+      (beginning-of-line)
+      (setq startlinepos (point)))
     (save-excursion
-     (goto-char end)
-     (setq endcol (current-column))
-     (forward-line 1)
-     (setq endlinepos (point-marker)))
+      (goto-char end)
+      (setq endcol (current-column))
+      (forward-line 1)
+      (setq endlinepos (point-marker)))
     (if (< endcol startcol)
        ;; XEmacs
        (let ((tem startcol))
@@ -74,36 +84,46 @@ Point is at the end of the segment of this line within the rectangle."
        (forward-line 1)))
     (- endcol startcol)))
 
-(defun delete-rectangle-line (startdelpos ignore ignore)
-  (delete-region startdelpos (point)))
-
-;; XEmacs: added lines arg
-(defun delete-extract-rectangle-line (startdelpos begextra endextra lines)
-  (save-excursion
-   (extract-rectangle-line startdelpos begextra endextra lines))
-  (delete-region startdelpos (point)))
+;; The replacement for `operate-on-rectangle' -- dv
+(defun apply-on-rectangle (function start end &rest args)
+  "Call FUNCTION for each line of rectangle with corners at START, END.
+FUNCTION is called with two arguments: the start and end columns of the
+rectangle, plus ARGS extra arguments. Point is at the beginning of line when
+the function is called."
+  (let (startcol startpt endcol endpt)
+    (save-excursion
+      (goto-char start)
+      (setq startcol (current-column))
+      (beginning-of-line)
+      (setq startpt (point))
+      (goto-char end)
+      (setq endcol (current-column))
+      (forward-line 1)
+      (setq endpt (point-marker))
+      ;; ensure the start column is the left one.
+      (if (< endcol startcol)
+         (let ((col startcol))
+           (setq startcol endcol endcol col)))
+      ;; start looping over lines
+      (goto-char startpt)
+      (while (< (point) endpt)
+       (apply function startcol endcol args)
+       (forward-line 1)))
+    ))
 
-;; XEmacs: added lines arg
-(defun extract-rectangle-line (startdelpos begextra endextra lines)
-  (let ((line (buffer-substring startdelpos (point)))
-       (end (point)))
-    (goto-char startdelpos)
-    (while (search-forward "\t" end t)
-      (let ((width (- (current-column)
-                     (save-excursion (forward-char -1)
-                                     (current-column)))))
-       (setq line (concat (substring line 0 (- (point) end 1))
-                          (spaces-string width)
-                          (substring line (+ (length line) (- (point) end)))))))
-    (if (or (> begextra 0) (> endextra 0))
-       (setq line (concat (spaces-string begextra)
-                          line
-                          (spaces-string endextra))))
-    (setcdr lines (cons line (cdr lines))))) ; XEmacs
+;; I love ascii art ;-)
+(defconst spaces-strings '[""
+                          " "
+                          "  "
+                          "   "
+                          "    "
+                          "     "
+                          "      "
+                          "       "
+                          "        "])
 
-(defconst spaces-strings
-  (purecopy '["" " " "  " "   " "    " "     " "      " "       " "        "]))
 
+;; This function is untouched --dv
 (defun spaces-string (n)
   (if (<= n 8) (aref spaces-strings n)
     (let ((val ""))
@@ -111,55 +131,119 @@ Point is at the end of the segment of this line within the rectangle."
        (setq val (concat "        " val)
              n (- n 8)))
       (concat val (aref spaces-strings n)))))
-    
+
 ;;;###autoload
-(defun delete-rectangle (start end)
-  "Delete (don't save) text in rectangle with point and mark as corners.
-The same range of columns is deleted in each line starting with the line
-where the region begins and ending with the line where the region ends."
-  (interactive "r")
-  (operate-on-rectangle 'delete-rectangle-line start end t))
+(defvar killed-rectangle nil
+  "Rectangle for yank-rectangle to insert.")
 
 ;;;###autoload
-(defun delete-extract-rectangle (start end)
-  "Delete contents of rectangle and return it as a list of strings.
-Arguments START and END are the corners of the rectangle.
-The value is list of strings, one for each line of the rectangle."
-  (let ((lines (list nil))) ; XEmacs change
-    (operate-on-rectangle 'delete-extract-rectangle-line
-                         start end t lines)
-    (nreverse (cdr lines))))
+(defun kill-rectangle (start end &optional fill)
+  "Delete the rectangle with corners at point and mark (START and END when
+called from a program) and save it as the last killed one. You might prefer to
+use `delete-extract-rectangle' from a program.
+
+With a prefix (or a FILL) argument, also fill lines where nothing has to be
+deleted."
+  (interactive "r\nP")
+  (when buffer-read-only
+    (setq killed-rectangle (extract-rectangle start end))
+    (barf-if-buffer-read-only))
+  (setq killed-rectangle (delete-extract-rectangle start end fill)))
 
 ;;;###autoload
-(defun extract-rectangle (start end)
-  "Return contents of rectangle with corners at START and END.
-Value is list of strings, one for each line of the rectangle."
-  (let ((lines (list nil))) ; XEmacs change
-    (operate-on-rectangle 'extract-rectangle-line start end nil lines)
-    (nreverse (cdr lines))))
+(defun delete-rectangle (start end &optional fill)
+  "Delete (don't save) text in rectangle with corners at point and mark (START
+and END when called from a program). The same range of columns is deleted in
+each line starting with the line where the region begins and ending with the
+line where the region ends.
+
+With a prefix (or a FILL) argument, also fill lines where nothing has to be
+deleted."
+  (interactive "r\nP")
+  (apply-on-rectangle 'delete-rectangle-line start end fill))
+
+(defun delete-rectangle-line (startcol endcol fill)
+  (let ((pt (point-at-eol)))
+    (when (= (move-to-column startcol (or fill 'coerce)) startcol)
+      (if (and (not fill) (<= pt endcol))
+         (delete-region (point) pt)
+       ;; else
+       (setq pt (point))
+       (move-to-column endcol t)
+       (delete-region pt (point))))
+    ))
 
 ;;;###autoload
-(defvar killed-rectangle nil
-  "Rectangle for yank-rectangle to insert.")
+(defun delete-extract-rectangle (start end &optional fill)
+  "Delete the contents of the rectangle with corners at START and END, and
+return it as a list of strings, one for each line of the rectangle.
+
+With an optional FILL argument, also fill lines where nothing has to be
+deleted."
+  (let ((lines (list nil)))
+    (apply-on-rectangle 'delete-extract-rectangle-line start end lines fill)
+    (nreverse (cdr lines))))
+
+(defun delete-extract-rectangle-line (startcol endcol lines fill)
+  (let ((pt (point-at-eol)))
+    (if (< (move-to-column startcol (or fill 'coerce)) startcol)
+       (setcdr lines (cons (spaces-string (- endcol startcol))
+                           (cdr lines)))
+      ;; else
+      (setq pt (point))
+      (move-to-column endcol t)
+      (setcdr lines (cons (buffer-substring pt (point)) (cdr lines)))
+      (delete-region pt (point)))
+    ))
 
 ;;;###autoload
-(defun kill-rectangle (start end)
-  "Delete rectangle with corners at point and mark; save as last killed one.
-Calling from program, supply two args START and END, buffer positions.
-But in programs you might prefer to use `delete-extract-rectangle'."
-  (interactive "r")
-  (if buffer-read-only
-      (progn
-       (setq killed-rectangle (extract-rectangle start end))
-       (barf-if-buffer-read-only)))
-  (setq killed-rectangle (delete-extract-rectangle start end)))
+(defun extract-rectangle (start end)
+  "Return the contents of the rectangle with corners at START and END,
+as a list of strings, one for each line of the rectangle."
+  (let ((lines (list nil)))
+    (apply-on-rectangle 'extract-rectangle-line start end lines)
+    (nreverse (cdr lines))))
+
+;; ### NOTE: this is actually the only function that needs to do complicated
+;; stuff like what's happening in `operate-on-rectangle', because the buffer
+;; might be read-only. --dv
+(defun extract-rectangle-line (startcol endcol lines)
+  (let (start end begextra endextra line)
+    (move-to-column startcol)
+    (setq start (point)
+         begextra (- (current-column) startcol))
+    (move-to-column endcol)
+    (setq end (point)
+         endextra (- endcol (current-column)))
+    (setq line (buffer-substring start (point)))
+    (if (< begextra 0)
+       (setq endextra (+ endextra begextra)
+             begextra 0))
+    (if (< endextra 0)
+       (setq endextra 0))
+    (goto-char start)
+    (while (search-forward "\t" end t)
+      (let ((width (- (current-column)
+                     (save-excursion (forward-char -1)
+                                     (current-column)))))
+       (setq line (concat (substring line 0 (- (point) end 1))
+                          (spaces-string width)
+                          (substring line (+ (length line)
+                                             (- (point) end)))))))
+    (if (or (> begextra 0) (> endextra 0))
+       (setq line (concat (spaces-string begextra)
+                          line
+                          (spaces-string endextra))))
+    (setcdr lines (cons line (cdr lines)))))
 
+;; This function is untouched --dv
 ;;;###autoload
 (defun yank-rectangle ()
   "Yank the last killed rectangle with upper left corner at point."
   (interactive)
   (insert-rectangle killed-rectangle))
 
+;; This function is untouched --dv
 ;;;###autoload
 (defun insert-rectangle (rectangle)
   "Insert text of RECTANGLE with upper left corner at point.
@@ -175,81 +259,72 @@ and point is at the lower right corner."
     (while lines
       (or first
          (progn
-          (forward-line 1)
-          (or (bolp) (insert ?\n))
-          (move-to-column insertcolumn t)))
+           (forward-line 1)
+           (or (bolp) (insert ?\n))
+           (move-to-column insertcolumn t)))
       (setq first nil)
       (insert (car lines))
       (setq lines (cdr lines)))))
 
 ;;;###autoload
-(defun open-rectangle (start end)
-  "Blank out rectangle with corners at point and mark, shifting text right.
-The text previously in the region is not overwritten by the blanks,
-but instead winds up to the right of the rectangle."
-  (interactive "r")
-  (operate-on-rectangle 'open-rectangle-line start end nil)
+(defun open-rectangle (start end &optional fill)
+  "Blank out rectangle with corners at point and mark (START and END when
+called from a program), shifting text right. The text previously in the region
+is not overwritten by the blanks, but instead winds up to the right of the
+rectangle.
+
+With a prefix (or a FILL) argument, fill with blanks even if there is no text
+on the right side of the rectangle."
+  (interactive "r\nP")
+  (apply-on-rectangle 'open-rectangle-line start end fill)
   (goto-char start))
 
-(defun open-rectangle-line (startpos begextra endextra)
-  ;; Column where rectangle ends.
-  (let ((endcol (+ (current-column) endextra))
-       whitewidth)
-    (goto-char startpos)
-    ;; Column where rectangle begins.
-    (let ((begcol (- (current-column) begextra)))
-      (skip-chars-forward " \t")
-      ;; Width of whitespace to be deleted and recreated.
-      (setq whitewidth (- (current-column) begcol)))
-    ;; Delete the whitespace following the start column.
-    (delete-region startpos (point))
-    ;; Open the desired width, plus same amount of whitespace we just deleted.
-    (indent-to (+ endcol whitewidth))))
+(defun open-rectangle-line (startcol endcol fill)
+  (let (spaces)
+    (when (= (move-to-column startcol (or fill 'coerce)) startcol)
+      (unless (and (not fill)
+                  (= (point) (point-at-eol)))
+       (indent-to endcol)))
+    ))
 
 ;;;###autoload
 (defun string-rectangle (start end string)
-  "Insert STRING on each line of the region-rectangle, shifting text right.
-The left edge of the rectangle specifies the column for insertion.
-This command does not delete or overwrite any existing text.
-
-Called from a program, takes three args; START, END and STRING."
+  "Insert STRING on each line of the rectangle with corners at point and mark
+(START and END when called from a program), shifting text right. The left edge
+of the rectangle specifies the column for insertion. This command does not
+delete or overwrite any existing text."
   (interactive "r\nsString rectangle: ")
-  (operate-on-rectangle 'string-rectangle-line start end t string)) ; XEmacs
-
-;; XEmacs: add string arg
-(defun string-rectangle-line (startpos begextra endextra string)
-  (let (whitespace)
-    (goto-char startpos)
-    ;; Compute horizontal width of following whitespace.
-    (let ((ocol (current-column)))
-      (skip-chars-forward " \t")
-      (setq whitespace (- (current-column) ocol)))
-    ;; Delete the following whitespace.
-    (delete-region startpos (point))
-    ;; Insert the desired string.
-    (insert string)
-    ;; Insert the same width of whitespace that we had before.
-    (indent-to (+ (current-column) whitespace))))
+  (apply-on-rectangle 'string-rectangle-line start end string))
+
+(defun string-rectangle-line (startcol endcol string)
+  (move-to-column startcol t)
+  (insert string))
 
 ;;;###autoload
-(defun clear-rectangle (start end)
-  "Blank out rectangle with corners at point and mark.
-The text previously in the region is overwritten by the blanks.
-When called from a program, requires two args which specify the corners."
-  (interactive "r")
-  (operate-on-rectangle 'clear-rectangle-line start end t))
-
-(defun clear-rectangle-line (startpos begextra endextra)
-  ;; Find end of whitespace after the rectangle.
-  (skip-chars-forward " \t")
-  (let ((column (+ (current-column) endextra)))
-    ;; Delete the text in the rectangle, and following whitespace.
-    (delete-region (point)
-                   (progn (goto-char startpos)
-                         (skip-chars-backward " \t")
-                         (point)))
-    ;; Reindent out to same column that we were at.
-    (indent-to column)))
+(defun clear-rectangle (start end &optional fill)
+  "Blank out the rectangle with corners at point and mark (START and END when
+called from a program). The text previously in the region is overwritten with
+blanks.
+
+With a prefix (or a FILL) argument, also fill with blanks the parts of the
+rectangle which were empty."
+  (interactive "r\nP")
+  (apply-on-rectangle 'clear-rectangle-line start end fill))
+
+(defun clear-rectangle-line (startcol endcol fill)
+  (let ((pt (point-at-eol))
+       spaces)
+    (when (= (move-to-column startcol (or fill 'coerce)) startcol)
+      (if (and (not fill)
+              (<= (save-excursion (goto-char pt) (current-column)) endcol))
+         (delete-region (point) pt)
+       ;; else
+       (setq pt (point))
+       (move-to-column endcol t)
+       (setq spaces (- (point) pt))
+       (delete-region pt (point))
+       (indent-to (+ (current-column) spaces))))
+    ))
 
 (provide 'rect)
 
index 0e45897..cbba11c 100644 (file)
@@ -2592,7 +2592,8 @@ indicating whether soft newlines should be inserted.")
                       bounce
                       ;; 97/3/14 jhod: Kinsoku
                       (re-break-point (if (featurep 'mule)
-                                           (concat "[ \t\n]\\|" word-across-newline)
+                                           (concat "[ \t\n]\\|" word-across-newline
+                                                   ".\\|." word-across-newline)
                                        "[ \t\n]"))
                       ;; end patch
                       (first t))
index 18a0e44..5c80dda 100644 (file)
@@ -54,7 +54,7 @@ customized through the options menu."
 
 (defcustom default-toolbar-position ;; added for the options menu - dverna
   (default-toolbar-position)
-  "The location of the default toolbar. It can be 'top, 'bootom, 'left or
+  "The location of the default toolbar. It can be 'top, 'bottom, 'left or
 'right. This option can be customized through the options menu."
   :group 'display
   :type '(choice (const :tag "top" 'top)
index 6788b03..9761ceb 100644 (file)
@@ -1,3 +1,7 @@
+1999-07-30  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+       * XEmacs 21.2.19 is released
+
 1999-07-13  XEmacs Build Bot <builds@cvs.xemacs.org>
 
        * XEmacs 21.2.18 is released
index fea4c9a..b0157a5 100644 (file)
@@ -1,3 +1,22 @@
+1999-07-30  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+       * XEmacs 21.2.19 is released
+
+1999-07-10  Adrian Aichner  <aichner@ecf.teradyne.com>
+
+       * emodules.texi: Use @set emacs and @value{emacs} instead of
+       @macro (unsupported by texinfo package).  Remove stray @code.
+       * custom.texi: Add info extension to @setfilename.
+       * texinfo.texi: Ditto.
+       * widget.texi: Ditto.
+       * packages.texi: Reword a sentence, fixing @item Decide where to
+       install ...
+
+1999-07-19  Didier Verna  <verna@inf.enst.fr>
+
+       * custom.texi (Wishlist): removed the Custom Comments wishlist
+       entry. They are implemented.
+
 1999-07-13  XEmacs Build Bot <builds@cvs.xemacs.org>
 
        * XEmacs 21.2.18 is released
 1998-09-03  Darryl Okahata  <darrylo@sr.hp.com>
 
        * xemacs/packages.texi: Correct and update package documentation.
-         Updated the package installation section to mention the visual 
+         Updated the package installation section to mention the visual
          package browser/installer.
 
 1998-08-31  Hrvoje Niksic  <hniksic@srce.hr>
 
        * xemacs/startup.texi: Small fixes, suggested by Hrvoje.
 
-       * xemacs/xemacs.texi: 
+       * xemacs/xemacs.texi:
        * xemacs/packages.texi: More packages documentation.
 
 1998-07-19  SL Baur  <steve@altair.xemacs.org>
 
 1998-06-20  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
 
-       * xemacs/abbrevs.texi: 
-       * xemacs/basic.texi: 
-       * xemacs/buildings.texi: 
-       * xemacs/cmdargs.texi: 
-       * xemacs/files.texi: 
+       * xemacs/abbrevs.texi:
+       * xemacs/basic.texi:
+       * xemacs/buildings.texi:
+       * xemacs/cmdargs.texi:
+       * xemacs/files.texi:
        * xemacs/adjustments.texi: Adjustments to integrate startup.texi
        and packages.texi stuff.
 
-       * xemacs/startup.texi: 
+       * xemacs/startup.texi:
        * xemacs/packages.texi: Created.
 
 1998-06-10  Adrian Aichner  <aichner@ecf.teradyne.com>
 
 1998-06-13  Greg Klanderman  <greg@alphatech.com>
 
-       * lispref/windows.texi (Resizing Windows): document third optional 
+       * lispref/windows.texi (Resizing Windows): document third optional
        WINDOW argument to enlarge-window and shrink-window.
        (Selecting Windows): document select-window optional norecord
-       argument. 
+       argument.
        (Size of Window): document window-text-area-pixel-height and
-       window-text-area-pixel-width. 
+       window-text-area-pixel-width.
        (Size of Window): document window-displayed-text-pixel-height.
        (Position of Window): document window-text-area-pixel-edges.
 
 1998-05-13  Greg Klanderman  <greg@alphatech.com>
 
        * lispref/frames.texi (Input Focus): cleanup select-frame
-       documentation. 
+       documentation.
 
 1998-05-10  Oliver Graf <ograf@fga.de>
 
 
 1998-05-04  Martin Buchholz  <martin@xemacs.org>
 
-       * internals.texi (Techniques for XEmacs Developers): Add some more 
+       * internals.texi (Techniques for XEmacs Developers): Add some more
        comments on adding new files, inspired by Olivier Galibert.
 
 1998-05-02  Hrvoje Niksic  <hniksic@srce.hr>
        * lispref/windows.texi (Vertical Scrolling): Fixup docstring for
        scroll-conservatively.
 
-       * lispref/loading.texi (Named Features): Document advanced args to 
+       * lispref/loading.texi (Named Features): Document advanced args to
        `feature'.
 
        * lispref/files.texi (File Name Expansion): Document that
        * lispref/os.texi (Time Conversion): Document that TIME may be
        omitted from format-time-string.
 
-       * lispref/strings.texi (String Conversion): Document BASE argument 
+       * lispref/strings.texi (String Conversion): Document BASE argument
        to `string-to-number'.
 
        * lispref/searching.texi (Syntax of Regexps): Fix up Perl
        stuff, including `display-message', `lmessage', `clear-message',
        (Warnings): Document warning stuff.
 
-       * lispref/commands.texi (Working With Events): Update `make-event' 
+       * lispref/commands.texi (Working With Events): Update `make-event'
        for misc-user events.
        (Using Interactive): Document `function-interactive'.
 
 
 1998-05-02  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * lispref/numbers.texi (Comparison of Numbers): Document multi-arg 
+       * lispref/numbers.texi (Comparison of Numbers): Document multi-arg
        comparison functions.
 
 1998-04-30  Greg Klanderman  <greg@alphatech.com>
        setting of x-emacs-application-class.
 
        * lispref/x-windows.texi (Resources): update doc for
-       x-emacs-application-class. 
+       x-emacs-application-class.
 
 1998-02-20  Karl M. Hegbloom  <karlheg@bittersweet.inetarena.com>
 
@@ -915,4 +934,3 @@ Mon May 23 10:41:35 1988  Robert J. Chassell (bob at frosted-flakes.ai.mit.edu)
 
        * emacs.tex: Update information for obtaining TeX distribution from the
        University of Washington.
-
index 6f468a3..7990383 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo.tex
 
 @c %**start of header
-@setfilename ../info/custom
+@setfilename ../info/custom.info
 @settitle The Customization Library
 @iftex
 @afourpaper
@@ -25,13 +25,13 @@ and faces.  It doesn't contain any examples, but please look at the file
 @file{cus-edit.el} which contains many declarations you can learn from.
 
 @menu
-* Declaring Groups::            
-* Declaring Variables::         
-* Declaring Faces::             
-* Usage for Package Authors::   
-* Utilities::                   
-* The Init File::               
-* Wishlist::                    
+* Declaring Groups::
+* Declaring Variables::
+* Declaring Faces::
+* Usage for Package Authors::
+* Utilities::
+* The Init File::
+* Wishlist::
 @end menu
 
 All the customization declarations can be changes by keyword arguments.
@@ -39,19 +39,19 @@ Groups, variables, and faces all share these common keywords:
 
 @table @code
 @item :group
-@var{value} should be a customization group. 
-Add @var{symbol} to that group. 
+@var{value} should be a customization group.
+Add @var{symbol} to that group.
 @item :link
-@var{value} should be a widget type. 
+@var{value} should be a widget type.
 Add @var{value} to the external links for this customization option.
 Useful widget types include @code{custom-manual}, @code{info-link}, and
-@code{url-link}. 
+@code{url-link}.
 @item :load
 Add @var{value} to the files that should be loaded before displaying
 this customization option.  The value should be either a string, which
 should be a string which will be loaded with @code{load-library} unless
 present in @code{load-history}, or a symbol which will be loaded with
-@code{require}. 
+@code{require}.
 @item :tag
 @var{Value} should be a short string used for identifying the option in
 customization menus and buffers.  By default the tag will be
@@ -62,10 +62,10 @@ automatically created from the options name.
 @comment  node-name,  next,  previous,  up
 @section Declaring Groups
 
-Use @code{defgroup} to declare new customization groups. 
+Use @code{defgroup} to declare new customization groups.
 
 @defun defgroup symbol members doc [keyword value]...
-Declare @var{symbol} as a customization group containing @var{members}. 
+Declare @var{symbol} as a customization group containing @var{members}.
 @var{symbol} does not need to be quoted.
 
 @var{doc} is the group documentation.
@@ -78,7 +78,7 @@ editing faces, and @code{custom-group} for editing groups.@refill
 
 Internally, custom uses the symbol property @code{custom-group} to keep
 track of the group members, and @code{group-documentation} for the
-documentation string. 
+documentation string.
 
 The following additional @var{keyword}'s are defined:
 
@@ -106,7 +106,7 @@ If @var{symbol} is not already bound, initialize it to @var{value}.
 The following additional @var{keyword}'s are defined:
 
 @table @code
-@item :type     
+@item :type
 @var{value} should be a widget type.
 
 @item :options
@@ -122,7 +122,7 @@ Some predefined functions are:
 @item custom-initialize-set
 Use the @code{:set} method to initialize the variable.  Do not
 initialize it if already bound.  This is the default @code{:initialize}
-method. 
+method.
 
 @item custom-initialize-default
 Always use @code{set-default} to initialize the variable, even if a
@@ -135,10 +135,10 @@ method with the value returned by the @code{:get} method.
 @item custom-initialize-changed
 Like @code{custom-initialize-reset}, but use @code{set-default} to
 initialize the variable if it is not bound and has not been set
-already. 
+already.
 @end table
 
-@item :set 
+@item :set
 @var{value} should be a function to set the value of the symbol.  It
 takes two arguments, the symbol to set and the value to give it.  The
 default is @code{set-default}.
@@ -151,7 +151,7 @@ value for that symbol.  The default is @code{default-value}.
 @item :require
 @var{value} should be a feature symbol.  Each feature will be required
 when the `defcustom' is evaluated, or when Emacs is started if the user
-has saved this option. 
+has saved this option.
 
 @end table
 
@@ -180,7 +180,7 @@ member.  For other types variables, the effect is undefined."
 
 Faces are declared with @code{defface}.
 
-@defun defface face spec doc [keyword value]... 
+@defun defface face spec doc [keyword value]...
 
 Declare @var{face} as a customizable face that defaults to @var{spec}.
 @var{face} does not need to be quoted.
@@ -218,7 +218,7 @@ Should be one of @code{color}, @code{grayscale}, or @code{mono}.
 (what color is used for the background text)@*
 Should be one of @code{light} or @code{dark}.
 @end table
-  
+
 Internally, custom uses the symbol property @code{face-defface-spec} for
 the program specified default face properties, @code{saved-face} for
 properties saved by the user, and @code{face-documentation} for the
@@ -240,13 +240,13 @@ The top level group for the package should itself be member of one or
 more of the standard customization groups.  There exists a group for
 each @emph{finder} keyword.  Press @kbd{C-h p} to see a list of finder
 keywords, and add you group to each of them, using the @code{:group}
-keyword. 
+keyword.
 
 @node  Utilities, The Init File, Usage for Package Authors, Top
 @comment  node-name,  next,  previous,  up
 @section Utilities
 
-These utilities can come in handy when adding customization support. 
+These utilities can come in handy when adding customization support.
 
 @deffn Widget custom-manual
 Widget type for specifying the info manual entry for a customization
@@ -269,7 +269,7 @@ To the custom option @var{symbol} add the dependency @var{load}.
 
 @defun customize-menu-create symbol &optional name
 Create menu for customization group @var{symbol}.
-If optional @var{name} is given, use that as the name of the menu. 
+If optional @var{name} is given, use that as the name of the menu.
 Otherwise the menu will be named `Customize'.
 The menu is in a format applicable to @code{easy-menu-define}.
 @end defun
@@ -290,7 +290,7 @@ specified.
 @section Wishlist
 
 @itemize @bullet
-@item 
+@item
 Better support for keyboard operations in the customize buffer.
 
 @item
@@ -301,7 +301,7 @@ convincing example.
 
 @item
 Add an `examples' section, with explained examples of custom type
-definitions. 
+definitions.
 
 @item
 Support selectable color themes.  I.e., change many faces by setting one
@@ -316,13 +316,13 @@ Make it possible to append to `choice', `radio', and `set' options.
 
 @item
 Ask whether set or modified variables should be saved in
-@code{kill-buffer-hook}. 
+@code{kill-buffer-hook}.
 
 Ditto for @code{kill-emacs-query-functions}.
 
 @item
 Command to check if there are any customization options that
-does not belong to an existing group. 
+does not belong to an existing group.
 
 @item
 Optionally disable the point-cursor and instead highlight the selected
@@ -335,13 +335,9 @@ Explain why it is necessary that all choices have different default
 values.
 
 @item
-Make it possible to include a comment/remark/annotation when saving an
-option.
-
-@item
 Add some direct support for meta variables, i.e. make it possible to
 specify that this variable should be reset when that variable is
-changed. 
+changed.
 
 @item
 Add tutorial.
@@ -382,7 +378,7 @@ Add an easy way to display the standard settings when an item is modified.
 
 @item
 See if it is feasible to scan files for customization information
-instead of loading them, 
+instead of loading them,
 
 @item
 Add hint message when user push a non-pushable tag.
@@ -396,11 +392,11 @@ Use checkboxes and radio buttons in the state menus.
 @item
 Add option to hide @samp{[hide]} for short options.  Default, on.
 
-@item 
+@item
 Add option to hide @samp{[state]} for options with their standard
 settings.
 
-@item 
+@item
 There should be a way to specify site defaults for user options.
 
 @item
index d20ccfb..f6afa99 100644 (file)
 @c
 
 @ifset XEMACS
-@macro emacs
-XEmacs
-@end macro
+@set emacs XEmacs
 @clear EMACS
 @set HAVE_EMACS
 @end ifset
 
 @ifset EMACS
-@macro emacs
-Emacs
-@end macro
+@set emacs Emacs
 @clear XEMACS
 @set HAVE_EMACS
 @end ifset
 
 @ifclear HAVE_EMACS
 @set XEMACS
-@macro emacs
-XEmacs
-@end macro
+@set emacs XEmacs
 @end ifclear
 
 @ifinfo
-This file documents the module loading technology of @emacs{}.
+This file documents the module loading technology of @value{emacs}.
 
 Copyright @copyright{} 1998 J. Kean Johnston.
 
@@ -84,7 +78,7 @@ instead of in the original English.
 @finalout
 
 @titlepage
-@title Extending @emacs{} using C and C++
+@title Extending @value{emacs} using C and C++
 @subtitle Version 1.0, September 1998
 
 @author J. Kean Johnston
@@ -119,7 +113,7 @@ instead of in the original English.
 
 @ifinfo
 @node Top, Introduction, (dir), (dir)
-This Info file contains v1.0 of the @emacs{} dynamic loadable module
+This Info file contains v1.0 of the @value{emacs} dynamic loadable module
 support documentation.
 @menu
 * Introduction::                Introducing Emacs Modules
@@ -157,10 +151,10 @@ Defining Functions
 @node Introduction, Annatomy of a Module, Top, Top
 @chapter Introduction
 
-  @emacs{} is a powerful, extensible editor.  The traditional way of
-extending the functionality of @emacs{} is to use its built-in Lisp
+  @value{emacs} is a powerful, extensible editor.  The traditional way of
+extending the functionality of @value{emacs} is to use its built-in Lisp
 language (called Emacs Lisp, or Elisp for short).  However, while Elisp
-is a full programming language and capable of extending @emacs{} in more
+is a full programming language and capable of extending @value{emacs} in more
 ways than you can imagine, it does have its short-comings.
 
   Firstly, Elisp is an interpreted language, and this has serious speed
@@ -180,16 +174,16 @@ access to a system or need to be as quick as possible.
 @cindex DLL
 @cindex DSO
 @cindex shared object
-  This manual describes a new way of extending @emacs{}, by using dynamic
+  This manual describes a new way of extending @value{emacs}, by using dynamic
 loadable modules (also knows as dynamicaly loadable libraries (DLLs),
 dynamic shared objects (DSOs) or just simply shared objectcs), which can 
-be written in C or C++ and loaded into @emacs{} at any time.  I sometimes
+be written in C or C++ and loaded into @value{emacs} at any time.  I sometimes
 refer to this technology as @dfn{CEmacs}, which is short for @dfn{C
 Extensible Emacs}.
 
-  @emacs{} modules are configured into and installed with @emacs{} by
+  @value{emacs} modules are configured into and installed with @value{emacs} by
 default on all systems that support loading of shared objects.  From a
-users perspective, the internals of @emacs{} modules are irrelevant.
+users perspective, the internals of @value{emacs} modules are irrelevant.
 All a user will ever need to know about shared objects is the name of
 the shared object when they want to load a given module.  From a
 developers perspective though, a lot more is provided.
@@ -206,28 +200,28 @@ compile and link all objects that will make up the final shared object,
 and accepts all common C compiler flags.  @code{ellcc} also sets up the
 correct environment for compiling modules by enabling any special
 compiler modes (such as PIC mode), setting the correct include paths for 
-the location of @emacs{} internal header files etc.  The program will also
+the location of @value{emacs} internal header files etc.  The program will also
 invoke the linker correctly to created the final shared object which is
-loaded into @emacs{}.
+loaded into @value{emacs}.
 
 @item
 @cindex header files
-  CEmacs also makes all of the relevant @emacs{} internal header files
+  CEmacs also makes all of the relevant @value{emacs} internal header files
 availible for module authors to use.  This is often required to get data 
 structure definitions and external variable declarations.  The header
 files installed include the module specific header file
 @file{emodules.h}.  Due to the nature of dynamic modules, most of the
-internals of @emacs{} are exposed.
-@xref{Top,,,internals,@emacs{} Internals Manual}, for a 
-more complete discussion on how to extend and understand @emacs{}.  All of 
+internals of @value{emacs} are exposed.
+@xref{Top,,,internals,@value{emacs} Internals Manual}, for a 
+more complete discussion on how to extend and understand @value{emacs}.  All of 
 the rules for C modules are discussed there.
 
 @item
 @cindex samples
-  Part of the @emacs{} distribution is a set of sample modules.  These are
-not installed when @emacs{} is, but remain in the @emacs{} source tree.
+  Part of the @value{emacs} distribution is a set of sample modules.  These are
+not installed when @value{emacs} is, but remain in the @value{emacs} source tree.
 These modules live in the directory @file{modules}, which is a
-sub-directory of the main @emacs{} source code directory.  Please look at
+sub-directory of the main @value{emacs} source code directory.  Please look at
 the samples carefully, and maybe even use them as a basis for making
 your own modules.  Most of the concepts required for writing extension
 modules are covered in the samples.
@@ -236,19 +230,19 @@ modules are covered in the samples.
 @cindex documentation
 @cindex help
   Last, but not least is this manual.  This can be viewed from within
-@emacs{}, and it can be printed out as well.  It is the intention of this
+@value{emacs}, and it can be printed out as well.  It is the intention of this
 document that it will describe everything you need to know about
-extending @emacs{} in C.  If you do not find this to be the case, please
+extending @value{emacs} in C.  If you do not find this to be the case, please
 contact the author(s).
 @end itemize
 
   The rest of this document will discuss the actual mechanics of
-@emacs{} modules and work through several of the samples.  Please be
-sure that you have read the @emacs{} Internals Manual and understand
+@value{emacs} modules and work through several of the samples.  Please be
+sure that you have read the @value{emacs} Internals Manual and understand
 everything in it.  The concepts there apply to all modules.  This
 document may have some overlap, but it is the internals manual which
 should be considered the final authority.  It will also help a great
-deal to look at the actual @emacs{} source code to see how things are
+deal to look at the actual @value{emacs} source code to see how things are
 done.
 
 @node Annatomy of a Module, Using ellcc, Introduction, Top
@@ -259,12 +253,12 @@ done.
 @cindex module format
 @cindex format, module
 
-  Each dynamically loadable @emacs{} extension (hereafter refered to as a
+  Each dynamically loadable @value{emacs} extension (hereafter refered to as a
 module) has a certain compulsory format, and must contain several 
 pieces of information and several mandatory functions.  This chapter 
 describes the basic layout of a module, and provides a very simple
 sample.  The source for this sample can be found in the file
-@file{modules/simple/sample.c} in the main @emacs{} source code tree.
+@file{modules/simple/sample.c} in the main @value{emacs} source code tree.
 
 @menu
 * Required Header File::        Always include <emodules.h>
@@ -281,7 +275,7 @@ sample.  The source for this sample can be found in the file
 @cindex emodules.h
 @cindex config.h
   Every module must include the file @file{<emodules.h>}.  This
-will include several other @emacs{} internal header files, and will set up 
+will include several other @value{emacs} internal header files, and will set up 
 certain vital macros.  One of the most important files included by
 @file{emodules.h} is the generated @file{config.h} file, which contains
 all of the required system abstraction macros and definitions.  Most
@@ -290,9 +284,9 @@ constants defined in @file{config.h}.  Please read that file to
 familiarize yourself with the macros defined there.
 
   Depending on exactly what your module will be doing, you will probably 
-need to include one or more of the @emacs{} internal header files.  When
+need to include one or more of the @value{emacs} internal header files.  When
 you @code{#include <emodules.h>}, you will get a few of the most important 
-@emacs{} header files included automatically for you.  The files included
+@value{emacs} header files included automatically for you.  The files included
 are:
 
 @table @file
@@ -308,7 +302,7 @@ should use the abstraction macros provided in this header file.
 
 @item window.h
 This header file defines the window structures and Lisp types, and
-provides functions and macros for manipulating multiple @emacs{} windows.
+provides functions and macros for manipulating multiple @value{emacs} windows.
 
 @item buffer.h
 All macros and function declarations for manipulating internal and user
@@ -320,7 +314,7 @@ insertion and deletion.
 
 @item frame.h
 Provides the required structure, macro and function definitions for
-manipulating @emacs{} frames.
+manipulating @value{emacs} frames.
 @end table
 
 @node Required Functions, Required Variables, Required Header File, Annatomy of a Module
@@ -332,8 +326,8 @@ manipulating @emacs{} frames.
 Every module requires several initialization functions.  It is the
 responsibility of these functions to load in any dependant modules, and to 
 declare all variables and functions which are to be made visibile to the 
-@emacs{} Lisp reader.  Each of these functions performs a very specific
-task, and they are executed in the correct order by @emacs{}.  All of
+@value{emacs} Lisp reader.  Each of these functions performs a very specific
+task, and they are executed in the correct order by @value{emacs}.  All of
 these functions are @code{void} functions which take no arguments.
 Here, briefly, are the required module functions.  Note that the actual
 function names do not end with the string @code{_module}, but rather
@@ -356,12 +350,12 @@ This required function contains calls to macros such as
 @code{DEFVAR_LISP()}, @code{DEFVAR_BOOL()} etc, and its purpose is to
 declare and initialize all and any variables that your module defines.
 They syntax for declaring variables is identical to the syntax used for
-all internal @emacs{} source code.
+all internal @value{emacs} source code.
 
 @item modules_of_module
 @findex modules_of_module
 This optional function should be used to load in any modules which your
-module depends on.  The @emacs{} module loading code makes sure that the 
+module depends on.  The @value{emacs} module loading code makes sure that the 
 same module is not loaded twice, so several modules can safely call the
 module load function for the same module.  Only one copy of each module
 (at a given version) will ever be loaded.
@@ -391,14 +385,14 @@ discussed here simply for the sake of completeness.
 @table @code
 @item emodules_compiler
 This is a variable of type @code{long}, and is used to indicate the
-version of the @emacs{} loading technology that was used to produce the
+version of the @value{emacs} loading technology that was used to produce the
 module being loaded.  This version number is completely unrelated to
-the @emacs{} version number, as a given module may quite well work
-regardless of the version of @emacs{} that was installed at the time the 
+the @value{emacs} version number, as a given module may quite well work
+regardless of the version of @value{emacs} that was installed at the time the 
 module was created.
 
-The @emacs{} modules version is used to differentiate between major
-changes in the module loading technology, not versions of @emacs{}.
+The @value{emacs} modules version is used to differentiate between major
+changes in the module loading technology, not versions of @value{emacs}.
 
 @item emodules_name
 This is a short (typically 10 characters or less) name for the module,
@@ -442,7 +436,7 @@ modules, then this function can be left empty or even undeclared.
 However, if it does have dependnacies, it must call
 @code{emodules_load}:
 
-@example @code
+@example
 @cartouche
 int emodules_load (CONST char *module,
                    CONST char *modname,
@@ -484,12 +478,12 @@ previous successful calls to @code{emodules_load} at the top level.
 
 Before discussing the anatomy of a module in greater detail, you should
 be aware of the steps required in order to correctly compile and link a
-module for use within @emacs{}.  There is little difference between
+module for use within @value{emacs}.  There is little difference between
 compiling normal C code and compiling a module.  In fact, all that
 changes is the command used to compile the module, and a few extra
 arguments to the compiler.
 
-@emacs{} now ships with a new user utility, called @code{ellcc}.  This
+@value{emacs} now ships with a new user utility, called @code{ellcc}.  This
 is the @dfn{Emacs Loadable Library C Compiler}.  This is a wrapper
 program that will invoke the real C compiler with the correct arguments
 to compile and link your module.  With the exception of a few command
@@ -525,7 +519,7 @@ can force compile mode by specifying the @code{--mode=compile} argument
 to @code{ellcc}.
 
 In this mode, @code{ellcc} is simply a front-end to the same C compiler
-that was used to create the @emacs{} binary itself.  All @code{ellcc}
+that was used to create the @value{emacs} binary itself.  All @code{ellcc}
 does in this mode is insert a few extra command line arguments before
 the arguments you specify to @code{ellcc} itself.  @code{ellcc} will
 then invoke the C compiler to compile your module, and will return the
@@ -535,7 +529,7 @@ By far the easiest way to compile modules is to construct a
 @file{Makefile} as you would for a normal program, and simply insert, at 
 some appropriate place something similar to:
 
-@example @code
+@example
 @cartouche
 CC=ellcc --mode=compile
 
@@ -555,18 +549,18 @@ below for details).
 @cindex initialization
 @cindex documentation
 
-@emacs{} uses a rather bizarre way of documenting variables and
+@value{emacs} uses a rather bizarre way of documenting variables and
 functions.  Rather than have the documentation for compiled functions
 and variables passed as static strings in the source code, the
 documentation is included as a C comment.  A special program, called
 @file{make-docfile}, is used to scan the source code files and extract
-the documentation from these comments, producing the @emacs{} @file{DOC} 
+the documentation from these comments, producing the @value{emacs} @file{DOC} 
 file, which the internal help engine scans when the documentation for a
 function or variable is requested.
 
 Due to the internal construction of Lisp objects, subrs and other such
 things, adding documentation for a compiled function or variable in a
-compiled module, at any time after @emacs{} has been @dfn{dumped} is
+compiled module, at any time after @value{emacs} has been @dfn{dumped} is
 somewhat problematic.  Fortunately, as a module writer you are insulated 
 from the difficulties thanks to your friend @code{ellcc} and some
 internal trickery in the module loading code.  This is all done using
@@ -613,7 +607,7 @@ are scanned by @file{make-docfile}, and provide the information required
 to populate the @code{docs_of_module} function.  Below is a sample
 @file{Makefile} fragment which indicates how all of this is used.
 
-@example @code
+@example
 @cartouche
 CC=ellcc --mode=compile
 LD=ellcc --mode=link
@@ -651,11 +645,11 @@ sample_init.c: $(SRCS)
 The above @file{Makefile} is, in fact, complete, and would compile the
 sample module, and optionally install it.  The @code{--mod-location}
 argument to @code{ellcc} will produce, on the standard output, the base
-location of the @emacs{} module directory.  Each sub-directory of that
+location of the @value{emacs} module directory.  Each sub-directory of that
 directory is automatically searched for for modules when they are loaded
 with @code{load-module}.  An alternative location would be
 @file{/usr/local/lib/xemacs/site-modules}.  That path can change
-depending on the options the person who compiled @emacs{} chose, so you
+depending on the options the person who compiled @value{emacs} chose, so you
 can always determine the correct site location using the
 @code{--mod-site-location} option.  This directory is treated the same
 way as the main module directory.  Each sub-directory within it is
@@ -678,7 +672,7 @@ or linker, along with any other required arguments to create the
 loadable module.
 
 The module has complete access to all symbols that were present in the
-dumped @emacs{}, so you do not need to link against libraries that were
+dumped @value{emacs}, so you do not need to link against libraries that were
 linked in with the main executable.  If your library uses some other
 extra libraries, you will need to link with those.  There is nothing
 particularly complicated about link mode.  All you need to do is make
@@ -744,10 +738,10 @@ This will print the name of the site specific module location and exit.
 
 @item --mod-archdir
 Prints the name of the root of the architecture-dependant directory that 
-@emacs{} searches for architecture-dependant files.
+@value{emacs} searches for architecture-dependant files.
 
 @item --mod-config
-Prints the name of the configuration for which @emacs{} and @code{ellcc} 
+Prints the name of the configuration for which @value{emacs} and @code{ellcc} 
 were compiled.
 @end table
 
@@ -756,7 +750,7 @@ were compiled.
 @cindex environment variables
 
 During its normal operation, @code{ellcc} uses the compiler and linker
-flags that were determined at the time @emacs{} was configured.  In
+flags that were determined at the time @value{emacs} was configured.  In
 certain rare circumstances you may wish to over-ride the flags passed to 
 the compiler or linker, and you can do so using environment variables.
 The table below lists all of the environment variables that @code{ellcc} 
@@ -798,8 +792,8 @@ PIC mode, or the moral equivalent thereof on the target system.
 @cindex @code{ELLMAKEDOC}
 Sets the name of the @file{make-docfile} program to use.  Usually
 @code{ellcc} will use the version that was compiled and installed with
-@emacs{}, but this option allows you to specify an alternative path.
-Used during the compile phase of @emacs{} itself.
+@value{emacs}, but this option allows you to specify an alternative path.
+Used during the compile phase of @value{emacs} itself.
 @end table
 
 @node Defining Functions, Defining Variables, Using ellcc, Top
@@ -813,7 +807,7 @@ The term
 function and the way it appears to Lisp, which is a @dfn{subroutine}, or
 simply a @dfn{subr}.  A Lisp subr is also known as a Lisp primitive, but
 that term applies less to dynamic modules.  @xref{Writing Lisp
-Primitives,,,internals,@emacs{} Internals Manual}, for details on how to
+Primitives,,,internals,@value{emacs} Internals Manual}, for details on how to
 declare functions.  You should familiarize yourself with the
 instructions there.  The format of the function declaration is identical 
 in modules.
@@ -822,14 +816,14 @@ in modules.
 the documentation as a C comment.  During the build process, a program
 called @file{make-docfile} is run, which will extract all of these
 comments, build up a single large documentation file, and will store
-pointers to the start of each documentation entry in the dumped @emacs{}.
+pointers to the start of each documentation entry in the dumped @value{emacs}.
 This, of course, will not work for dynamic modules, as they are loaded
-long after @emacs{} has been dumped.  For this reason, we require a
+long after @value{emacs} has been dumped.  For this reason, we require a
 special means for adding documentation for new subrs.  This is what the
 macro @code{CDOCSUBR} is used for, and this is used extensively during
 @code{ellcc} initialization mode.
 
-  When using @code{DEFUN} in normal @emacs{} C code, the sixth
+  When using @code{DEFUN} in normal @value{emacs} C code, the sixth
 ``parameter'' is a C comment which documents the function.  For a
 dynamic module, we of course need to convert the C comment to a usable
 string, and we need to set the documentation pointer of the subr to this 
@@ -850,12 +844,12 @@ for this to happen.  It is all taken care of in the
 @cindex functions, defining
 
   Although the full syntax of a function declaration is discussed in the 
-@emacs{} internals manual in greater depth, what follows is a brief
+@value{emacs} internals manual in greater depth, what follows is a brief
 description of how to define and implement a new Lisp primitive in a
 module.  This is done using the @code{DEFUN} macro.  Here is a small
 example:
 
-@example @code
+@example
 @cartouche
 DEFUN ("my-function", Fmy_function, 1, 1, "FFile name: ", /*
 Sample Emacs primitive function.
@@ -886,7 +880,7 @@ respectively.  This is used to ensure that the correct number of
 arguments are passed to the function.  Next is the @code{interactive}
 definition.  If this function is meant to be run by a user
 interactively, then you need to specify the argument types and prompts
-in this string.  Please consult the @emacs{} Lisp manual for more
+in this string.  Please consult the @value{emacs} Lisp manual for more
 details.  Next comes a C comment that is the documentation for this
 function.  This comment @strong{must} exist.  Last comes the list of
 function argument names, if any.
@@ -908,13 +902,13 @@ function, which is the same as the second argument to the call to
 @code{DEFUN}.  Using the example function above, you would insert the
 following code in the @code{syms_of_module} function:
 
-@example @code
+@example
 @cartouche
 DEFSUBR(Fmy_function);
 @end cartouche
 @end example
 
-This call will instruct @emacs{} to make the function visible to the Lisp
+This call will instruct @value{emacs} to make the function visible to the Lisp
 reader and will prepare for the insertion of the documentation into
 the right place.  Once this is done, the user can call the Lisp
 function @code{my-function}, if it was defined as an interactive
@@ -922,7 +916,7 @@ function (which in this case it was).
 
 Thats all there is to defining and announcing new functions.  The rules
 for what goes inside the functions, and how to write good modules, is
-beyond the scope of this document.  Please consult the @emacs{}
+beyond the scope of this document.  Please consult the @value{emacs}
 internals manual for more details.
 
 @node Defining Variables, Index, Defining Functions, Top
@@ -941,7 +935,7 @@ internals manual for more details.
 common to also provide variables which can be used to control the
 behaviour of the function, or store the results of the function being
 executed.  The actual C variable types are the same for modules
-and internal @emacs{} primitives, and the declaration of the variables
+and internal @value{emacs} primitives, and the declaration of the variables
 is identical.
 
   @xref{Adding Global Lisp Variables,,,internals,XEmacs Internals Manual}, 
@@ -949,27 +943,27 @@ for more information on variables and naming conventions.
 
   Once your variables are defined, you need to initialize them and make
 the Lisp reader aware of them.  This is done in the
-@code{vars_of_module} initialization function using special @emacs{}
+@code{vars_of_module} initialization function using special @value{emacs}
 macros such as @code{DEFVAR_LISP}, @code{DEFVAR_BOOL}, @code{DEFVAR_INT} 
 etc.  The best way to see how to use these macros is to look at existing 
 source code, or read the internals manual.
 
-  One @emph{very} important difference between @emacs{} variables and
+  One @emph{very} important difference between @value{emacs} variables and
 module variables is how you use pure space.  Simply put, you
-@strong{never} use pure space in @emacs{} modules.  The pure space
+@strong{never} use pure space in @value{emacs} modules.  The pure space
 storage is of a limited size, and is initialized propperly during the
-dumping of @emacs{}.  Because variables are being added dynamically to
-an already running @emacs{} when you load a module, you cannot use pure
+dumping of @value{emacs}.  Because variables are being added dynamically to
+an already running @value{emacs} when you load a module, you cannot use pure
 space.  Be warned: @strong{do not use pure space in modules.  Repeat, do
 not use pure space in modules.}  Once again, to remove all doubts:
 @strong{DO NOT USE PURE SPACE IN MODULES!!!}
 
   Below is a small example which declares and initializes two
 variables.  You will note that this code takes into account the fact
-that this module may very well be compiled into @emacs{} itself.  This
+that this module may very well be compiled into @value{emacs} itself.  This
 is a prudent thing to do.
 
-@example @code
+@example
 @cartouche
 Lisp_Object Vsample_string;
 int sample_boolean;
index 0bc09a7..4690a34 100644 (file)
@@ -3,7 +3,7 @@
 @c %**start of header
 
 @c All text is ignored before the setfilename.
-@setfilename ../info/texinfo
+@setfilename ../info/texinfo.info
 @settitle Texinfo @value{edition}
 
 @c Edition number is now the same as the Texinfo distribution version number.
index 66159e5..46f2771 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo.tex
 
 @c %**start of header
-@setfilename ../info/widget
+@setfilename ../info/widget.info
 @settitle The Emacs Widget Library
 @iftex
 @afourpaper
index 4810382..fd4ac70 100644 (file)
@@ -6,8 +6,8 @@
 
 The XEmacs 21 distribution comes only with a very basic set of
 built-in modes and packages.  Most of the packages that were part of
-the distribution of earlier versions of XEmacs are now separately
-available.  The installer as well as the user can choose which
+the distribution of earlier versions of XEmacs are now available
+separately.  The installer as well as the user can choose which
 packages to install; the actual installation process is easy.
 This gives an installer the ability to tailor an XEmacs installation for
 local needs with safe removal of unnecessary code.
@@ -283,7 +283,8 @@ To install binary packages manually:
 Download the package(s) that you want to install.  Each binary package
 will typically be a gzip'd tarball.
 
-@item Decide where to install the packages: in the system package
+@item
+Decide where to install the packages: in the system package
 directory, or in @file{~/.xemacs/mule-packages} or
 @file{~/.xemacs/xemacs-packages}, respectively.  If you want to install
 the packages in the system package directory, make sure you can write
index 23a19a8..9d66963 100644 (file)
@@ -1,3 +1,18 @@
+1999-07-30  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+       * XEmacs 21.2.19 is released
+
+1999-07-10  Adrian Aichner  <aichner@ecf.teradyne.com>
+
+       * xemacs.mak (.SUFFIXES): Add .texi.
+       (check): Improve automated test section.
+       (info): Generate info files using XEmacs (no makeinfo.exe needed).
+
+1999-07-19  Andy Piper  <andy@xemacs.org>
+
+       * xemacs.mak (DOC_SRC3): add gutter.c
+       (TEMACS_OBJS): add gutter.obj.
+
 1999-07-13  XEmacs Build Bot <builds@cvs.xemacs.org>
 
        * XEmacs 21.2.18 is released
index 1291b43..31733b5 100644 (file)
@@ -553,6 +553,7 @@ DOC_SRC3=\
  $(XEMACS)\src\glyphs-widget.c \
  $(XEMACS)\src\gmalloc.c \
  $(XEMACS)\src\gui.c  \
+ $(XEMACS)\src\gutter.c \
  $(XEMACS)\src\hash.c \
  $(XEMACS)\src\imgproc.c \
  $(XEMACS)\src\indent.c \
@@ -800,6 +801,7 @@ TEMACS_OBJS= \
        $(OUTDIR)\glyphs-widget.obj \
        $(OUTDIR)\gmalloc.obj \
        $(OUTDIR)\gui.obj \
+       $(OUTDIR)\gutter.obj \
        $(OUTDIR)\hash.obj \
        $(OUTDIR)\indent.obj \
        $(OUTDIR)\imgproc.obj \
@@ -850,7 +852,7 @@ TEMACS_OBJS= \
 # Rules
 
 .SUFFIXES:
-.SUFFIXES:     .c
+.SUFFIXES:     .c .texi
 
 # nmake rule
 !if $(DEBUG_XEMACS)
@@ -890,10 +892,10 @@ $(OUTDIR)\xemacs.res: xemacs.rc
 
 # Section handling automated tests starts here
 
-SRCDIR=../src
-PROGNAME=xemacs
+SRCDIR=..\src
+PROGNAME=$(SRCDIR)\xemacs.exe
 blddir=$(MAKEDIR:\=\\)\\..
-temacs_loadup=temacs -batch -l $(SRCDIR)/../lisp/loadup.el
+temacs_loadup=$(TEMACS) -batch -l $(SRCDIR)/../lisp/loadup.el
 dump_temacs   = $(temacs_loadup) dump
 run_temacs    = $(temacs_loadup) run-temacs
 ## We have automated tests!!
@@ -903,7 +905,7 @@ batch_test_emacs=-batch -l $(testdir)/test-harness.el -f batch-test-emacs $(test
 # .PHONY: check check-temacs
 
 check:
-       @cd $(SRCDIR)
+       cd $(SRCDIR)
        $(PROGNAME) $(batch_test_emacs)
 
 check-temacs:
@@ -914,6 +916,176 @@ check-temacs:
 
 # Section handling automated tests ends here
 
+# Section handling info starts here
+MAKEINFO=$(PROGNAME) -no-site-file -no-init-file -batch -l texinfmt -f batch-texinfo-format
+
+MANDIR = $(XEMACS)\man
+INFODIR = $(XEMACS)\info
+INFO_FILES= \
+       $(INFODIR)\cl.info \
+       $(INFODIR)\custom.info \
+       $(INFODIR)\emodules.info \
+       $(INFODIR)\external-widget.info \
+       $(INFODIR)\info.info \
+       $(INFODIR)\standards.info \
+       $(INFODIR)\term.info \
+       $(INFODIR)\termcap.info \
+       $(INFODIR)\texinfo.info \
+       $(INFODIR)\widget.info \
+       $(INFODIR)\xemacs-faq.info \
+       $(INFODIR)\xemacs.info \
+       $(INFODIR)\lispref.info \
+       $(INFODIR)\new-users-guide.info \
+       $(INFODIR)\internals.info
+
+{$(MANDIR)}.texi{$(INFODIR)}.info:
+       $(MAKEINFO) $**
+
+$(INFODIR)\xemacs.info:        $(MANDIR)\xemacs\xemacs.texi
+       $(MAKEINFO) $**
+
+$(MANDIR)\xemacs\xemacs.texi: \
+       $(MANDIR)\xemacs\abbrevs.texi \
+       $(MANDIR)\xemacs\basic.texi \
+       $(MANDIR)\xemacs\buffers.texi \
+       $(MANDIR)\xemacs\building.texi \
+       $(MANDIR)\xemacs\calendar.texi \
+       $(MANDIR)\xemacs\cmdargs.texi \
+       $(MANDIR)\xemacs\custom.texi \
+       $(MANDIR)\xemacs\display.texi \
+       $(MANDIR)\xemacs\entering.texi \
+       $(MANDIR)\xemacs\files.texi \
+       $(MANDIR)\xemacs\fixit.texi \
+       $(MANDIR)\xemacs\glossary.texi \
+       $(MANDIR)\xemacs\gnu.texi \
+       $(MANDIR)\xemacs\help.texi \
+       $(MANDIR)\xemacs\indent.texi \
+       $(MANDIR)\xemacs\keystrokes.texi \
+       $(MANDIR)\xemacs\killing.texi \
+       $(MANDIR)\xemacs\\xemacs.texi \
+       $(MANDIR)\xemacs\m-x.texi \
+       $(MANDIR)\xemacs\major.texi \
+       $(MANDIR)\xemacs\mark.texi \
+       $(MANDIR)\xemacs\menus.texi \
+       $(MANDIR)\xemacs\mini.texi \
+       $(MANDIR)\xemacs\misc.texi \
+       $(MANDIR)\xemacs\mouse.texi \
+       $(MANDIR)\xemacs\new.texi \
+       $(MANDIR)\xemacs\picture.texi \
+       $(MANDIR)\xemacs\programs.texi \
+       $(MANDIR)\xemacs\reading.texi \
+       $(MANDIR)\xemacs\regs.texi \
+       $(MANDIR)\xemacs\frame.texi \
+       $(MANDIR)\xemacs\search.texi \
+       $(MANDIR)\xemacs\sending.texi \
+       $(MANDIR)\xemacs\text.texi \
+       $(MANDIR)\xemacs\trouble.texi \
+       $(MANDIR)\xemacs\undo.texi \
+       $(MANDIR)\xemacs\windows.texi \
+
+
+$(INFODIR)\lispref.info:       $(MANDIR)\lispref\lispref.texi
+       copy $(MANDIR)\lispref\index.perm $(MANDIR)\lispref\index.texi
+       $(MAKEINFO) $**
+
+$(MANDIR)\lispref\lispref.texi: \
+       $(MANDIR)\lispref\abbrevs.texi \
+       $(MANDIR)\lispref\annotations.texi \
+       $(MANDIR)\lispref\back.texi \
+       $(MANDIR)\lispref\backups.texi \
+       $(MANDIR)\lispref\buffers.texi \
+       $(MANDIR)\lispref\building.texi \
+       $(MANDIR)\lispref\commands.texi \
+       $(MANDIR)\lispref\compile.texi \
+       $(MANDIR)\lispref\consoles-devices.texi \
+       $(MANDIR)\lispref\control.texi \
+       $(MANDIR)\lispref\databases.texi \
+       $(MANDIR)\lispref\debugging.texi \
+       $(MANDIR)\lispref\dialog.texi \
+       $(MANDIR)\lispref\display.texi \
+       $(MANDIR)\lispref\edebug-inc.texi \
+       $(MANDIR)\lispref\edebug.texi \
+       $(MANDIR)\lispref\errors.texi \
+       $(MANDIR)\lispref\eval.texi \
+       $(MANDIR)\lispref\extents.texi \
+       $(MANDIR)\lispref\faces.texi \
+       $(MANDIR)\lispref\files.texi \
+       $(MANDIR)\lispref\frames.texi \
+       $(MANDIR)\lispref\functions.texi \
+       $(MANDIR)\lispref\glyphs.texi \
+       $(MANDIR)\lispref\hash-tables.texi \
+       $(MANDIR)\lispref\help.texi \
+       $(MANDIR)\lispref\hooks.texi \
+       $(MANDIR)\lispref\index.texi \
+       $(MANDIR)\lispref\internationalization.texi \
+       $(MANDIR)\lispref\intro.texi \
+       $(MANDIR)\lispref\keymaps.texi \
+       $(MANDIR)\lispref\ldap.texi \
+       $(MANDIR)\lispref\lists.texi \
+       $(MANDIR)\lispref\loading.texi \
+       $(MANDIR)\lispref\locals.texi \
+       $(MANDIR)\lispref\macros.texi \
+       $(MANDIR)\lispref\maps.texi \
+       $(MANDIR)\lispref\markers.texi \
+       $(MANDIR)\lispref\menus.texi \
+       $(MANDIR)\lispref\minibuf.texi \
+       $(MANDIR)\lispref\modes.texi \
+       $(MANDIR)\lispref\mouse.texi \
+       $(MANDIR)\lispref\mule.texi \
+       $(MANDIR)\lispref\numbers.texi \
+       $(MANDIR)\lispref\objects.texi \
+       $(MANDIR)\lispref\os.texi \
+       $(MANDIR)\lispref\positions.texi \
+       $(MANDIR)\lispref\processes.texi \
+       $(MANDIR)\lispref\range-tables.texi \
+       $(MANDIR)\lispref\scrollbars.texi \
+       $(MANDIR)\lispref\searching.texi \
+       $(MANDIR)\lispref\sequences.texi \
+       $(MANDIR)\lispref\specifiers.texi \
+       $(MANDIR)\lispref\streams.texi \
+       $(MANDIR)\lispref\strings.texi \
+       $(MANDIR)\lispref\symbols.texi \
+       $(MANDIR)\lispref\syntax.texi \
+       $(MANDIR)\lispref\text.texi \
+       $(MANDIR)\lispref\tips.texi \
+       $(MANDIR)\lispref\toolbar.texi \
+       $(MANDIR)\lispref\tooltalk.texi \
+       $(MANDIR)\lispref\variables.texi \
+       $(MANDIR)\lispref\windows.texi \
+       $(MANDIR)\lispref\x-windows.texi \
+       $(MANDIR)\lispref\index.unperm \
+       $(MANDIR)\lispref\index.perm \
+
+
+$(INFODIR)\new-users-guide.info:       $(MANDIR)\new-users-guide\new-users-guide.texi
+       $(MAKEINFO) $**
+
+$(MANDIR)\new-users-guide\new-users-guide.texi: \
+       $(MANDIR)\new-users-guide\custom1.texi \
+       $(MANDIR)\new-users-guide\files.texi \
+       $(MANDIR)\new-users-guide\region.texi \
+       $(MANDIR)\new-users-guide\custom2.texi \
+       $(MANDIR)\new-users-guide\help.texi \
+       $(MANDIR)\new-users-guide\search.texi \
+       $(MANDIR)\new-users-guide\edit.texi \
+       $(MANDIR)\new-users-guide\modes.texi \
+       $(MANDIR)\new-users-guide\xmenu.texi \
+       $(MANDIR)\new-users-guide\enter.texi \
+
+
+$(INFODIR)\internals.info:     $(MANDIR)\internals\internals.texi
+       copy $(MANDIR)\internals\index.perm $(MANDIR)\internals\index.texi
+       $(MAKEINFO) $**
+
+$(MANDIR)\internals\internals.texi: \
+       $(MANDIR)\internals\index.unperm \
+       $(MANDIR)\internals\index.perm \
+
+
+info:  $(INFO_FILES)
+
+# Section handling info ends here
+
 #------------------------------------------------------------------------------
 
 # LISP bits 'n bobs
@@ -952,7 +1124,7 @@ dump-xemacs: $(TEMACS)
 
 # use this rule to build the complete system
 all:   $(XEMACS)\Installation $(OUTDIR)\nul $(LASTFILE) $(LWLIB) $(LIB_SRC_TOOLS) $(RUNEMACS) \
-       $(TEMACS) update-elc $(DOC) dump-xemacs
+       $(TEMACS) update-elc $(DOC) dump-xemacs info
 
 temacs: $(TEMACS)
 
@@ -1015,6 +1187,8 @@ distclean:
        del $(CONFIG_VALUES)
        cd $(LISP)
        -del /s /q *.bak *.elc *.orig *.rej
+       cd $(INFODIR)
+       del *.info* $(MANDIR)\internals\index.texi $(MANDIR)\lispref\index.texi
 
 depend:
        mkdepend -f xemacs.mak -p$(OUTDIR)\ -o.obj -w9999 -- $(TEMACS_CPP_FLAGS) --  $(DOC_SRC1) $(DOC_SRC2) $(DOC_SRC3) $(DOC_SRC4) $(DOC_SRC5) $(DOC_SRC6) $(DOC_SRC7) $(DOC_SRC8) $(DOC_SRC9) $(LASTFILE_SRC)\lastfile.c $(LIB_SRC)\make-docfile.c $(LIB_SRC)\run.c
index 7c28cb1..8a02b11 100644 (file)
@@ -176,7 +176,7 @@ objs=\
  event-stream.o extents.o faces.o\
  fileio.o $(LOCK_OBJ) filemode.o floatfns.o fns.o font-lock.o\
  frame.o general.o glyphs.o glyphs-eimage.o glyphs-widget.o\
- gui.o $(gui_objs) hash.o imgproc.o indent.o insdel.o intl.o\
+ gui.o gutter.o $(gui_objs) hash.o imgproc.o indent.o insdel.o intl.o\
  keymap.o $(RTC_patch_objs) line-number.o lread.o lstream.o\
  macros.o marker.o md5.o minibuf.o objects.o opaque.o\
  print.o process.o profile.o\
index aad12fd..1e8f0b5 100644 (file)
@@ -173,6 +173,7 @@ struct device
   unsigned int modeline_changed :1;
   unsigned int point_changed :1;
   unsigned int size_changed :1;
+  unsigned int gutter_changed :1;
   unsigned int toolbar_changed :1;
   unsigned int windows_changed :1;
   unsigned int windows_structure_changed :1;
@@ -350,6 +351,9 @@ int valid_device_class_p (Lisp_Object class);
 #define MARK_DEVICE_TOOLBARS_CHANGED(d)                        \
   ((void) (toolbar_changed = (d)->toolbar_changed = 1))
 
+#define MARK_DEVICE_GUTTERS_CHANGED(d)         \
+  ((void) (gutter_changed = (d)->gutter_changed = 1))
+
 #define MARK_DEVICE_SIZE_CHANGED(d)                    \
   ((void) (size_changed = (d)->size_changed = 1))
 
index fcc8a92..38b1781 100644 (file)
@@ -1314,9 +1314,8 @@ handle_focus_event_1 (struct frame *f, int in_p)
 #if XtSpecificationRelease > 5
   Widget focus_widget = XtGetKeyboardFocusWidget (FRAME_X_TEXT_WIDGET (f));
 #endif
-#if defined(HAVE_XIM) && defined(XIM_XLIB)
-  if (FRAME_X_XIC(f))
-    XIM_focus_event (f, in_p);
+#ifdef HAVE_XIM
+  XIM_focus_event (f, in_p);
 #endif /* HAVE_XIM */
 
   /* On focus change, clear all memory of sticky modifiers
@@ -1334,10 +1333,10 @@ handle_focus_event_1 (struct frame *f, int in_p)
      Unfortunately native widgets break the model because they grab
      the keyboard focus and nothing sets it back again. I cannot find
      any reasonable way to do this elsewhere so we assert here that
-     the keybpard focus is on the emacs text widget. Menus and dialogs
+     the keyboard focus is on the emacs text widget. Menus and dialogs
      do this in their selection callback, but we don't want that since
      a button having focus is legitimate. An edit field having focus
-     is mandatory. Weirdly you get a FocusOut event when you glick in
+     is mandatory. Weirdly you get a FocusOut event when you click in
      a widget-glyph but you don't get a correspondng FocusIn when you
      click in the frame. Why is this?  */
   if (in_p 
@@ -1644,9 +1643,8 @@ emacs_Xt_handle_magic_event (struct Lisp_Event *emacs_event)
       break;
 
     case ConfigureNotify:
-#if defined(HAVE_XIM) && defined(XIM_XLIB)
-      if (FRAME_X_XIC(f))
-       XIM_SetGeometry (f);
+#ifdef HAVE_XIM
+      XIM_SetGeometry (f);
 #endif
       break;
 
index 49a2446..45e77ee 100644 (file)
@@ -1970,6 +1970,8 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
          TC_ITEM item;
          int index = SendMessage (nmhdr->hwndFrom, TCM_GETCURSEL, 0, 0);
          frame = XFRAME (mswindows_find_frame (hwnd));
+
+         item.mask = TCIF_PARAM;
          SendMessage (nmhdr->hwndFrom, TCM_GETITEM, (WPARAM)index,
                       (LPARAM)&item);
          
index ff5b332..be75ff9 100644 (file)
@@ -33,6 +33,7 @@ Boston, MA 02111-1307, USA.  */
 
 #include "device.h"
 #include "glyphs.h"
+#include "redisplay.h"
 
 #define FRAME_TYPE_NAME(f) ((f)->framemeths->name)
 #define FRAME_TYPE(f) ((f)->framemeths->symbol)
@@ -109,6 +110,10 @@ struct frame
   unsigned int current_toolbar_size[4];
 #endif
 
+  /* Dynamic array of display lines for gutters */
+  display_line_dynarr *current_display_lines;
+  display_line_dynarr *desired_display_lines;
+
   /* A structure of auxiliary data specific to the device type.
      struct x_frame is used for X window frames; defined in console-x.h */
   void *frame_data;
@@ -160,6 +165,11 @@ Value : Emacs meaning                           :f-v-p : X meaning
   unsigned int bottom_toolbar_was_visible :1;
   unsigned int left_toolbar_was_visible :1;
   unsigned int right_toolbar_was_visible :1;
+  /* gutter visibility */
+  unsigned int top_gutter_was_visible :1;
+  unsigned int bottom_gutter_was_visible :1;
+  unsigned int left_gutter_was_visible :1;
+  unsigned int right_gutter_was_visible :1;
 
   /* redisplay flags */
   unsigned int buffers_changed :1;
@@ -175,6 +185,7 @@ Value : Emacs meaning                           :f-v-p : X meaning
   unsigned int point_changed :1;
   unsigned int size_changed :1;
   unsigned int toolbar_changed :1;
+  unsigned int gutter_changed :1;
   unsigned int windows_changed :1;
   unsigned int windows_structure_changed :1;
   unsigned int window_face_cache_reset :1;     /* used by expose handler */
@@ -342,6 +353,19 @@ extern int frame_changed;
     toolbar_changed = 1;                               \
 } while (0)
 
+#define MARK_FRAME_GUTTERS_CHANGED(f) do {     \
+  struct frame *mftc_f = (f);                          \
+  mftc_f->gutter_changed = 1;                          \
+  mftc_f->modiff++;                                    \
+  if (!NILP (mftc_f->device))                          \
+    {                                                  \
+      struct device *mftc_d = XDEVICE (mftc_f->device);        \
+      MARK_DEVICE_GUTTERS_CHANGED (mftc_d);    \
+    }                                                  \
+  else                                                 \
+    gutter_changed = 1;                                        \
+} while (0)
+
 #define MARK_FRAME_SIZE_CHANGED(f) do {                        \
   struct frame *mfsc_f = (f);                          \
   mfsc_f->size_changed = 1;                            \
index 973d1e4..06c4db1 100644 (file)
@@ -89,6 +89,7 @@ Lisp_Object Qgap_overhead;
 Lisp_Object Qgeneric;
 Lisp_Object Qgeometry;
 Lisp_Object Qglobal;
+Lisp_Object Qgutter;
 Lisp_Object Qheight;
 Lisp_Object Qhighlight;
 Lisp_Object Qicon;
@@ -245,6 +246,7 @@ syms_of_general (void)
   defsymbol (&Qgeneric, "generic");
   defsymbol (&Qgeometry, "geometry");
   defsymbol (&Qglobal, "global");
+  defsymbol (&Qgutter, "gutter");
   defsymbol (&Qheight, "height");
   defsymbol (&Qhighlight, "highlight");
   defsymbol (&Qicon, "icon");
index 805e812..7a9f8d3 100644 (file)
@@ -107,6 +107,7 @@ mswindows_initialize_image_instance_mask (struct Lisp_Image_Instance* image,
                                          struct frame* f);
 
 COLORREF mswindows_string_to_color (CONST char *name);
+void check_valid_item_list_1 (Lisp_Object items);
 
 #define BPLINE(width) ((int)(~3UL & (unsigned long)((width) +3)))
 
@@ -2049,6 +2050,17 @@ mswindows_map_subwindow (struct Lisp_Image_Instance *p, int x, int y)
                | SWP_NOCOPYBITS | SWP_NOSENDCHANGING);
 }
 
+/* resize the subwindow instance */
+static void 
+mswindows_resize_subwindow (struct Lisp_Image_Instance* ii, int w, int h)
+{
+  SetWindowPos (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii), 
+               NULL, 
+               0, 0, w, h,
+               SWP_NOZORDER | SWP_NOMOVE
+               | SWP_NOCOPYBITS | SWP_NOSENDCHANGING);
+}
+
 /* when you click on a widget you may activate another widget this
    needs to be checked and all appropriate widgets updated */
 static void
@@ -2540,7 +2552,6 @@ mswindows_tab_control_instantiate (Lisp_Object image_instance, Lisp_Object insta
                                WS_EX_CONTROLPARENT);
 
   wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
   /* add items to the tab */
   LIST_LOOP (rest, Fplist_get (IMAGE_INSTANCE_WIDGET_PROPS (ii), Q_items, Qnil))
     {
@@ -2549,6 +2560,36 @@ mswindows_tab_control_instantiate (Lisp_Object image_instance, Lisp_Object insta
     }
 }
 
+/* set the properties of a tab control */
+static Lisp_Object
+mswindows_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop,
+                                   Lisp_Object val)
+{
+  struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
+
+  if (EQ (prop, Q_items))
+    {
+      HWND wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
+      int index = 0;
+      Lisp_Object rest;
+      check_valid_item_list_1 (val);
+
+      /* delete the pre-existing items */
+      SendMessage (wnd, TCM_DELETEALLITEMS, 0, 0);
+  
+      /* add items to the tab */
+      LIST_LOOP (rest, val)
+       {
+         add_tab_item (image_instance, wnd, XCAR (rest), 
+                       IMAGE_INSTANCE_SUBWINDOW_FRAME (ii), index);
+         index++;
+       }
+
+      return Qt;
+    }
+  return Qunbound;
+}
+
 /* instantiate a static control possible for putting other things in */
 static void
 mswindows_label_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
@@ -2739,6 +2780,7 @@ console_type_create_glyphs_mswindows (void)
   CONSOLE_HAS_METHOD (mswindows, image_instance_hash);
   CONSOLE_HAS_METHOD (mswindows, init_image_instance_from_eimage);
   CONSOLE_HAS_METHOD (mswindows, locate_pixmap_file);
+  CONSOLE_HAS_METHOD (mswindows, resize_subwindow);
 }
 
 void
@@ -2815,6 +2857,7 @@ image_instantiator_format_create_glyphs_mswindows (void)
   /* tab control widget */
   INITIALIZE_DEVICE_IIFORMAT (mswindows, tab_control);
   IIFORMAT_HAS_DEVMETHOD (mswindows, tab_control, instantiate);
+  IIFORMAT_HAS_DEVMETHOD (mswindows, tab_control, set_property);
 
   /* windows bitmap format */
   INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (bmp, "bmp");
index 3fbf075..917739d 100644 (file)
@@ -149,7 +149,7 @@ check_valid_string_or_vector (Lisp_Object data)
        signal_simple_error (":descriptor must be a string or a vector", data);
 }
 
-static void
+void
 check_valid_item_list_1 (Lisp_Object items)
 {
   Lisp_Object rest;
index 45f1e10..a1f0051 100644 (file)
@@ -2132,9 +2132,19 @@ Subwindows are not currently implemented.
 static void 
 x_resize_subwindow (struct Lisp_Image_Instance* ii, int w, int h)
 {
-  XResizeWindow (DisplayOfScreen (IMAGE_INSTANCE_X_SUBWINDOW_SCREEN (ii)),
-                IMAGE_INSTANCE_X_SUBWINDOW_ID (ii),
-                w, h);
+  if (IMAGE_INSTANCE_TYPE (ii) == IMAGE_SUBWINDOW)
+    {
+      XResizeWindow (DisplayOfScreen (IMAGE_INSTANCE_X_SUBWINDOW_SCREEN (ii)),
+                    IMAGE_INSTANCE_X_SUBWINDOW_ID (ii),
+                    w, h);
+    }
+  else                         /* must be a widget */
+    {
+      Arg al[2];
+      XtSetArg (al [0], XtNwidth, (Dimension)w);
+      XtSetArg (al [1], XtNheight, (Dimension)h);
+      XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (ii), al, 2);
+    }
 }
 
 /************************************************************************/
@@ -2158,6 +2168,9 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   Arg al [32];
   int ac = 0;
   int id = new_lwlib_id ();
+#ifdef LWLIB_USES_MOTIF
+  XmFontList fontList;
+#endif
 
   if (!DEVICE_X_P (d))
     signal_simple_error ("Not an mswindows device", device);
@@ -2188,11 +2201,20 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 
   XtSetArg (al [ac], XtNbackground, bcolor.pixel);             ac++;
   XtSetArg (al [ac], XtNforeground, fcolor.pixel);             ac++;
+#ifdef LWLIB_USES_MOTIF
+  fontList = XmFontListCreate 
+    ((void*)FONT_INSTANCE_X_FONT 
+     (XFONT_INSTANCE (widget_face_font_info 
+                     (domain, IMAGE_INSTANCE_WIDGET_FACE (ii),
+                      0, 0))), XmSTRING_DEFAULT_CHARSET);
+  XtSetArg (al [ac], XmNfontList, fontList );                          ac++;
+#else
   XtSetArg (al [ac], XtNfont, (void*)FONT_INSTANCE_X_FONT 
            (XFONT_INSTANCE (widget_face_font_info 
                             (domain, 
                              IMAGE_INSTANCE_WIDGET_FACE (ii),
                              0, 0))));                 ac++;
+#endif
 
   wv->nargs = ac;
   wv->args = al;
@@ -2201,7 +2223,9 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
                          False, 0, popup_selection_callback, 0);
 
   IMAGE_INSTANCE_X_WIDGET_LWID (ii) = id;
-
+#ifdef LWLIB_USES_MOTIF
+  XmFontListFree (fontList);
+#endif
   /* because the EmacsManager is the widgets parent we have to
      offset the redisplay of the widget by the amount the text
      widget is inside the manager. */
@@ -2453,7 +2477,7 @@ image_instantiator_format_create_glyphs_x (void)
 
   INITIALIZE_DEVICE_IIFORMAT (x, subwindow);
   IIFORMAT_HAS_DEVMETHOD (x, subwindow, instantiate);
-
+#ifdef LWLIB_USES_MOTIF
   /* button widget */
   INITIALIZE_DEVICE_IIFORMAT (x, button);
   IIFORMAT_HAS_DEVMETHOD (x, button, property);
@@ -2469,10 +2493,12 @@ image_instantiator_format_create_glyphs_x (void)
   /* text field */
   INITIALIZE_DEVICE_IIFORMAT (x, edit_field);
   IIFORMAT_HAS_DEVMETHOD (x, edit_field, instantiate);
+#if 0 /* XmVERSION > 1*/
   /* combo box */
   INITIALIZE_DEVICE_IIFORMAT (x, combo_box);
   IIFORMAT_HAS_DEVMETHOD (x, combo_box, instantiate);
-
+#endif
+#endif
   INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (cursor_font, "cursor-font");
   IIFORMAT_VALID_CONSOLE (x, cursor_font);
 
index 55e6572..4824420 100644 (file)
--- a/src/gui.c
+++ b/src/gui.c
@@ -432,9 +432,11 @@ gui_item_display_flush_right (Lisp_Object gui_item,
   struct Lisp_Gui_Item* pgui_item = XGUI_ITEM (gui_item);
   *buf = 0;
 
+#ifdef HAVE_MENUBARS
   /* Have keys? */
   if (!menubar_show_keybindings)
     return 0;
+#endif
 
   /* Try :keys first */
   if (!NILP (pgui_item->keys))
index 499404b..430acdc 100644 (file)
@@ -1141,6 +1141,7 @@ copy_keymap_internal (Lisp_Keymap *keymap)
   new_keymap->sub_maps_cache = Qnil; /* No submaps */
   new_keymap->table          = Fcopy_hash_table (keymap->table);
   new_keymap->inverse_table  = Fcopy_hash_table (keymap->inverse_table);
+  new_keymap->default_binding = keymap->default_binding;
   /* After copying the inverse map, we need to copy the conses which
      are its values, lest they be shared by the copy, and mangled.
    */
index 68cbb76..e2e5c97 100644 (file)
@@ -1,5 +1,5 @@
 /* Header for CCL (Code Conversion Language) interpreter.
-   Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
+   Copyright (C) 1995,1999 Electrotechnical Laboratory, JAPAN.
    Licensed to the Free Software Foundation.
 
 This file is part of XEmacs.
@@ -19,11 +19,19 @@ along with GNU Emacs; see the file COPYING.  If not, write to
 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
-/* Synched up with: FSF Emacs 20.2 */
+/* Synched up with: FSF Emacs 20.3.10 */
 
 #ifndef _CCL_H
 #define _CCL_H
 
+/* Macros for exit status of CCL program.  */
+#define CCL_STAT_SUCCESS       0 /* Terminated successfully.  */
+#define CCL_STAT_SUSPEND_BY_SRC        1 /* Terminated by empty input.  */
+#define CCL_STAT_SUSPEND_BY_DST        2 /* Terminated by output buffer full.  */
+#define CCL_STAT_INVALID_CMD   3 /* Terminated because of invalid
+                                    command.  */
+#define CCL_STAT_QUIT          4 /* Terminated because of quit.  */
+
 /* Structure to hold information about running CCL code.  Read
    comments in the file ccl.c for the detail of each field.  */
 struct ccl_program {
@@ -35,12 +43,18 @@ struct ccl_program {
   int reg[8];                  /* CCL registers, reg[7] is used for
                                   condition flag of relational
                                   operations.  */
+  int private_state;            /* CCL instruction may use this
+                                  for private use, mainly for preservation
+                                  internal states for suspending.
+                                  This variable is set to 0 when ccl is 
+                                  set up.  */
   int last_block;              /* Set to 1 while processing the last
                                   block. */
   int status;                  /* Exit status of the CCL program.  */
   int buf_magnification;       /* Output buffer magnification.  How
                                   many times bigger the output buffer
                                   should be than the input buffer.  */
+  int stack_idx;               /* How deep the call of CCL_Call is nested.  */
 };
 
 
@@ -54,5 +68,6 @@ void setup_ccl_program (struct ccl_program *ccl, Lisp_Object val);
 
 /* Alist of fontname patterns vs corresponding CCL program.  */
 extern Lisp_Object Vfont_ccl_encoder_alist;
+extern Lisp_Object Qccl_program;
 
 #endif /* _CCL_H */
index 7717903..39855c8 100644 (file)
@@ -34,6 +34,7 @@ Boston, MA 02111-1307, USA.  */
 #include "device.h"
 #include "frame.h"
 #include "glyphs.h"
+#include "gutter.h"
 #include "window.h"
 
 Lisp_Object Qinit_scrollbar_from_resources;
@@ -452,23 +453,41 @@ update_scrollbar_instance (struct window *w, int vertical,
   {
     int x_offset, y_offset;
 
-    /* Scrollbars are always the farthest from the text area. */
+    /* Scrollbars are always the farthest from the text area, barring
+       gutters. */
     if (vertical)
       {
-       x_offset = (!NILP (w->scrollbar_on_left_p)
-                   ? WINDOW_LEFT (w)
-                   : (WINDOW_RIGHT (w) - scrollbar_width
-                      - (window_needs_vertical_divider (w)
-                         ? window_divider_width (w) : 0)));
+       if (!NILP (w->scrollbar_on_left_p))
+         {
+           x_offset = WINDOW_LEFT (w);
+           if (window_is_leftmost (w))
+             x_offset += FRAME_LEFT_GUTTER_BOUNDS (f);
+         }
+       else 
+         {
+           x_offset = WINDOW_RIGHT (w) - scrollbar_width;
+           if (window_is_rightmost (w))
+             x_offset -= FRAME_RIGHT_GUTTER_BOUNDS (f);
+           if (window_needs_vertical_divider (w))
+             x_offset -= window_divider_width (w);
+         }
        y_offset = WINDOW_TEXT_TOP (w) + f->scrollbar_y_offset;
       }
     else
       {
        x_offset = WINDOW_TEXT_LEFT (w);
-       y_offset = f->scrollbar_y_offset +
-         (!NILP (w->scrollbar_on_top_p)
-          ? WINDOW_TOP (w)
-          : WINDOW_TEXT_BOTTOM (w) + window_bottom_toolbar_height (w));
+       y_offset = f->scrollbar_y_offset;
+
+       if (!NILP (w->scrollbar_on_top_p))
+         {
+           y_offset += WINDOW_TOP (w);
+           if (window_is_highest (w))
+             y_offset += FRAME_TOP_GUTTER_BOUNDS (f);
+         }
+       else
+         {
+           y_offset += WINDOW_TEXT_BOTTOM (w);
+         }
       }
 
     new_x = x_offset;
index 90c1be3..85a196b 100644 (file)
@@ -38,6 +38,7 @@ Boston, MA 02111-1307, USA.  */
 #include "window.h"
 #include "elhash.h"
 #include "commands.h"
+#include "gutter.h"
 
 Lisp_Object Qwindowp, Qwindow_live_p, Qwindow_configurationp;
 Lisp_Object Qscroll_up, Qscroll_down, Qdisplay_buffer;
@@ -641,7 +642,7 @@ window_full_width_p (struct window *w)
   return window_is_leftmost (w) && window_is_rightmost (w);
 }
 
-static int
+int
 window_is_highest (struct window *w)
 {
   Lisp_Object parent, current_ancestor, window;
@@ -669,7 +670,7 @@ window_is_highest (struct window *w)
     return 0;
 }
 
-static int
+int
 window_is_lowest (struct window *w)
 {
   Lisp_Object parent, current_ancestor, window;
@@ -972,32 +973,6 @@ window_right_margin_width (struct window *w)
   return margin_width_internal (w, 0);
 }
 
-static int
-window_top_toolbar_height (struct window *w)
-{
-  /* #### implement this shit. */
-  return 0;
-}
-
-/* #### Currently used in scrollbar.c.  Does it actually need to be? */
-int
-window_bottom_toolbar_height (struct window *w)
-{
-  return 0;
-}
-
-static int
-window_left_toolbar_width (struct window *w)
-{
-  return 0;
-}
-
-static int
-window_right_toolbar_width (struct window *w)
-{
-  return 0;
-}
-
 /*****************************************************************************
  Window Gutters
 
@@ -1019,47 +994,45 @@ window_right_toolbar_width (struct window *w)
 int
 window_top_gutter_height (struct window *w)
 {
-  int toolbar_height = window_top_toolbar_height (w);
+  int gutter = WINDOW_REAL_TOP_GUTTER_BOUNDS (w);
 
   if (!NILP (w->hchild) || !NILP (w->vchild))
     return 0;
 
 #ifdef HAVE_SCROLLBARS
   if (!NILP (w->scrollbar_on_top_p))
-    return window_scrollbar_height (w) + toolbar_height;
+    return window_scrollbar_height (w) + gutter;
   else
 #endif
-    return toolbar_height;
+    return gutter;
 }
 
 int
 window_bottom_gutter_height (struct window *w)
 {
-  int other_height;
+  int gutter = WINDOW_REAL_BOTTOM_GUTTER_BOUNDS (w);
 
   if (!NILP (w->hchild) || !NILP (w->vchild))
     return 0;
-  else
-    other_height =
-      window_modeline_height (w) + window_bottom_toolbar_height (w);
+
+  gutter += window_modeline_height (w);
 
 #ifdef HAVE_SCROLLBARS
   if (NILP (w->scrollbar_on_top_p))
-    return window_scrollbar_height (w) + other_height;
+    return window_scrollbar_height (w) + gutter;
   else
 #endif
-    return other_height;
+    return gutter;
 }
 
 int
 window_left_gutter_width (struct window *w, int modeline)
 {
-  int gutter = window_left_toolbar_width (w);
+  int gutter = WINDOW_REAL_LEFT_GUTTER_BOUNDS (w);
 
   if (!NILP (w->hchild) || !NILP (w->vchild))
     return 0;
 
-
 #ifdef HAVE_SCROLLBARS
   if (!modeline && !NILP (w->scrollbar_on_left_p))
     gutter += window_scrollbar_width (w);
@@ -1071,7 +1044,7 @@ window_left_gutter_width (struct window *w, int modeline)
 int
 window_right_gutter_width (struct window *w, int modeline)
 {
-  int gutter = window_right_toolbar_width (w);
+  int gutter = WINDOW_REAL_RIGHT_GUTTER_BOUNDS (w);
 
   if (!NILP (w->hchild) || !NILP (w->vchild))
     return 0;
@@ -3926,6 +3899,8 @@ change_window_height (struct window *win, int delta, int widthflag,
   SET_LAST_MODIFIED (w, 0);
   SET_LAST_FACECHANGE (w);
   MARK_FRAME_WINDOWS_STRUCTURE_CHANGED (f);
+  /* overkill maybe, but better to be correct */
+  MARK_FRAME_GUTTERS_CHANGED (f);
 }
 #undef MINSIZE
 #undef CURBEG
index 5bcfea6..342ad44 100644 (file)
@@ -329,6 +329,8 @@ int window_char_height (struct window *, int include_gutters_p);
 int window_displayed_height (struct window *);
 int window_is_leftmost (struct window *w);
 int window_is_rightmost (struct window *w);
+int window_is_lowest (struct window *w);
+int window_is_highest (struct window *w);
 int window_truncation_on (struct window *w);
 int window_needs_vertical_divider (struct window *);
 int window_scrollbar_width (struct window *w);
@@ -340,7 +342,6 @@ int window_top_gutter_height (struct window *w);
 int window_bottom_gutter_height (struct window *w);
 int window_left_gutter_width (struct window *w, int modeline);
 int window_right_gutter_width (struct window *w, int modeline);
-int window_bottom_toolbar_height (struct window *w);
 
 void delete_all_subwindows (struct window *w);
 void set_window_pixheight (Lisp_Object window, int pixheight,
index b09aef3..95d74b5 100644 (file)
@@ -97,6 +97,29 @@ Boston, MA 02111-1307, USA.  */
   WINDOW_SLOT (default_toolbar_visible_p, EQ);
   WINDOW_SLOT (default_toolbar_border_width, EQ);
 #endif /* HAVE_TOOLBARS */
+
+  /* Gutter specification for each of the four positions.
+     This is not a size hog because the value here is not copied,
+     and will be shared with the specs in the specifier. */
+  WINDOW_SLOT_ARRAY (gutter, 4, EQUAL_WRAPPED);
+  /* Gutter size for each of the four positions. */
+  WINDOW_SLOT_ARRAY (gutter_size, 4, EQUAL_WRAPPED);
+  /* Real (pre-calculated) gutter size for each of the four positions.
+     This is not a specifier, it is calculated by the specifier change
+     functions. */
+  WINDOW_SLOT_ARRAY (real_gutter_size, 4, EQUAL_WRAPPED);
+  /* Gutter border width for each of the four positions. */
+  WINDOW_SLOT_ARRAY (gutter_border_width, 4, EQUAL_WRAPPED);
+  /* Gutter visibility status for each of the four positions. */
+  WINDOW_SLOT_ARRAY (gutter_visible_p, 4, EQUAL_WRAPPED);
+  /* The following five don't really need to be cached except
+     that we need to know when they've changed. */
+  WINDOW_SLOT (default_gutter, EQUAL_WRAPPED);
+  WINDOW_SLOT (default_gutter_width, EQ);
+  WINDOW_SLOT (default_gutter_height, EQ);
+  WINDOW_SLOT (default_gutter_visible_p, EQ);
+  WINDOW_SLOT (default_gutter_border_width, EQ);
+/* margins */
   WINDOW_SLOT (left_margin_width, EQ);
   WINDOW_SLOT (right_margin_width, EQ);
   WINDOW_SLOT (minimum_line_ascent, EQ);
index f8b707d..e055147 100644 (file)
@@ -1,3 +1,7 @@
+1999-07-30  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+       * XEmacs 21.2.19 is released
+
 1999-07-13  XEmacs Build Bot <builds@cvs.xemacs.org>
 
        * XEmacs 21.2.18 is released
index fa8859b..511bbc8 100644 (file)
@@ -1,10 +1,12 @@
+(setq str "Hello There")
 (set-extent-begin-glyph 
- (make-extent (point) (point))
- (setq icon (make-glyph [xpm :file "../etc/xemacs-icon.xpm"])))
+ (make-extent 0 0 str)
+ (make-glyph [xpm :file "../etc/xemacs-icon.xpm"]))
 
 (defun foo ()
   (interactive) 
-  (setq ok-select (not ok-select)))
+  (ding))
+;  (setq ok-select (not ok-select)))
 
 ;; button in a group
 (setq ok-select nil)
index dafc8d4..761f565 100644 (file)
@@ -2,8 +2,8 @@
 emacs_is_beta=t
 emacs_major_version=21
 emacs_minor_version=2
-emacs_beta_version=18
-xemacs_codename="Toshima"
+emacs_beta_version=19
+xemacs_codename="Shinjuku"
 infodock_major_version=4
 infodock_minor_version=0
-infodock_build_version=7
+infodock_build_version=8