-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
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.
* 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!
(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.
+