Sync with r21-2-28.
[chise/xemacs-chise.git-] / info / xemacs-faq.info-5
1 This is ../info/xemacs-faq.info, produced by makeinfo version 4.0 from
2 xemacs-faq.texi.
3
4 INFO-DIR-SECTION XEmacs Editor
5 START-INFO-DIR-ENTRY
6 * FAQ: (xemacs-faq).            XEmacs FAQ.
7 END-INFO-DIR-ENTRY
8
9 \1f
10 File: xemacs-faq.info,  Node: Q5.1.3,  Next: Q5.1.4,  Prev: Q5.1.2,  Up: Miscellaneous
11
12 Q5.1.3: Could you explain `read-kbd-macro' in more detail?
13 ----------------------------------------------------------
14
15    The `read-kbd-macro' function returns the internal Emacs
16 representation of a human-readable string (which is its argument).
17 Thus:
18
19      (read-kbd-macro "C-c C-a")
20      => [(control ?c) (control ?a)]
21      
22      (read-kbd-macro "C-c C-. <up>")
23      => [(control ?c) (control ?.) up]
24
25    In GNU Emacs the same forms will be evaluated to what GNU Emacs
26 understands internally--the sequences `"\C-x\C-c"' and `[3 67108910
27 up]', respectively.
28
29    The exact "human-readable" syntax is defined in the docstring of
30 `edmacro-mode'.  I'll repeat it here, for completeness.
31
32      Format of keyboard macros during editing:
33
34      Text is divided into "words" separated by whitespace.  Except for
35      the words described below, the characters of each word go directly
36      as characters of the macro.  The whitespace that separates words is
37      ignored.  Whitespace in the macro must be written explicitly, as in
38      `foo <SPC> bar <RET>'.
39
40         * The special words `RET', `SPC', `TAB', `DEL', `LFD', `ESC',
41           and `NUL' represent special control characters.  The words
42           must be written in uppercase.
43
44         * A word in angle brackets, e.g., `<return>', `<down>', or
45           `<f1>', represents a function key.  (Note that in the standard
46           configuration, the function key `<return>' and the control key
47           <RET> are synonymous.)  You can use angle brackets on the
48           words <RET>, <SPC>, etc., but they are not required there.
49
50         * Keys can be written by their ASCII code, using a backslash
51           followed by up to six octal digits.  This is the only way to
52           represent keys with codes above \377.
53
54         * One or more prefixes `M-' (meta), `C-' (control), `S-'
55           (shift), `A-' (alt), `H-' (hyper), and `s-' (super) may
56           precede a character or key notation.  For function keys, the
57           prefixes may go inside or outside of the brackets: `C-<down>'
58           == `<C-down>'.  The prefixes may be written in any order:
59           `M-C-x' == `C-M-x'.
60
61           Prefixes are not allowed on multi-key words, e.g., `C-abc',
62           except that the Meta prefix is allowed on a sequence of
63           digits and optional minus sign: `M--123' == `M-- M-1 M-2 M-3'.
64
65         * The `^' notation for control characters also works: `^M' ==
66           `C-m'.
67
68         * Double angle brackets enclose command names: `<<next-line>>'
69           is shorthand for `M-x next-line <RET>'.
70
71         * Finally, `REM' or `;;' causes the rest of the line to be
72           ignored as a comment.
73
74      Any word may be prefixed by a multiplier in the form of a decimal
75      number and `*': `3*<right>' == `<right> <right> <right>', and
76      `10*foo' == `foofoofoofoofoofoofoofoofoofoo'.
77
78      Multiple text keys can normally be strung together to form a word,
79      but you may need to add whitespace if the word would look like one
80      of the above notations: `; ; ;' is a keyboard macro with three
81      semicolons, but `;;;' is a comment.  Likewise, `\ 1 2 3' is four
82      keys but `\123' is a single key written in octal, and `< right >'
83      is seven keys but `<right>' is a single function key.  When in
84      doubt, use whitespace.
85
86 \1f
87 File: xemacs-faq.info,  Node: Q5.1.4,  Next: Q5.1.5,  Prev: Q5.1.3,  Up: Miscellaneous
88
89 Q5.1.4: What is the performance hit of `let'?
90 ---------------------------------------------
91
92    In most cases, not noticeable.  Besides, there's no avoiding
93 `let'--you have to bind your local variables, after all.  Some pose a
94 question whether to nest `let's, or use one `let' per function.  I
95 think because of clarity and maintenance (and possible future
96 implementation), `let'-s should be used (nested) in a way to provide
97 the clearest code.
98
99 \1f
100 File: xemacs-faq.info,  Node: Q5.1.5,  Next: Q5.1.6,  Prev: Q5.1.4,  Up: Miscellaneous
101
102 Q5.1.5: What is the recommended use of `setq'?
103 ----------------------------------------------
104
105    * Global variables
106
107      You will typically `defvar' your global variable to a default
108      value, and use `setq' to set it later.
109
110      It is never a good practice to `setq' user variables (like
111      `case-fold-search', etc.), as it ignores the user's choice
112      unconditionally.  Note that `defvar' doesn't change the value of a
113      variable if it was bound previously.  If you wish to change a
114      user-variable temporarily, use `let':
115
116           (let ((case-fold-search nil))
117             ...                                   ; code with searches that must be case-sensitive
118             ...)
119
120      You will notice the user-variables by their docstrings beginning
121      with an asterisk (a convention).
122
123    * Local variables
124
125      Bind them with `let', which will unbind them (or restore their
126      previous value, if they were bound) after exiting from the `let'
127      form.  Change the value of local variables with `setq' or whatever
128      you like (e.g. `incf', `setf' and such).  The `let' form can even
129      return one of its local variables.
130
131      Typical usage:
132
133           ;; iterate through the elements of the list returned by
134           ;; `hairy-function-that-returns-list'
135           (let ((l (hairy-function-that-returns-list)))
136             (while l
137               ... do something with (car l) ...
138               (setq l (cdr l))))
139
140      Another typical usage includes building a value simply to work
141      with it.
142
143           ;; Build the mode keymap out of the key-translation-alist
144           (let ((inbox (file-truename (expand-file-name box)))
145                 (i 0))
146             ... code dealing with inbox ...
147             inbox)
148
149      This piece of code uses the local variable `inbox', which becomes
150      unbound (or regains old value) after exiting the form.  The form
151      also returns the value of `inbox', which can be reused, for
152      instance:
153
154           (setq foo-processed-inbox
155                 (let .....))
156
157 \1f
158 File: xemacs-faq.info,  Node: Q5.1.6,  Next: Q5.1.7,  Prev: Q5.1.5,  Up: Miscellaneous
159
160 Q5.1.6: What is the typical misuse of `setq' ?
161 ----------------------------------------------
162
163    A typical misuse is probably `setq'ing a variable that was meant to
164 be local.  Such a variable will remain bound forever, never to be
165 garbage-collected.  For example, the code doing:
166
167      (defun my-function (whatever)
168        (setq a nil)
169        ... build a large list ...
170        ... and exit ...)
171
172    does a bad thing, as `a' will keep consuming memory, never to be
173 unbound.  The correct thing is to do it like this:
174
175      (defun my-function (whatever)
176        (let (a)                              ; default initialization is to nil
177          ... build a large list ...
178          ... and exit, unbinding `a' in the process  ...)
179
180    Not only is this prettier syntactically, but it makes it possible for
181 Emacs to garbage-collect the objects which `a' used to reference.
182
183    Note that even global variables should not be `setq'ed without
184 `defvar'ing them first, because the byte-compiler issues warnings.  The
185 reason for the warning is the following:
186
187      (defun flurgoze nil)                    ; ok, global internal variable
188      ...
189      
190      (setq flurghoze t)                      ; ops!  a typo, but semantically correct.
191                                              ; however, the byte-compiler warns.
192      
193      While compiling toplevel forms:
194      ** assignment to free variable flurghoze
195
196 \1f
197 File: xemacs-faq.info,  Node: Q5.1.7,  Next: Q5.1.8,  Prev: Q5.1.6,  Up: Miscellaneous
198
199 Q5.1.7: I like the the `do' form of cl, does it slow things down?
200 -----------------------------------------------------------------
201
202    It shouldn't.  Here is what Dave Gillespie has to say about cl.el
203 performance:
204
205      Many of the advanced features of this package, such as `defun*',
206      `loop', and `setf', are implemented as Lisp macros.  In
207      byte-compiled code, these complex notations will be expanded into
208      equivalent Lisp code which is simple and efficient.  For example,
209      the forms
210
211           (incf i n)
212           (push x (car p))
213
214      are expanded at compile-time to the Lisp forms
215
216           (setq i (+ i n))
217           (setcar p (cons x (car p)))
218
219      which are the most efficient ways of doing these respective
220      operations in Lisp.  Thus, there is no performance penalty for
221      using the more readable `incf' and `push' forms in your compiled
222      code.
223
224      _Interpreted_ code, on the other hand, must expand these macros
225      every time they are executed.  For this reason it is strongly
226      recommended that code making heavy use of macros be compiled.  (The
227      features labelled "Special Form" instead of "Function" in this
228      manual are macros.)  A loop using `incf' a hundred times will
229      execute considerably faster if compiled, and will also
230      garbage-collect less because the macro expansion will not have to
231      be generated, used, and thrown away a hundred times.
232
233      You can find out how a macro expands by using the `cl-prettyexpand'
234      function.
235
236 \1f
237 File: xemacs-faq.info,  Node: Q5.1.8,  Next: Q5.1.9,  Prev: Q5.1.7,  Up: Miscellaneous
238
239 Q5.1.8: I like recursion, does it slow things down?
240 ---------------------------------------------------
241
242    Yes.  Emacs byte-compiler cannot do much to optimize recursion.  But
243 think well whether this is a real concern in Emacs.  Much of the Emacs
244 slowness comes from internal mechanisms such as redisplay, or from the
245 fact that it is an interpreter.
246
247    Please try not to make your code much uglier to gain a very small
248 speed gain.  It's not usually worth it.
249
250 \1f
251 File: xemacs-faq.info,  Node: Q5.1.9,  Next: Q5.1.10,  Prev: Q5.1.8,  Up: Miscellaneous
252
253 Q5.1.9: How do I put a glyph as annotation in a buffer?
254 -------------------------------------------------------
255
256    Here is a solution that will insert the glyph annotation at the
257 beginning of buffer:
258
259      (make-annotation (make-glyph '([FORMAT :file FILE]
260                                     [string :data "fallback-text"]))
261                       (point-min)
262                       'text
263                       (current-buffer))
264
265    Replace `FORMAT' with an unquoted symbol representing the format of
266 the image (e.g. `xpm', `xbm', `gif', `jpeg', etc.)  Instead of `FILE',
267 use the image file name (e.g.
268 `/usr/local/lib/xemacs-20.2/etc/recycle.xpm').
269
270    You can turn this to a function (that optionally prompts you for a
271 file name), and inserts the glyph at `(point)' instead of `(point-min)'.
272
273 \1f
274 File: xemacs-faq.info,  Node: Q5.1.10,  Next: Q5.1.11,  Prev: Q5.1.9,  Up: Miscellaneous
275
276 Q5.1.10: `map-extents' won't traverse all of my extents!
277 --------------------------------------------------------
278
279    I tried to use `map-extents' to do an operation on all the extents
280 in a region.  However, it seems to quit after processing a random number
281 of extents.  Is it buggy?
282
283    No.  The documentation of `map-extents' states that it will iterate
284 across the extents as long as FUNCTION returns `nil'.  Unexperienced
285 programmers often forget to return `nil' explicitly, which results in
286 buggy code.  For instance, the following code is supposed to delete all
287 the extents in a buffer, and issue as many `fubar!' messages.
288
289      (map-extents (lambda (ext ignore)
290                     (delete-extent ext)
291                     (message "fubar!")))
292
293    Instead, it will delete only the first extent, and stop right there -
294 because `message' will return a non-nil value.  The correct code is:
295
296      (map-extents (lambda (ext ignore)
297                     (delete-extent ext)
298                     (message "fubar!")
299                     nil))
300
301 \1f
302 File: xemacs-faq.info,  Node: Q5.1.11,  Next: Q5.2.1,  Prev: Q5.1.10,  Up: Miscellaneous
303
304 Q5.1.11: My elisp program is horribly slow.  Is there
305 -----------------------------------------------------
306
307    an easy way to find out where it spends time?
308
309    zHrvoje Niksic <hniksic@xemacs.org> writes:
310      Under XEmacs 20.4 and later  you can use `M-x
311      profile-key-sequence', press a key (say <RET> in the Gnus Group
312      buffer), and get the results using `M-x profile-results'.  It
313      should give you an idea of where the time is being spent.
314
315 \1f
316 File: xemacs-faq.info,  Node: Q5.2.1,  Next: Q5.2.2,  Prev: Q5.1.11,  Up: Miscellaneous
317
318 Q5.2.1: How do I turn off the sound?
319 ------------------------------------
320
321    Add the following line to your `.emacs':
322
323      (setq bell-volume 0)
324      (setq sound-alist nil)
325
326    That will make your XEmacs totally silent--even the default ding
327 sound (TTY beep on TTY-s) will be gone.
328
329    Starting with XEmacs-20.2 you can also change these with Customize.
330 Select from the `Options' menu
331 `Customize->Emacs->Environment->Sound->Sound...' or type `M-x customize
332 <RET> sound <RET>'.
333
334 \1f
335 File: xemacs-faq.info,  Node: Q5.2.2,  Next: Q5.2.3,  Prev: Q5.2.1,  Up: Miscellaneous
336
337 Q5.2.2: How do I get funky sounds instead of a boring beep?
338 -----------------------------------------------------------
339
340    Make sure your XEmacs was compiled with sound support, and then put
341 this in your `.emacs':
342
343      (load-default-sounds)
344
345    The sound support in XEmacs 19.14 was greatly improved over previous
346 versions.
347
348 \1f
349 File: xemacs-faq.info,  Node: Q5.2.3,  Next: Q5.2.4,  Prev: Q5.2.2,  Up: Miscellaneous
350
351 Q5.2.3: What's NAS, how do I get it?
352 ------------------------------------
353
354    *Note Q2.0.3::, for an explanation of the "Network Audio System".
355
356 \1f
357 File: xemacs-faq.info,  Node: Q5.2.4,  Next: Q5.3.1,  Prev: Q5.2.3,  Up: Miscellaneous
358
359 Q5.2.4: Sunsite sounds don't play.
360 ----------------------------------
361
362    I'm having some trouble with sounds I've downloaded from sunsite.
363 They play when I run them through `showaudio' or cat them directly to
364 `/dev/audio', but XEmacs refuses to play them.
365
366    Markus Gutschke <gutschk@uni-muenster.de> writes:
367
368      [Many of] These files have an (erroneous) 24byte header that tells
369      about the format that they have been recorded in. If you cat them
370      to `/dev/audio', the header will be ignored and the default
371      behavior for /dev/audio will be used. This happens to be 8kHz
372      uLaw. It is probably possible to fix the header by piping through
373      `sox' and passing explicit parameters for specifying the sampling
374      format; you then need to perform a 'null' conversion from SunAudio
375      to SunAudio.
376
377 \1f
378 File: xemacs-faq.info,  Node: Q5.3.1,  Next: Q5.3.2,  Prev: Q5.2.4,  Up: Miscellaneous
379
380 5.3: Miscellaneous
381 ==================
382
383 Q5.3.1: How do you make XEmacs indent CL if-clauses correctly?
384 --------------------------------------------------------------
385
386    I'd like XEmacs to indent all the clauses of a Common Lisp `if' the
387 same amount instead of indenting the 3rd clause differently from the
388 first two.
389
390    One way is to add, to `.emacs':
391
392      (put 'if 'lisp-indent-function nil)
393
394    However, note that the package `cl-indent' that comes with XEmacs
395 sets up this kind of indentation by default.  `cl-indent' also knows
396 about many other CL-specific forms.  To use `cl-indent', one can do
397 this:
398
399      (load "cl-indent")
400      (setq lisp-indent-function (function common-lisp-indent-function))
401
402    One can also customize `cl-indent.el' so it mimics the default `if'
403 indentation `then' indented more than the `else'.  Here's how:
404
405      (put 'if 'common-lisp-indent-function '(nil nil &body))
406
407    Also, a new version (1.2) of `cl-indent.el' was posted to
408 comp.emacs.xemacs on 12/9/94.  This version includes more documentation
409 than previous versions.  This may prove useful if you need to customize
410 any indent-functions.
411
412 \1f
413 File: xemacs-faq.info,  Node: Q5.3.2,  Next: Q5.3.3,  Prev: Q5.3.1,  Up: Miscellaneous
414
415 Q5.3.2: Fontifying hang when editing a postscript file.
416 -------------------------------------------------------
417
418    When I try to edit a postscript file it gets stuck saying:
419 `fontifying 'filename' (regexps....)' and it just sits there.  If I
420 press `C-c' in the window where XEmacs was started, it suddenly becomes
421 alive again.
422
423    This was caused by a bug in the Postscript font-lock regular
424 expressions.  It was fixed in 19.13.  For earlier versions of XEmacs,
425 have a look at your `.emacs' file.  You will probably have a line like:
426
427      (add-hook 'postscript-mode-hook 'turn-on-font-lock)
428
429    Take it out, restart XEmacs, and it won't try to fontify your
430 postscript files anymore.
431
432 \1f
433 File: xemacs-faq.info,  Node: Q5.3.3,  Next: Q5.3.4,  Prev: Q5.3.2,  Up: Miscellaneous
434
435 Q5.3.3: How can I print WYSIWYG a font-locked buffer?
436 -----------------------------------------------------
437
438    Font-lock looks nice.  How can I print (WYSIWYG) the highlighted
439 document?
440
441    The package `ps-print', which is now included with XEmacs, provides
442 the ability to do this.  The source code contains complete instructions
443 on its use, in `<xemacs_src_root>/lisp/packages/ps-print.el'.
444
445 \1f
446 File: xemacs-faq.info,  Node: Q5.3.4,  Next: Q5.3.5,  Prev: Q5.3.3,  Up: Miscellaneous
447
448 Q5.3.4: Getting `M-x lpr' to work with postscript printer.
449 ----------------------------------------------------------
450
451    My printer is a Postscript printer and `lpr' only works for
452 Postscript files, so how do I get `M-x lpr-region' and `M-x lpr-buffer'
453 to work?
454
455    Put something like this in your `.emacs':
456
457      (setq lpr-command "a2ps")
458      (setq lpr-switches '("-p" "-1"))
459
460    If you don't use a2ps to convert ASCII to postscript (why not, it's
461 free?), replace with the command you do use.  Note also that some
462 versions of a2ps require a `-Pprinter' to ensure spooling.
463
464 \1f
465 File: xemacs-faq.info,  Node: Q5.3.5,  Next: Q5.3.6,  Prev: Q5.3.4,  Up: Miscellaneous
466
467 Q5.3.5: How do I specify the paths that XEmacs uses for finding files?
468 ----------------------------------------------------------------------
469
470    You can specify what paths to use by using a number of different
471 flags when running configure.  See the section MAKE VARIABLES in the
472 top-level file INSTALL in the XEmacs distribution for a listing of
473 those flags.
474
475    Most of the time, however, the simplest fix is: *do not* specify
476 paths as you might for GNU Emacs.  XEmacs can generally determine the
477 necessary paths dynamically at run time.  The only path that generally
478 needs to be specified is the root directory to install into.  That can
479 be specified by passing the `--prefix' flag to configure.  For a
480 description of the XEmacs install tree, please consult the `NEWS' file.
481
482 \1f
483 File: xemacs-faq.info,  Node: Q5.3.6,  Next: Q5.3.7,  Prev: Q5.3.5,  Up: Miscellaneous
484
485 Q5.3.6: [This question intentionally left blank]
486 ------------------------------------------------
487
488    Obsolete question, left blank to avoid renumbering.
489
490 \1f
491 File: xemacs-faq.info,  Node: Q5.3.7,  Next: Q5.3.8,  Prev: Q5.3.6,  Up: Miscellaneous
492
493 Q5.3.7: Can I have the end of the buffer delimited in some way?
494 ---------------------------------------------------------------
495
496    Say, with: `[END]'?
497
498    Try this:
499
500      (let ((ext (make-extent (point-min) (point-max))))
501        (set-extent-property ext 'start-closed t)
502        (set-extent-property ext 'end-closed t)
503        (set-extent-property ext 'detachable nil)
504        (set-extent-end-glyph ext (make-glyph [string :data "[END]"])))
505
506    Since this is XEmacs, you can specify an icon to be shown on
507 window-system devices.  To do so, change the `make-glyph' call to
508 something like this:
509
510      (make-glyph '([xpm :file "~/something.xpm"]
511                    [string :data "[END]"]))
512
513    You can inline the XPM definition yourself by specifying `:data'
514 instead of `:file'.  Here is such a full-featured version that works on
515 both X and TTY devices:
516
517      (let ((ext (make-extent (point-min) (point-max))))
518        (set-extent-property ext 'start-closed t)
519        (set-extent-property ext 'end-closed t)
520        (set-extent-property ext 'detachable nil)
521        (set-extent-end-glyph ext (make-glyph '([xpm :data "\
522      /* XPM */
523      static char* eye = {
524      \"20 11 7 2\",
525      \"__ c None\"
526      \"_` c #7f7f7f\",
527      \"_a c #fefefe\",
528      \"_b c #7f0000\",
529      \"_c c #fefe00\",
530      \"_d c #fe0000\",
531      \"_e c #bfbfbf\",
532      \"___________`_`_`___b_b_b_b_________`____\",
533      \"_________`_`_`___b_c_c_c_b_b____________\",
534      \"_____`_`_`_e___b_b_c_c_c___b___b_______`\",
535      \"___`_`_e_a___b_b_d___b___b___b___b______\",
536      \"_`_`_e_a_e___b_b_d_b___b___b___b___b____\",
537      \"_`_`_a_e_a___b_b_d___b___b___b___b___b__\",
538      \"_`_`_e_a_e___b_b_d_b___b___b___b___b_b__\",
539      \"___`_`_e_a___b_b_b_d_c___b___b___d_b____\",
540      \"_____`_`_e_e___b_b_b_d_c___b_b_d_b______\",
541      \"_`_____`_`_`_`___b_b_b_d_d_d_d_b________\",
542      \"___`_____`_`_`_`___b_b_b_b_b_b__________\",
543      } ;"]
544                                                [string :data "[END]"]))))
545
546    Note that you might want to make this a function, and put it to a
547 hook.  We leave that as an exercise for the reader.
548
549 \1f
550 File: xemacs-faq.info,  Node: Q5.3.8,  Next: Q5.3.9,  Prev: Q5.3.7,  Up: Miscellaneous
551
552 Q5.3.8: How do I insert today's date into a buffer?
553 ---------------------------------------------------
554
555    Like this:
556
557      (insert (current-time-string))
558
559 \1f
560 File: xemacs-faq.info,  Node: Q5.3.9,  Next: Q5.3.10,  Prev: Q5.3.8,  Up: Miscellaneous
561
562 Q5.3.9: Are only certain syntactic character classes available for abbrevs?
563 ---------------------------------------------------------------------------
564
565    Markus Gutschke <gutschk@uni-muenster.de> writes:
566
567      Yes, abbrevs only expands word-syntax strings. While XEmacs does
568      not prevent you from defining (e.g. with `C-x a g' or `C-x a l')
569      abbrevs that contain special characters, it will refuse to expand
570      them. So you need to ensure, that the abbreviation contains
571      letters and digits only. This means that `xd', `d5', and `5d' are
572      valid abbrevs, but `&d', and `x d' are not.
573
574      If this sounds confusing to you, (re-)read the online
575      documentation for abbrevs (`C-h i m XEmacs <RET> m Abbrevs
576      <RET>'), and then come back and read this question/answer again.
577
578    Starting with XEmacs 20.3 this restriction has been lifted.
579
580 \1f
581 File: xemacs-faq.info,  Node: Q5.3.10,  Next: Q5.3.11,  Prev: Q5.3.9,  Up: Miscellaneous
582
583 Q5.3.10: How can I get those oh-so-neat X-Face lines?
584 -----------------------------------------------------
585
586    Firstly there is an ftp site which describes X-faces and has the
587 associated tools mentioned below, at
588 `ftp://ftp.cs.indiana.edu:/pub/faces/'.
589
590    Then the steps are
591
592   1. Create 48x48x1 bitmap with your favorite tool
593
594   2. Convert to "icon" format using one of xbm2ikon, pbmtoicon, etc.,
595      and then compile the face.
596
597   3.      cat file.xbm | xbm2ikon |compface > file.face
598
599   4. Then be sure to quote things that are necessary for emacs strings:
600
601           cat ./file.face | sed 's/\\/\\\\/g'
602           | sed 's/\"/\\\"/g' > ./file.face.quoted
603
604   5. Then set up emacs to include the file as a mail header - there
605      were a couple of suggestions here--either something like:
606
607           (setq  mail-default-headers
608                  "X-Face:  <Ugly looking text string here>")
609
610      Or, alternatively, as:
611
612           (defun mail-insert-x-face ()
613             (save-excursion
614               (goto-char (point-min))
615               (search-forward mail-header-separator)
616               (beginning-of-line)
617               (insert "X-Face:")
618               (insert-file-contents "~/.face")))
619           
620           (add-hook 'mail-setup-hook 'mail-insert-x-face)
621
622    However, 2 things might be wrong:
623
624    Some versions of pbmtoicon produces some header lines that is not
625 expected by the version of compface that I grabbed. So I found I had to
626 include a `tail +3' in the pipeline like this:
627
628      cat file.xbm | xbm2ikon | tail +3 |compface > file.face
629
630    Some people have also found that if one uses the `(insert-file)'
631 method, one should NOT quote the face string using the sed script .
632
633    It might also be helpful to use Stig's <stig@hackvan.com> script
634 (included in the compface distribution at XEmacs.org) to do the
635 conversion.
636
637    Contributors for this item:
638
639    Paul Emsley, Ricardo Marek, Amir J. Katz, Glen McCort, Heinz Uphoff,
640 Peter Arius, Paul Harrison, and Vegard Vesterheim
641
642 \1f
643 File: xemacs-faq.info,  Node: Q5.3.11,  Next: Q5.3.12,  Prev: Q5.3.10,  Up: Miscellaneous
644
645 Q5.3.11: How do I add new Info directories?
646 -------------------------------------------
647
648    You use something like:
649
650      (setq Info-directory-list (cons
651                                 (expand-file-name "~/info")
652                                 Info-default-directory-list))
653
654    David Masterson <davidm@prism.kla.com> writes:
655
656      Emacs Info and XEmacs Info do many things differently.  If you're
657      trying to support a number of versions of Emacs, here are some
658      notes to remember:
659
660        1. Emacs Info scans `Info-directory-list' from right-to-left
661           while XEmacs Info reads it from left-to-right, so append to
662           the _correct_ end of the list.
663
664        2. Use `Info-default-directory-list' to initialize
665           `Info-directory-list' _if_ it is available at startup, but not
666           all Emacsen define it.
667
668        3. Emacs Info looks for a standard `dir' file in each of the
669           directories scanned from #1 and magically concatenates them
670           together.
671
672        4. XEmacs Info looks for a `localdir' file (which consists of
673           just the menu entries from a `dir' file) in each of the
674           directories scanned from #1 (except the first), does a simple
675           concatenation of them, and magically attaches the resulting
676           list to the end of the menu in the `dir' file in the first
677           directory.
678
679      Another alternative is to convert the documentation to HTML with
680      texi2html and read it from a web browser like Lynx or W3.
681
682 \1f
683 File: xemacs-faq.info,  Node: Q5.3.12,  Prev: Q5.3.11,  Up: Miscellaneous
684
685 Q5.3.12: What do I need to change to make printing work?
686 --------------------------------------------------------
687
688    For regular printing there are two variables that can be customized.
689
690 `lpr-command'
691      This should be set to a command that takes standard input and sends
692      it to a printer.  Something like:
693
694           (setq lpr-command "lp")
695
696 `lpr-switches'
697      This should be set to a list that contains whatever the print
698      command requires to do its job.  Something like:
699
700           (setq lpr-switches '("-depson"))
701
702    For postscript printing there are three analogous variables to
703 customize.
704
705 `ps-lpr-command'
706      This should be set to a command that takes postscript on standard
707      input and directs it to a postscript printer.
708
709 `ps-lpr-switches'
710      This should be set to a list of switches required for
711      `ps-lpr-command' to do its job.
712
713 `ps-print-color-p'
714      This boolean variable should be set `t' if printing will be done in
715      color, otherwise it should be set to `nil'.
716
717    NOTE: It is an undocumented limitation in XEmacs that postscript
718 printing (the `Pretty Print Buffer' menu item) *requires* a window
719 system environment.  It cannot be used outside of X11.
720
721 \1f
722 File: xemacs-faq.info,  Node: MS Windows,  Next: Current Events,  Prev: Miscellaneous,  Up: Top
723
724 6 XEmacs on MS Windows
725 **********************
726
727    This is part 6 of the XEmacs Frequently Asked Questions list,
728 written by Hrvoje Niksic and others.  This section is devoted to the MS
729 Windows port of XEmacs.
730
731 * Menu:
732
733
734 General Info
735 * Q6.0.1::      What is the status of the XEmacs port to Windows?
736 * Q6.0.2::      What flavors of MS Windows are supported?
737 * Q6.0.3::      Where are the XEmacs on MS Windows binaries?
738 * Q6.0.4::      Does XEmacs on MS Windows require an X server to run?
739
740 Building XEmacs on MS Windows
741 * Q6.1.1::      I decided to run with X.  Where do I get an X server?
742 * Q6.1.2::      What compiler do I need to compile XEmacs?
743 * Q6.1.3::      How do I compile for the native port?
744 * Q6.1.4::      How do I compile for the X port?
745 * Q6.1.5::      How do I compile for Cygnus' Cygwin?
746 * Q6.1.6::      What do I need for Cygwin?
747
748 Customization and User Interface
749 * Q6.2.1::      How will the port cope with differences in the Windows user interface?
750 * Q6.2.2::      How do I change fonts in XEmacs on MS Windows?
751 * Q6.2.3::      Where do I put my `.emacs' file?
752
753 Miscellaneous
754 * Q6.3.1::      Will XEmacs rename all the win32-* symbols to w32-*?
755 * Q6.3.2::      What are the differences between the various MS Windows emacsen?
756 * Q6.3.3::      What is the porting team doing at the moment?
757
758 \1f
759 File: xemacs-faq.info,  Node: Q6.0.1,  Next: Q6.0.2,  Prev: MS Windows,  Up: MS Windows
760
761 6.0: General Info
762 =================
763
764 Q6.0.1: What is the status of the XEmacs port to Windows?
765 ---------------------------------------------------------
766
767    Is XEmacs really getting ported to MS Windows?  What is the status
768 of the port?
769
770    Yes, a group of volunteers actively works on making XEmacs code base
771 cleanly compile and run on MS Windows operating systems.  The mailing
772 list at <xemacs-nt@xemacs.org> is dedicated to that effort (please use
773 the -request address to subscribe).
774
775    At this time, XEmacs on MS Windows is usable, but lacks some of the
776 features of XEmacs on UNIX and UNIX-like systems.  Notably,
777 internationalization does not work.
778
779 \1f
780 File: xemacs-faq.info,  Node: Q6.0.2,  Next: Q6.0.3,  Prev: Q6.0.1,  Up: MS Windows
781
782 Q6.0.2: What flavors of MS Windows are supported?  The list name implies NT only.
783 ---------------------------------------------------------------------------------
784
785    The list name is misleading, as XEmacs will support both Windows 95,
786 Windows 98 and Windows NT.  The MS Windows-specific code is based on
787 Microsoft Win32 API, and will not work on MS Windows 3.x or on MS-DOS.
788
789 \1f
790 File: xemacs-faq.info,  Node: Q6.0.3,  Next: Q6.0.4,  Prev: Q6.0.2,  Up: MS Windows
791
792 Q6.0.3: Are binary kits available?
793 ----------------------------------
794
795    Binary kits are available at
796 `ftp://ftp.xemacs.org/pub/xemacs/binary-kits/win32/' for the "plain" MS
797 Windows version.
798
799 \1f
800 File: xemacs-faq.info,  Node: Q6.0.4,  Next: Q6.1.1,  Prev: Q6.0.3,  Up: MS Windows
801
802 Q6.0.4: Does XEmacs on MS Windows require an X server to run?
803 -------------------------------------------------------------
804
805    Short answer: No.
806
807    Long answer: XEmacs can be built in several ways in the MS Windows
808 environment, some of them requiring an X server and some not.
809
810    One is what we call the "X" port--it requires X libraries to build
811 and an X server to run.  Internally it uses the Xt event loop and makes
812 use of X toolkits.  Its look is quite un-Windowsy, but it works
813 reliably and supports all of the graphical features of Unix XEmacs.
814
815    The other is what we call the "native" port.  It uses the Win32 API
816 and does not require X libraries to build, nor does it require an X to
817 run.  In fact, it has no connection with X whatsoever.  At this time,
818 the native port obsoletes the X port, providing almost all of its
819 features, including support for menus, scrollbars, toolbars, embedded
820 images and background pixmaps, frame pointers, etc.  Most of the future
821 work will be based on the native port.
822
823    There is also a third special case, the Cygwin port.  It takes
824 advantage of Cygnus emulation library under Win32, which enables it to
825 reuse much of the Unix XEmacs code base, such as processes and network
826 support, or internal select() mechanisms.
827
828    Cygwin port supports all display types--TTY, X & MS gui, and can be
829 built with support for all three.  If you build with ms gui support
830 then the Cygwin version uses the majority of the msw code, which is
831 mostly related to display.  If you want to build with X support you
832 need X libraries.  If you want to build with tty support you need
833 ncurses.  MS gui requires no additional libraries.
834
835    Some of the advantages of the Cygwin version are that it:
836
837    * integrates well with Cygwin environment for existing Cygwin users;
838
839    * uses configure so building with different features is very easy;
840
841    * has process support in X & tty.
842
843
844    The disadvantage is that it requires several Unix utilities and the
845 whole Cygwin environment, whereas the native port requires only a
846 suitable MS Windows compiler.  Also, it follows the Unix filesystem and
847 process model very closely (some will undoubtedly view this as an
848 advantage).
849
850 \1f
851 File: xemacs-faq.info,  Node: Q6.1.1,  Next: Q6.1.2,  Prev: Q6.0.4,  Up: MS Windows
852
853 6.1: Building XEmacs on MS Windows
854 ==================================
855
856 Q6.1.1: I decided to run with X.  Where do I get an X server?
857 -------------------------------------------------------------
858
859    Pointers to X servers can be found at
860 `http://dao.gsfc.nasa.gov/software/grads/win32/X11R6.3/';
861
862    look for "Where to get an X server".  Also note that, although the
863 above page talks about Cygnus gnu-win32 (Cygwin), the information on X
864 servers is Cygwin-independent.  You don't have to be running/using
865 Cygwin to use these X servers, and you don't have to compile XEmacs
866 under Cygwin to use XEmacs with these X servers.  An "X port" XEmacs
867 compiled under Visual C++ will work with these X servers (as will
868 XEmacs running on a Unix box, redirected to the server running on your
869 PC).
870
871 \1f
872 File: xemacs-faq.info,  Node: Q6.1.2,  Next: Q6.1.3,  Prev: Q6.1.1,  Up: MS Windows
873
874 Q6.1.2: What compiler do I need to compile XEmacs?
875 --------------------------------------------------
876
877    You need Visual C++ 4.2 or 5.0, with the exception of the Cygwin
878 port, which uses Gcc.
879
880 \1f
881 File: xemacs-faq.info,  Node: Q6.1.3,  Next: Q6.1.4,  Prev: Q6.1.2,  Up: MS Windows
882
883 Q6.1.3: How do I compile for the native port?
884 ---------------------------------------------
885
886    Please read the file `nt/README' in the XEmacs distribution, which
887 contains the full description.
888
889 \1f
890 File: xemacs-faq.info,  Node: Q6.1.4,  Next: Q6.1.5,  Prev: Q6.1.3,  Up: MS Windows
891
892 Q6.1.4: How do I compile for the X port?
893 ----------------------------------------
894
895    Again, it is described in `nt/README' in some detail.  Basically, you
896 need to get X11 libraries from ftp.x.org, and compile them.  If the
897 precompiled versions are available somewhere, I don't know of it.
898
899 \1f
900 File: xemacs-faq.info,  Node: Q6.1.5,  Next: Q6.1.6,  Prev: Q6.1.4,  Up: MS Windows
901
902 Q6.1.5: How do I compile for Cygnus' Cygwin?
903 --------------------------------------------
904
905    Similar as on Unix; use the usual `configure' and `make' process.
906 Some problems to watch out for:
907
908    * make sure HOME is set. This controls where you `.emacs' file comes
909      from;
910
911    * CYGWIN32 needs to be set to tty for process support work. e.g.
912      CYGWIN32=tty;
913
914    * picking up some other grep or other unix like tools can kill
915      configure;
916
917    * static heap too small, adjust src/sheap-adjust.h to a more positive
918      number;
919
920    * The Cygwin version doesn't understand `//machine/path' type paths
921      so you will need to manually mount a directory of this form under
922      a unix style directory for a build to work on the directory.
923
924
925 \1f
926 File: xemacs-faq.info,  Node: Q6.1.6,  Next: Q6.2.1,  Prev: Q6.1.5,  Up: MS Windows
927
928 Q6.1.6: What do I need for Cygwin?
929 ----------------------------------
930
931    You can find the Cygwin tools and compiler at:
932
933    `http://sourceware.cygnus.com/cygwin/'
934
935    You will need version b19 or later.
936
937    You will also need the X libraries.  There are libraries at
938 `http://dao.gsfc.nasa.gov/software/grads/win32/X11R6.3/', but these are
939 not b19 compatible.  You can get b19 X11R6.3 binaries, as well as
940 pre-built ncurses and graphic libraries, from:
941
942    `ftp://ftp.parallax.co.uk/pub/andyp/'.
943
944 \1f
945 File: xemacs-faq.info,  Node: Q6.2.1,  Next: Q6.2.2,  Prev: Q6.1.6,  Up: MS Windows
946
947 6.2: Customization and User Interface
948 =====================================
949
950 Q6.2.1: How will the port cope with differences in the Windows user interface?
951 ------------------------------------------------------------------------------
952
953    XEmacs (and Emacs in general) UI is pretty different from what is
954 expected of a typical MS Windows program.  How will the MS Windows port
955 cope with it?
956
957    Fortunately, Emacs is also one of the most configurable editor beasts
958 in the world.  The MS Windows "look and feel" (mark via shift-arrow,
959 self-inserting deletes region, etc.) can be easily configured via
960 various packages distributed with XEmacs.  The `pending-delete' package
961 is an example of such a utility.
962
963    In future versions, some of these packages might be turned on by
964 default in the MS Windows environment.
965
966 \1f
967 File: xemacs-faq.info,  Node: Q6.2.2,  Next: Q6.2.3,  Prev: Q6.2.1,  Up: MS Windows
968
969 Q6.2.2: How do I change fonts in XEmacs on MS Windows?
970 ------------------------------------------------------
971
972    In 21.2.*, use the font menu.  In 21.1.*, you can change font
973 manually. For example:
974
975          (set-face-font 'default "Lucida Console:Regular:10")
976          (set-face-font 'modeline "MS Sans Serif:Regular:10")
977
978 \1f
979 File: xemacs-faq.info,  Node: Q6.2.3,  Next: Q6.3.1,  Prev: Q6.2.2,  Up: MS Windows
980
981 Q6.2.3: Where do I put my `.emacs' file?
982 ----------------------------------------
983
984    If the HOME environment variable is set, `.emacs' will be looked for
985 there.  Else the directory defaults to `c:\'.
986
987 \1f
988 File: xemacs-faq.info,  Node: Q6.3.1,  Next: Q6.3.2,  Prev: Q6.2.3,  Up: MS Windows
989
990 6.3: Miscellaneous
991 ==================
992
993 Q6.3.1: Will XEmacs rename all the win32-* symbols to w32-*?
994 ------------------------------------------------------------
995
996    In his flavor of Emacs 20, Richard Stallman has renamed all the
997 win32-* symbols to w32-*.  Will XEmacs do the same?
998
999    We consider such a move counter-productive, thus we will not use the
1000 `w32' prefix.  However, we do recognize that Win32 name is little more
1001 than a marketing buzzword (will it be Win64 in the next release?), so
1002 we decided not to use it.  Using `windows-' would be wrong because the
1003 term is too generic, which is why we settled on a compromise
1004 `mswindows' term.
1005
1006    Thus all the XEmacs variables and functions directly related to Win32
1007 are prefixed `mswindows-'.  The user-variables shared with NT Emacs
1008 will be provided as compatibility aliases.
1009
1010    Architectural note: We believe that there should be a very small
1011 number of window-systems-specific variables, and will try to provide
1012 generic interfaces whenever possible.
1013
1014 \1f
1015 File: xemacs-faq.info,  Node: Q6.3.2,  Next: Q6.3.3,  Prev: Q6.3.1,  Up: MS Windows
1016
1017 Q6.3.2: What are the differences between the various MS Windows emacsen?
1018 ------------------------------------------------------------------------
1019
1020    XEmacs, Win-Emacs, DOS Emacs, NT Emacs, this is all very confusing.
1021 Could you briefly explain the differences between them?
1022
1023    Here is a recount of various Emacs versions running on MS Windows:
1024
1025    * Win-Emacs
1026
1027         - Win-Emacs is a port of Lucid Emacs 19.6 to MS Windows using X
1028           compatibility libraries.  Win-Emacs has been written by Ben
1029           Wing.  The MS Windows code has not made it back to Lucid
1030           Emacs, which left Win-Emacs pretty much dead for our
1031           purposes.  Win-Emacs used to be available at Pearlsoft, but
1032           not anymore, since Pearlsoft went out of business.
1033
1034    * GNU Emacs for DOS
1035
1036         - GNU Emacs features support for MS-DOS and DJGPP (D.J.
1037           Delorie's DOS port of Gcc).  Such an Emacs is heavily
1038           underfeatured, because it does not supports long file names,
1039           lacks proper subprocesses support, and is far too big
1040           compared to typical DOS editors.
1041
1042    * GNU Emacs compiled with Win32
1043
1044         - Starting with version 19.30, it has been possible to compile
1045           GNU Emacs under MS Windows using the DJGPP compiler and X
1046           libraries.  The result is is very similar to GNU Emacs
1047           compiled under MS DOS, only it supports longer file names,
1048           etc.  This "port" is similar to the "X" flavor of XEmacs on
1049           MS Windows.
1050
1051    * NT Emacs
1052
1053         - NT Emacs is a version of GNU Emacs modified to compile and
1054           run under MS MS Windows 95 and NT using the native Win32 API.
1055           As such, it is close in spirit to the XEmacs "native" port.
1056
1057         - NT Emacs has been written by Geoff Voelker, and more
1058           information can be found at
1059           `http://www.cs.washington.edu/homes/voelker/ntemacs.html'.
1060
1061
1062    * XEmacs
1063
1064         - Beginning with XEmacs 19.12, XEmacs' architecture has been
1065           redesigned in such a way to allow clean support of multiple
1066           window systems.  At this time the TTY support was added,
1067           making X and TTY the first two "window systems" XEmacs
1068           supported.  The 19.12 design is the basis for the current
1069           native MS Windows code.
1070
1071         - Some time during 1997, David Hobley (soon joined by Marc
1072           Paquette) imported some of the NT-specific portions of GNU
1073           Emacs, making XEmacs with X support compile under Windows NT,
1074           and creating the "X" port.
1075
1076         - Several months later, Jonathan Harris sent out initial
1077           patches to use the Win32 API, thus creating the native port.
1078           Since then, various people have contributed, including Kirill
1079           M. Katsnelson (contributed support for menubars, subprocesses
1080           and network, as well as loads of other code), Andy Piper
1081           (ported XEmacs to Cygwin environment, contributed Windows
1082           unexec, Windows-specific glyphs and toolbars code, and more),
1083           Jeff Sparkes (contributed scrollbars support) and many others.
1084
1085
1086
1087 \1f
1088 File: xemacs-faq.info,  Node: Q6.3.3,  Prev: Q6.3.2,  Up: MS Windows
1089
1090 Q6.3.3: What is the porting team doing at the moment?
1091 -----------------------------------------------------
1092
1093    The porting team is continuing work on the MS Windows-specific code.
1094
1095 \1f
1096 File: xemacs-faq.info,  Node: Current Events,  Prev: MS Windows,  Up: Top
1097
1098 7 What the Future Holds
1099 ***********************
1100
1101    This is part 7 of the XEmacs Frequently Asked Questions list.  This
1102 section will change monthly, and contains any interesting items that
1103 have transpired over the previous month.  If you are reading this from
1104 the XEmacs distribution, please see the version on the Web or archived
1105 at the various FAQ FTP sites, as this file is surely out of date.
1106
1107 * Menu:
1108
1109 * Q7.0.1::      What is new in 20.2?
1110 * Q7.0.2::      What is new in 20.3?
1111 * Q7.0.3::      What is new in 20.4?
1112 * Q7.0.4::      Procedural changes in XEmacs development.
1113
1114 \1f
1115 File: xemacs-faq.info,  Node: Q7.0.1,  Next: Q7.0.2,  Prev: Current Events,  Up: Current Events
1116
1117 7.0: Changes
1118 ============
1119
1120 Q7.0.1: What is new in 20.2?
1121 ----------------------------
1122
1123    The biggest changes in 20.2 include integration of EFS (the next
1124 generation of ange-ftp) and AUC Tex (the Emacs subsystem that includes a
1125 major mode for editing Tex and LaTeX, and a lot of other stuff).  Many
1126 bugs from 20.0 have been fixed for this release.  20.2 also contains a
1127 new system for customizing XEmacs options, invoked via `M-x customize'.
1128
1129    XEmacs 20.2 is the development release (20.0 was beta), and is no
1130 longer considered unstable.
1131
1132 \1f
1133 File: xemacs-faq.info,  Node: Q7.0.2,  Next: Q7.0.3,  Prev: Q7.0.1,  Up: Current Events
1134
1135 Q7.0.2: What is new in 20.3?
1136 ----------------------------
1137
1138    XEmacs 20.3 was released in November 1997. It contains many bugfixes,
1139 and a number of new features, including Autoconf 2 based configuration,
1140 additional support for Mule (Multi-language extensions to Emacs), many
1141 more customizations, multiple frames on TTY-s, support for multiple info
1142 directories, an enhanced gnuclient, improvements to regexp matching,
1143 increased MIME support, and many, many synches with GNU Emacs 20.
1144
1145    The XEmacs/Mule support has been only seriously tested in a Japanese
1146 locale, and no doubt many problems still remain.  The support for
1147 ISO-Latin-1 and Japanese is fairly strong.  MULE support comes at a
1148 price--about a 30% slowdown from 19.16.  We're making progress on
1149 improving performance and XEmacs 20.3 compiled without Mule (which is
1150 the default) is definitely faster than XEmacs 19.16.
1151
1152    XEmacs 20.3 is the first non-beta v20 release, and will be the basis
1153 for all further development.
1154
1155 \1f
1156 File: xemacs-faq.info,  Node: Q7.0.3,  Next: Q7.0.4,  Prev: Q7.0.2,  Up: Current Events
1157
1158 Q7.0.3: What's new in XEmacs 20.4?
1159 ----------------------------------
1160
1161    XEmacs 20.4 is a bugfix release with no user-visible changes.
1162
1163 \1f
1164 File: xemacs-faq.info,  Node: Q7.0.4,  Prev: Q7.0.3,  Up: Current Events
1165
1166 Q7.0.4: Procedural changes in XEmacs development.
1167 -------------------------------------------------
1168
1169   1. Discussion about the development of XEmacs occurs on the
1170      xemacs-beta mailing list.  Subscriptions to this list will now be
1171      fully automated instead of being handled by hand.  Send a mail
1172      message to <xemacs-beta-request@xemacs.org> with `subscribe' as the
1173      BODY of the message to join the list.  Please note this is a
1174      developers mailing list for people who have an active interest in
1175      the development process.
1176
1177      The discussion of NT XEmacs development is taking place on a
1178      separate mailing list.  Send mail to
1179      <xemacs-nt-request@xemacs.org> to subscribe.
1180
1181   2. Due to the long development cycle in between releases, it has been
1182      decided that intermediate versions will be made available in
1183      source only form for the truly interested.
1184
1185      XEmacs 19.16 was the last 19 release, basically consisting of
1186      19.15 plus the collected bugfixes.
1187
1188   3. As of December 1996, Steve Baur <steve@xemacs.org> has become the
1189      lead maintainer of XEmacs.
1190
1191