diff options
Diffstat (limited to 'etc/FAQ')
-rw-r--r-- | etc/FAQ | 2400 |
1 files changed, 2400 insertions, 0 deletions
diff --git a/etc/FAQ b/etc/FAQ new file mode 100644 index 00000000000..643fd6051ee --- /dev/null +++ b/etc/FAQ @@ -0,0 +1,2400 @@ +This is a list of frequently asked questions (FAQ) about GNU Emacs with +answers. This list is designed to cut down on the noise in the +gnu.emacs.help newsgroup (which is also the help-gnu-emacs mailing list) +that results from people repeatedly asking many of the same questions. + +This list is maintained by me, Joe Wells. My e-mail address is +jbw@bu.edu. If jbw@bu.edu doesn't work try jbw@bucsf.bu.edu. + +Feel free to contribute text for the answers that I haven't written yet, +to suggest new questions, to suggest changes in the wording, to suggest +deletions, etc. Please include either "FAQ" or "frequently asked +questions" in the subject of messages you send to me to help keep me from +accidentally filing your message in the wrong mail folder. + +Here is a short list of new questions and questions that are now answered: + +New questions: + + Why doesn't "C-c C-c" interrupt subprocesses under HP/UX? + How do I make Emacs send 8-bit characters to my terminal? + Why does ispell sometimes ignore the local dictionary? + Where can I get Emacs with NeWS support? + +Questions with improved answers: + + Has someone written an GNU Emacs Lisp package that does XXX? + How do I get Emacs running on VMS under DECwindows? + Why does Emacs crash from a bus error in XLookupString under OpenLook? + Why does Emacs hang with message "Unknown XMenu" with X11R4? + How do I use regexps (regular expressions) in Emacs? + How do I make Emacs "typeover" or "overwrite" when I type instead of + always inserting? + How do I get Emacs for my PC? + How can I highlight a region? + Where can I get GNU Emacs Lisp packages that don't come with Emacs? + Where can I get the latest VM, Supercite, GNUS, Calc, Calendar, or Patch? + +Minor changes: + + Where does the name "Emacs" come from? + In C mode, can I show just the lines that will be left after #ifdef + commands are handled by the compiler? + What does "M-x command" mean? + How do I get a printed copy of the GNU Emacs manual? + What do things like this mean: C-h, M-C-a, RET, etc.? + Why doesn't GNUS work anymore via NNTP? + What does Emacs do every time it starts up? + +Enjoy, + +-- +Joe Wells <jbw@bu.edu> +------------------------------------------------- +GNU Emacs Frequently Asked Questions with Answers (part 1 of 2) + +Sat Dec 8 01:30:53 1990 + + +If you are viewing this file in a GNU Emacs Buffer, you can type "M-2 C-x +$" to get an overview of just the questions. Then, when you want to look +at the text of the answers, just type "C-x $". + +To search for a question numbered XXX, type "M-C-s ^XXX:", followed by a +C-r if that doesn't work, then type ESC to end the search. + + +Notation Used in the Answers (READ THIS SECTION FIRST!) + + You may skip this section if you are reasonably familiar with GNU Emacs. + Some of these are not actually frequently asked questions, but knowing + them is important for understanding the answers to the rest of the + questions. + +1: What do things like this mean: C-h, M-C-a, RET, etc.? + + C-a means while holding down the "Control" key press the "a" key. The + ASCII code this sends will generally be the value that would be sent by + pressing just "a" minus 96 or 64. Either way it will be a number from 0 + to 31. + + M-a means while holding down the "Meta" key press the "a" key. The + ASCII code this sends is the sum of the ASCII code that would be sent by + pressing just "a" and 128. + + M-C-a means while holding down both the "Control" key and the "Meta" key + press the "a" key. + + C-M-a is a synonym for M-C-a. + + RET means press the "Return" key. RET is the same as C-m. This sends + ASCII code 13. + + LFD means press the "Linefeed" key. LFD is also the same as C-j. This + sends ASCII code 10. Under Unix, ASCII code 10 is more often called + "Newline". + + DEL means press the "Delete" key. DEL is the same as C-?. This sends + ASCII code 127. + + ESC means press the "Escape" key. ESC is the same as C-[. This sends + ASCII code 27. + + SPC means press the "Space" key. This send ASCII code 32. + + TAB means press the "Tab" key. TAB is the same as C-i. This send ASCII + code 9. + + To read more about this online, type "C-h i m emacs RET m characters + RET", and also "C-h i m emacs RET m keys RET". + +2: What do you mean when you write things like this: type "ESC a"? + + I will enclose key sequences that are longer than one key inside double + quotes. These notations refer to single keys (some with modifiers): + + C-x, M-x, M-C-x + RET, LFD, DEL, ESC, SPC, TAB + + I separate these from other keys within double quotes by spaces. Any + real spaces that I write inside double quotes can be ignored, only SPC + means press the space key. All other characters within double quotes + represent single keys (some shifted). + +3: What if I don't have a Meta key? + + Instead of typing M-a, you can type "ESC a" instead. In fact, Emacs + converts M-a internally into "ESC a" anyway. + +4: What if I don't have an Escape key? + + Type C-[ instead. This should send ASCII code 27 just like an Escape + key would. + +5: What does "M-x command" mean? + + "M-x command" means type M-x, then type the name of the command, then + type RET. + + M-x is simply the default key sequence that invokes the command + "execute-extended-command". This command allows you to run any Emacs + command if you can remember the command's name. If you can't remember + the command's name, you can type TAB and SPC for completion, and ? for a + list of possibilities. An Emacs "command" is any "interactive" Emacs + function. + + NOTE: Your system administrator may have bound other key sequences to + invoke execute-extended-command. A function key labeled "Do" is a good + candidate for this. + + To run non-interactive Emacs functions, use M-ESC instead and type a + Lisp form. + +6: What do things like this mean: etc/SERVICE, src/config.h, + lisp/default.el? + + These are the names of files that are part of the GNU Emacs + distribution. The GNU Emacs distribution is so big that it is divided + into several subdirectories; the important subdirectories are named + "etc", "lisp", and "src". + + If you use GNU Emacs, but don't know where it is kept on your system, + start Emacs, then type "C-h v exec-directory RET". The directory name + that is displayed by this will be the full pathname of the "etc" + directory of your installed GNU Emacs distribution. + + Some of these files are available individually via FTP or e-mail, see + question 16. + +7: What are FSF, LPF, OSF, GNU, RMS, FTP, BTW, and GPL? + + FSF == Free Software Foundation + LPF == League for Programming Freedom + OSF == Open Software Foundation + GNU == GNU's Not Unix + RMS == Richard M. Stallman + FTP == File Transfer Protocol + BTW == By the way + GPL == GNU General Public Licence + + NOTE: Avoid confusing the FSF, the LPF, and the OSF. The LPF only + opposes look-and-feel copyrights and software patents. The FSF aims to + make high quality free software available for everyone. The OSF is a + commercial organization which wants to provide an alternative, + standardized version of Unix not controlled by AT&T. + + + +Sources of Information and Help + +8: I'm just starting GNU Emacs; how do I do basic editing? + + Type "C-h t" to invoke the self-paced tutorial. Typing just C-h is + how to enter the help system. + + WARNING: your system administrator may have changed C-h to act like DEL. + You can use M-x help-for-help instead to invoke help. To discover what + key (if any) invokes help on your system, type "M-x where-is RET + help-for-help RET". This will print a comma-separated list of key + sequences in the echo area. Ignore the last character in each key + sequence listed. Each of the resulting key sequences invokes help. + + NOTE: Emacs's help facility works best if help is invoked by a single + key. The variable help-char should hold the value of this character. + +9: How do I find out how to do something in GNU Emacs? + + There are several methods for finding out how to do things in Emacs. + + You should become familiar with the online documentation for Emacs. The + complete text of the Emacs manual is available online in a hypertext + format via the "Info" manual reader. Type "C-h i" to invoke Info. + + You can order a hardcopy of the manual from the FSF. See question 12. + + You can list all of the commands whose names contain a certain word + (actually which match a regular expression) using the "command-apropos" + command. Type "C-h a" to invoke this command. + + You can list all of the functions and variables whose names contain a + certain word using the "apropos" command. M-x apropos invokes this + command. + + You may find that command-apropos and apropos are extremely slow on your + system. This will be fixed in Emacs 19. If you can't wait that long, + I can send you the "fast-apropos.el" file that contains the fix. This + file also contains a "super-apropos" command that will list all the + functions and variables whose documentation strings contain a certain + word. + + There are many other commands in Emacs for getting help and information. + To get a list of these commands, type "C-h C-h C-h". + +10: Where can I get GNU Emacs on the net (or by snail mail)? + + Look in the files etc/DISTRIB and etc/FTP for information. If you don't + already have GNU Emacs, see question 16. + +11: Where can I get help in installing GNU Emacs? + + Look in the file etc/SERVICE for names of companies and individuals who + will sell you this type of service. + + This file in the version 18.55 distribution is not completely up to + date. The imminent release of 18.56 will help that. An up-to-date + version of the SERVICE file is available on prep.ai.mit.edu. See + question 16 for how to retrieve this file. + +12: How do I get a printed copy of the GNU Emacs manual? + + You can order a printed copy of the GNU Emacs manual from the FSF for + $15. A set of 6 manuals is $60. + + The full TeX source for the manual also comes with Emacs, if you're + daring enough to try to print out this 300 page manual yourself. (We're + talking about killing an entire tree here. This kind of printer usage + can make you very unpopular. Besides, if you order it from the FSF, the + price may be tax-deductible as a business expense.) + + If you absolutely have to print your own copy, and you don't have TeX, + you can get a PostScript version from: + + Anonymous FTP: + site: abcfd20.larc.nasa.gov + file: /pub/docs/emacs-18.55.PS.Z (size: 472K) + + Carl Witty <cwitty@cs.stanford.edu> writes: + + The Emacs manual is also available online in the Info system, which is + available by typing "C-h i". In this form, it has hypertext links and + is very easy to browse or search; many people prefer it to the printed + manual. + +13: Has someone written an GNU Emacs Lisp package that does XXX? + + Probably. A listing of Emacs Lisp packages, called the Lisp Code + Directory, is being maintained by Dave Brennan <brennan@dg-rtp.dg.com>. + You can search through this list to find if someone has written + something that fits your needs. + + This list is file "LCD-datafile.Z" in the Emacs Lisp Archive. (See + question 14.) The files "lispdir.el.Z" and "lispdir.doc.Z" + in the archive contain information to help you use the list. + +14: Where can I get GNU Emacs Lisp packages that don't come with Emacs? + + First, check the Lisp Code Directory to find the name of the package you + are looking for. (See question 13). Then check local archives and + the Emacs Lisp Archive to find a copy of the relevant files. Then, if + you still haven't found it, you can send e-mail to the author asking for + a copy. + + You can access the Emacs Lisp Archive via: + + Anonymous FTP: + site: tut.cis.ohio-state.edu + directory: /pub/gnu/emacs/elisp-archive + file: README.Z + + NOTE: Any files with names ending in ".Z" are compressed, and you should + use "binary" mode in FTP to retrive them. You should also use binary + mode whenever you retrieve any files with names ending in ".elc". + + Submissions for the archive should be sent to Dave Sill <de5@ornl.gov>. + If you have ftp access, the submission can be deposited in the directory + /pub/gnu/emacs/elisp-archive/incoming on tut.cis.ohio-state.edu. + Whenever possible submissions should contain an LCD-datafile entry since + this helps reduce administrative overhead for the maintainers. Before + submitting anything, first read the file "guidelines.Z", which is + available in the archive. + +15: Where can I get documentation on GNU Emacs Lisp? + + Obtain the GNU Emacs Lisp Reference Manual for Emacs 18 under Unix. It + is available from the FSF for $50. The latest revision is edition 1.02 + dated July 1990. + + Within Emacs, you can type "C-h f" to get the documentation for a + function, "C-h v" for a variable. + + Also, as a popular USENET saying goes, "Use the Force, Read the Source". + + You can also get the Texinfo source for the manual, if you are daring + enough to try to print this 550 page manual out yourself. This is + available in the Emacs Lisp Archive and also via: + + Anonymous FTP: + site: prep.ai.mit.edu + file: /pub/gnu/elisp.tar.Z + + A set of pregenerated Info files comes with the Texinfo source for the + Emacs Lisp manual, so you don't have to format it yourself for online + use. (You can create the Info files from the Texinfo source.) See + question 21 for details on how to install these files online. + +16: What informational files are available? + + This isn't a frequently asked question, but it should be! + + The following files are available in the "etc" directory of the GNU + Emacs distribution, and also the latest versions are available + individually via: + + Anonymous FTP: + site: prep.ai.mit.edu + directory: /pub/gnu/etc + + APPLE -- Special Report: Apple's New Look and Feel + DISTRIB -- GNU Emacs Availability Information, + including the popular "Free Software Foundation Order Form" + FTP -- How to get GNU Software by Internet FTP or by UUCP + GNU -- The GNU Manifesto + INTERVIEW -- Richard Stallman discusses his public-domain + UNIX-compatible software system + with BYTE editors + MACHINES -- Status of GNU Emacs on Various Machines and Systems + MAILINGLISTS -- GNU Project Electronic Mailing Lists + SERVICE -- GNU Service Directory + SUN-SUPPORT -- includes the popular "Using Emacstool with GNU Emacs" + + These files are available in the "etc" directory of the GNU Emacs + distribution: + + DIFF -- Differences between GNU Emacs and Twenex Emacs + CCADIFF -- Differences between GNU Emacs and CCA Emacs + GOSDIFF -- Differences between GNU Emacs and Gosling (Unipress??) Emacs + COPYING -- GNU Emacs General Public License + NEWS -- GNU Emacs News, a history of user-visible changes + + In addition, all of the above files are available directly from the FSF + via e-mail. Of course, please try to get them from a local source + first. + + These files are available from the FSF via e-mail: + + * GNU's Bulletin, June, 1990 -- this file includes: + GNU'S Who + What Is the Free Software Foundation? + What Is Copyleft? + GNUs Flashes + Possible New Terms for GNU Libraries by Richard Stallman + "League for Programming Freedom" by Michael Bloom and Richard Stallman + Free Software Support + GNU Project Status Report + GNU Wish List + GNU Documentation + GNU Software Available Now + Contents of the Emacs Release Tape + Contents of the Pre-Release Tape + Contents of the X11 Tapes + VMS Emacs and Compiler Tapes + How to Get GNU Software + Freemacs, an Extensible Editor for MS-DOS + Thank GNUs + FSF Order Form + * GNU Task List + * GNU Coding Standards + * Legal issues about contributing code to GNU + * GNU Project Status Report + +17: What is the current address of the FSF? + + Snail mail address: + Free Software Foundation + 675 Massachusetts Avenue + Cambridge, MA 02139, USA + + Phone number: + (617) 876-3296 + + E-mail addresses: + gnu@prep.ai.mit.edu {probably read by Len Tower} + gnulists@prep + +18: What is the current address of the LPF? + + Snail mail address: + League for Programming Freedom + 1 Kendall Square, Number 143 + Post Office Box 9171 + Cambridge, MA 02139, USA + + Phone number: + (617) 243-4061 { or 243-4091, I'm not sure ... } + + E-mail address: + league@prep.ai.mit.edu + +19: Where can I get the up-to-date GNU stuff? + + The most up-to-date official GNU stuff is normally kept on + prep.ai.mit.edu and is available for anonymous FTP. See the files + etc/DISTRIB and etc/FTP for more information. (To get copies of these + files, see question 16.) + +20: Where can I get the latest VM, Supercite, GNUS, Calc, Calendar, or Patch? + + 1. VM: + + Author: Kyle Jones <kyle@xanth.cs.odu.edu> + + Mailing lists: info-vm-request@uunet.uu.net + info-vm@uunet.uu.net + bug-vm-request@uunet.uu.net + bug-vm@uunet.uu.net + + Anonymous FTP: + + Last released version: 4.41 + site: tut.cis.ohio-state.edu + file: /pub/gnu/vm/vm-4.41.tar.Z + + Beta test version: 5.18 + site: abcfd20.larc.nasa.gov + directory: /pub/vm + + 2. Supercite: + + Author: Barry Warsaw <warsaw@warsaw.nlm.nih.gov> + + Latest version: 2.1 + + Mailing lists: supercite@warsaw.nlm.nih.gov + supercite-request@warsaw.nlm.nih.gov + + Anonymous FTP: + site: durer.cme.nist.gov [129.6.32.4] + files:/pub/gnu/elisp/supercite-2.1.shar.0# (where # is replaced by 1 or 2) + + NOTE: Superyank is an old version of Supercite. + + 3. GNUS: + + Author: Masanobu Umeda + + Latest version: 3.13 + + Anonymous FTP: + site: tut.cis.ohio-state.edu + files: /pub/gnu/gnus/3.13.##-of-11.Z (where ## is replaced by 00 -- 11) + + 4. Calc: + + Author: Dave Gillespie <daveg@csvax.cs.caltech.edu> + + Latest version: 1.06 + + Anonymous FTP: + site: csvax.cs.caltech.edu [131.215.131.131] + or any comp.sources.misc archive + + 5. Calendar/Diary + + Author: Ed Reingold <reingold@cs.uiuc.edu> + + Latest version: 4 + + E-mail: + Subject: send-emacs-cal + body: your best internet e-mail address + + 6. Patch + + Author: Larry Wall <lwall@jpl-devvax.jpl.nasa.gov> + + Latest version: 2.0 patchlevel 12 + + Anonymous FTP: + site: any comp.sources.unix archive + + or, for Europeans: + + site: archive.cs.ruu.nl [131.211.80.5] + file: /pub/UNIX/patch-2.0.tar.Z + +21: How do I install a piece of Texinfo documentation? + + First create Info files from the Texinfo files with M-x + texinfo-format-buffer. There is also a program called "makeinfo" that + provides better error checking and runs faster. Currently, it comes + with the Emacs Lisp manual (which comes on the GNU Emacs tape). + + For information about the Texinfo format, read the Texinfo manual which + comes with Emacs. This manual also comes installed in Info format, so + you can read it online. + + Neither texinfo-format-buffer nor the makeinfo program install the + resulting Info files in Emacs's Info tree. To install Info files: + + 1. Move the files to the "info" directory in the installed Emacs + distribution. See question 6 if you don't know where that + is. + + 2. Edit the file info/dir in the installed Emacs distribution, and add a + line for the top level node in the Info package that you are + installing. + +22: What is the real legal meaning of the GNU copyleft? + + RMS writes: + + The legal meaning of the GNU copyleft is less important than the spirit, + which is that Emacs is a free software project and that work pertaining + to Emacs should also be free software. "Free" means that all users have + the freedom to study, share, change and improve Emacs. To make sure + everyone has this freedom, pass along source code when you distribute + any version of Emacs or a related program, and give the recipients the + same freedom that you enjoyed. + + If you still want to find out about the legal meaning of the copyleft, + please ask yourself if this means you are not paying attention to the + spirit. + +23: What are appropriate messages for gnu.emacs.help/gnu.emacs.bug/comp.emacs + etc.? + + The file etc/MAILINGLISTS discusses the purpose of each GNU + mailing-list. (See question 16 on how to get a copy.) For + those which are gatewayed with newsgroups, it lists both the newsgroup + name and the mailing list address. + + comp.emacs is for discussion of Emacs programs in general. This + includes GNU Emacs along with various other implementations like JOVE, + MicroEmacs, Freemacs, MG, Unipress, CCA, etc. + + Many people post GNU Emacs questions to comp.emacs because they don't + receive any of the gnu.* newsgroups. Arguments have been made both for + and against posting GNU-Emacs-specific material to comp.emacs. You have + to decide for yourself. + +24: Should I send questions directly to people who post a lot on the net, + instead of posting myself? + + I don't know about the others, but please don't send such messages to me + just because you don't want to disturb a lot of people. Send messages + to individuals that concern things that individual has written. + + + +GNU Emacs, all its Variants, and other Editors + +25: Where does the name "Emacs" come from? + + EMACS originally was an acronym for Editor MACroS. The first Emacs was + a set of macros written by Richard Stallman for the editor TECO (Tape + Editor and COrrector {Text Editor and COrrector?}) on a PDP-10. + (Amusing fact: many people have told me that TECO code looks a lot like + line noise.) + +26: What is the latest version of GNU Emacs? + + GNU Emacs 18.55. GNU Emacs 18.56 is coming out with some bug fixes, but + no additional functionality. + +27: When will GNU Emacs 19 be available? + + Good question, I don't know. For that matter, neither do the + developers. It will undoubtedly be available sometime in the 1990s. + +28: What will be different about GNU Emacs 19? + + From the latest "GNU's Bulletin": + + Version 19 approaches release with a host of new features: before and + after change hooks; X selection processing (including CLIPBOARD + selections); scrollbars; support for European character sets; floating + point numbers; per-buffer mouse commands; interfacing with the X + resource manager; mouse-tracking; Lisp-level binding of function keys; + and multiple X windows (`screens' to Emacs). + + Thanks go to Alan Carroll and the people who worked on Epoch for + generating initial feedback to a multi-windowed Emacs. Emacs 19 + supports two styles of multiple windows, one with a separate screen for + the minibuffer, and another with a minibuffer attached to each screen. + + More features of Version 19 are buffer allocation, which uses a new + mechanism capable of returning storage to the system when a buffer is + killed, and a new input system---all input now arrives in the form of + Lisp objects. + + Other features being considered for Version 19 include: + + * Associating property lists with regions of text in a buffer. + * Multiple font, color, and pixmaps defined by those properties. + * Different visibility conditions for the regions, and for the various + windows showing one buffer. + * Incremental syntax analysis for various programming languages. + * Hooks to be run if point or mouse moves outside a certain range. + * Source-level debugging for Emacs Lisp. + * Incrementally saving undo history in a file, so that recover-file also + reinstalls buffer's undo history. + * Static menu bars, and better pop-up menus. + * A more sophisticated emacsclient/server model, which would provide + network transparent Emacs widget functionality. + + Also, Emacs 19 will have a Emacs Lisp source code debugger. + +29: Is there an Emacs that has better mouse and X window support? + + Emacs 18 has some limited X Window System support, but there are + problems. Emacs 19 will have amazing mouse and window support. Right + now, there is a modified version of Emacs 18.55 called "Epoch" which has + greatly improved mouse and window support. The latest version of Epoch + is available via: + + Anonymous FTP: + site: cs.uiuc.edu + directory: pub/epoch-files/epoch + file: epoch-3.2b (b stands for beta) + + NOTE: Epoch only works with the X Window System; it does not work on + ordinary terminals. + +30: How do I get Emacs for my PC? + + GNU Emacs won't run on a PC directly under MS-DOS. There have been + reports of people running GNU Emacs under a special program under MS-DOS + on 286 or 386 machines, but I don't know the details. + + You can try a variety of similar programs such as MG, MicroEmacs, + Freemacs, etc. + + Russ Nelson <nelson@sun.soe.clarkson.edu>, the author, describes + Freemacs: + + * Freemacs is free, and it was designed from the start to be + programmable. + * Freemacs is the only IBM-PC editor that tries to be like GNU Emacs. + * Freemacs can only edit files less than 64K in length. + * Freemacs doesn't have undo. + + Carl Witty <cwitty@cs.stanford.edu> writes about Freemacs: + + Better is Freemacs, which follows the tradition of ITS and GNU Emacs + by having an full, turing-complete extension language which is + incompatible with everything else. In fact, it's even closer to ITS + Emacs than GNU Emacs is, because Mint (Freemacs' extension language) + is absolutely illegible without weeks of study, much like TECO. + + You can get Freemacs several ways: + + 1. Anonymous FTP: + site: simtel20.army.mil, directory: PD:<MSDOS.FREEMACS> + site: grape.ecs.clarkson.edu [128.153.13.196], directory: /e/freemacs + + 2. E-mail: + address: archive-server@sun.soe.clarkson.edu, or + archive-server%sun.soe@omnigate (BITNET), or + {smart-host}!sun.soe.clarkson.edu!archive-server (UUCP) + body: help + + 3. Snail mail: + address: Russell Nelson, 11 Grant St., Potsdam, NY 13676 + Send $15 copying fee, and specify preferred floppy disk format: + 5.25", 1.2 Meg, or 5.25", 360K, or 3.50", 720K + + I don't know much about MicroEmacs. All I know is that the latest + version is 3.10 and it is available via: + + Anonymous FTP: + site: durer.cme.nist.gov + + Another Emacs for small machines is Jove (Jonathan's Own Version of + Emacs). The latest version is 4.9. It is available via: + + Anonymous FTP: + sites: hipl.psych.nyu.edu, cs.toronto.edu, cayuga.cs.rochester.edu + + Yet another Emacs is "mg", which used to stand for MicroGNUEmacs, but + now just stands for "mg". It is available via: + + Anonymous FTP: + site: snow.white.toronto.edu + +31: Where can I get Emacs for my Atari ST? + + The latest version for the ST is available via: + + Anonymous FTP: + site: cs.uni-sb.de [134.96.7.254] + directory: /pub/atari/emacs + +32: Where can I get Emacs with NeWS support? + + Chris Maio's NeWS support package for GNU Emacs is available via: + + Anonymous FTP: + site: columbia.edu + file: /pub/ps-emacs.tar.Z + + site: tut.cis.ohio-state.edu + file: /pub/gnu/emacs/ps-emacs.tar.Z + + + +Binding Keys to Commands + +33: Why does my key binding fail? + + Most likely, it failed because "ESC [" was already defined. Evaluate + this form first: + + (define-key esc-map "[" nil) + +34: Why doesn't this [terminal or window-system setup] code work in my + .emacs file, but it works just fine after Emacs starts up? + + This is because you're trying to do something in your .emacs file that + needs to be postponed until after the terminal/window-system setup code + is loaded. This is a result of the order in which things are done + during the startup of Emacs. + + In order to postpone the execution of Emacs Lisp code until after the + terminal/window-system setup, set the value of the variable + term-setup-hook or window-setup-hook to be a function which does what + you want. + + See question 72 for a complete explanation of what Emacs + does every time it is started. + + Here is a simple example of how to set term-setup-hook: + + (setq term-setup-hook + (function + (lambda () + (if (string-match "^vt220" (or (getenv "TERM") "")) + ;; Make vt220's "Do" key behave like M-x: + (define-key CSI-map "29~" 'execute-extended-command))))) + +35: How do I use function keys under X Windows? + + If compiled on a Sun, Emacs recognizes the function keys that are + normally on a Sun keyboard, and you can bind them the same way you + normally bind Sun keys. Each function key will generate a key sequence + that looks like "ESC [ ### z", where ### is replaced by a number. + + If not compiled on a Sun, the function keys will appear to Emacs in a + way remarkably similar to the keys of a VT220 terminal. Each function + key will generate a key sequence that looks like "ESC [ ### ~". + + For the complete list of the numbers which are generated by the function + keys, look in the file src/x11term.c. + + However, this may be inadequate for you if you have function keys Emacs + doesn't know about. Johan Vromans <jv@mh.nl> explains: + + There are a number of tricks that can be helpful. The most elegant + solution, however, is to use the function "x-rebind-key". This function + is commented out in the source for good reasons --- it's buggy. + + It is rather easy to replace this function with the function + epoch:rebind-key from the Epoch distribution. + + After implementing this, all keyboard keys can be configured to send + user definable sequences, e.g. + + (x-rebind-key "KP_F1" 0 "\033OP") + + This will have the keypad key PF1 send the sequence \eOP, just like an + ordinary VTxxx terminal. + + Another method is to handle the keys in the C source. Although this may + be slightly more efficient, it is much less flexible. + + Finally, some people have established a convention to have the special + keys send a sequence of characters that indicate the key and its + modifiers instead of a plain escape sequence. This is also a good + method. The advantage of sending the plain escape sequences is that you + require only one setup for Emacs running under X and on normal + terminals, e.g. + + (x-rebind-key "KP_F1" 0 "\033OP") + + will have key PF1 send \eOP, and, probably in another setup file: + + (global-set-key "\eOP" 'specific-function) + + to bind PF1 to a function. The last statement applies for normal VTxxx + terminal also. + +36: How do I tell what characters my function keys emit? + + Use this function by Randal L. Schwartz <merlyn@iwarp.intel.com>: + + (defun see-chars () + "Displays characters typed, terminated by a 3-second timeout." + (interactive) + (let ((chars "") + (inhibit-quit t)) + (message "Enter characters, terminated by 3-second timeout.") + (while (not (sit-for 3)) + (setq chars (concat chars (list (read-char))) + quit-flag nil)) ; quit-flag maybe set by C-g + (message "Characters entered: %s" (key-description chars)))) + + + +Problems with Key Bindings and Input + +37: Why does Emacs spontaneously go into "I-search:" mode? + + Your terminal (or something between your terminal and the computer) is + sending C-s and C-q for flow control, and Emacs is receiving these + characters and interpreting them as commands. (The C-s character + normally invokes the isearch-forward command.) + + For a more detailed discussion, read the file PROBLEMS in the Emacs + distribution. + +38: What do I do if my terminal is sending C-s and C-q for flow control and + I can't disable it? + + Use this piece of Emacs Lisp: + + (set-input-mode nil t) + +39: How do I make Emacs use C-s and C-q for flow control instead of for + commands? + + Same answer as previous question. + +40: How do I use commands bound to C-s and C-q (or any key) if these keys + are filtered out? + + I suggest swapping C-s with C-\ and C-q with C-^: + + (swap-keys ?\C-s ?\C-\\) + (swap-keys ?\C-q ?\C-^) + + See question 41 for the implementation of swap-keys. + +41: How do I "swap" two keys? + + When Emacs receives a character, you can make Emacs behave as though it + received another character by setting the value of + keyboard-translate-table. The following Emacs Lisp will do this for + you, allowing you to "swap" keys. + + WARNING: the value of C-g (7) is hard coded in several places both + before and after the translation specified by keyboard-translate-table + is carried out. Thus, swapping C-g with another key may cause problems; + rebinding C-g may also cause problems. (Well, I've never done it, so I + don't know for sure.) + + (defun swap-keys (key1 key2) + "Swap keys KEY1 and KEY2 using map-key." + (map-key key1 key2 t) + (map-key key2 key1)) + + (defvar map-keys-alist nil + "Association list of key mappings currently in effect. + If (FROM . TO) is an element, that means key FROM is currently mapped to TO.") + + (defun map-key (from to &optional no-update) + "Make key FROM behave as though key TO was typed instead. + If optional argument NO-UPDATE is non-nil, the key-mapping does not take + effect until a subsequent map-key or unmap-key." + (let ((alist-entry (assq from map-keys-alist))) + (if alist-entry + (setcdr alist-entry to) + (setq map-keys-alist (cons (cons from to) map-keys-alist)))) + (or no-update (map-keys-update))) + + (defun unmap-key (key) + "Undo any mapping of key KEY." + (setq map-keys-alist (delq (assq key map-keys-alist) map-keys-alist)) + (map-keys-update)) + + ;; Makes keyboard-translate-table reflect the key mappings in + ;; map-keys-alist. + + (defun map-keys-update () + (if (null map-keys-alist) + ;; Emacs runs fasted if keyboard-translate-table is nil + (setq keyboard-translate-table nil) + (let ((max-key-mapped + ;; Find the mapped key with largest value + (apply 'max + (mapcar + (function + (lambda (x) + (car x))) + map-keys-alist))) + (i 0)) + ;; keyboard-translate-table doesn't have to be any longer than + ;; necessary. This speeds up Emacs. + (setq keyboard-translate-table (make-string (1+ max-key-mapped) 0)) + (while (<= i max-key-mapped) + (aset keyboard-translate-table i (or (cdr (assq i map-keys-alist)) i)) + (setq i (1+ i)))))) + +42: Why does the "Backspace" key invoke help? + + The Backspace key (on every keyboard I've used) sends ASCII code 8. C-h + sends the same code. In Emacs by default C-h invokes "help-command". + The easiest solution to this problem is to use C-h (and Backspace) for + help and DEL (the Delete key) for deleting the previous character. + + For some people this solution may be problematic: + + 1. They normally use Backspace outside of Emacs for deleting the + previous character typed. This can be solved by making DEL be the + command for deleting the previous character outside of Emacs. This + command will do this on many Unix systems: + + stty erase ^? + + 2. The person may prefer using the Backspace key for deleting the + previous character because it is more conveniently located on their + keyboard or because they don't even have a separate Delete key. In + this case, the best solution is to swap C-h and DEL: + + (swap-keys ?\C-h ?\C-?) + + See question 41 for the implementation of swap-keys. + +43: How do I type DEL on PC terminal emulators? + + Someone whose name I forgot wrote: + + Most PCs have deficient keyboards that don't have both Backspace and + Delete keys. Whether C-h (backspace) or DEL is generated by the + "Backspace" key varies from one terminal emulator to another. If you're + lucky, you can reconfigure the keyboard so that it generates DEL. If + not, you will have to hunt to figure out what keystroke will do it --- + possibilities include various shifted and controlled versions of + "Backspace", the "Del" key on the numeric keypad (which might depend on + "Shift" or "NumLock"), or perhaps C-? (Control-?). + + If this is too hard, you may want to swap the delete key with some other + key. See question 42. + + + +Building/Installing/Porting Emacs and Machine/OS-Specific Bugs: + +44: Why do I get an "f68881_used undefined" error, when I build Emacs on my + Sun 3? + + Barry A. Warsaw <warsaw@cme.nist.gov> writes: + + Some of the code that is being linked on the "ld" line of emacs' + build command has been compiled with the -f68881 option. Most + common reason is that you're linking with X libraries which were + built with -f68881 option set. You need to either remove all + dependencies to the 68881 (may mean a recompile of the X libraries + with -fswitch or -fsoft option), or you need to link emacs with + the 68881 startup file /usr/lib/Mcrt1.o. Make this change to + src/ymakefile: + + change: #define START_FILES crt0.o + to: #define START_FILES crt0.o /usr/lib/Mcrt1.o + + The order of these start files is critical. + +45: Why does Emacs crash under SunOS 4.1? + + Under SunOS 4.1, Emacs dies with this message: + + Fatal error (6).Abort + + There is a bug in the "localtime" routine supplied with SunOS 4.1. + A private function called by tzsetwall zeroes the byte just past an + eight byte region it mallocs. This corrupts GNU malloc's memory pool. + + Put "#define SYSTEM_MALLOC" in src/config.h. + + Or, for the purists: + + Put "#define SUNOS_LOCALTIME_BUG" in src/config.h and apply the following + patch to src/malloc.c. + + (Patch by Eirik Fuller <eirik@elf.tn.cornell.edu>.) + + >*** malloc.c~ Fri Apr 7 22:12:10 1989 + >--- malloc.c Tue May 8 07:07:22 1990 + >*************** + >*** 476,482 **** + >--- 476,487 ---- + > multiple of 8, then figure out which nestf[] area to use. + > Both the beginning of the header and the beginning of the + > block should be on an eight byte boundary. */ + >+ #ifdef SUNOS_LOCALTIME_BUG + >+ /* SunOS 4.1 localtime scribbles on the ninth byte. */ + >+ nbytes = (n + ((sizeof *p + 15) & ~15) + EXTRA + 15) & ~15; + >+ #else + > nbytes = (n + ((sizeof *p + 7) & ~7) + EXTRA + 7) & ~7; + >+ #endif + > { + > register unsigned int shiftr = (nbytes - 1) >> 2; + > + +46: Why does Emacs occasionally cause segmentation faults and machine + panics on my DECstation 3100? + + Bruce Cole <cole@dip.cs.wisc.edu> writes: + + > We're running Emacs 18.54 on an Ultrix Risc DECsystem 5400. Three + > times we've had the machine hang with the following message: + > + > panic: tblmod on invalid pte + > + > Ultrix support tells us this is caused by Emacs. Has anyone + > experienced this? DEC says it only happens on RISC boxes. + + This is due to a MIPS specific Ultrix kernel bug. I sent DEC a + description of the bug with a bug fix. The Kernel bug manifests itself + with Emacs since Emacs uses a non-standard data start address on Ultrix + MIPS machines. + + I haven't often seen Emacs cause MIPS machines to panic. Usually you + just see one of the following errors when you try to start up Emacs: + + segmentation fault (core dumped) + emacs: Bad address + Out of memory + data size rlimit exceeded, pid 6523, process tcsh (for example) + + Until DEC fixes their kernel, you can avoid the bug by changing the data + start address used by Emacs. + + > I have built two newer versions of GNU Emacs and it still happens. I + > should also mention that these faults happen quite rarely to some + > users (I may see it once a month), while other users see it a few + > times a week or even daily! + + The problem only occurs when a MIPS machine is doing a lot of paging. + Users who don't cause their workstation to page will not see this + problem. + + Patch to GNU Emacs 18.55: + + >*** m-pmax.h Thu Jun 8 11:53:55 1989 + >--- m-pmax.h.new Mon Jul 9 10:21:21 1990 + >*************** + >*** 1,3 **** + >--- 1,7 ---- + > #include "m-mips.h" + > #undef LIBS_MACHINE + > #undef BIG_ENDIAN + >+ #undef LD_SWITCH_MACHINE + >+ #undef DATA_START + >+ #define DATA_START 0x10000000 + >+ #define DATA_SEG_BITS 0x10000000 + +47: How do I get Emacs running on VMS under DECwindows? + + Hal R. Brand <BRAND@addvax.llnl.gov> is said to have a VMS save set with + a ready-to-run VMS version of Emacs for X Windows. It is available via: + + Anonymous FTP: + site: addvax.llnl.gov + + Johan Vromans <jv@mh.nl> writes: + + Getting Emacs to run on VMS with DECwindows requires a number of changes + to the sources. Fortunately this has been done already. Joshua Marantz + <josh@viewlogic.com> did most of the work for Emacs 18.52, and the mods + were ported to 18.55 by Johan Vromans <jv@mh.nl>. Also included is the + handling of DEC's LK201 keyboard. You need to apply the changes to a + fresh Emacs 18.55 distribution on a Unix system, and then you can copy + the sources to VMS to perform the compile/link/build. + + The set of changes have been posted a number of times three times the + last 12 months, so they should be widely available. + +48: Why won't src/alloc.c compile on a SPARCstation? + + {Could someone send me a better description of the symptoms ... Does it + really not compile, or does it refuse to link, or does it die when it's + run?} + + An object in src/alloc.c is declared as an array of char. However, on a + SPARCstation, this object must be aligned on a longword boundary. + gcc will align this object not on a longword boundary because it thinks + this is ok because the object is an array of char. + + Here is a solution: + + (Patch from the Epoch source code.) + + >*** dist-18.55.dist/src/alloc.c Mon Feb 13 05:23:35 1989 + >--- dist-18.55/src/alloc.c Mon Nov 27 23:30:13 1989 + >*************** + >*** 665,673 **** + > #define NSTATICS 200 + > + >- char staticvec1[NSTATICS * sizeof (Lisp_Object *)] = {0}; + >- + > int staticidx = 0; + > + > #define staticvec ((Lisp_Object **) staticvec1) + > + > /* Put an entry in staticvec, pointing at the variable whose address is given */ + >--- 665,676 ---- + > #define NSTATICS 200 + > + > int staticidx = 0; + > + >+ #ifdef __GNUC__ + >+ Lisp_Object *staticvec[NSTATICS] = {0}; + >+ #else + >+ char staticvec1[NSTATICS * sizeof (Lisp_Object *)] = {0}; + > #define staticvec ((Lisp_Object **) staticvec1) + >+ #endif + > + > /* Put an entry in staticvec, pointing at the variable whose address is given */ + + {Does anyone understand why one might want to declare staticvec as an + array of char instead of an array of LispObject?} + +49: Why do shells started from Emacs suspend themselves under SunOS 4.1? + + In SunOS 4.1, when subprocesses are started by an Emacs process started + by "rsh", the process stops with a message like this: + + Process shell stopped (tty input) + + SunOS 4.1 uses the POSIX standard's specification for job control. + Basically, a process must be a session leader to acquire a new + controlling terminal. + + A quick fix is to run Emacs as "/usr/etc/setsid emacs" instead. + + To fix it in Emacs, use this patch: + + (Patch by Eirik Fuller <eirik@elf.tn.cornell.edu>.) + + >*** /tmp/,RCSt1a12635 Fri Jul 6 11:29:10 1990 + >--- process.c Sat Jun 16 14:04:55 1990 + >*************** + >*** 1031,1036 **** + >--- 1031,1039 ---- + > int j = open ("/dev/tty", O_RDWR, 0); + > ioctl (j, TIOCNOTTY, 0); + > close (j); + >+ #ifndef USG + >+ setpgrp (0, 0); + >+ #endif + > } + > #endif /* TIOCNOTTY */ + > + +50: Why does Emacs crash from a bus error in XLookupString under OpenLook? + + The Sun OpenLook libraries use the XComposeStatus parameter on + XLookupString for composing key sequences. I'm told this is actually + supposed to be an optional parameter. + + (Patch by David J. MacKenzie <djm@eng.umd.edu>.) + + >*** dist-18.55.dist/src/x11term.c Wed Aug 2 21:56:42 1989 + >--- dist-18.55/src/x11term.c Fri Jul 13 19:22:32 1990 + >*************** + >*** 1213,1216 **** + >--- 1213,1218 ---- + > #endif /* not sun */ + > + >+ static XComposeStatus status; + >+ + > internal_socket_read(bufp, numchars) + > register unsigned char *bufp; + >*************** + >*** 1223,1227 **** + > BLOCK_INPUT_DECLARE (); + > XEvent event; + >- XComposeStatus status; + > KeySym keysym; + > + >--- 1225,1228 ---- + >*************** + >*** 1330,1334 **** + > nbytes = XLookupString (&event, + > mapping_buf, 20, &keysym, + >! 0); + > /* Someday this will be unnecessary as we will + > be able to use XRebindKeysym so XLookupString + >--- 1331,1335 ---- + > nbytes = XLookupString (&event, + > mapping_buf, 20, &keysym, + >! &status); + > /* Someday this will be unnecessary as we will + > be able to use XRebindKeysym so XLookupString + +51: Why doesn't "C-c C-c" interrupt subprocesses under HP/UX? + + Paul Stravers <stravers@dutentb.tudelft.nl> writes: + + In HP/UX we can (must) combine the two distinct calls + 1. ioctl (fildes, TIOCGPGRP, &gid); + 2. kill (-gid, signo); + into the single call + 1+2. ioctl (fildes, TIOCSIGSEND, signo); + + This is apparently the case under at least HP/UX versions 6.5 and 7.0. + + Here is a set of patches courtesy of Piet van Oostrum <piet@cs.ruu.nl> + that fixes these problems: + + 1. Signals to child processes work now (like the C-c C-c mentioned above) + + 2. When running under X11, C-g now correctly interrupts long-running commands + + 3. When running under X11, the window is redislayed even if emacs is doing + some work (e.g. if your window becomes visible after being behind another + one. + + 4. A nasty bug in alloca is solved. This bug is very infrequent unless you + apply the other patches. + + {I don't know for sure whether all of these patches are applicable only + under HP/UX. Perhaps someone can tell me.} + + >*** alloca.s.~1~ Fri Sep 15 16:35:39 1989 + >--- alloca.s Tue May 1 17:18:08 1990 + >*************** + >*** 92,103 **** + > sub.l &MAXREG*4,%d1 # space for saving registers + > mov.l %d1,%sp # save new value of sp + > tst.b PROBE(%sp) # create pages (sigh) + > move.w &MAXREG-1,%d0 + > copy_regs_loop: /* save caller's saved registers */ + >! mov.l (%a1)+,(%sp)+ + > dbra %d0,copy_regs_loop + >! mov.l %sp,%d0 # return value + >! mov.l %d1,%sp + > add.l &-4,%sp # adjust tos + > jmp (%a0) # rts + > #endif /* new hp assembler */ + >--- 92,105 ---- + > sub.l &MAXREG*4,%d1 # space for saving registers + > mov.l %d1,%sp # save new value of sp + > tst.b PROBE(%sp) # create pages (sigh) + >+ mov.l %a2,%d1 # save reg a2 + >+ mov.l %sp,%a2 + > move.w &MAXREG-1,%d0 + > copy_regs_loop: /* save caller's saved registers */ + >! mov.l (%a1)+,(%a2)+ + > dbra %d0,copy_regs_loop + >! mov.l %a2,%d0 # return value + >! mov.l %d1,%a2 # restore a2 + > add.l &-4,%sp # adjust tos + > jmp (%a0) # rts + > #endif /* new hp assembler */ + + >*** keyboard.c.~1~ Wed Apr 4 14:53:49 1990 + >--- keyboard.c Thu Apr 26 14:46:27 1990 + >*************** + >*** 719,724 **** + >--- 719,773 ---- + > errno = old_errno; + > } + > + >+ #ifdef HPUX + >+ /* tells if an alarm is outstanding for emptying the socket */ + >+ int socket_alarm; + >+ + >+ static void + >+ empty_socket_interrupt() + >+ { + >+ int nread; + >+ char buf[256 * BUFFER_SIZE_FACTOR]; + >+ register int i; + >+ int old_errno = errno; + >+ + >+ if (waiting_for_input) return; + >+ + >+ fcntl (fileno (stdin), F_SETFL, O_NDELAY); + >+ + >+ /* Read what is waiting. */ + >+ + >+ nread = (*read_socket_hook) (0, buf, sizeof buf); + >+ + >+ #ifdef EBADSLT + >+ if (nread == -1 && (errno == EAGAIN || errno == EBADSLT)) + >+ #else + >+ if (nread == -1 && errno == EAGAIN) + >+ #endif + >+ nread = 0; + >+ + >+ fcntl (fileno (stdin), F_SETFL, 0); + >+ + >+ /* Scan the chars for C-g and store them in kbd_buffer. */ + >+ kbd_ptr = kbd_buffer; + >+ for (i = 0; i < nread; i++) + >+ { + >+ kbd_buffer_store_char (buf[i]); + >+ /* Don't look at input that follows a C-g too closely. + >+ This reduces lossage due to autorepeat on C-g. */ + >+ if (buf[i] == Ctl ('G')) + >+ break; + >+ } + >+ + >+ /* reestablish interrupt */ + >+ signal (SIGALRM, empty_socket_interrupt); + >+ alarm (1); + >+ + >+ errno = old_errno; + >+ } + >+ + >+ #endif /* HPUX */ + >+ + > /* read a character from the keyboard; call the redisplay if needed */ + > /* commandflag 0 means do not do auto-saving, but do do redisplay. + > -1 means do not do redisplay, but do do autosaving. + >*************** + >*** 733,738 **** + >--- 782,794 ---- + > Lisp_Object tem; + > extern request_echo (); + > + >+ #ifdef HPUX + >+ if (socket_alarm) { + >+ alarm (0); + >+ socket_alarm = 0; + >+ } + >+ #endif + >+ + > if ((c = unread_command_char) >= 0) + > { + > unread_command_char = -1; + >*************** + >*** 869,874 **** + >--- 925,938 ---- + > } + > } + > + >+ #ifdef HPUX + >+ if (read_socket_hook) { + >+ socket_alarm = 1; + >+ signal (SIGALRM, empty_socket_interrupt); + >+ alarm (1); + >+ } + >+ #endif + >+ + > return c; + > } + > + >*************** + >*** 1094,1119 **** + > + > #else /* no FIONREAD */ + > #ifdef USG + > if (kbd_count) + > abort (); + > + > fcntl (fileno (stdin), F_SETFL, O_NDELAY); + >! kbd_ptr = kbd_buffer; + > if (read_socket_hook) + >! { + >! kbd_count = (*read_socket_hook) (0, kbd_buffer, sizeof kbd_buffer); + >! } + > else + >! { + >! kbd_count = read (fileno (stdin), kbd_buffer, sizeof kbd_buffer); + >! } + > #ifdef EBADSLT + >! if (kbd_count == -1 && (errno == EAGAIN || errno == EBADSLT)) + > #else + >! if (kbd_count == -1 && errno == EAGAIN) + > #endif + >! kbd_count = 0; + > fcntl (fileno (stdin), F_SETFL, 0); + > #else /* not USG */ + > you lose + > #endif /* not USG */ + >--- 1158,1209 ---- + > + > #else /* no FIONREAD */ + > #ifdef USG + >+ char buf[256 * BUFFER_SIZE_FACTOR]; + >+ register int i; + >+ #ifdef HPUX + >+ int mask; + >+ #endif + >+ + > if (kbd_count) + > abort (); + > + >+ #ifdef HPUX + >+ if (socket_alarm) + >+ mask = sigblock (sigmask (SIGALRM)); + >+ #endif + >+ + > fcntl (fileno (stdin), F_SETFL, O_NDELAY); + >! + >! /* Read what is waiting. */ + > if (read_socket_hook) + >! nread = (*read_socket_hook) (0, buf, sizeof buf); + > else + >! nread = read (fileno(stdin), buf, sizeof buf); + > #ifdef EBADSLT + >! if (nread == -1 && (errno == EAGAIN || errno == EBADSLT)) + > #else + >! if (nread == -1 && errno == EAGAIN) + > #endif + >! nread = 0; + >! + > fcntl (fileno (stdin), F_SETFL, 0); + >+ + >+ /* Scan the chars for C-g and store them in kbd_buffer. */ + >+ kbd_ptr = kbd_buffer; + >+ for (i = 0; i < nread; i++) + >+ { + >+ kbd_buffer_store_char (buf[i]); + >+ /* Don't look at input that follows a C-g too closely. + >+ This reduces lossage due to autorepeat on C-g. */ + >+ if (buf[i] == Ctl ('G')) + >+ break; + >+ } + >+ + >+ #ifdef HPUX + >+ if (socket_alarm) + >+ sigsetmask(mask); + >+ #endif + >+ + > #else /* not USG */ + > you lose + > #endif /* not USG */ + + >*** x11term.h~ Fri Sep 15 15:20:26 1989 + >--- x11term.h Thu Apr 26 14:03:25 1990 + >*************** + >*** 11,17 **** + >--- 11,22 ---- + > #define sigmask(no) (1L << ((no) - 1)) + > #endif + > + >+ #ifdef HPUX + > #define BLOCK_INPUT_DECLARE() int BLOCK_INPUT_mask + >+ #define BLOCK_INPUT() BLOCK_INPUT_mask = sigblock (sigmask (SIGALRM)) + >+ #define UNBLOCK_INPUT() sigsetmask (BLOCK_INPUT_mask) + >+ #else /* not HPUX */ + >+ #define BLOCK_INPUT_DECLARE() int BLOCK_INPUT_mask + > #ifdef SIGIO + > #define BLOCK_INPUT() BLOCK_INPUT_mask = sigblock (sigmask (SIGIO)) + > #define UNBLOCK_INPUT() sigsetmask (BLOCK_INPUT_mask) + >*************** + >*** 19,23 **** + >--- 24,29 ---- + > #define BLOCK_INPUT() + > #define UNBLOCK_INPUT() + > #endif /* SIGIO */ + >+ #endif /* HPUX */ + > + > #define CLASS "emacs" /* class id for GNU Emacs, used in .Xdefaults, etc. */ + + >*** process.c.orig Fri Sep 15 16:28:36 1989 + >--- process.c Fri Apr 20 13:17:06 1990 + >*************** + >*** 1057,1062 **** + >--- 1057,1079 ---- + > signal (SIGHUP, SIG_DFL); + > #endif + > #endif /* HAVE_PTYS */ + >+ + >+ /* Give child clean slate for signals */ + >+ #ifdef SIGCHLD + >+ #ifdef BSD4_1 + >+ sigrelse (SIGCHLD); + >+ #else /* not BSD4_1 */ + >+ #ifdef HPUX + >+ sigsetmask (0); + >+ #endif /* HPUX */ + >+ #if defined (BSD) || defined (UNIPLUS) + >+ sigsetmask (0); + >+ #else /* ordinary USG */ + >+ signal (SIGCHLD, sigchld); + >+ #endif /* ordinary USG */ + >+ #endif /* not BSD4_1 */ + >+ #endif /* SIGCHLD */ + >+ + > child_setup_tty (xforkout); + > child_setup (xforkin, xforkout, xforkout, new_argv, env); + > } + >*************** + >*** 1413,1427 **** + > if (read_kbd && kbd_count) + > nfds = 0; + > else + >! #ifdef IBMRTAIX + > nfds = select (MAXDESC, &Available, 0, 0, &timeout); + > #else + >- #ifdef HPUX + >- nfds = select (MAXDESC, &Available, 0, 0, &timeout); + >- #else + > nfds = select (MAXDESC, &Available, 0, &Exception, &timeout); + > #endif + >- #endif + > xerrno = errno; + > + > if (fix_screen_hook) + >--- 1430,1440 ---- + > if (read_kbd && kbd_count) + > nfds = 0; + > else + >! #if defined (IBMRTAIX) || defined (HPUX) + > nfds = select (MAXDESC, &Available, 0, 0, &timeout); + > #else + > nfds = select (MAXDESC, &Available, 0, &Exception, &timeout); + > #endif + > xerrno = errno; + > + > if (fix_screen_hook) + >*************** + >*** 1771,1776 **** + >--- 1784,1790 ---- + > error ("Process %s is not active", + > XSTRING (p->name)->data); + > + >+ #ifndef HPUX /* Can't get gid of tty's controlling session */ + > #ifdef TIOCGPGRP /* Not sure about this! (fnf) */ + > /* If we are using pgrps, get a pgrp number and make it negative. */ + > if (!NULL (current_group)) + >*************** + >*** 1785,1790 **** + >--- 1799,1805 ---- + > the child itself heads the pgrp. */ + > gid = - XFASTINT (p->pid); + > #endif /* not using pgrps */ + >+ #endif /* not HPUX */ + > + > switch (signo) + > { + >*************** + >*** 1800,1805 **** + >--- 1815,1827 ---- + > flush_pending_output (XFASTINT (p->infd)); + > break; + > } + >+ + >+ #ifdef HPUX + >+ if (!NULL (current_group)) + >+ ioctl (XFASTINT (p->infd), TIOCSIGSEND, signo); + >+ else + >+ kill (XFASTINT (p->pid), signo); + >+ #else /* not HPUX */ + > /* gid may be a pid, or minus a pgrp's number */ + > #ifdef BSD + > /* On bsd, [man says] kill does not accept a negative number to kill a pgrp. + >*************** + >*** 1808,1813 **** + >--- 1830,1836 ---- + > #else /* Not BSD. */ + > kill (gid, signo); + > #endif /* Not BSD. */ + >+ #endif /* Not HPUX */ + > + > /* Put notices in buffers now, since it is safe now. + > Because of this, we know that a process we have just killed + >% + + This is a separate patch to process.c, distinct from the immediately + preceding one. Both should be applied. + + >*** process.c.~1~ Fri Apr 20 13:17:06 1990 + >--- process.c Wed Oct 24 16:38:15 1990 + >*************** + >*** 1085,1095 **** + > /* If the subfork execv fails, and it exits, + > this close hangs. I don't know why. + > So have an interrupt jar it loose. */ + >! signal (SIGALRM, create_process_1); + >! alarm (1); + >! if (forkin >= 0) + >! close (forkin); + >! alarm (0); + > if (forkin != forkout && forkout >= 0) + > close (forkout); + > + >--- 1085,1100 ---- + > /* If the subfork execv fails, and it exits, + > this close hangs. I don't know why. + > So have an interrupt jar it loose. */ + >! + >! { int old_trap = signal (SIGALRM, create_process_1); + >! int old_alarm = alarm (1); + >! if (forkin >= 0) + >! close (forkin); + >! alarm (0); + >! signal (SIGALRM, old_trap); + >! /* don't bother with possible 1 sec loss */ + >! if (old_alarm) alarm (old_alarm); + >! } + > if (forkin != forkout && forkout >= 0) + > close (forkout); + +52: What should I do if I have trouble building Emacs? + + RMS writes: + + If you try to build Emacs and it does not run, the first thing to do is + look in the file called PROBLEMS to see if a solution is given there. + + If none is given, then please send a report by mail to + bug-gnu-emacs@prep.ai.mit.edu. Please do not send it to + help-gnu-emacs@prep.ai.mit.edu. + + Sending to help-gnu-emacs (which has the effect of posting on + gnu.emacs.help) is undesirable because it takes the time of an + unnecessarily large group of people, most of whom are just users and + have no idea how to fix these problem. bug-gnu-emacs reaches a much + smaller group of people who are more likely to know what to do and have + expressed a wish to receive more messages about Emacs than the others. + +Weird/Confusing Problems: + +53: Does Emacs have problems with files larger than 8 Megs? + + Most installed versions of GNU Emacs will use 24 bit signed integers + (and 24 bit pointers!) internally. This limits the file size that Emacs + can handle to 8388608 bytes. + + Leonard N. Zubkoff <lnz@lucid.com> writes: + + Putting the following two lines in src/config.h before compiling Emacs + allows for 26 bit integers and pointers: + + #define VALBITS 26 + #define GCTYPEBITS 5 + + See question 54 for an explanation. + +54: Why does Emacs use 24 bit integers and pointers? + + David Gillespie <daveg@csvax.cs.caltech.edu> writes: + + Emacs is largely written in a dialect of Lisp; Lisp is a freely-typed + language in the sense that you can put any value of any type into any + variable, or return it from a function, and so on. So each value must + carry a "tag" along with it identifying what kind of thing it is, e.g., + integer, pointer to a list, pointer to an editing buffer, and so on. + Emacs uses standard 32-bit integers for data objects, taking the top 8 + bits for the tag and the bottom 24 bits for the value. So integers (and + pointers) are somewhat restricted compared to true C integers and + pointers. + + Emacs uses 8-bit tags because that's a little faster on byte-oriented + machines, but there are only really enough tags to require 6 bits. See + question 53 to find how to recompile Emacs with 6-bit tags and + 26-bit integers and pointers if space is at a premium for you. + +55: Why does Emacs start up using the wrong directory? + + Most likely, you have an environment variable named PWD that is set to a + value other than the name of your current directory. This is most + likely caused by using two different shell programs. "ksh" and (some + versions of) "csh" set and maintain the value of the PWD environment + variable, but "sh" doesn't. If you start sh from ksh, change your + current directory inside sh, and then start Emacs from inside sh, PWD + will have the wrong value but Emacs will use this value. See question + 72. + +56: How do I edit a file with a "$" in its name? + + When entering a filename in the minibuffer, Emacs will attempt to expand + a "$" followed by a word as an environment variable. To suppress this + behavior, type "$$" instead. + +57: Why does Shell Mode lose track of the shell's current directory? + + Emacs has no way of knowing when the shell actually changes its + directory. So it tries to guess by recognizing cd commands. A number + of fixes and enhancements to Shell Mode have been written, check the + Emacs Lisp Archive (question 14). + +58: Why doesn't Emacs expand my aliases when sending mail? + + First, you must separate multiple addresses with commas. + + Emacs normally only reads the ".mailrc" file once per session, when you + start to compose your first mail message. If you edit .mailrc, you can + type "M-ESC (build-mail-aliases) RET" to make Emacs reread .mailrc. + +59: Why doesn't setting default-directory always work? + + There is a separate value of default-directory for each Emacs buffer. + The value in the current buffer is the one that is used. + +60: Why does my change to load-path not work? + + If you added file names with tildes (~) in them to your load-path, + you'll need to do something like this: + + (setq-default load-path (mapcar 'expand-file-name load-path)) + +61: Why does the cursor always go to the wrong column when I move up or + down one line? + + You have inadvertently typed "C-x C-n" (set-goal-column) which sets the + "goal-column" to the column where the cursor was. To undo this type + "C-u C-x C-n". + + If you make this mistake frequently, you might want to unbind this + command by doing (define-key ctl-x-map "\C-n" nil). + +62: Why don't the command line switches documented in the man page work? + + The "man page", ie. the file etc/emacs.1, hasn't been updated in a + while. The command line switches that it says work with X Windows are + for X10. See question 72 for details on what switches are + available using X11. {Would someone like to rewrite the man page? RMS + asked me and I haven't had time yet.} + +63: Why does gnus-Subject-mail-reply chop off the last character of the + article headers? + + There is a bug in some rnews functions that GNUS uses. Here is a patch: + + (Patch supplied by Karl Kleinpaste <karl_kleinpaste@cis.ohio-state.edu>.) + + >*** rnewspost.el.orig Thu Oct 5 10:32:47 1989 + >--- rnewspost.el Thu Oct 5 10:32:47 1989 + >*************** + >*** 252,258 **** + > (save-restriction + > (narrow-to-region (point-min) (progn (goto-line (point-min)) + > (search-forward "\n\n") + >! (- (point) 2))) + > (setq from (mail-fetch-field "from") + > subject (mail-fetch-field "subject") + > reply-to (mail-fetch-field "reply-to") + >--- 252,258 ---- + > (save-restriction + > (narrow-to-region (point-min) (progn (goto-line (point-min)) + > (search-forward "\n\n") + >! (- (point) 1))) + > (setq from (mail-fetch-field "from") + > subject (mail-fetch-field "subject") + > reply-to (mail-fetch-field "reply-to") + >*************** + >*** 289,295 **** + > ;@@ but rnews.el lacks support + > (narrow-to-region (point-min) (progn (goto-char (point-min)) + > (search-forward "\n\n") + >! (- (point) 2))))) + > (setq from (mail-fetch-field "from") + > news-reply-yank-from from + > ;; @@ not handling old Title: field + >--- 289,295 ---- + > ;@@ but rnews.el lacks support + > (narrow-to-region (point-min) (progn (goto-char (point-min)) + > (search-forward "\n\n") + >! (- (point) 1))))) + > (setq from (mail-fetch-field "from") + > news-reply-yank-from from + > ;; @@ not handling old Title: field + >*************** + >*** 365,371 **** + > ;@@ but rnews.el lacks support + > (narrow-to-region (point-min) (progn (goto-char (point-min)) + > (search-forward "\n\n") + >! (- (point) 2))))) + > (setq news-reply-yank-from (mail-fetch-field "from") + > ;; @@ not handling old Article-I.D.: field + > news-reply-yank-message-id (mail-fetch-field "message-id"))) + >--- 365,371 ---- + > ;@@ but rnews.el lacks support + > (narrow-to-region (point-min) (progn (goto-char (point-min)) + > (search-forward "\n\n") + >! (- (point) 1))))) + > (setq news-reply-yank-from (mail-fetch-field "from") + > ;; @@ not handling old Article-I.D.: field + > news-reply-yank-message-id (mail-fetch-field "message-id"))) + +64: Why does Emacs hang with message "Unknown XMenu" with X11R4? + + Many different X errors can produce this message. Here is the solution + to one problem: + + X11 Release 4 now enforces some conditions in the X protocol that were + previously allowed to pass unnoticed. You need to put the X11R4 server + into X11R3 bug compatibility mode for Emacs's Xmenu code to work. You + can do this with the command "xset bc". + +65: Why isn't the load average displayed by display-time? + + The most likely cause of the problem is that "loadst" can't read the + special file /dev/kmem. To properly install loadst, it should be either + setuid to the owner of /dev/kmem, or is should be setgid to the group to + which /dev/kmem belongs. In either case, /dev/kmem should be readable by + its owner or its group, respectively. + + Another possibility is that your version of Unix doesn't have the load + average data available in /dev/kmem. Your version of Unix might have a + special system call to retrieve this information (eg., inq_stats under + UMAX). + +66: Why doesn't GNUS work anymore via NNTP? + + There is a bug in NNTP version 1.5.10, such that when multiple requests + are sent to the NNTP server, the server only handles the first one before + blocking waiting for more input which never comes. + + You can work around the bug inside Emacs like this: + + (setq nntp-maximum-request 1) + (setq nntp-buggy-select t) + + Or you could fix the NNTP server in one of these ways: + + 1. Test whether there is data in stdin's stdio buffer before calling + "select" using something like "((fileptr)->_cnt > 0)". Best choice. + 2. Remove call to select by not defining "TIMEOUT" in "common/conf.h". + 3. Put "setbuf (stdin, NULL)" in the NNTP server in the right spot. + This would be very inefficient. + 4. Rewrite the server to use an alarm instead of "select". + +67: Why can't I paste a selection I made in Emacs into my xterm window? + + A person whose name I lost writes: + + The strange interaction between Emacs, xterm, and the cut buffers is + because most xterm clients use selections instead of (well, superceding) + cut buffers. If there is a selection around, xterms will use that + instead of the cut buffer. Emacs doesn't know about selections, but you + can convince xterm to always use the cut buffer instead of selections by + adding this to your .Xdefaults: + + ! Solution by Thomas Narten, should work under X11R3 and later + ! GNU Emacs only copies to CUT_BUFFER0. xterm by default wants to paste + ! from the PRIMARY selection. + XTerm*VT100.Translations: #override \ + ~Meta <Btn2Up>: insert-selection(CUT_BUFFER0) + + +68: Why does ispell sometimes ignore the local dictionary? + + You need to update the version of ispell to 2.0.02. A patch is + available via: + + Anonymous FTP: + site: tut.cis.ohio-state.edu + file: /pub/gnu/ispell/patch2.Z + + You also need to change a line in ispell.el from: + + (defconst ispell-version "2.0.01") ;; Check against output of "ispell -v". + + to: + + (defconst ispell-version "2.0.02") ;; Check against output of "ispell -v". + + + +Configuring Emacs for yourself: + +69: How do I set up a .emacs file properly? + + I'm going to be sending out a sample .emacs file in a separate message + later this month. It will be based largely on AT&T's sample .emacs + file, which was sent to me by Dan Jacobson. In fact it might be + identical. + +70: How do you debug a .emacs file? + + First start Emacs with the "-q" command line option. Then, in the + *scratch* buffer, type the following: + + (setq debug-on-error t) C-j + (load-file "~/.emacs") C-j + + (C-j stands for Control-J, ie., hold the control key and press J.) + + If you have an error in your .emacs file, this will invoke the debugger + when the error occurs. If you don't know how to use the debugger do + (setq stack-trace-on-error t) instead. + + WARNING: this will not discover errors caused by trying to do something + that requires the terminal/window-system initialization code to have + been loaded. See question 34. + +71: How do I turn on abbrevs by default just in mode XXX? + + Put this in your .emacs file: + + (condition-case () + (read-abbrev-file nil t) + (file-error nil)) + + (setq XXX-mode-hook + (function + (lambda () + (setq abbrev-mode t)))) + +72: What does Emacs do every time it starts up? + + This question is not itself frequently asked, but helps to answer other + questions. + + Here is a complete explanation of the order in which things are done + during startup. + + 1. These command line switches are handled, only if they appear before + all other command line arguments, and only if they appear in this + order: + + "-map". Only under VMS. Instead of "undumping", under VMS the + contents of a dump file are mapped over a section of memory (very + quickly initializing lots of variables). + + "-t". The next argument is treated as the name of a terminal to use + instead of whatever is connected to the stdin, stdout, and stderr + FILE pointers. + + "-display" (synonym: "-d"). The next argument is treated as the + name of an X Window System server with which to connect. This + overrides the DISPLAY environment variable. + + "-nw". This means don't connect to an X Window server even if the + DISPLAY environment variable was set or the "-display" switch was + specified. Instead, Emacs talks to a regular dumb terminal. + + "-batch". Emacs is noninteractive. The variable "noninteractive" + is t. This disables any full screen interaction either with a + dumb terminal or with a window system. In addition, Emacs will + die after processing all command line arguments. + + All of Emacs's internal data structures are initialized between steps 2 + and 5. + + 2. The "*scratch*" buffer is created and its value of default-directory + is set from the result of calling the "getwd" library routine. + (getwd does what the "pwd" program does.) + + 3. If X11 is being used, Emacs determines the name under which it looks + for X resource values. (I haven't checked how it does this under + X10.) + + 1. If there is a "-rn" command line switch, it is handled now, no + matter where it is on the command line. (Later it will be + processed again and ignored.) The next argument is used as + Emacs's resource name. + + 2. If the "-rn" switch was missing, Emacs looks for the WM_RES_NAME + environment variable. + + 3. If neither of the previous two steps succeed, Emacs uses the + filename with which it was invoked as its resource name. + + 4. If X11 is being used, these command line switches are handled now, + no matter where they appear in the command line. (Under X10, they + are not handled until step 13.) WARNING: this can cause strange + interactions with the processing of the remaining command line + arguments in step 13. + + In addition, under both X11 and X10, X resources (ie. the stuff in + an .Xdefaults file) are handled now. Command line switches take + precedence over resources. + + After each command line switch are given the equivalent resource + names in this format: (X10 name / X11 instance name / X11 class name). + + "-r". Reverse video. (ReverseVideo/reverseVideo/ReverseVideo) + "-font" (synonym: "-fn"). Font. (BodyFont/font/Font) + "-wn". Window name (X11 only). (/title/Title) + "-in". Icon name (X11 only). (/iconName/Title) + "-i". Use built-in icon bitmap. (BitMapIcon//) + + "-b". Border width (in pixels). + (BorderWidth/borderWidth/BorderWidth) + + "-ib". Internal border width (in pixels) (default: 1). + (/internalBorder/BorderWidth) + + "-geometry" (synonym: "-w"). Window shape and size. "-geometry" is + X11 only, but its synonym "-w" was available under X10. + (/geometry/Geometry) + + Color options only: + + "-fg". Foreground color. (Foreground/foreground/Foreground) + "-bg". Background color. (Background/background/Background) + "-bd". Border color. (Border/borderColor/BorderColor) + "-cr". Cursor color. (Cursor/cursorColor/Foreground) + "-ms". Mouse pointer color. (Mouse/pointerColor/Foreground) + + In addition, under X10, the resource "Keymap" was handled now. + + 5. If your Emacs isn't "dumped", the default Lisp libraries are + "loaded" now. + + 6. Emacs enters a "recursive edit". The first time Emacs does a + recursive edit, steps 7 through 15 are followed, and then Emacs + enters its normal editing mode. + + 7. If the environment variable PWD exists, the value of + default-directory in the *scratch* buffer is set to the value of + PWD. This often causes problems and confusion when the value of PWD + doesn't actually contain the pathname of the current directory. + + 8. Now the "-no-init-file" (synonym: "-q") and "-user" (synonym: "-u") + command line switches are handled. They must follow the switches + mentioned in step 1, and must precede any other command line + arguments. Actually, both of these options can be specified; + whichever is last on the command line wins. + + 9. The user's ".emacs" file is loaded now, if the -no-init-file option + was not specified. If the -user option was specified, that user's + .emacs file is loaded instead. A user's .emacs file is a file named + ".emacs" in the user's "home" directory. If no such file exists, + this step has no effect. + + 10. The system wide "default" file is loaded now, if the variable + inhibit-default-init is nil. The user can set this variable in the + .emacs file to skip this step. + + 11. If the *scratch* buffer still exists now, the value of + initial-major-mode is called as a function in this buffer. + Normally, this puts this buffer in Lisp Interaction mode. + + 12. Now the terminal/window-system setup file is loaded. The name of + this file is determined as follows: + + 1. It starts with the value of term-file-prefix. Normally this is + "term/", but the user can set it to another value. If this + variable is nil, this entire step is skipped. + + 2. For a window system, the prefix is followed by the name of the + value of the variable window-system, followed by "-win". For X + Windows, this means the name is "term/x-win". + + 3. For a terminal, the prefix is followed by the value of the + environment variable TERM, for example, "term/vt200". If Emacs + cannot find such a file to load, it retries by stripping off + suffixes that begin with a hyphen. For example, if TERM is + "vt200-40", first Emacs will try "term/vt200-40", and if that + fails it will try "term/vt200". + + 13. The rest of the command line arguments are handled at this point, in + the order they appear: + + "-funcall" (synonyms: "-f", "-e"). The next argument is treated as + the name of a function, which is called with no arguments. + + "-load" (synonym: "-l"). The next argument is treated as the name + of a file to load. NOTE: the value of the variable load-path + will be restored after this file is done loading. Thus, trying + to change load-path in such a file will fail!! + + "-kill". When this argument is handled, Emacs kills itself. + + "+DDD", where D is a digit. DDD is used as a line number to go to. + When the next ordinary file argument on the command line is + handled, Emacs positions point in that file on line DDD. + + An ordinary filename. Emacs edits this file using the function + find-file. If the filename is not an "absolute" filename, it is + expanded relative to the value that default-directory in the + *scratch* buffer had at the beginning of step 11. The buffer + visiting this file becomes the current buffer. + + "-insert" (synonym: "-i"). The next argument is treated as the name + of a file. This file is inserted in the current buffer. + Initially, this is the *scratch* buffer. Otherwise it is the + buffer visiting the file most recently specified on the command + line. WARNING: the synonym "-i" doesn't work under X11. + + Other command line switches may have been created by modifying the + value of the variable command-switch-alist. If X Windows is being + used, all X-specific switches mentioned above in steps 3 and 4 will + be processed. Under X11, they will have already been handled, and + will be ignored now. Under X10, they are being handled for the + first time. + + 14. The values of the variables term-setup-hook and window-setup-hook + are called as functions with no arguments, in the order listed. + + 15. If the user did not specify any of the command line options handled + in step 13, and the variable inhibit-startup-message is still nil, + the familiar Emacs startup message is displayed. + +73: What are the valid X resource settings (ie., stuff in .Xdefaults file)? + + See question 72. + + WARNING: Don't pay any attention to the documentation in etc/XDOC or + etc/emacs.1. It's way out of date. {Would someone like to rewrite it? + RMS asked me and I haven't had time yet.} + +74: How do I turn down the bell volume in Emacs running under X Windows? + + Under Epoch you can do: + + (setq epoch::bell-volume 20) + + Under normal GNU Emacs you must modify the XTfeep function in + src/x11term.c, and change the number 50 to some other number: + + XTfeep () + { + BLOCK_INPUT_DECLARE (); + #ifdef XDEBUG + fprintf (stderr, "XTfeep\n"); + #endif + BLOCK_INPUT (); + XBell (XXdisplay,50); /* change this 50 */ + UNBLOCK_INPUT (); + } + +75: How do I make Emacs send 8-bit characters to my terminal? + + Johan Widen <jw@sics.se> writes: + + A patch for emacs-18.55 is available by ftp and mail-server from + sics.se. + + Anonymous FTP: + site: sics.se [192.16.123.90] + file: archive/emacs-18.55-8bit-diff + + E-mail: + To: mail-server@sics.se + body: send emacs-18.55-8bit-diff + + + +Emacs Lisp programming: + +76: What dialect of Lisp is Emacs Lisp? + + It's the dialect of Lisp called Emacs Lisp. (No joke!) People also + call it elisp or e-lisp. (NOTE: The term "Elisp" is trademarked by + someone else.) + +77: How close is Emacs Lisp to Common Lisp? + + Pretty far. GNU Emacs Lisp is case-sensitive, uses dynamic scoping, + doesn't have packages, doesn't have multiple return values, doesn't have + reader macros, etc. For people used to Common Lisp, some of the + functions in Common Lisp that are not in Emacs Lisp by default are + provided in the file lisp/cl.el. There is a Texinfo manual describing + these functions in man/cl.texinfo. + +78: How do I execute a piece of Emacs Lisp code? + + There are a number of ways to execute (called "evaluate") an Emacs Lisp + "form": + + * If you want it evaluated every time you run Emacs, put it in a file + named ".emacs" in your home directory. + + * You can type the form in the "*scratch*" buffer, and then type C-j + after it. The result of evaluating the form will be inserted in the + buffer. + + * In in Emacs-Lisp mode, typing M-C-x evaluates a top-level form before + or around point. + + * Typing "C-x C-e" in any buffer evaluates the Lisp form immediately + before point and prints its value in the echo area. + + * Typing M-ESC or M-x eval-expression allows you to type a Lisp form in + the minibuffer which will be evaluated. + + * You can use M-x load-file to have Emacs evaluate all the Lisp forms in + a file. (To do this from Lisp use the function "load" instead.) + +79: How do I make a set of operations fully local to a region? + + Use narrow-to-region inside of save-restriction. + +80: How can I highlight a region? + + There are ways to get highlighting in GNU Emacs 18.55, but they all + require patching the C code of Emacs and rebuilding. They are also slow + and the highlighting disappears if you scroll or redraw the screen. One + patch is by Kenichi Handa <handa@etl.go.jp>. + + You can hightlight regions in a variety of ways in Epoch. GNU Emacs 19 + will have everything you need, but won't be out soon. + +81: How do I change Emacs's idea of the tab character's length? + + Example: (setq default-tab-width 10). + +82: What is the difference between (interactive "P") and (interactive "p")? + + The value that is a result of "P" can be a list, a symbol, or an + integer; the value that is a result of "p" is always an integer: + + Prefix keys typed result of: "P" "p" + nothing nil 1 + "M-1" 1 1 + "C-u 1" 1 1 + "M--" '- -1 + "C-u -" '- -1 + "C-u" (4) 4 + "C-u C-u" (16) 16 + + + +Carrying Out Common Tasks: + +83: How do I insert ">"'s in the beginning of every line in a buffer? + + Type "M-x replace-regexp RET ^ RET > RET". ("replace-regexp" can be + shortened to "repl TAB r".) + + To do this only in the region, type "C-x n M-x replace-regexp RET ^ RET + > RET C-x w". (You're going to remember that, right?) + +84: How do I insert "_^H" characters before each character in a + paragraph to get an underlined paragraph? + + M-x underline-region. + +85: How do I repeat a command as many times as possible? + + Make a keyboard macro that invokes the command and then type "M-0 C-x + e". WARNING: any messages your command prints in the echo area will be + suppressed. + +86: How do I search for an unprintable (8-bit) character that appears + in a buffer as \237? + + C-s C-q 2 3 7 + + (This assumes the value of search-quote-char is 17 (C-q).) + +87: How do I tell Emacs to automatically indent a new line to the + indentation of the previous line? + + M-x indented-text-mode. (This is a major mode.) + + If you have auto-fill mode on (minor mode), you can tell Emacs to prefix + every line with a certain character sequence, the "fill prefix". Type + the prefix at the beginning of a line, position point after it, and then + type "C-x ." (set-fill-prefix) to set the fill prefix. Thereafter, + auto-filling will automatically put the fill prefix at the beginning of + new lines, and M-q (fill-paragraph) will maintain any fill prefix when + refilling the paragraph. + +88: How do I make Emacs "typeover" or "overwrite" when I type instead of + always inserting? + + M-x overwrite-mode (minor mode). + + WARNING: delete-backward-char (usually the delete key) doesn't work + properly in overwrite mode. It deletes the character to the left, + rather than replacing it with a space. + +89: How do I show which parenthesis matches the one I'm looking at? + + If you're looking at a right parenthesis (or brace or bracket) you can + delete it and reinsert it. + + M-C-f (forward-sexp) and M-C-b (backward-sexp) will skip over balanced + parentheses, so you can see which parentheses match. (You can train it + to skip over balanced brackets and braces at the same time by modifying + the syntax table.) + + Here is some Emacs Lisp that will make the % key show the matching + parenthese, like in vi. In addition, if the cursor isn't over a + parenthese, it simply inserts a % like normal. + + (By an unknown contributor.) + + (global-set-key "%" 'match-paren) + + (defun match-paren (arg) + "Go to the matching parenthesis if on parenthesis otherwise insert %." + (interactive "p") + (cond ((looking-at "[([{]") (forward-sexp 1) (backward-char)) + ((looking-at "[])}]") (forward-char) (backward-sexp 1)) + (t (self-insert-command (or arg 1))))) + +90: How do I make Emacs behave like this: when I go up or down, the cursor + should stay in the same column even if the line is too short? + + M-x picture-mode. (This is a minor mode, in theory anyway ...) + +91: How do I read news under Emacs? + + There are at least three news reading packages that operate inside + Emacs. "rnews" comes with Emacs. "GNUS" and "Gnews" come separately. + + {I've never used rnews; could someone write a description? BTW, rnews + will be replaced with GNUS in Emacs 19.} + + Both GNUS and Gnews handle reading news over NNTP. I think both can + also read from a local news spool. GNUS also supports reading mail + stored in MH folders or articles saved by GNUS. + + GNUS is written (mostly) by Masanobu Umeda. His (?) latest e-mail + address was umerin@tc.nagasaki.go.jp, but I don't think he has an e-mail + address right now. The latest version is GNUS 3.13. There is a + newsgroup for discussion of GNUS called gnu.emacs.gnus. This newsgroup + is gatewayed with the mailing list info-gnus-english to subscribe send + mail to info-gnus-english-request@cis.ohio-state.edu. There is also a + mailing list called info-gnus, which includes discussion in Japanese. + + Gnews was written by Matthew Wiener <e-mail address?>. {Could someone + tell me the # of the latest version, and how long it has been since + anyone has heard from Matthew?}. There is a newsgroup for Gnews called + gnu.emacs.gnews. + +92: In C mode, can I show just the lines that will be left after #ifdef + commands are handled by the compiler? + + M-x hide-ifdef-mode. (This is a minor mode.) + + You may have to (load "hideif") first. If you want to do this + regularly, put this in your .emacs file: + + (autoload 'hide-ifdef-mode "hideif" nil t) + +93: Is there an equivalent to the "." (dot) command of vi? + + ("." is the redo command in vi. It redoes the last insertion/deletion.) + + No, not really. + + You can type "C-x ESC" (repeat-complex-command) to reinvoke commands + that used the minibuffer to get arguments. In repeat-complex-command + you can type M-p and M-n to scan through all the different complex + commands you've typed. + + To repeat something on each line I recommend using keyboard macros. + +94: How do I use emacstool under SunView? + + The file etc/SUN-SUPPORT includes the document "Using Emacstool with GNU + Emacs". Also read the man page for emacstool (etc/emacstool.1). + +95: How do I get Emacs to display the current line number on the mode line? + + There is no "correct" way to constantly display the current line number + on the mode line in Emacs 18. Emacs is not a line-oriented editor, and + really has no idea what "lines" of the buffer are displayed in the + window. It would require a lot of work at the C code level to make + Emacs keep track of this. + + Emacs 19 will probably be able to do this, but probably not with great + efficiency. + + To find out what line of the buffer you are on right now, do "M-x + what-line". Typing "C-x l" will also tell you what line you are on, + provided the buffer isn't separated into "pages" with C-l characters. + In that case, it will only tell you what line of the current "page" you + are on. WARNING: "C-x l" gives the wrong value when point is at the + beginning of a line. + + People have written various kludges to display the current line number + on the mode line. Look in the Lisp Code Directory. (See question 13.) + +96: How do I tell Emacs to iconify itself? + + You need to modify C source and recompile. Either that or get Epoch + instead. For the interested I have a patch to allow Emacs to iconify + itself. + +97: How do I use regexps (regular expressions) in Emacs? + + This is documented in the Emacs manual. To read the manual section + online, type "C-h i m emacs RET m regexps RET". + + WARNING: Unlike in Unix grep, sed, etc., a complement character set + ([^...]) can match a Newline, unless Newline is mentioned as one of the + characters not to match. + |