1 This is ../info/xemacs-faq.info, produced by makeinfo version 4.0 from
4 INFO-DIR-SECTION XEmacs Editor
6 * FAQ: (xemacs-faq). XEmacs FAQ.
10 File: xemacs-faq.info, Node: Q5.1.3, Next: Q5.1.4, Prev: Q5.1.2, Up: Miscellaneous
12 Q5.1.3: Could you explain `read-kbd-macro' in more detail?
13 ----------------------------------------------------------
15 The `read-kbd-macro' function returns the internal Emacs
16 representation of a human-readable string (which is its argument).
19 (read-kbd-macro "C-c C-a")
20 => [(control ?c) (control ?a)]
22 (read-kbd-macro "C-c C-. <up>")
23 => [(control ?c) (control ?.) up]
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
29 The exact "human-readable" syntax is defined in the docstring of
30 `edmacro-mode'. I'll repeat it here, for completeness.
32 Format of keyboard macros during editing:
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>'.
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.
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.
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.
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:
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'.
65 * The `^' notation for control characters also works: `^M' ==
68 * Double angle brackets enclose command names: `<<next-line>>'
69 is shorthand for `M-x next-line <RET>'.
71 * Finally, `REM' or `;;' causes the rest of the line to be
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'.
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.
87 File: xemacs-faq.info, Node: Q5.1.4, Next: Q5.1.5, Prev: Q5.1.3, Up: Miscellaneous
89 Q5.1.4: What is the performance hit of `let'?
90 ---------------------------------------------
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
100 File: xemacs-faq.info, Node: Q5.1.5, Next: Q5.1.6, Prev: Q5.1.4, Up: Miscellaneous
102 Q5.1.5: What is the recommended use of `setq'?
103 ----------------------------------------------
107 You will typically `defvar' your global variable to a default
108 value, and use `setq' to set it later.
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':
116 (let ((case-fold-search nil))
117 ... ; code with searches that must be case-sensitive
120 You will notice the user-variables by their docstrings beginning
121 with an asterisk (a convention).
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.
133 ;; iterate through the elements of the list returned by
134 ;; `hairy-function-that-returns-list'
135 (let ((l (hairy-function-that-returns-list)))
137 ... do something with (car l) ...
140 Another typical usage includes building a value simply to work
143 ;; Build the mode keymap out of the key-translation-alist
144 (let ((inbox (file-truename (expand-file-name box)))
146 ... code dealing with inbox ...
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
154 (setq foo-processed-inbox
158 File: xemacs-faq.info, Node: Q5.1.6, Next: Q5.1.7, Prev: Q5.1.5, Up: Miscellaneous
160 Q5.1.6: What is the typical misuse of `setq' ?
161 ----------------------------------------------
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:
167 (defun my-function (whatever)
169 ... build a large list ...
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:
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 ...)
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.
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:
187 (defun flurgoze nil) ; ok, global internal variable
190 (setq flurghoze t) ; ops! a typo, but semantically correct.
191 ; however, the byte-compiler warns.
193 While compiling toplevel forms:
194 ** assignment to free variable flurghoze
197 File: xemacs-faq.info, Node: Q5.1.7, Next: Q5.1.8, Prev: Q5.1.6, Up: Miscellaneous
199 Q5.1.7: I like the the `do' form of cl, does it slow things down?
200 -----------------------------------------------------------------
202 It shouldn't. Here is what Dave Gillespie has to say about cl.el
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,
214 are expanded at compile-time to the Lisp forms
217 (setcar p (cons x (car p)))
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
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.
233 You can find out how a macro expands by using the `cl-prettyexpand'
237 File: xemacs-faq.info, Node: Q5.1.8, Next: Q5.1.9, Prev: Q5.1.7, Up: Miscellaneous
239 Q5.1.8: I like recursion, does it slow things down?
240 ---------------------------------------------------
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.
247 Please try not to make your code much uglier to gain a very small
248 speed gain. It's not usually worth it.
251 File: xemacs-faq.info, Node: Q5.1.9, Next: Q5.1.10, Prev: Q5.1.8, Up: Miscellaneous
253 Q5.1.9: How do I put a glyph as annotation in a buffer?
254 -------------------------------------------------------
256 Here is a solution that will insert the glyph annotation at the
259 (make-annotation (make-glyph '([FORMAT :file FILE]
260 [string :data "fallback-text"]))
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').
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)'.
274 File: xemacs-faq.info, Node: Q5.1.10, Next: Q5.1.11, Prev: Q5.1.9, Up: Miscellaneous
276 Q5.1.10: `map-extents' won't traverse all of my extents!
277 --------------------------------------------------------
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?
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.
289 (map-extents (lambda (ext ignore)
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:
296 (map-extents (lambda (ext ignore)
302 File: xemacs-faq.info, Node: Q5.1.11, Next: Q5.2.1, Prev: Q5.1.10, Up: Miscellaneous
304 Q5.1.11: My elisp program is horribly slow. Is there
305 -----------------------------------------------------
307 an easy way to find out where it spends time?
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.
316 File: xemacs-faq.info, Node: Q5.2.1, Next: Q5.2.2, Prev: Q5.1.11, Up: Miscellaneous
318 Q5.2.1: How do I turn off the sound?
319 ------------------------------------
321 Add the following line to your `.emacs':
324 (setq sound-alist nil)
326 That will make your XEmacs totally silent--even the default ding
327 sound (TTY beep on TTY-s) will be gone.
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
335 File: xemacs-faq.info, Node: Q5.2.2, Next: Q5.2.3, Prev: Q5.2.1, Up: Miscellaneous
337 Q5.2.2: How do I get funky sounds instead of a boring beep?
338 -----------------------------------------------------------
340 Make sure your XEmacs was compiled with sound support, and then put
341 this in your `.emacs':
343 (load-default-sounds)
345 The sound support in XEmacs 19.14 was greatly improved over previous
349 File: xemacs-faq.info, Node: Q5.2.3, Next: Q5.2.4, Prev: Q5.2.2, Up: Miscellaneous
351 Q5.2.3: What's NAS, how do I get it?
352 ------------------------------------
354 *Note Q2.0.3::, for an explanation of the "Network Audio System".
357 File: xemacs-faq.info, Node: Q5.2.4, Next: Q5.3.1, Prev: Q5.2.3, Up: Miscellaneous
359 Q5.2.4: Sunsite sounds don't play.
360 ----------------------------------
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.
366 Markus Gutschke <gutschk@uni-muenster.de> writes:
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
378 File: xemacs-faq.info, Node: Q5.3.1, Next: Q5.3.2, Prev: Q5.2.4, Up: Miscellaneous
383 Q5.3.1: How do you make XEmacs indent CL if-clauses correctly?
384 --------------------------------------------------------------
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
390 One way is to add, to `.emacs':
392 (put 'if 'lisp-indent-function nil)
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
400 (setq lisp-indent-function (function common-lisp-indent-function))
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:
405 (put 'if 'common-lisp-indent-function '(nil nil &body))
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.
413 File: xemacs-faq.info, Node: Q5.3.2, Next: Q5.3.3, Prev: Q5.3.1, Up: Miscellaneous
415 Q5.3.2: Fontifying hang when editing a postscript file.
416 -------------------------------------------------------
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
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:
427 (add-hook 'postscript-mode-hook 'turn-on-font-lock)
429 Take it out, restart XEmacs, and it won't try to fontify your
430 postscript files anymore.
433 File: xemacs-faq.info, Node: Q5.3.3, Next: Q5.3.4, Prev: Q5.3.2, Up: Miscellaneous
435 Q5.3.3: How can I print WYSIWYG a font-locked buffer?
436 -----------------------------------------------------
438 Font-lock looks nice. How can I print (WYSIWYG) the highlighted
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'.
446 File: xemacs-faq.info, Node: Q5.3.4, Next: Q5.3.5, Prev: Q5.3.3, Up: Miscellaneous
448 Q5.3.4: Getting `M-x lpr' to work with postscript printer.
449 ----------------------------------------------------------
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'
455 Put something like this in your `.emacs':
457 (setq lpr-command "a2ps")
458 (setq lpr-switches '("-p" "-1"))
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.
465 File: xemacs-faq.info, Node: Q5.3.5, Next: Q5.3.6, Prev: Q5.3.4, Up: Miscellaneous
467 Q5.3.5: How do I specify the paths that XEmacs uses for finding files?
468 ----------------------------------------------------------------------
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
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.
483 File: xemacs-faq.info, Node: Q5.3.6, Next: Q5.3.7, Prev: Q5.3.5, Up: Miscellaneous
485 Q5.3.6: [This question intentionally left blank]
486 ------------------------------------------------
488 Obsolete question, left blank to avoid renumbering.
491 File: xemacs-faq.info, Node: Q5.3.7, Next: Q5.3.8, Prev: Q5.3.6, Up: Miscellaneous
493 Q5.3.7: Can I have the end of the buffer delimited in some way?
494 ---------------------------------------------------------------
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]"])))
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
510 (make-glyph '([xpm :file "~/something.xpm"]
511 [string :data "[END]"]))
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:
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 "\
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__________\",
544 [string :data "[END]"]))))
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.
550 File: xemacs-faq.info, Node: Q5.3.8, Next: Q5.3.9, Prev: Q5.3.7, Up: Miscellaneous
552 Q5.3.8: How do I insert today's date into a buffer?
553 ---------------------------------------------------
557 (insert (current-time-string))
560 File: xemacs-faq.info, Node: Q5.3.9, Next: Q5.3.10, Prev: Q5.3.8, Up: Miscellaneous
562 Q5.3.9: Are only certain syntactic character classes available for abbrevs?
563 ---------------------------------------------------------------------------
565 Markus Gutschke <gutschk@uni-muenster.de> writes:
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.
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.
578 Starting with XEmacs 20.3 this restriction has been lifted.
581 File: xemacs-faq.info, Node: Q5.3.10, Next: Q5.3.11, Prev: Q5.3.9, Up: Miscellaneous
583 Q5.3.10: How can I get those oh-so-neat X-Face lines?
584 -----------------------------------------------------
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/'.
592 1. Create 48x48x1 bitmap with your favorite tool
594 2. Convert to "icon" format using one of xbm2ikon, pbmtoicon, etc.,
595 and then compile the face.
597 3. cat file.xbm | xbm2ikon |compface > file.face
599 4. Then be sure to quote things that are necessary for emacs strings:
601 cat ./file.face | sed 's/\\/\\\\/g'
602 | sed 's/\"/\\\"/g' > ./file.face.quoted
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:
607 (setq mail-default-headers
608 "X-Face: <Ugly looking text string here>")
610 Or, alternatively, as:
612 (defun mail-insert-x-face ()
614 (goto-char (point-min))
615 (search-forward mail-header-separator)
618 (insert-file-contents "~/.face")))
620 (add-hook 'mail-setup-hook 'mail-insert-x-face)
622 However, 2 things might be wrong:
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:
628 cat file.xbm | xbm2ikon | tail +3 |compface > file.face
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 .
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
637 Contributors for this item:
639 Paul Emsley, Ricardo Marek, Amir J. Katz, Glen McCort, Heinz Uphoff,
640 Peter Arius, Paul Harrison, and Vegard Vesterheim
643 File: xemacs-faq.info, Node: Q5.3.11, Next: Q5.3.12, Prev: Q5.3.10, Up: Miscellaneous
645 Q5.3.11: How do I add new Info directories?
646 -------------------------------------------
648 You use something like:
650 (setq Info-directory-list (cons
651 (expand-file-name "~/info")
652 Info-default-directory-list))
654 David Masterson <davidm@prism.kla.com> writes:
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
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.
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.
668 3. Emacs Info looks for a standard `dir' file in each of the
669 directories scanned from #1 and magically concatenates them
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
679 Another alternative is to convert the documentation to HTML with
680 texi2html and read it from a web browser like Lynx or W3.
683 File: xemacs-faq.info, Node: Q5.3.12, Prev: Q5.3.11, Up: Miscellaneous
685 Q5.3.12: What do I need to change to make printing work?
686 --------------------------------------------------------
688 For regular printing there are two variables that can be customized.
691 This should be set to a command that takes standard input and sends
692 it to a printer. Something like:
694 (setq lpr-command "lp")
697 This should be set to a list that contains whatever the print
698 command requires to do its job. Something like:
700 (setq lpr-switches '("-depson"))
702 For postscript printing there are three analogous variables to
706 This should be set to a command that takes postscript on standard
707 input and directs it to a postscript printer.
710 This should be set to a list of switches required for
711 `ps-lpr-command' to do its job.
714 This boolean variable should be set `t' if printing will be done in
715 color, otherwise it should be set to `nil'.
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.
722 File: xemacs-faq.info, Node: MS Windows, Next: Current Events, Prev: Miscellaneous, Up: Top
724 6 XEmacs on MS Windows
725 **********************
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.
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?
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?
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?
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?
759 * Q6.4.1:: XEmacs won't start on Windows. (NEW)
762 File: xemacs-faq.info, Node: Q6.0.1, Next: Q6.0.2, Prev: MS Windows, Up: MS Windows
767 Q6.0.1: What is the status of the XEmacs port to Windows?
768 ---------------------------------------------------------
770 Is XEmacs really getting ported to MS Windows? What is the status
773 Yes, a group of volunteers actively works on making XEmacs code base
774 cleanly compile and run on MS Windows operating systems. The mailing
775 list at <xemacs-nt@xemacs.org> is dedicated to that effort (please use
776 the -request address to subscribe).
778 At this time, XEmacs on MS Windows is usable, but lacks some of the
779 features of XEmacs on UNIX and UNIX-like systems. Notably,
780 internationalization does not work.
783 File: xemacs-faq.info, Node: Q6.0.2, Next: Q6.0.3, Prev: Q6.0.1, Up: MS Windows
785 Q6.0.2: What flavors of MS Windows are supported? The list name implies NT only.
786 ---------------------------------------------------------------------------------
788 The list name is misleading, as XEmacs will support both Windows 95,
789 Windows 98 and Windows NT. The MS Windows-specific code is based on
790 Microsoft Win32 API, and will not work on MS Windows 3.x or on MS-DOS.
793 File: xemacs-faq.info, Node: Q6.0.3, Next: Q6.0.4, Prev: Q6.0.2, Up: MS Windows
795 Q6.0.3: Are binary kits available?
796 ----------------------------------
798 Binary kits are available at
799 `ftp://ftp.xemacs.org/pub/xemacs/binary-kits/win32/' for the "plain" MS
803 File: xemacs-faq.info, Node: Q6.0.4, Next: Q6.1.1, Prev: Q6.0.3, Up: MS Windows
805 Q6.0.4: Does XEmacs on MS Windows require an X server to run?
806 -------------------------------------------------------------
810 Long answer: XEmacs can be built in several ways in the MS Windows
811 environment, some of them requiring an X server and some not.
813 One is what we call the "X" port--it requires X libraries to build
814 and an X server to run. Internally it uses the Xt event loop and makes
815 use of X toolkits. Its look is quite un-Windowsy, but it works
816 reliably and supports all of the graphical features of Unix XEmacs.
818 The other is what we call the "native" port. It uses the Win32 API
819 and does not require X libraries to build, nor does it require an X to
820 run. In fact, it has no connection with X whatsoever. At this time,
821 the native port obsoletes the X port, providing almost all of its
822 features, including support for menus, scrollbars, toolbars, embedded
823 images and background pixmaps, frame pointers, etc. Most of the future
824 work will be based on the native port.
826 There is also a third special case, the Cygwin port. It takes
827 advantage of Cygnus emulation library under Win32, which enables it to
828 reuse much of the Unix XEmacs code base, such as processes and network
829 support, or internal select() mechanisms.
831 Cygwin port supports all display types--TTY, X & MS gui, and can be
832 built with support for all three. If you build with ms gui support
833 then the Cygwin version uses the majority of the msw code, which is
834 mostly related to display. If you want to build with X support you
835 need X libraries. If you want to build with tty support you need
836 ncurses. MS gui requires no additional libraries.
838 Some of the advantages of the Cygwin version are that it:
840 * integrates well with Cygwin environment for existing Cygwin users;
842 * uses configure so building with different features is very easy;
844 * has process support in X & tty.
847 The disadvantage is that it requires several Unix utilities and the
848 whole Cygwin environment, whereas the native port requires only a
849 suitable MS Windows compiler. Also, it follows the Unix filesystem and
850 process model very closely (some will undoubtedly view this as an
854 File: xemacs-faq.info, Node: Q6.1.1, Next: Q6.1.2, Prev: Q6.0.4, Up: MS Windows
856 6.1: Building XEmacs on MS Windows
857 ==================================
859 Q6.1.1: I decided to run with X. Where do I get an X server?
860 -------------------------------------------------------------
862 Pointers to X servers can be found at
863 `http://dao.gsfc.nasa.gov/software/grads/win32/X11R6.3/';
865 look for "Where to get an X server". Also note that, although the
866 above page talks about Cygnus gnu-win32 (Cygwin), the information on X
867 servers is Cygwin-independent. You don't have to be running/using
868 Cygwin to use these X servers, and you don't have to compile XEmacs
869 under Cygwin to use XEmacs with these X servers. An "X port" XEmacs
870 compiled under Visual C++ will work with these X servers (as will
871 XEmacs running on a Unix box, redirected to the server running on your
875 File: xemacs-faq.info, Node: Q6.1.2, Next: Q6.1.3, Prev: Q6.1.1, Up: MS Windows
877 Q6.1.2: What compiler do I need to compile XEmacs?
878 --------------------------------------------------
880 You need Visual C++ 4.2, 5.0, or 6.0, with the exception of the
881 Cygwin port, which uses Gcc. There is also a MINGW32 port of XEmacs
882 (using Gcc, but using native libraries rather than the Cygwin
883 libraries). #### More information about this should be provided.
886 File: xemacs-faq.info, Node: Q6.1.3, Next: Q6.1.4, Prev: Q6.1.2, Up: MS Windows
888 Q6.1.3: How do I compile for the native port?
889 ---------------------------------------------
891 Please read the file `nt/README' in the XEmacs distribution, which
892 contains the full description.
895 File: xemacs-faq.info, Node: Q6.1.4, Next: Q6.1.5, Prev: Q6.1.3, Up: MS Windows
897 Q6.1.4: How do I compile for the X port?
898 ----------------------------------------
900 Again, it is described in `nt/README' in some detail. Basically, you
901 need to get X11 libraries from ftp.x.org, and compile them. If the
902 precompiled versions are available somewhere, I don't know of it.
905 File: xemacs-faq.info, Node: Q6.1.5, Next: Q6.1.6, Prev: Q6.1.4, Up: MS Windows
907 Q6.1.5: How do I compile for Cygnus' Cygwin?
908 --------------------------------------------
910 Similar as on Unix; use the usual `configure' and `make' process.
911 Some problems to watch out for:
913 * make sure HOME is set. This controls where you `.emacs' file comes
916 * CYGWIN needs to be set to tty for process support work. e.g.
917 CYGWIN=tty; (use CYGWIN32=tty under b19 and older.)
919 * picking up some other grep or other unix like tools can kill
922 * static heap too small, adjust src/sheap-adjust.h to a more positive
925 * The Cygwin version doesn't understand `//machine/path' type paths
926 so you will need to manually mount a directory of this form under
927 a unix style directory for a build to work on the directory.
931 File: xemacs-faq.info, Node: Q6.1.6, Next: Q6.2.1, Prev: Q6.1.5, Up: MS Windows
933 Q6.1.6: What do I need for Cygwin?
934 ----------------------------------
936 You can find the Cygwin tools and compiler at:
938 `http://sourceware.cygnus.com/cygwin/'
940 You will need version b19 or later. The latest current version is
941 1.1.1. Other common versions you will see are b20.1.
943 Another location, one of the mirror sites of the site just mentioned,
944 is usually a last faster:
946 `ftp://ftp.freesoftware.com/pub/sourceware/cygwin/'
948 You can obtain the latest version (currently 1.1.1) from the
949 `latest/' subdirectory of either of the above two just-mentioned URL's.
951 *WARNING: The version of GCC supplied under `latest/', as of June
952 6th, 2000, does not appear to work. It generates loads of spurious
953 preprocessor warnings and errors, which makes it impossible to compile
956 You will also need the X libraries. You can get them on the XEmacs
959 `ftp://ftp.xemacs.org/pub/xemacs/aux/cygwin/'
961 You will find b19 and b20 versions of the X libraries, plus b19 and
962 b20 versions of stuff that should go into `/usr/local/', donated by
963 Andy Piper. This includes pre-built versions of various graphics
964 libraries, such as PNG, JPEG, TIFF, and XPM. (Remember, GIF support is
967 (X libraries for v1 and beyond of Cygwin can be found on the Cygwin
968 site itself - look in the `xfree/' subdirectory.)
970 _NOTE:_ There are two versions of the XPM library provided in Andy's
971 packets. Once is for building with X support, and the other for
972 building without. The X version should work if you're building with
973 both X and Windows support. The two files are called `libXpm-X.a' and
974 `libXpm-noX.a' respectively, and you must symlink the appropriate one
975 to `libXpm.a'. *CAREFUL:* By default, the non-X version is symlinked
976 in. If you then configure XEmacs with X, you won't run into problems
977 until you start compiling `events.c', at which point you'll get strange
978 and decidedly non-obvious errors.
980 Please see `http://www.xemacs.freeserve.co.uk/' (Andy Piper's home
981 page) for more information.
983 BTW There are also libraries at
984 `http://dao.gsfc.nasa.gov/software/grads/win32/X11R6.3/', but these are
985 not b19 compatible, and may in fact be native-compiled.
988 File: xemacs-faq.info, Node: Q6.2.1, Next: Q6.2.2, Prev: Q6.1.6, Up: MS Windows
990 6.2: Customization and User Interface
991 =====================================
993 Q6.2.1: How will the port cope with differences in the Windows user interface?
994 ------------------------------------------------------------------------------
996 XEmacs (and Emacs in general) UI is pretty different from what is
997 expected of a typical MS Windows program. How will the MS Windows port
1000 Fortunately, Emacs is also one of the most configurable editor beasts
1001 in the world. The MS Windows "look and feel" (mark via shift-arrow,
1002 self-inserting deletes region, etc.) can be easily configured via
1003 various packages distributed with XEmacs. The `pending-delete' package
1004 is an example of such a utility.
1006 In future versions, some of these packages might be turned on by
1007 default in the MS Windows environment.
1010 File: xemacs-faq.info, Node: Q6.2.2, Next: Q6.2.3, Prev: Q6.2.1, Up: MS Windows
1012 Q6.2.2: How do I change fonts in XEmacs on MS Windows?
1013 ------------------------------------------------------
1015 In 21.2.*, use the font menu. In 21.1.*, you can change font
1016 manually. For example:
1018 (set-face-font 'default "Lucida Console:Regular:10")
1019 (set-face-font 'modeline "MS Sans Serif:Regular:10")
1022 File: xemacs-faq.info, Node: Q6.2.3, Next: Q6.3.1, Prev: Q6.2.2, Up: MS Windows
1024 Q6.2.3: Where do I put my `.emacs' file?
1025 ----------------------------------------
1027 If the HOME environment variable is set, `.emacs' will be looked for
1028 there. Else the directory defaults to `c:\'.
1031 File: xemacs-faq.info, Node: Q6.3.1, Next: Q6.3.2, Prev: Q6.2.3, Up: MS Windows
1036 Q6.3.1: Will XEmacs rename all the win32-* symbols to w32-*?
1037 ------------------------------------------------------------
1039 In his flavor of Emacs 20, Richard Stallman has renamed all the
1040 win32-* symbols to w32-*. Will XEmacs do the same?
1042 We consider such a move counter-productive, thus we will not use the
1043 `w32' prefix. However, we do recognize that Win32 name is little more
1044 than a marketing buzzword (will it be Win64 in the next release?), so
1045 we decided not to use it. Using `windows-' would be wrong because the
1046 term is too generic, which is why we settled on a compromise
1049 Thus all the XEmacs variables and functions directly related to Win32
1050 are prefixed `mswindows-'. The user-variables shared with NT Emacs
1051 will be provided as compatibility aliases.
1053 Architectural note: We believe that there should be a very small
1054 number of window-systems-specific variables, and will try to provide
1055 generic interfaces whenever possible.
1058 File: xemacs-faq.info, Node: Q6.3.2, Next: Q6.3.3, Prev: Q6.3.1, Up: MS Windows
1060 Q6.3.2: What are the differences between the various MS Windows emacsen?
1061 ------------------------------------------------------------------------
1063 XEmacs, Win-Emacs, DOS Emacs, NT Emacs, this is all very confusing.
1064 Could you briefly explain the differences between them?
1066 Here is a recount of various Emacs versions running on MS Windows:
1070 - Win-Emacs is a port of Lucid Emacs 19.6 to MS Windows using X
1071 compatibility libraries. Win-Emacs has been written by Ben
1072 Wing. The MS Windows code has not made it back to Lucid
1073 Emacs, which left Win-Emacs pretty much dead for our
1074 purposes. Win-Emacs used to be available at Pearlsoft, but
1075 not anymore, since Pearlsoft went out of business.
1079 - GNU Emacs features support for MS-DOS and DJGPP (D.J.
1080 Delorie's DOS port of Gcc). Such an Emacs is heavily
1081 underfeatured, because it does not supports long file names,
1082 lacks proper subprocesses support, and is far too big
1083 compared to typical DOS editors.
1085 * GNU Emacs compiled with Win32
1087 - Starting with version 19.30, it has been possible to compile
1088 GNU Emacs under MS Windows using the DJGPP compiler and X
1089 libraries. The result is is very similar to GNU Emacs
1090 compiled under MS DOS, only it supports longer file names,
1091 etc. This "port" is similar to the "X" flavor of XEmacs on
1096 - NT Emacs is a version of GNU Emacs modified to compile and
1097 run under MS MS Windows 95 and NT using the native Win32 API.
1098 As such, it is close in spirit to the XEmacs "native" port.
1100 - NT Emacs has been written by Geoff Voelker, and more
1101 information can be found at
1102 `http://www.cs.washington.edu/homes/voelker/ntemacs.html'.
1107 - Beginning with XEmacs 19.12, XEmacs' architecture has been
1108 redesigned in such a way to allow clean support of multiple
1109 window systems. At this time the TTY support was added,
1110 making X and TTY the first two "window systems" XEmacs
1111 supported. The 19.12 design is the basis for the current
1112 native MS Windows code.
1114 - Some time during 1997, David Hobley (soon joined by Marc
1115 Paquette) imported some of the NT-specific portions of GNU
1116 Emacs, making XEmacs with X support compile under Windows NT,
1117 and creating the "X" port.
1119 - Several months later, Jonathan Harris sent out initial
1120 patches to use the Win32 API, thus creating the native port.
1121 Since then, various people have contributed, including Kirill
1122 M. Katsnelson (contributed support for menubars, subprocesses
1123 and network, as well as loads of other code), Andy Piper
1124 (ported XEmacs to Cygwin environment, contributed Windows
1125 unexec, Windows-specific glyphs and toolbars code, and more),
1126 Jeff Sparkes (contributed scrollbars support) and many others.
1131 File: xemacs-faq.info, Node: Q6.3.3, Next: Q6.4.1, Prev: Q6.3.2, Up: MS Windows
1133 Q6.3.3: What is the porting team doing at the moment?
1134 -----------------------------------------------------
1136 The porting team is continuing work on the MS Windows-specific code.
1139 File: xemacs-faq.info, Node: Q6.4.1, Prev: Q6.3.3, Up: MS Windows
1141 6.3: Troubleshooting
1142 ====================
1144 Q6.4.1 XEmacs won't start on Windows. (NEW)
1145 -------------------------------------------
1147 XEmacs relies on a process called "dumping" to generate a working
1148 executable. Under MS-Windows this process effectively fixes the memory
1149 addresses of information in the executable. When XEmacs starts up it
1150 tries to reserve these memory addresses so that the dumping process can
1151 be reversed - putting the information back at the correct addresses.
1152 Unfortunately some .dlls (For instance the soundblaster driver) occupy
1153 memory addresses that can conflict with those needed by the dumped
1154 XEmacs executable. In this instance XEmacs will fail to start without
1155 any explanation. Note that this is extremely machine specific.
1157 21.1.10 includes a fix for this that makes more intelligent guesses
1158 about which memory addresses will be free, and this should cure the
1159 problem for most people. Unfortunately, no binary is yet available for
1160 this version. Check back periodically at
1162 `ftp://ftp.xemacs.org/pub/xemacs/binaries/'.
1164 21.2 implements "portable dumping" which will eliminate the problem
1165 altogether. You might have better luck with the 21.2 beta binary,
1168 `ftp://ftp.xemacs.org/pub/xemacs/beta/binaries/'.
1171 File: xemacs-faq.info, Node: Current Events, Prev: MS Windows, Up: Top
1173 7 What the Future Holds
1174 ***********************
1176 This is part 7 of the XEmacs Frequently Asked Questions list. This
1177 section will change monthly, and contains any interesting items that
1178 have transpired over the previous month. If you are reading this from
1179 the XEmacs distribution, please see the version on the Web or archived
1180 at the various FAQ FTP sites, as this file is surely out of date.
1184 * Q7.0.1:: What is new in 20.2?
1185 * Q7.0.2:: What is new in 20.3?
1186 * Q7.0.3:: What is new in 20.4?
1187 * Q7.0.4:: Procedural changes in XEmacs development.
1190 File: xemacs-faq.info, Node: Q7.0.1, Next: Q7.0.2, Prev: Current Events, Up: Current Events
1195 Q7.0.1: What is new in 20.2?
1196 ----------------------------
1198 The biggest changes in 20.2 include integration of EFS (the next
1199 generation of ange-ftp) and AUC Tex (the Emacs subsystem that includes a
1200 major mode for editing Tex and LaTeX, and a lot of other stuff). Many
1201 bugs from 20.0 have been fixed for this release. 20.2 also contains a
1202 new system for customizing XEmacs options, invoked via `M-x customize'.
1204 XEmacs 20.2 is the development release (20.0 was beta), and is no
1205 longer considered unstable.
1208 File: xemacs-faq.info, Node: Q7.0.2, Next: Q7.0.3, Prev: Q7.0.1, Up: Current Events
1210 Q7.0.2: What is new in 20.3?
1211 ----------------------------
1213 XEmacs 20.3 was released in November 1997. It contains many bugfixes,
1214 and a number of new features, including Autoconf 2 based configuration,
1215 additional support for Mule (Multi-language extensions to Emacs), many
1216 more customizations, multiple frames on TTY-s, support for multiple info
1217 directories, an enhanced gnuclient, improvements to regexp matching,
1218 increased MIME support, and many, many synches with GNU Emacs 20.
1220 The XEmacs/Mule support has been only seriously tested in a Japanese
1221 locale, and no doubt many problems still remain. The support for
1222 ISO-Latin-1 and Japanese is fairly strong. MULE support comes at a
1223 price--about a 30% slowdown from 19.16. We're making progress on
1224 improving performance and XEmacs 20.3 compiled without Mule (which is
1225 the default) is definitely faster than XEmacs 19.16.
1227 XEmacs 20.3 is the first non-beta v20 release, and will be the basis
1228 for all further development.
1231 File: xemacs-faq.info, Node: Q7.0.3, Next: Q7.0.4, Prev: Q7.0.2, Up: Current Events
1233 Q7.0.3: What's new in XEmacs 20.4?
1234 ----------------------------------
1236 XEmacs 20.4 is a bugfix release with no user-visible changes.
1239 File: xemacs-faq.info, Node: Q7.0.4, Prev: Q7.0.3, Up: Current Events
1241 Q7.0.4: Procedural changes in XEmacs development.
1242 -------------------------------------------------
1244 1. Discussion about the development of XEmacs occurs on the
1245 xemacs-beta mailing list. Subscriptions to this list will now be
1246 fully automated instead of being handled by hand. Send a mail
1247 message to <xemacs-beta-request@xemacs.org> with `subscribe' as the
1248 BODY of the message to join the list. Please note this is a
1249 developers mailing list for people who have an active interest in
1250 the development process.
1252 The discussion of NT XEmacs development is taking place on a
1253 separate mailing list. Send mail to
1254 <xemacs-nt-request@xemacs.org> to subscribe.
1256 2. Due to the long development cycle in between releases, it has been
1257 decided that intermediate versions will be made available in
1258 source only form for the truly interested.
1260 XEmacs 19.16 was the last 19 release, basically consisting of
1261 19.15 plus the collected bugfixes.
1263 3. As of December 1996, Steve Baur <steve@xemacs.org> has become the
1264 lead maintainer of XEmacs.