Merge mapping to CHINA3-JEF code points.
[chise/xemacs-chise.git] / info / xemacs-faq.info-4
index 75796cf..7dc867f 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/xemacs-faq.info, produced by makeinfo version 4.0 from
+This is ../info/xemacs-faq.info, produced by makeinfo version 4.0b from
 xemacs-faq.texi.
 
 INFO-DIR-SECTION XEmacs Editor
@@ -7,188 +7,6 @@ START-INFO-DIR-ENTRY
 END-INFO-DIR-ENTRY
 
 \1f
-File: xemacs-faq.info,  Node: Q4.0.2,  Next: Q4.0.3,  Prev: Q4.0.1,  Up: Subsystems
-
-Q4.0.2: How do I get VM to filter mail for me?
-----------------------------------------------
-
-   One possibility is to use procmail to split your mail before it gets
-to VM.  I prefer this personally, since there are many strange and
-wonderful things one can do with procmail.  Procmail may be found at
-`ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail/'.
-
-   Also see the Mail Filtering FAQ at:
-`ftp://rtfm.mit.edu/pub/usenet/news.answers/mail/filtering-faq'.
-
-\1f
-File: xemacs-faq.info,  Node: Q4.0.3,  Next: Q4.0.4,  Prev: Q4.0.2,  Up: Subsystems
-
-Q4.0.3: How can I get VM to automatically check for new mail?
--------------------------------------------------------------
-
-   John Turner <turner@lanl.gov> writes:
-
-     Use the following:
-
-          (setq vm-auto-get-new-mail 60)
-
-\1f
-File: xemacs-faq.info,  Node: Q4.0.4,  Next: Q4.0.5,  Prev: Q4.0.3,  Up: Subsystems
-
-Q4.0.4: [This question intentionally left blank]
-------------------------------------------------
-
-   Obsolete question, left blank to avoid renumbering.
-
-\1f
-File: xemacs-faq.info,  Node: Q4.0.5,  Next: Q4.0.6,  Prev: Q4.0.4,  Up: Subsystems
-
-Q4.0.5: How do I get my outgoing mail archived?
------------------------------------------------
-
-     (setq mail-archive-file-name "~/outbox")
-
-\1f
-File: xemacs-faq.info,  Node: Q4.0.6,  Next: Q4.0.7,  Prev: Q4.0.5,  Up: Subsystems
-
-Q4.0.6: I have various addresses at which I receive mail.  How can I tell VM to ignore them when doing a "reply-all"?
----------------------------------------------------------------------------------------------------------------------
-
-   Set `vm-reply-ignored-addresses' to a list, like
-
-     (setq vm-reply-ignored-addresses
-           '("wing@nuspl@nvwls.cc.purdue.edu,netcom[0-9]*.netcom.com"
-             "wing@netcom.com" "wing@xemacs.org"))
-
-   Note that each string is a regular expression.
-
-\1f
-File: xemacs-faq.info,  Node: Q4.0.7,  Next: Q4.0.8,  Prev: Q4.0.6,  Up: Subsystems
-
-Q4.0.7: Is there a mailing list or FAQ for VM?
-----------------------------------------------
-
-   A FAQ for VM exists at `http://www.cyberpass.net/~gorkab/vmfaq.htm'.
-
-   VM has its own newsgroups gnu.emacs.vm.info and gnu.emacs.vm.bug.
-
-\1f
-File: xemacs-faq.info,  Node: Q4.0.8,  Next: Q4.0.9,  Prev: Q4.0.7,  Up: Subsystems
-
-Q4.0.8: Remote mail reading with VM.
-------------------------------------
-
-   My mailbox lives at the office on a big honkin server.  My regular
-INBOX lives on my honkin desktop machine.  I now can PPP to the office
-from home which is far from honking...  I'd like to be able to read
-mail at home without storing it here and I'd like to use xemacs and VM
-at home...  Is there a recommended setup?
-
-   Joseph J. Nuspl Jr. <nuspl@nvwls.cc.purdue.edu> writes:
-
-     There are several ways to do this.
-
-       1. Set your display to your home machine and run dxpc or one of
-          the other X compressors.
-
-       2. NFS mount your desktop machine on your home machine and
-          modify your pop command on your home machine to rsh to your
-          desktop machine and actually do the pop get's.
-
-       3. Run a POP server on your desktop machine as well and do a
-          sort of two tiered POP get.
-
-   William Perry <wmperry@monolith.spry.com> adds:
-
-     Or you could run a pop script periodically on your desktop
-     machine, and just use ange-ftp or NFS to get to your mailbox.  I
-     used to do this all the time back at IU.
-
-\1f
-File: xemacs-faq.info,  Node: Q4.0.9,  Next: Q4.0.10,  Prev: Q4.0.8,  Up: Subsystems
-
-Q4.0.9: rmail or VM gets an error incorporating new mail.
----------------------------------------------------------
-
-   Quoting the XEmacs PROBLEMS file:
-
-     rmail and VM get new mail from `/usr/spool/mail/$USER' using a
-     program called `movemail'.  This program interlocks with
-     `/bin/mail' using the protocol defined by `/bin/mail'.
-
-     There are two different protocols in general use.  One of them
-     uses the `flock' system call.  The other involves creating a lock
-     file; `movemail' must be able to write in `/usr/spool/mail' in
-     order to do this.  You control which one is used by defining, or
-     not defining, the macro `MAIL_USE_FLOCK' in `config.h' or the m-
-     or s- file it includes.
-
-     *IF YOU DON'T USE THE FORM OF INTERLOCKING THAT IS NORMAL ON YOUR
-     SYSTEM, YOU CAN LOSE MAIL!*
-
-     If your system uses the lock file protocol, and fascist
-     restrictions prevent ordinary users from writing the lock files in
-     `/usr/spool/mail', you may need to make `movemail' setgid to a
-     suitable group such as `mail'.  You can use these commands (as
-     root):
-
-          chgrp mail movemail
-          chmod 2755 movemail
-
-     If your system uses the lock file protocol, and fascist
-     restrictions prevent ordinary users from writing the lock files in
-     `/usr/spool/mail', you may need to make `movemail' setgid to a
-     suitable group such as `mail'.  To do this, use the following
-     commands (as root) after doing the make install.
-
-          chgrp mail movemail
-          chmod 2755 movemail
-
-     Installation normally copies movemail from the build directory to
-     an installation directory which is usually under `/usr/local/lib'.
-     The installed copy of `movemail' is usually in the directory
-     `/usr/local/lib/emacs/VERSION/TARGET'.  You must change the group
-     and mode of the installed copy; changing the group and mode of the
-     build directory copy is ineffective.
-
-\1f
-File: xemacs-faq.info,  Node: Q4.0.10,  Next: Q4.0.11,  Prev: Q4.0.9,  Up: Subsystems
-
-Q4.0.10: How do I make VM stay in a single frame?
--------------------------------------------------
-
-   John.John S Cooper <Cooper@Eng.Sun.COM> writes:
-
-                                                  ; Don't use multiple frames
-          (setq vm-frame-per-composition nil)
-          (setq vm-frame-per-folder nil)
-          (setq vm-frame-per-edit nil)
-          (setq vm-frame-per-summary nil)
-
-\1f
-File: xemacs-faq.info,  Node: Q4.0.11,  Next: Q4.0.12,  Prev: Q4.0.10,  Up: Subsystems
-
-Q4.0.11: How do I make VM or mh-e display graphical smilies?
-------------------------------------------------------------
-
-   For mh-e use the following:
-
-     (add-hook 'mh-show-mode-hook '(lambda ()
-                                     (smiley-region (point-min)
-                                                    (point-max))))
-
-   WJCarpenter <bill@carpenter.ORG> writes: For VM use the following:
-            (autoload 'smiley-region "smiley" nil t)
-            (add-hook 'vm-select-message-hook
-                      '(lambda ()
-                         (smiley-region (point-min)
-                                        (point-max))))
-
-   For tm use the following:
-     (autoload 'smiley-buffer "smiley" nil t)
-     (add-hook 'mime-viewer/plain-text-preview-hook 'smiley-buffer)
-
-\1f
 File: xemacs-faq.info,  Node: Q4.0.12,  Next: Q4.1.1,  Prev: Q4.0.11,  Up: Subsystems
 
 Q4.0.12: Customization of VM not covered in the manual, or here.
@@ -809,7 +627,7 @@ Emacs Lisp Programming Techniques:
 * Q5.1.4::      What is the performance hit of `let'?
 * Q5.1.5::      What is the recommended use of `setq'?
 * Q5.1.6::      What is the typical misuse of `setq'?
-* Q5.1.7::      I like the the `do' form of cl, does it slow things down?
+* Q5.1.7::      I like the `do' form of cl, does it slow things down?
 * Q5.1.8::      I like recursion, does it slow things down?
 * Q5.1.9::      How do I put a glyph as annotation in a buffer?
 * Q5.1.10::     `map-extents' won't traverse all of my extents!
@@ -1265,3 +1083,244 @@ XEmacs.
      (global-set-key [unknown_keysym_0x4]
        (lambda () (interactive) (cg--generate-char-event 4)))
 
+\1f
+File: xemacs-faq.info,  Node: Q5.1.3,  Next: Q5.1.4,  Prev: Q5.1.2,  Up: Miscellaneous
+
+Q5.1.3: Could you explain `read-kbd-macro' in more detail?
+----------------------------------------------------------
+
+   The `read-kbd-macro' function returns the internal Emacs
+representation of a human-readable string (which is its argument).
+Thus:
+
+     (read-kbd-macro "C-c C-a")
+     => [(control ?c) (control ?a)]
+     
+     (read-kbd-macro "C-c C-. <up>")
+     => [(control ?c) (control ?.) up]
+
+   In GNU Emacs the same forms will be evaluated to what GNU Emacs
+understands internally--the sequences `"\C-x\C-c"' and `[3 67108910
+up]', respectively.
+
+   The exact "human-readable" syntax is defined in the docstring of
+`edmacro-mode'.  I'll repeat it here, for completeness.
+
+     Format of keyboard macros during editing:
+
+     Text is divided into "words" separated by whitespace.  Except for
+     the words described below, the characters of each word go directly
+     as characters of the macro.  The whitespace that separates words is
+     ignored.  Whitespace in the macro must be written explicitly, as in
+     `foo <SPC> bar <RET>'.
+
+        * The special words `RET', `SPC', `TAB', `DEL', `LFD', `ESC',
+          and `NUL' represent special control characters.  The words
+          must be written in uppercase.
+
+        * A word in angle brackets, e.g., `<return>', `<down>', or
+          `<f1>', represents a function key.  (Note that in the standard
+          configuration, the function key `<return>' and the control key
+          <RET> are synonymous.)  You can use angle brackets on the
+          words <RET>, <SPC>, etc., but they are not required there.
+
+        * Keys can be written by their ASCII code, using a backslash
+          followed by up to six octal digits.  This is the only way to
+          represent keys with codes above \377.
+
+        * One or more prefixes `M-' (meta), `C-' (control), `S-'
+          (shift), `A-' (alt), `H-' (hyper), and `s-' (super) may
+          precede a character or key notation.  For function keys, the
+          prefixes may go inside or outside of the brackets: `C-<down>'
+          == `<C-down>'.  The prefixes may be written in any order:
+          `M-C-x' == `C-M-x'.
+
+          Prefixes are not allowed on multi-key words, e.g., `C-abc',
+          except that the Meta prefix is allowed on a sequence of
+          digits and optional minus sign: `M--123' == `M-- M-1 M-2 M-3'.
+
+        * The `^' notation for control characters also works: `^M' ==
+          `C-m'.
+
+        * Double angle brackets enclose command names: `<<next-line>>'
+          is shorthand for `M-x next-line <RET>'.
+
+        * Finally, `REM' or `;;' causes the rest of the line to be
+          ignored as a comment.
+
+     Any word may be prefixed by a multiplier in the form of a decimal
+     number and `*': `3*<right>' == `<right> <right> <right>', and
+     `10*foo' == `foofoofoofoofoofoofoofoofoofoo'.
+
+     Multiple text keys can normally be strung together to form a word,
+     but you may need to add whitespace if the word would look like one
+     of the above notations: `; ; ;' is a keyboard macro with three
+     semicolons, but `;;;' is a comment.  Likewise, `\ 1 2 3' is four
+     keys but `\123' is a single key written in octal, and `< right >'
+     is seven keys but `<right>' is a single function key.  When in
+     doubt, use whitespace.
+
+\1f
+File: xemacs-faq.info,  Node: Q5.1.4,  Next: Q5.1.5,  Prev: Q5.1.3,  Up: Miscellaneous
+
+Q5.1.4: What is the performance hit of `let'?
+---------------------------------------------
+
+   In most cases, not noticeable.  Besides, there's no avoiding
+`let'--you have to bind your local variables, after all.  Some pose a
+question whether to nest `let's, or use one `let' per function.  I
+think because of clarity and maintenance (and possible future
+implementation), `let'-s should be used (nested) in a way to provide
+the clearest code.
+
+\1f
+File: xemacs-faq.info,  Node: Q5.1.5,  Next: Q5.1.6,  Prev: Q5.1.4,  Up: Miscellaneous
+
+Q5.1.5: What is the recommended use of `setq'?
+----------------------------------------------
+
+   * Global variables
+
+     You will typically `defvar' your global variable to a default
+     value, and use `setq' to set it later.
+
+     It is never a good practice to `setq' user variables (like
+     `case-fold-search', etc.), as it ignores the user's choice
+     unconditionally.  Note that `defvar' doesn't change the value of a
+     variable if it was bound previously.  If you wish to change a
+     user-variable temporarily, use `let':
+
+          (let ((case-fold-search nil))
+            ...                                   ; code with searches that must be case-sensitive
+            ...)
+
+     You will notice the user-variables by their docstrings beginning
+     with an asterisk (a convention).
+
+   * Local variables
+
+     Bind them with `let', which will unbind them (or restore their
+     previous value, if they were bound) after exiting from the `let'
+     form.  Change the value of local variables with `setq' or whatever
+     you like (e.g. `incf', `setf' and such).  The `let' form can even
+     return one of its local variables.
+
+     Typical usage:
+
+          ;; iterate through the elements of the list returned by
+          ;; `hairy-function-that-returns-list'
+          (let ((l (hairy-function-that-returns-list)))
+            (while l
+              ... do something with (car l) ...
+              (setq l (cdr l))))
+
+     Another typical usage includes building a value simply to work
+     with it.
+
+          ;; Build the mode keymap out of the key-translation-alist
+          (let ((inbox (file-truename (expand-file-name box)))
+                (i 0))
+            ... code dealing with inbox ...
+            inbox)
+
+     This piece of code uses the local variable `inbox', which becomes
+     unbound (or regains old value) after exiting the form.  The form
+     also returns the value of `inbox', which can be reused, for
+     instance:
+
+          (setq foo-processed-inbox
+                (let .....))
+
+\1f
+File: xemacs-faq.info,  Node: Q5.1.6,  Next: Q5.1.7,  Prev: Q5.1.5,  Up: Miscellaneous
+
+Q5.1.6: What is the typical misuse of `setq' ?
+----------------------------------------------
+
+   A typical misuse is probably `setq'ing a variable that was meant to
+be local.  Such a variable will remain bound forever, never to be
+garbage-collected.  For example, the code doing:
+
+     (defun my-function (whatever)
+       (setq a nil)
+       ... build a large list ...
+       ... and exit ...)
+
+   does a bad thing, as `a' will keep consuming memory, never to be
+unbound.  The correct thing is to do it like this:
+
+     (defun my-function (whatever)
+       (let (a)                              ; default initialization is to nil
+         ... build a large list ...
+         ... and exit, unbinding `a' in the process  ...)
+
+   Not only is this prettier syntactically, but it makes it possible for
+Emacs to garbage-collect the objects which `a' used to reference.
+
+   Note that even global variables should not be `setq'ed without
+`defvar'ing them first, because the byte-compiler issues warnings.  The
+reason for the warning is the following:
+
+     (defun flurgoze nil)                    ; ok, global internal variable
+     ...
+     
+     (setq flurghoze t)                      ; ops!  a typo, but semantically correct.
+                                             ; however, the byte-compiler warns.
+     
+     While compiling toplevel forms:
+     ** assignment to free variable flurghoze
+
+\1f
+File: xemacs-faq.info,  Node: Q5.1.7,  Next: Q5.1.8,  Prev: Q5.1.6,  Up: Miscellaneous
+
+Q5.1.7: I like the `do' form of cl, does it slow things down?
+-------------------------------------------------------------
+
+   It shouldn't.  Here is what Dave Gillespie has to say about cl.el
+performance:
+
+     Many of the advanced features of this package, such as `defun*',
+     `loop', and `setf', are implemented as Lisp macros.  In
+     byte-compiled code, these complex notations will be expanded into
+     equivalent Lisp code which is simple and efficient.  For example,
+     the forms
+
+          (incf i n)
+          (push x (car p))
+
+     are expanded at compile-time to the Lisp forms
+
+          (setq i (+ i n))
+          (setcar p (cons x (car p)))
+
+     which are the most efficient ways of doing these respective
+     operations in Lisp.  Thus, there is no performance penalty for
+     using the more readable `incf' and `push' forms in your compiled
+     code.
+
+     _Interpreted_ code, on the other hand, must expand these macros
+     every time they are executed.  For this reason it is strongly
+     recommended that code making heavy use of macros be compiled.  (The
+     features labelled "Special Form" instead of "Function" in this
+     manual are macros.)  A loop using `incf' a hundred times will
+     execute considerably faster if compiled, and will also
+     garbage-collect less because the macro expansion will not have to
+     be generated, used, and thrown away a hundred times.
+
+     You can find out how a macro expands by using the `cl-prettyexpand'
+     function.
+
+\1f
+File: xemacs-faq.info,  Node: Q5.1.8,  Next: Q5.1.9,  Prev: Q5.1.7,  Up: Miscellaneous
+
+Q5.1.8: I like recursion, does it slow things down?
+---------------------------------------------------
+
+   Yes.  Emacs byte-compiler cannot do much to optimize recursion.  But
+think well whether this is a real concern in Emacs.  Much of the Emacs
+slowness comes from internal mechanisms such as redisplay, or from the
+fact that it is an interpreter.
+
+   Please try not to make your code much uglier to gain a very small
+speed gain.  It's not usually worth it.
+