X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=info%2Fxemacs-faq.info-4;h=7e671ece47a415b823cfbadbd3d1f00d1d269520;hb=15416d0609770cf0a2897cb33973eee789b89eb0;hp=75796cfc22b61642ee8784fb58d3ec4b93f1698c;hpb=c8aa261a7bf3eb1389d2e018be1d715f73cacd66;p=chise%2Fxemacs-chise.git- diff --git a/info/xemacs-faq.info-4 b/info/xemacs-faq.info-4 index 75796cf..7e671ec 100644 --- a/info/xemacs-faq.info-4 +++ b/info/xemacs-faq.info-4 @@ -7,188 +7,6 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY  -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'. - - -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 writes: - - Use the following: - - (setq vm-auto-get-new-mail 60) - - -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. - - -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") - - -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. - - -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. - - -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. 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 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. - - -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. - - -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 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) - - -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 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) - - 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))) + +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-. ") + => [(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 bar '. + + * 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., `', `', or + `', represents a function key. (Note that in the standard + configuration, the function key `' and the control key + are synonymous.) You can use angle brackets on the + words , , 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-' + == `'. 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: `<>' + is shorthand for `M-x next-line '. + + * 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*' == ` ', 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 `' is a single function key. When in + doubt, use whitespace. + + +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. + + +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 .....)) + + +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 + + +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. + + +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. +